Problem mit Lauf einer RTC

Erst eimal zur Einstimmung: Ich will eine RTC nutzen. Beim Test scheint sie auf den ersten Blick zu funktionieren, auf den zweiten nicht.

Jetzt im Detail:

  • Arduino UNO und AdaLogger Shield
  • Shield mit RTC PCF8523, Zelle CR1220 als Uhrenbatterie und Steckplatz für SD-Speicherkarte
  • Stromversorgung über USB am Arduino
  • Shield mit vollem Satz Header und 6-pliger SPI-Verbindung aufgesetzt
  • Bibliothek RTClib by Adafruit (ist empfohlen)

Test erfolgt mit dem mitgelieferten Beispiel pcf8523
(Nach Test auf Zustand der RTC und eventuellem Setzen von Datum und Zeit werden aller 3 Sekunden der aktuelle Wert und daraus berechnete Werte auf das serielle Terminal ausgegeben.)

Formal funktioniert das. Allerdings sind Datum und Zeit immer gleich der gesetzten. Hier dazu die Daten:

Das Beispiel ist im Arduino geladen, in der IDE der serielle Monitor gestartet und ich stecke USB am Arduiono an. Folgende Ausgabe an das serielle Terminal:

RTC is NOT initialized, let's set the time!
2022/12/11 (Sunday) 22:45:58
since midnight 1/1/1970 = 1670798758s = 19337d
now + 7d + 12h + 30m + 6s: 2022/12/19 11:16:4

2022/12/11 (Sunday) 22:45:58
since midnight 1/1/1970 = 1670798758s = 19337d
now + 7d + 12h + 30m + 6s: 2022/12/19 11:16:4
usw.

Es sieht so als, als ob die Uhr nicht tickt. Im Beispiel im Teil setup steht nach
rtc.adjust(DateTime(F(DATE), F(TIME)));
noch der Befehl
"rtc.start();".
Spätestens da sollte doch die Uhr loslaufen, eigentlich aber schon nach rtc.adjust(...).

Ziehe ich USB ab und stecke neu (serielles Terminal läuft) bekomme ich wieder genau die gleiche Ausgabe.

Fazit: die RTC scheint durch die Knopfzelle nicht versorgt zu werden.

"Spaßeshalber" habe ich das Beispielprogramm noch etwas modifiziert. Gleich nach
Serial.begin(19200); (habe Baudrate anders eingestellt)
steht nun
if (! rtc.initialized()) {
Serial.println("RTC nicht initialisiert");
}
if (rtc.lostPower()) {
** Serial.println("RTC lost Power");

}
Außerdem steht das Gleiche im Bereich loop ganz am Ende der zyklischen Ausgabe. Hier das Ergebnis:

RTC nicht initialisiert
RTC lost Power
RTC is NOT initialized, let's set the time!
2022/12/11 (Sunday) 23:16:52
since midnight 1/1/1970 = 1670800612s = 19337d
now + 7d + 12h + 30m + 6s: 2022/12/19 11:46:58
RTC lost Power

2022/12/11 (Sunday) 23:16:52
since midnight 1/1/1970 = 1670800612s = 19337d
now + 7d + 12h + 30m + 6s: 2022/12/19 11:46:58
RTC lost Power
usw.

Wegen der neuen Übersetzung des Programms wird die Uhr auf eine andere Zeit gestellt.

In einem weiteren Test habe ich das Setzen der Uhr auskommentiert. Nach upload sowie power down und up des Arduino kommt wieder die Ausgabe wie oben, jedoch mit anderen Werten von Datum und Zeit

2003/15/11 (Wednesday) 1:6:33

Die RTC scheint mit der Batterie nicht zu laufen.
(Die Batterie hatte ich gemessen, ca. 3,2 Volt, neu gekauft.)

Sehe ich das mit der Batterie richtig? Hat noch jemand eine Idee dazu?

Diese RTC hat einige Flags.
Nach einem Reset (auch beim ersten Einschalten) ist die Batterieumschaltung inaktiv:

Seite 13 des Datenblattes:
After reset, the following mode is entered:
• 32.768 kHz CLKOUT active
• 24 hour mode is selected
• Register Offset is set logic 0
• No alarms set
• Timers disabled
• No interrupts enabled
• Battery switch-over is disabled
• Battery low detection is disabled
• 7 pF of internal oscillator capacitor selected

Wenn die RTC die Zeit während des Ausschaltesn (5V versorgungsspannung ist aus) nicht beibehält ist entweder ein Fehler in der Beschaltung (die 3V der Batterie kommen nicht an der RTC an; Kannste an den Pins der RTC nachmessen)
Oder die Bibliothek die Du benutzt setzt die Flags nicht oder falsch.
Hast Du es mit einer anderen Bilbliothek für die pcf8523 versucht?

Grüße Uwe

Hallo Uwe,

vielen Dank für Deine sehr schnelle und informative Antwort. Leider hatte ich erst heute Abend Zeit, das weiter zu untersuchen.

Ging schnell, Batteriespannung liegt an.

Ich hatte bisher nur die Bibliothek von Adafruit verwendet. Von dort stammt auch die Hardware.

Die Suche nach einer anderen, passenden Bibliothek unter der IDE war nicht erfolgreich. In GitHub fand ich erst mal die Bibliothek RTClight.

Das Beispiel war merkwürdig. Ein verwendeter Funktionsaufruf war in der Bibliothek nicht auflösbar. Nach etwas Ändern des Beispiels lief die Uhr wohl an. Nach dem Setzen der Zeit zählte die Uhr innerhalb von 3 Sekunden die Sekunden von 1 auf 81! Dann kam aller drei Sekunden die gleiche Zeit (Sekunden = 81).

Das könnte bedeuten

  • die RTC wird falsch parametriert oder
  • der Chip hat eine Macke.

Mal sehen, ob ich morgen weiterkomme.

Vielleicht liest das hier jemand, der eine RTC mit dem PCF8523 erfolgreich verwendet und verrät, wie das geht.

Gruß Ludwig

Natürlich könnte die RTC /Hardware, die Du hast kaputt sein.
Hast Du eine zweite zu kontrollieren?

Das bedeutet daß der 32kHz Quarz nicht mit der Hauptfrequenz schwingt sondern mit einer seiner Oberschwingung. Diese wird eigentlich durch die Schaltung des Oszillator verhindert. Das Datenblatt gibt keine Beschaltung für den Quarz um dies zu verhindern. Nur den Quarz an das IC anschließen.

Es könnte der falsche Quarz für die eingestellte "Load Capacitator" montiert sein.
"Selectable integrated oscillator load capacitors for C L = 7 pF or C L = 12.5 pF"
Dies wird im BIT 7 des Registers Control 1 auf Adresse 00h : 0 = 7pF; 1 = 12,5pF.
Ich weiß nicht, wie man die Kapazität des verbauten Quarzes herausfindet.
Du kannst aber mal versuchen die andere Einstellung zu versuchen.

Was ich noch gefunden habe: Die Versorgungsspannung (5V) darf nicht zu schnell absinken, da ansonsten die Umschaltung auf die Pufferbatterie nicht richtig funktioniert. Das Datenbatt schlägt ein RC Glied an der Versorgungsspannung vor.
"SRf falling slew rate of V DD [3] - - 0.7 V/ms" Seite 50
und Schaltung Seite 54. Was hat Deine Platine?

Brauchst Du genau dieses RTC Modell?
Wenn nein dann rate ich Dir nach der DS3231. Die ist sehr genau und hat einen internen Quarz.
Das Datenblatt des pcf8523 gibt keine Genauigkeit der RTC an (oder habe ich nicht gefunden) Es gibt ein Register um die Zeit zu calibrieren.

Grüße Uwe

1 Like

Hallo !
Also ich habe die Platine in meiner Giessteuerung und da funktioniert die RTC mit der Bibliothek und dem Aufruf
#include "RTClib.h"
RTC_PCF8523 rtc;

einwandfrei.
Die DS3231 funktioniert an sich auch prima, aber ich nutze auf dem Shield auch die SD Karte und habe so nicht 2 extra Module zu verkabeln...

Viele Grüsse Ronni

1 Like

Hallo Ronni,

vielen Dank für die Nachricht. Da muss ich nicht weiter nach anderen nBiblioteken suchen.

Hallo Uwe,

Dein Hinweis zum Schwingproblem hätte mir auch einfallen sollen :unamused:. Dass der Rest der RTC funktioniert bedeutet ja nicht, dass der Oszillator funktioniert. Mit dem Oszi kann ich aber gar keine Schwingung finden! Das würde zur Diagnose in meinem ersten Beitrag passen, dass die Uhr überhaupt nicht tickt. Warum im letzten Test die Sekunden einmal gesprungen sind (auf 81!), ist undurchsichtig.

Eine zweite Baugruppe habe ich bisher leider nicht. Ich werde das Teil reklamieren, mal sehen, was passiert.

Ich hatte dieses Shield gewählt, da ich auch eine Speicherkarte einbinden muss.

Gruß
Ludwig

Mit dem Oszy am Quarz messen da wirst Du Schiffbruch erleiden. Jegliche Beschaltung stört den Oszillator.
Du kannst die RTC so programmieren daß sie die Quarzfrequenz am CLKOUT ausgibt und diese dann messen.
Grüße Uwe

Ich habe den Oszi ganz lose angekoppelt (bis herunter zu Bruchteilen von pF). Mich würde wundern, wenn das immer noch den Oszillator abwürgt. Aber gut, unmöglich ist das nicht. Ob die Biblo das Durchschalten an CLKOUT unterstützt, muss ich noch klären. Ansonsten wird es (für mich) aufwändiger. Übermorgen habe ich vielleicht wieder Zeit.

Gruß Ludwig

Hallo,

einen Quarz könnte man noch mit Oszi messen wenn man am Tastkopf 10:1 einschaltet. Wenn nicht möglich irgendwas um die 10-20MOhm in Reihe und kurze Masseverbindung. Die genaue Spannungshöhe ist erstmal nebensächlich. Hauptsache man sieht ein Taktsignal.

Und falls du an den Registern der RTC fummeln möchtest und die Lib paar Dinge nicht unterstützt, kannst du auch die Register per Hand ansprechen und beschreiben oder auslesen.

Hallo Uwe,

mein Text gestern war vielleicht auch etwas voreilig. Mit dem Tastkopf 10:1 und dem zusätzlichen kapazitiven Spannungsteiler ca. 10:1 oder mehr bleibt von der Spannung am Schwinger 1/100 oder weniger. Die Amplitude am Quartz dürfte eher niedrig sein. Von vielleicht 1 V bleiben dann zur Messung nur noch 10 mV oder weniger. Da ich die Bandbreite am Oszi nicht verringert hatte, die Schwingfrequenz ist ja niedrig genug, könnte das Signal im Rauschen untergegangen sein. Morgen sollte ich Zeit haben, das nochmal anzugehen.

Gruß Ludwig

Hatte ich und einen zusätzlichen (kapazitiven) Spannungsteiler ca. 10:1 auch noch. Mehr im Beitrag zuvor.

Ja, ist für mich aufwändiger, habe solche Dinge lange nicht mehr gemacht und auch nicht beim Arduino. Ist aber für "demnächst" eingeplant.

Hallo,

habe das auch nochmal probiert. An einem 16/20MHz Quarz mit 18pF messe ich mit 10:1 Tastkopf einen sauberen Sinus. An einem 32kHz Quarz mit 9pF habe ich keine Chance egal wie. Ich messe da auch nur Rauschen. Jetzt könnte man meinen der Tastkopf/Oszi Eingang bringt den Quarz außer Tritt, tut er jedoch nicht, ansonsten würden meine seriellen Ausgaben stehen bleiben. Da bin ich am grübeln weil unlogisch. Vielleicht fällt mir nochwas vielleicht auch nicht.

So, mein ursprüngliches Problem ist "gelöst". Ich hatte die Baugruppe reklamiert und eine neue bekommen. Damit klappte das Testprogramm auf Anhieb. Fazit: die erste Baugruppe hatte im Bereich RTC eine Macke. (Die Ansteuerung der SD-Karte hatte funktioniert. Das ist ja auch eine getrennte Geschichte.)

Was sonst noch in dieser Diskussion an Fragen aufkam und was die erste Baugruppe für einen Fehler hatte, ist vorläufig noch unklar.

Danke für die Rückmeldung.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.