okay ich werf fragen hinterher, wozu einen WaveForm Modus?
Code:
//Einstellungen Timer / PWM
TCCR0A = ((1<<WGM00) | (1<<WGM01)); //FastPWM (Top=0xFF Update of OCRx at = TOP TOV Flag Set on = MAX)
TCCR0B = (1<<CS01); //Prescaler clk/8
lass TCCR0A einfach auf initial Zustand! Normaler Zählmodus, kein PWM das ist nutzlos!
1.2MHz / 8 = 150kHz -> 8bit = 265 counts -> 1/150kHz * 256 = 1.70666 mS
sollte alos für den maximal möglichen 1.5mS Puls reichen
du initialisierst den Timer OHNE clockselect, du lässt CS einfach komtplett weg! Damit steht dein Timer!
in der ISR, bei steigender Flanke, startest du den timer indem du die CS01 setzt
bei fallender Flanke stoppst du den timer, indem du die CS Bits weider auf 0 setzt, prüfst du zuerst das TIFR Register ob das Overflow Bit gesetzt ist, löschst es (eine 1 auf das bit schreiben, keine 0) und verwirfst die Messung (Die High Phase war offensichtlich länger als 1.7mS)
wenn das OVF Flag nicht gesetzt ist schreibst du den TCNT wert auf und verarbeitest die gemessenen zeit und setzt TCNT wieder auf 0
so sparst du sogar in den low phasen noch strom weil dein timer nciht die ganze zeit sinnlos mitrennt
Lesezeichen