Hallo Bernd,
irgendetwas stimmt da nicht. Der PCINT tritt auf, wenn sich an Data was tut. Zu dem Zeitpunkt ist OCR0A mit dem Wert 66 geladen und der Systemtakt auf 1/16 in INT0 mit CLKPS2 gestellt (die theoretischen 300kHz). In der PCINT ISR wird dann der TIMER0 gestartet und soll damit eine Zeit von 550µs bis CTC Comparematch machen? oder wo soll man die 410kHz im Screenshot ablesen?
550µs/(66+1) = 8,2µs für einen Timerstep. Der Timer wird also mit 1/8,2µs=121,951kHz getaktet.
Wegen 1/16 ist der Systemtakt = 16*121,951kHz= 1,951219MHz und nicht die theoretischen 4,8MHz. (Dann komme ich aber statt 1100µs aber auf über 1500µs bei OCR0A = 192 und 1/16 SYSCLK)
Läuft der Timer mit 1/8 SYSCLK wären das 1,951219MHz/8 = 243,902kHz und nicht 410kHz.
Bitte überprüfen und/oder Korrekturrechnung bzw jetzt genau mal den SYSCLK explizit über zB OC0A toggle messen. Ist der Systemtakt stabil? Ist die Stromversorgung stabil und sauber?
Der µC geht zwischen den Comparematch Interrups immer wieder in den Idle Sleep. Laß ihn doch mal durchlaufen ohne Sleep. Sind die Zeiten dann konstanter?
Die Diskrepanz von 4,8Mhz zu 1,9Mhz ist arg. Vielleicht mal einen neuen µC probieren?
Gruß
Searcher
PS und das auf 0 Setzen des TCNT0 in der Comparematch ISR ist doch eigentlich nicht nötig. Der Timer ist doch auf Comparematch eingestellt. Es reicht das OCR0A beim ersten Mal auf 192 zu stellen und von mir aus jedes Mal. Rücksetzen von TCNT0 an der Stelle verkompliziert die Berechnung, da ja die Zeit von Aufruf der ISR bis Rücksetzten des Timers ja uach noch verrechnet werden muß.
Lesezeichen