Hallo zusammen, ich habe zwei Fragen bezüglich RTC und Pufferbatterie, Akku, GoldCap. Wobei die Art des Energiespeichers erstmal zweitrangig für mich ist. Gehen wir mal von einer normalen CR2032 Batterie als Puffer aus. 1. Ich würde gerne den Benutzer auf einen bevorstehenden Batteriewechsel hinweisen, bevor die Funktion des RTC's durch eine leere Batterie beeinträchtigt ist. Ich müsste also z.B. über einen ADC zyklisch die Batteriespannung messen. Oder gibt es RTC Bausteine die diese Funktion schon integriert haben? 2. Gehen wir davon aus die Batterie ist leer und ich habe keine Spannungsüberwachung der Batterie oder der Benutzer ignoriert die Meldung. Wie stelle ich (bzw. der Mikrocontroller) fest dass die Uhrzeit nicht mehr stimmt? Gruß Christian
3. z.B. NTP https://de.wikipedia.org/wiki/Network_Time_Protocol Wird die Differenz zu groß, könnte man das dem User melden?
Chris S. schrieb: > Gehen wir davon aus die Batterie ist leer und ich habe keine > Spannungsüberwachung der Batterie oder der Benutzer ignoriert die > Meldung. Wie stelle ich (bzw. der Mikrocontroller) fest dass die Uhrzeit > nicht mehr stimmt? Wenn du keinen ZUgang zum Internet hast, blieben eigentlich nur 2 RTCs und die Hoffnung, dass beide nicht genau gleichzeitig ausfallen
Sebastian R. schrieb: > Wenn du keinen ZUgang zum Internet hast, blieben eigentlich nur 2 RTCs > und die Hoffnung, dass beide nicht genau gleichzeitig ausfallen Zwei unterschiedlich große Batterien erzwingen könnte dabei hilfreich sein. Schön ist, dass bei der Methode nicht mehr vorab schwache Batterien erkannt werden müssen. Die eine Uhr meldet, wenn ihre Batterie leer ist. Die andere liefert dann die Zeit. Beim STM32F103 wird die Uhr auf 00000 gesetzt und bleibt (bis zum ausdrücklichen Start-Signal per Software) stehen, wenn die Batterie leer ist.
Chris S. schrieb: > Gehen wir davon aus die Batterie ist leer und ich habe keine > Spannungsüberwachung der Batterie oder der Benutzer ignoriert die > Meldung. Wie stelle ich (bzw. der Mikrocontroller) fest dass die Uhrzeit > nicht mehr stimmt? Ganz einfach. Der Benutzer muß beim Einschalten 3 x die exakte Zeit eingeben. Max. Abweichung 10 ms. So stimmt die Uhrrzeit immer. Macht er bei der Eingabe einen Fehler, wird das Gerät gesperrt und muß zum Hersteller geschickt werden. Alternative: Wenn die genaue Uhrzeit benötigt wird, kann man auch ein GPS-Modul verwenden.
Viele externe RTC-Bausteine haben eine interne Erkennung der Pufferbatterie bzw. deren Low-Zustand sowie Data-Corruption. Das ist meist ein Bit innerhalb der Uhrzeitdaten, die Du per SPI/I2C ausliest.
Hermann Kokoschka schrieb: > Viele externe RTC-Bausteine haben eine interne Erkennung der > Pufferbatterie bzw. deren Low-Zustand sowie Data-Corruption Richtig, ausserdem gibt es fast immer auch einen universellen batteriegestützten Datenspeicher, und da kann man ein paar Bytes mit Prüfsumme ablegen. Georg
Chris S. schrieb: > Ich würde gerne den Benutzer auf einen bevorstehenden Batteriewechsel > hinweisen, bevor die Funktion des RTC's durch eine leere Batterie > beeinträchtigt ist. Ja, gute Idee. > Ich müsste also z.B. über einen ADC zyklisch die > Batteriespannung messen. Leider nicht ganz so einfach. Du musst bedenken: 1. der angeschlossene ADC oder Spannungsteiler etc. darf nicht die Batterie mit der Zeit leersaugen. Gute RTCs ziehen nur 3-stellige Nanoamperes. Schon alleine der angeschlossene ADC wird oft mehr ziehen, ein Spannungsteiler erst recht. Du brauchst also irgendeinen Analogschalter, FET oder ähnliches mit dem Du wirklich gut abschalten kannst, gleichzeitig aber auch die Messung nicht zu stark verfälschst. Wenn Du die in einem Mikrocontroller integrierte RTC-Einheit verwendest und keinen separaten Baustein, dann gibt es manche Modelle mit internem Analogschalter zum ADC. Du kannst dann also direkt vom Mikrocontroller aus messen ohne einen externen Analogschalter zu brauchen. Z.B. bei manchen STM32 geht das. 2. Du musst unter Belastung messen. Die CR2032 sinken mit dem Alter kaum in der Leerlaufspannung, es erhöht sich der Innenwiderstand. Du musst also die Batterie für 1-2 Sekunden z.B. mit 1 kOhm belasten und danach messen. Also den Belastungswiderstand per FET zuschalten. Das dann z.B. 1x pro Tag oder 1x pro Woche. > 2. > Gehen wir davon aus die Batterie ist leer und ich habe keine > Spannungsüberwachung der Batterie oder der Benutzer ignoriert die > Meldung. Wie stelle ich (bzw. der Mikrocontroller) fest dass die Uhrzeit > nicht mehr stimmt? Sehr viele RTC-Bausteine haben ein paar Bytes gepuffertes RAM. Da kannst Du ein Token reinschreiben und das kontrollieren. Oder es gibt direkt ein Fail-Flag.
Gerd E. schrieb: > Sehr viele RTC-Bausteine haben ein paar Bytes gepuffertes RAM. Da kannst > Du ein Token reinschreiben und das kontrollieren. Oder es gibt direkt > ein Fail-Flag. ...wie bereits mehrfach erwähnt...
Gerd E. schrieb: > Du musst > also die Batterie für 1-2 Sekunden z.B. mit 1 kOhm belasten und danach > messen. Also den Belastungswiderstand per FET zuschalten. Das dann z.B. > 1x pro Tag oder 1x pro Woche. Meines Erachtens viel zu viel Aufwand für eine 20 Cent CR2032. Alle fünf Jahre die Batterie zu wechseln, wäre einfacher und hinreichend. Den Benutzer zu irgendetwas zu zwingen, ginge nur mit nervenden Warnmeldungen. Übrigens: mit Sicherheit festzustellen, ob die Uhr nicht mehr "stimmt", geht nur, wenn man eine Referenzzeit zur Verfügung hat.
Chris S. schrieb: > Oder gibt es RTC Bausteine die diese Funktion schon integriert haben? Weil sich diese Frage aber so gut wie jeder stellt, kannst du dir die naheliegende Antwort schon selber denken. Anbei mal ein Bit namens BLF im Statusregister des PCF8523. Datenblätter anderer RTC sind bei Google leicht zu finden...
Die Idee Token mit Prüfsumme im RAM gefällt mir gar nicht. Der Oszillator reagiert doch viel empfindlicher als statisches RAM auf zu niedrige Spannung. Ein RTC-Chip braucht einen echten Brown Out Komparator. Oberhalb der Schaltschwelle muss alles einwandfrei funktionieren und unterhalb wird ein Flag gesetzt. Es gibt RTC-Chips mit "Oscillator Stop Flag". Wenn das wirklich nur ein Monoflop ist, muss man sich darauf verlassen, dass der Oszillator gleich ganz aussetzt und nicht ein paar Tage lang zu langsam schwingt. Das ist doch eher unwahrscheinlich.
Chris S. schrieb: > Gehen wir davon aus die Batterie ist leer und ich habe keine > Spannungsüberwachung der Batterie oder der Benutzer ignoriert die > Meldung. Wie stelle ich (bzw. der Mikrocontroller) fest dass die Uhrzeit > nicht mehr stimmt? 1. Feststellen, ob die Uhr läuft und die Sekunden hochzählen. 2. Feststellen, ob das Datum plausibel ist und nicht auf dem Einschaltwert steht. 3. Beim Systemstart Zeitstempel in das Uhren-RAM (jede RTC hat zumindest ein paar Bytes) zusammen mit Prüfsumme schreiben. Wenn die Prüfsumme beim nächsten Start nicht stimmt oder die aktuelle Zeit kleiner gleich der gespeicherten Zeit ist, dann stimmt was nicht. Ohne weitere Hardwareunterstützung wirst Du nicht viel mehr machen können. fchk
Vielen herzlichen Dank für die zahlreichen Antworten! Ich hab mich nun für den PCF8523 entschieden. Die Batterie überwache ich mit dem BLF Bit. Nun mal zum Zweitrangigen, ist es möglich die Batterie durch einen Doppelschichtkondensator zu ersetzen? Wenn ich mit dem PCF8523, einem 1F Kondensator mit 5V Ladespannung rechne komme ich auf ca. 303 Tage: Berechnung für RTC PCF8523 mit 5V Ladung und 1F Kondensator: VCbackupend = 1.0 V VCbackupstart = 5 V IRTC = 150 nA C = 1 F tbackup = 1 F x (5 V - 1.0 V) / 150 nA = 26666666 s = 303 Tage Ist das realistisch??? Oder spare ich mir den ganzen Aufwand und nutze eine CR2032 und bin auf der sicheren Seite?
Chris S. schrieb: > ist es möglich die Batterie durch einen > Doppelschichtkondensator zu ersetzen? Ich denke schon. Ob deine Rechnung so hin kommt, weiß ich nicht. Es gibt ja noch Leckströme und die hängen stark von Temperatur, Spannung und der Luft ab. Insofern würde ich lieber die übliche CR2032 nehmen.
Chris S. schrieb: > VCbackupend = 1.0 V > VCbackupstart = 5 V > IRTC = 150 nA > Ist das realistisch? Fast. Die 150nA sind nur der typische Wert und der gilt nur, wenn die Batterieüberwachung abgeschaltet wird. Dann muss man die Umschaltung extern machen:
1 | When the battery switch-over function is disabled, the PCF8523 |
2 | works only with the power supply VDD and the battery low detection |
3 | function is disabled. VBAT must be put to VDD. |
Vergleich mal diese Power Management Funktionen mit denen vom PCF2129, da gibt es ein Bild mit der Stromaufnahme abhängig vom PM Mode (hinter den Characteriscs). Danach wäre PM = 0b101 optimal mit nicht einmal dem doppelten Strom trotz interner Umschaltung. Mit Battery Management ist VCbackupend angeblich 1.8V statt 1.0V. Muss ich das glauben? Aber falls es stimmt... Es gibt nur wenige EDLC, die überhaupt 5V vertragen und je höher die Spannung, umso kürzer die Lebensdauer. Außerdem kostet es mehr als eine Diode, den Kondensator aus 5V auf 5V aufzuladen. In der Summe also eher 2 Wochen als 1 Jahr :( Aber nach 2 Wochen Stromausfall interessiert sich niemand mehr für die Uhrzeit. Deshalb stimme ich für den Kondensator. Ein guter hält mehr als 10 Jahre, wenn man ihn nur auf 0.5 bis 0.7xNennspannung auflädt und er nicht heiß wird. Mein Favorit ist z.Zt. die PHVL Familie von Eaton. Chris S. schrieb: > Die Batterie überwache ich mit dem BLF Bit. Noch ein Vorteil des Kondensators, der braucht das nicht. Und man muss den Benutzer nicht nerven, er kann ja sowieso nichts wechseln. Was uns wieder zur ursprünglichen Frage bringt: Dieser PCF8823 hat im SECONDS Register ein Bit namens OS mit einer eindeutigen Aussage: OS = 0: clock integrity is guaranteed.
:
Bearbeitet durch User
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.