Forum: Mikrocontroller und Digitale Elektronik DS1302 Batterietest


von Thomas S. (thomas_s72)


Lesenswert?

Hallo,
wie testet man vorm Auslesen des DS1302 ob die verfügbare Zeit überhaupt 
glaubhaft ist?

Ich hab so ein Ding in meinem Webserver (Ulrich Radig mit XMEGA64). Der 
zieht seine Zeit vom NTP und aktualisiert den DS1302 periodisch.
Diese Zeit wird zu automatischen Schaltvorgängen herangezogen, Rolladen 
und Warmwasserzirkulation.

Nun setzt mein Internet hin und wieder aus und mein Webserver startet 
nachts immer neu (hängt nach Wochen sonst manchmal).

Ich lese dann die Zeit aus der RTC wenn NTP mal wieder nicht verfügbar 
ist. Ich würde gerne dabei prüfen, ob die RTC Zeit glaubhaft ist. Also 
eigentlich, ob die Batterie noch voll ist.

Dazu scheibe ich beim Update Bitmuster in mehrere RAM Zellen, diese lese 
ich dann beim Neustart aus. Stimmen die, so sollte die Batterie OK sein.
Aber auch ohne Batterie behält das Ding die RAM Infos, wenigstens eine 
Minute oder so. Natürlich läuft die Uhr ohne Batterie nicht weiter, die 
Zeit ist also Mist.
Wie realisiert man sinnvoll einen Battrietest um die Gültigkeit der 
ausgelesenen Zeit zu beurteilen?

Momentan schalte ich VCC der Uhr beim Start ab und lese meine Muster 
aus.
Stimmen die nicht ist die Batterie leer (das klappt wenn ich die 
Batterie abklemme). Dann schalte ich VCC an und los geht's.
Oder sollte man die Zeit ohne VCC innerhalb 1500ms zweimal auslesen und 
testen ob sich die Sekunde geändert hat? Das würde zeigen, dass die RTC 
tickt.
Macht jemand das so oder wie sind die Meinungen? Im PDF der DS1302 steht 
nix vom RAM Verhalten bei totalem Blackout. Ich ging davon aus dass bei 
leerer Batterie die RAM Zellen umkippen, scheint aber nicht so schnell 
zu passieren.

Wäre für Ideen dankbar.

Gruß
Thomas

von Wolfgang (Gast)


Lesenswert?

Thomas S. schrieb:
> Wie realisiert man sinnvoll einen Battrietest um die Gültigkeit der
> ausgelesenen Zeit zu beurteilen?

Du könntest ab und zu die Batteriespannung per ADC nachmessen und dann 
erstmal davon ausgehen, dass bei guter Batterie die Zeit auch ok ist. 
Wenn du dann beim NTP-Update auch noch den Uhrenfehler (Stand, Gang) 
auswertest, merkst du, wenn da etwas faul ist.

von eProfi (Gast)


Lesenswert?

Da die RAM data retension voltage  niedriger als die 
mindest-Oszillator-Spannung sein dürfte, würde ich zusätzliche Test 
durchführen:
 - Plausibilität
 - Z.B. jede Stunde oder jeden Tag einmal das (sicher richtige) Datum 
ins Flash / Eeprom schreiben (Ringpuffer, damit der Verschleiß 
gleichmäßig verteilt wird).  Dann bei zweifelhafter Zeit den 
Zeitunterschied zur letzten sicheren Zeit berechnen. Er sollte weniger 
als die Update-Rate sein.

von eagle user (Gast)


Lesenswert?

Oder einen vernünftigen RTC-Chip verwenden... Der PCF2129T hat einen 
internen Komparator und ein Statusregister mit Batterie-Leer-Flag und 
Oszillator-Stop-Flag.

Zum Preis des DS1302 gibt es gratis:
 * einen internen Quarz
 * Temperaturkompensation (TCXO, auch die 32kHz sind kompensiert)
 * echtes SPI- und I2C-Interface im gleichen Chip
 * Takt-Ausgang (1Hz oder 1kHz bis 32kHz)
 * Interrupt-Ausgang für Alarm, Timer, Watchdog, Batterie leer, 
Timestamp
 * Timestamp-Eingang
 - kein RAM (für 50 Cent mehr gibt's den PCF2127T mit 512 Byte RAM)

Und nein, ich bekomme keine Prämie von NXP.

von Thomas S. (thomas_s72)


Lesenswert?

Hallo,
das mit dem EEPROM scheint mir die eleganteste Lösung zu sein.
Zeit merken, wenn ich auslese muss diese größer als letztes Mal sein.

Versuche ich mal so, danke und einen schönen Sonntag noch.

Gruß

Thomas

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
Noch kein Account? Hier anmelden.