Hi Alex,
Ich vermute fast, daß schlicht *zwei* Interrupts kurz hintereinander generiert werden, könnte das sein ?
Ja, könnte sein, zumal ich in deinem Code
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