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
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
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
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
Hi Josef, danke, alles klar! :-) Aber warum gibt es trotzdem einen leichten Drift laut Atmel?!? Sebastian
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
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
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
Hallo, genau so sehe ich das auch - solange das setzen der Variablen 1 Sekunde nicht überschreitet! ;-) Sebastian
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.