mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Läuft der Timer während seinem Interrupt weiter?


Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe den Timer0 im Mega128 als RTC mit einem externen Uhrenquarz am
Laufen.

Meine Frage: Läuft der Timer, während die Befehle in seinem
Interrupt-Aufruf abgearbeitet werden, weiter? Oder erst wieder, wenn
ich mit "reti" zurückspringe?

Und werden andere Interrupts (z.B. Int0 usw.) solange blockiert?

Danke!

Sebastian

Autor: Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVR Studio

Autor: Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andere Interupts werden auf alle Fälle blockiert. Deswegen nicht
trödeln in den Interuptroutinen.
Der Uhrentimer laüft frei durch. Also auch beeilen, bis er wieder einen
Interupt auslöst.


Josef

Autor: Sebastian Wille (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi Josef,

vielen Dank! Das hatte ich gehofft, daß der weiterläuft.

Aber eins ist mir noch nicht so richtig klar: In der Atmel-AppNote
(hängt an) zu einer RTC mit dem AVR steht unter Accuracy, daß die Zeit
leicht abdriftet, wenn die "Timer-Variablen" aktualisiert werden.

Und in deren Hauptprogramm setzen sie immer wieder TCCR0 auf 0x05. Was
bringt denn das?!?

Danke!

Sebastian

Autor: Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TCCR0 auf 0x05 setzen vor sleep ist ein Dummybefehl.  Er setzt den
prescaler, damit der Timer exact alle sec einen Interrupt auslöst.
Wichtige Register sollten immer nachgesetzt werden. Besonders nach
sleep-Befehlen sollten solche Reinitialisierungen stattfinden.
Ausserdem hat Atmel in einer Error-Note einmal empfohlen, nach einem
Sleep Befehl min 2 Befehle folgen  zu lassen, damit der Sleepbefehl
richtig Zeit hat, um zu funktioniern - also macht man damit etwas
sinnvolles.

Josef

Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Josef,

danke, alles klar! :-)

Aber warum gibt es trotzdem einen leichten Drift laut Atmel?!?

Sebastian

Autor: Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum der Timer leicht driftet, ist mir etwas unklar. Jedenfalls wird
in der Interuptroutine, im worstcase, wenn alle Timerregister neu
besetzt werden (94 Sycles / 4 Mhz) ein leichter Drift erzeugt.
Warscheinlich ist die zu lang und es wird schon wieder ein neuer
Interrupt ausgelöst. Würde ev. einen 8 Mhz Quarz nehmen.

Josef

Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Josef,

genau das ist der Knackpunkt, warum ich den Thread begonnen habe.

Der Interrupt wird exakt jede Sekunde aufgeführt. Also dürfte meine
Interrupt-Routine bei 4MHz maximal 4.000.000 Zyklen lang sein. Im Worst
Case Fall ist sie ja nur 94 Zyklen lang...

Aber nun ist mir - glaube ich - klar, was die meinen. Bis in den
einzelnen Registern für Sekunden, Minuten usw. alle Werte richtig
drinstehen, vergehen ja einige Zyklen. Das ist mir aber egal, denn bis
die Zeichen auf dem Display stehen vergehen eh einige ms. Der Fehler
häuft sich ja auch nicht, sondern beträgt immer ca. 6µs Abweichung.

Danke auf jeden Fall nochmal! :-)

Sebastian

Autor: Henning (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das die zeiten verspätet auf dem display landen ist ja halb so schlimm,
wesentlich wichtiger beim rtc ist das pünktlich und exakt die zeit
fortlaufend gezählt wird. sprich alle 1s der timer neu anläuft.
wielange genau das neue setzen der zähler dauert ist relativ egal, so
zumindestens meine sicht vom rtc

Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

genau so sehe ich das auch - solange das setzen der Variablen 1 Sekunde
nicht überschreitet! ;-)

Sebastian

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.