OK, Du kannst folgendes machen (am Beispiel Mega32):
Du benutzt den Timer1 zur Zeitmessung. Entweder im CTC-Mode (s.o.) mit Startwert 0 und Vergleich mit MAX oder im Overflow-Mode mit dem Startwert (2^16-MAX).
Du brauchst dafür keine ISR zu schreiben, da Du im CTC-Mode das Output Compare Flag (OCF1x) bzw. im Overflow-Mode das Timer/Counter Overflow Flag (TOV1) direkt abfragen kannst.
PseudoCode:
Code:
Initialisiere Timer1-Mode
Lade Timer-Register TCNT1x mit Startwert bzw. 0 (CTC)
nur CTC: Lade OCR1Ax mit Startwert
Lösche Compare bzw. Overflow-Flag
Starte Timer1
Do
36Khz-Signal ausgeben
Loop Until Compare/Overflow-Flag gesetzt
Stoppe Timer1
bzw. wenn Du das 36kHz-Signal mit Hardware oder einer ISR erzeugst:
Code:
'Vorspann s.o.
Starte Timer1
Starte TimerX-Output 36Khz-Signal ausgeben
Do
Loop Until Compare/Overflow-Flag gesetzt
Stoppe TimerX-Output 36Khz-Signal ausgeben
Stoppe Timer1
Dieses Initialisieren mit DO-LOOP machst Du dann jedesmal wenn Du eine genaue Zeitmessung brauchst.
Nur wofür sind die 12µs Wartezeit (=96Takte@8MHz)?
---------------------------------
Nachtrag zu Deiner anderen Frage:

Zitat von
robby-fant
Hallo, ich möchte am OC1A (PD5) 36000 Herz erzeugen für eine Ir-Diode.
Wie muss der Timer1 conf. werden und wie wird er auf Toggeln geschaltet und wieder gestoppt?
Nimm dafür ebenfalls den CTC-Mode (eines zweiten Timers). Dazu aus dem Mega32-Manual:
Clear Timer on Compare Match (CTC) Mode
For generating a waveform output in CTC mode, the OCx output can be set to toggle its logical level on each compare match by setting the Compare Output mode bits to toggle mode. The OCx value will not be visible on the port pin unless the data direction for the pin is set to output.
Lesezeichen