PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Timer und externen Interrupts bei Mega32



st3fan
01.09.2008, 15:39
Hi,

ich habe ein Frage: Ich benutze BASCOM Versin 1.11.8.3 zusammen mit einem mega32. Mein Programm soll folgendes machen:

Initialisierung -> a: Timer0 einstellen, Pin auf 1, Timer0ISR zählt Timer0überläufe, INT1_ISR zählt Variable hoch, nach 10ms Pin auf 0 INT1_ISR kann nichtmehr aufgerufen werden, Timer0 stoppt und wird zurückgesetzt -> Berechnungen -> Ausgabe von Variablen über RS232 -> goto a:

Ich habe das Ganze programmiert , aufgebaut und getestet, und dabei hatte ich immer das Problem dass die 10ms die von Timer0 bereitgestellt werden sollen, einen Jitter aufweisen.

Weiß jemand was ich gegen diesen Jitter tun kann? Ich denke mal dass da verschiedene Interrupts sich in die Quere kommen...

PicNick
01.09.2008, 16:26
Naja, in die Quere kommen sie sich natürlich definitionsgemäß.
Welches Verhältnis haben denn Timer0-IST und INT1_ISR ?
Das externe Signal wird ja nicht synchronisiert sein, d.h. du wirst einen Cycle mal früh und mal spät erwischen, entsprechend knapp kann es am Ende der 10 mS werden.

Ich würde versuchen, den Timer erst genau mit dem ersten EXT-Int zu starten, damit immer die gleiche Ausgangslage herrscht

st3fan
01.09.2008, 16:41
hi,
genau das mache ich: bei externem interrupt INT2 wird der timer gestartet, und int2 disabled. die timerisr wird dabei 567 aufgerufen bevor die 10ms vorbei sind. während der 10ms wird per INT1 eine variable hochgezählt (ca.250mal)

PicNick
01.09.2008, 17:18
Nicht ganz, nach meinem Vorschlag müsste INT1 den Timer starten, also der INT, der gezählt wird.


Beim Timer könntest du genauerweise die CPU-Zyklen miteinrechnen, die vom Interrupt bis zu setzen des Preload gebraucht werden (die ganzen register-Push's)

In welcher Grössenordnung liegt denn der Jitter ?

st3fan
02.09.2008, 08:50
das kann ich nicht genau sagen, auf dem oszi sieht man nur ein wanderndes rechtecksignal, bzw starkes jittern.

INT1 tritt aber erst auf nachdem der timer gestartet wurde. Ich habe eine Frequenz deren impulse von einem externen Zähler gezählt werden. das zwölfte bit dieses zählers ist an INT1 angeschlossen um so den zähler zu vergrößern. Starten die 10ms wird der Takteingang des Zählers (UND-Verknüpfung davor) freigeschaltet und die Zählung beginnt. Ich stelle per INT2 fest, wann die nächste positive Flanke der Frequenz kommt und starte entsprechend.

st3fan
02.09.2008, 09:49
jitter beträgt ca. 150ns
mega32 läuft mit 14.7456MHz