Zitat Zitat von Bernd_Stein Beitrag anzeigen
Das 1te Bit lese ich nach 550µs ein und alle weiteren im Abstand von 1100µs.
Hallo,

ich kann das Timing im Programm nicht nachvollziehen.

Im Unterprogramm _loeschen wird der 4,8MHz Systemtakt durch 8 geteilt und OCR0A mit 66 beschrieben.
Da der Timer mit prescaler 1:1 läuft, bedeutet das zu diesem Zeitpunkt ein Timer0 Comparematch nach 111µs wenn er bei 0 beginnt ( 4,8MHz/ 8 =600kHz. (1/600kHz)*(66+1) = 111µs )

In der INT0 ISR wird mit CLKPS2 der 4,8MHz Systemtakt durch 16 geteilt (SYSCLK=300kHz), daß dann ein Comparematch in Timer0 nach der doppelten Zeit, also nach 222µs auslösen würde.

In der PCINT ISR wird Timer0 im CTC gestartet aber OCR0A nicht neu gesetzt; Inhalt immer noch 66. Der erste Comparematch findet demnach nach 222µs statt, nicht nach 550µs!?

In der Comparematch A ISR wird dann 192 in das OCR0A geladen. Das macht bei 300kHz dann eine Zeit von (1/300kHz)*(192+1) = 643µs und keine 1100µs.

Kann auch sein, das ich den Faden durch die ganzen Umtaktungen verloren habe.

Abstände von 1100µs, Werte zwischen 1092µs und 1098µs annehmen

1. könnte der Systemtakt nicht 100%ig stimmen und
2. Wenn der µC mit 300kHz läuft, dauert ein Cycle 3,33µs. Bei Branch- oder Test
befehlen kommen da schnell 6µs Unterschiede je nach Ergebnis zustande. Müßte man aber nochmal genauer betrachten.

Dort bitte auf die XYZ.jpg Datei klicken um den Screenshot zu sehen :
https://www.edv-dompteur.de/forum/in...=4113#post4113
Ich finde die XYZ.jpg zum Verr... nicht. Ich will auch nicht mehr danach suchen!


Gruß
Searcher