Ich möchte mit dem ATMega2561 eine Uhr programmieren. Dafür habe ich den
µC einen 32768kHz Uhrenquarz gegeben. Die Interrupt Routine wird auch
aufgerufen, aber die Zeit stimmt nicht. Wenn ich die Uhr 10min laufen
lasse gibt es schon Differenzen im Minuten Bereich.
Ich denke ich habe irgendo was falsch konfiguriert, finde aber den
Fehler nicht.
Kann mir da jemand einen Hinweis geben?
Kann das sein, dass der ATMEGA mit 32MHz nicht mehr korrekt arbeitet?
=> Quarz mit niedriger Frequenz verwenden!
Ansonsten hilft es vielleicht, wenn du in der ISR nur ein Flag setzt und
die Berechnung in der Main-Schleife machst.
Noch eine kleine Erläuterung zum Uhrenquarz, der ATMega2561 hat extra
Pins für einen zusätzlichen Uhrenquarz und dieser wird von der Interrupt
Routine als Taktquelle benutzt.
@Thomas Eckmann
Ich habe das jetzt wie im dem Link beschrieben geändert, aber das
Problem besteht weiterhin. Nach 10min (von Normaler Uhr abgelesen) hat
der µC 16min also 6 min zu viel.
Um auszuschließen, dass second oder minute falsch interpretiert bzw.
angezeigt werden, zu Beginn der ISR eine LED blinken lassen, der
Sekundentakt ist, bei einem Fehler von 16:10, klar erkennbar.
Danach kann es nur noch die Hardware sein, d.h. der Quarz schwingt nicht
auf 32 KiHz.
Pete K. schrieb:> Was soll denn die While-Schleife in der ISR?
Ich habe das aus dem Tutorial (link im Kommentar von Thomas Eckmann).
Warum das jetzt im Interrupt Funkton selbst gemacht werden soll,
verstehe ich auch nicht.
Pete K. schrieb:> P.S.: Für so etwas nehme ich einen DS3231 oder DS1307.
Ja, das wäre wohl besser gewesen. Hilft mir leider aber nicht, ich habe
jetzt den Uhrenquarz mit Interrupt.
@ S. Landolt
Ich vermute auch das was am Quarz nicht i.O. sein könnte.
Ich hatte gehofft, das ich irgendein groben Patzer gemacht hätte,
welchen von jemand anders sofort erkannt wird.
MCProgger schrieb:> Ich habe das jetzt wie im dem Link beschrieben geändert, aber das> Problem besteht weiterhin. Nach 10min (von Normaler Uhr abgelesen) hat> der µC 16min also 6 min zu viel.
Das beschriebene Problem ist ein 100%ig reproduzierbares.
Woran kann es noch liegen?
32,768K : 256 : 128 ergibt eine Sekunde. Das passt.
Ist denn die Sekunde wirklich eine Sekunde lang? Welche Lastkapazitäten
hängen am Quarz? Eigentlich gehören da gar keine ran.
Mal abgesehen davon, dass das mit dem Uhrenquarz natürlich laufen muss.
Das läuft auch. Das habe ich mit anderen Controllern auch schon gemacht.
Es stellt sich trotzdem die Frage, was das soll. Deswegen mache ich
sowas auch nicht mehr.
MCProgger schrieb:> Der µC selber hat einen 14 MHz Quarz.
Eine Uhr kannst du auch damit laufen lassen. Auch wenn der Controller
über getrennte Anschlüsse verfügt. Richtig Sinn macht die Async-RTC nur,
wenn der Controller sein Hauptdasein im Sleep-Mode fristet. Der wiederum
macht aber mit einem Quarz für den Systemtakt keinen Sinn.
Der Sekundentakt lässt sich genauso gut aus den 14MHz ableiten. 16-Bit
Timer hat der Controller doch genug. Da braucht man sich nicht einmal
mit Softwarezählern grossartig abmühen.
mfg.
Thomas Eckmann schrieb:> Das beschriebene Problem ist ein 100%ig reproduzierbares.
Ja, ich habe es jetzt ein Paar mal gemacht, immer die gleiche
Abweichung, die Sekunde im µC ist also kleiner als die echte Sekunde.
Thomas Eckmann schrieb:> Ist denn die Sekunde wirklich eine Sekunde lang? Welche Lastkapazitäten> hängen am Quarz? Eigentlich gehören da gar keine ran.
Ich habe die Hardware nicht gemacht, und muß mich jetzt wohl mit dem der
sie gemacht hat unterhalten.
Thomas Eckmann schrieb:> Eine Uhr kannst du auch damit laufen lassen. Auch wenn der Controller> über getrennte Anschlüsse verfügt. Richtig Sinn macht die Async-RTC nur,> wenn der Controller sein Hauptdasein im Sleep-Mode fristet.
Der Controller ist die meißte Zeit im Sleep, es ist ein Datenlogger.
Thomas Eckmann schrieb:> Der Sekundentakt lässt sich genauso gut aus den 14MHz ableiten. 16-Bit> Timer hat der Controller doch genug. Da braucht man sich nicht einmal> mit Softwarezählern grossartig abmühen.
Ja, zur not werde ich das so irgendwie machen, aber erstmal rede ich mit
dem der Hardware gemacht hat. Ich glaube, da ist irgendetwas mit dem
Quarz nicht in Ordnung.