Zitat Zitat von Bernd_Stein Beitrag anzeigen
Irgendwann wird dann die INT0 Low-Level IRQ erzeugt.
Am Anfang der INT0-ISR wird der erste Impuls mit LED-Gelb erzeugt. Dieser ist 4,958µs lang und entspricht somit einer Frequenz von 403,388kHz, was eigentlich die nominalen 600kHz sind ( 4,958µs:2 wegen sbi, cbi ).

Am Ende der INT0-ISR ist der SYS-Takt ja bereits auf nominal 300kHz umgestellt und somit der 2te Impuls bei LED-Gelb 9,875µs lang, was der wahren Frequenz von 202,532kHz entspricht.
Klingt plausibel. Vielleicht bringt der idle mode meine Rechnung so durcheinander. Damit hab ich kaum Erfahrung. Wer weiß, was der für Zeiten auch beim Aufwachen braucht. Im DB finde ich dazu nicht wirklich was Konkretes. Am Einfachsten mal den Sleep überhaupt nicht verwenden und das Timing (OCR0A Werte) entsprechend anpassen.

Hab sonst keine Idee mehr. In Assembler sollte der Programmablauf schon taktgenau nachvollzogen werden können

Gruß
Searcher

PS: Trotzdem könnte man den Takt nachmessen und mit Oszi schauen, ob er nicht jittert oder schwankt. Hab das kürzlich bei einem Tiny45 über den OC0A gemacht. Man mißt mit folgendem Programm den halben Systemtakt:

Bascom file zum Takt messen. Sollte leicht auf Deine IDE für Tiny13 anpaßbar sein.
Code:
$regfile = "attiny45.dat"
$framesize = 10
$swstack = 10
$hwstack = 10
$crystal = 1000000


$asm
  ;OCR0A vom System auf 0
  sbi ddrb , 0            ;PB0 (OC0A) auf Ausgang stellen
  ldi r16 , &B0100_0010   ;COM0A0 (toggle OC0A), WGM01 (CTC mit OCR0A als top)
  out tccr0a , r16        ; ...
  ldi r16 , &b0000_0001   ;CS00 (no Timer prescaling)
  out tccr0b , r16        ;timer0 einschalten
$end Asm