-         

Ergebnis 1 bis 6 von 6

Thema: Probleme mit Timer und externen Interrupts bei Mega32

  1. #1

    Probleme mit Timer und externen Interrupts bei Mega32

    Anzeige

    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...

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    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
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    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)

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    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 ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    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.

  6. #6
    jitter beträgt ca. 150ns
    mega32 läuft mit 14.7456MHz

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •