Hi Alex,Ja, könnte sein, zumal ich in deinem CodeIch vermute fast, daß schlicht *zwei* Interrupts kurz hintereinander generiert werden, könnte das sein ?
das Setzen des eigentlichen Timerregisters vermisse.
bei mir sieht das so aus:
Code:Ausschnitt aus einem Programm für ATTiny15L .DEF mp = R16 .DEF timeval = R12 init: ... ldi mp,0-30 ;0- weil der timer vorwärts zählt mov timeval,mp ;timerwert (ca. 25 us) ldi mp,1 ;timer0 Vorteiler auf 1 out tccr0,mp ;timer0 control ldi mp,2 ;timer0 int enable out timsk,mp ;timer int mask out tcnt0,timeval ;timer setzen ... ;Timer0 interrupthandler Timer0Int: out tcnt0,timeval ;timer wieder setzen ... reti
Das timerregister tcnt0 zählt vorwärts (!) bis zum Überlauf,
der dann den Interrupt auslöst.
In der Interruptroutine muss dann sofort das Timerregister
wieder besetzt werden, damit das Timing stimmt.
Aber eigentlich müsste es bei dir auch funktionieren,
da müsste das Timeregister eben einmal "ganz rum" zählen.
Deshalb hab ich das bisher nicht erwähnt.
Aber probier halt mal...
Gruß Jan







Zitieren

Lesezeichen