Zitat Zitat von Naubaddi Beitrag anzeigen
Was ich noch nicht verstehe:
* ocr0a = 78 --- Wer oder was ist das?
* compare0a --- Wer oder was ist das, warum nicht timer0?
Hi,
der Timer0 ist so konfiguriert, daß er bei einem Vergleichswert zurückgesetzt wird und nicht erst bei seinem Maximalwert von 255.
Das ist das CLEAR_TIMER = 1 bei der Timerconfiguration. Der Vergleichswert steht in dem Register OCR0A mit dem Wert 78.
Wenn der Timer bis 78 gezählt hat wird er zurückgesetzt und NICHT das Timer0/Overflow0 Interrupt Flag gesetzt, sondern das Compare0a Interrupt Flag.
Der Timer hat ja nicht seinen Maximalwert erreicht.

Der µC läuft mit 8MHz. Timer Prescale ist 1024. Der Timer läuft also mit 7812,5Hz. Pro Timerstep also 1/7812,5Hz = 0,128ms. Von 0 bis zum Wert 78 im OCR0A Register braucht er also 0,128ms * 78 = 9,984ms und noch einen Step zurück auf 0 für eine komplette Timerrunde (10,112ms). Richtiger wäre also OCR0A = 77 (komplette Timerrunde in 0,009984s) weil man dann genauer an die gewollten 10ms Abstände des Interrupts herankommt.

Gruß
Searcher