Forum: Mikrocontroller und Digitale Elektronik AVR: Exakter Timer-IRQ möglich


von André K. (freakazoid)


Lesenswert?

Hallo,

da ich etwas penibel bin, möchte ich die ISR EXAKT zu einem bestimmten 
Ereignis ausführen lassen.

Die ISR (Timer1-OVF / ATmega8) wird ja 3(?) Takte nach Beendigung des 
aktuellen Assembler-Befehls ausgeführt. Nun hat so ein Teil ja auch 
manchmal mehr als 1 Takt, die ISR wird also nicht exakt X Takte später 
ausgeführt, sondern mal X+1 oder X+2 Takte.

Frage:
Wie krieg ich innerhalb der ISR eine Synchronisierung hin?

Versucht habe ich es mit:
1
  in  r18, TCNT1L
2
Resync:
3
  in  r19, TCNT1L
4
  cp  r18, r19
5
  breq  ReSync

Das beißt sich aber leider, da 'breq' selbst 2 Takte braucht.

Gibt es da eine andere Möglichkeit?

Grüße,
Freakazoid

von Gast (Gast)


Lesenswert?

jo, CTC mode

von Rolf Magnus (Gast)


Lesenswert?

> Die ISR (Timer1-OVF / ATmega8) wird ja 3(?) Takte nach Beendigung des
> aktuellen Assembler-Befehls ausgeführt.

Nein. 4 Takte nach dem aktuellen Assembler-Befehl wird in die 
Interrupt-Vektor-Tabelle gesprungen (außer wenn der AVR schäft, dann 
dauert's länger). Dann folgt dort in der Regel ein rjmp, der nochmal 2 
Takte braucht.

> Nun hat so ein Teil ja auch manchmal mehr als 1 Takt, die ISR wird also
> nicht exakt X Takte später ausgeführt, sondern mal X+1 oder X+2 Takte.

So ist es. Die längsten Befehle brauchen 4 Zyklen (z.B. RET). Wenn also 
gerade ein RET mit seinem ersten Zyklus angefangen hat, verzögert sich 
die Ausführung der ISR zusätzlich um 3 Zyklen.

> Wie krieg ich innerhalb der ISR eine Synchronisierung hin?

Mir ist kein Weg bekannt, sowas hinzubekommen. Wenn du zyklengenau einen 
Port toggeln willst, geht das nur mit Output Compare.

von André K. (freakazoid)


Lesenswert?

Hm. Theoretisch wüßte ich schon einen Weg. Aber ich hatte oben vergessen 
anzugeben daß der Prescaler aktiviert ist und ich dessen Stand bei 
Eintritt in die ISR nicht kenne.
Timerstand alleine könnte ich ja auslesen und Differenzen bilden (und 
diese dann mit Warteschleifen 'normalisieren').

Muß ich wohl mit bis zu 3 'Geistertaken' leben ....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.