Ich habe Dutzende verschiedener Echtzeituhr-Chips auf dem Markt gesehen sowie eine Reihe von Prozessoren mit einem eingebauten, separat versorgten Echtzeituhr-Modul.
Fast alle von ihnen speichern nicht nur die Zeit als Jahr-Monat-Tag-Stunden-Minuten-Sekunden, sondern auch die einzelnen Felder werden im BCD-Format und nicht im Binärformat gespeichert.
Gibt es einen Grund dafür?
Gibt es Mikroprozessoranwendungen, die etwas Raffinierteres tun, als nur eine Uhr anzuzeigen, bei der das BCD-Format nützlicher als das Binärformat ist, oder bei denen das Format Jahr-Monat-Tag-Stunde-Minuten-Sekunden nützlicher wäre als eine gerade 47-Bit-Zählung von Oszillatorzustandsänderungen?
Nach allem, was ich sagen kann, scheinen RTCC-Hersteller eine Menge zusätzlicher Schaltkreise hinzuzufügen, um ihre Chips weniger nützlich zu machen. Der einzige Grund, warum sich RTCC-Module in Prozessoren so verhalten, besteht darin, dass die Prozessoranbieter eine bereits vorhandene BCD-Implementierung verwenden, anstatt ihre eigene zu produzieren.
Antworten:
Verwenden alle RTCs BCD-Codierung?
RTCs von Philips / NXP (sowohl eigenständig als auch in ARM7- oder Cortex-M3-Chips integriert) verwenden keine BCD-Codierung.
Was ist los mit einer BCD RTC?
Im Vergleich zum Flachzähler sind die einzigen Operationen, die mit einer geteilten BCD-Uhr schwieriger sind, Zeitdifferenzberechnungen (Hinzufügen von Sekunden oder Berechnen der verstrichenen Zeit). Zeitvergleiche wie: "Ist die aktuelle Zeit größer als die vom Benutzer eingestellte Weckzeit" sind genauso einfach.
Was ist schön an BCD-RTCs (und im Allgemeinen Split-Field-RTCs)?
Das Aufteilen der Felder ist wirklich nett, wenn Sie sich um das Kalenderdatum kümmern. Menschliche Kalender haben lustige Dinge wie Monate unterschiedlicher Länge und zusätzlich zu diesen Schaltjahren. Versuchen Sie, dies in einem einzigen Zähler zu tun (Sie können einen Bonuspunkt erhalten, wenn Sie fast keinen Strom verbrauchen). Oh, und versuchen Sie, Wochentage zu unterstützen (ziemlich nützlich für alle Arten von Geräten, die für Menschen gedacht sind: von Weckern bis zu Heizungsreglern).
Der BCD-Ansatz hat eine zusätzliche Funktion: Sie erhalten "jede Sekunde" oder "alle zehn Sekunden" Interrupts kostenlos, ohne dass Sie Zeit- oder Datumsberechnungen durchführen müssen.
Bei den NXP-RTCs ist die Berechnung des Rekordsprungjahres ein wenig anders, da nur die durch 4 teilbare Regel berücksichtigt wird und die Division durch 100 und 400 nicht überprüft wird. Wenn der Jahreszähler in BCD beibehalten würde, wäre dies trivial und höchstwahrscheinlich richtig gemacht.
Zusammenfassung
Wenn Sie eine monotone Uhr möchten, verwenden Sie eine. Sie können einen PIC oder AVR mit dem "RTC-Zähler" kaufen (der nur ein asynchroner Zähler mit einem autonomen 32-kHz-Oszillator ist). Denken Sie daran, dass es schwierig sein wird, nur das Datum anzuzeigen. :)
Wenn Sie Uhrzeit und Datum anzeigen und Alarme basierend auf der Benutzereingabe von Uhrzeit und Datum einstellen müssen, verwenden Sie eine Echtzeituhr. Und denken Sie daran, dass Ihre RTC-basierten Interrupts möglicherweise ungenau sind, wenn der Benutzer die aktuelle Uhrzeit und das Datum ändert.
quelle
Wenn Sie am Ende Uhren verwenden, interessieren Sie sich mit größerer Wahrscheinlichkeit für Minuten und Dutzende von Sekunden (um sie anzuzeigen) als nur für die Summe von Sekunden, Minuten usw. Falls Sie sich nicht für einzelne Ziffern interessieren, interessieren Sie sich wahrscheinlich auch nicht für einzelne Minuten- oder Sekundenwerte, und Sie können auch einen langen Binärzähler verwenden, wie Sie vorgeschlagen haben.
Das Konvertieren von BCD in Binärdateien ist in der Software einfacher als umgekehrt. Und da BCD-Zähler nicht so viel zusätzlichen Platz gegenüber Binärzählern benötigen, ist es sinnvoll, sich für BCD zu entscheiden.
quelle
Ich vermute mehrere Gründe:
Historisch - das machen sie schon seit einiger Zeit so. Wenn Sie möchten, dass Ihr neues Teil ein anderes Teil ersetzt, muss es mehr oder weniger genauso funktionieren. Sie bleiben also beim BCD.
Anwendung - Wenn jemand eine RTC von einem kleinen Mikro verwendet (etwas im 8-Bit-Bereich, wie ein Low-End-PIC), ist der Umgang mit einer großen Zahl (wie z. B. Ihrem 47-Bit-Zähler) ein großes Problem. Es ist VIEL einfacher, mit den BCD-Ziffern umzugehen, da Sie nicht daran arbeiten müssen, die Dinge aufzubrechen.
Nicht so schwer - Es ist nicht so schwer, die BCD-Zähler zu benutzen, und ich denke, es sind nicht viel mehr Tore als sie binär zu machen.
Man kann sich ein System vorstellen, bei dem Sie separate Stunden-, Minuten- usw. Zähler in Binärform anstelle von BCD erhalten (wodurch das Problem der Aufschlüsselung der 47-Bit-Zahl vermieden wird), aber es ist nicht viel einfacher, und Sie werden einige durchführen umrechnungen bei der darstellung des dings trotzdem.
quelle
Ich stimme Michael Kohne zu, dass es eine Menge historischer Impulse gibt.
Frühe MCUs hatten auch viel weniger Platz für Code und Daten (zum Beispiel 128 Byte RAM). Da Zeitinformationen häufig für Zwecke der Benutzerschnittstelle verwendet werden, ist es sinnvoller, die Daten so nah wie möglich an dem Format zu halten, das für die Anzeige von / für Eingaben von Menschen verwendet wird.
Einige neuere MCUs mit mehr Code- und Datenraum implementieren manchmal Hardware-Echtzeitzähler - diese Geräte behalten oft Binärzahlen von 32-kHz-Ticks bei.
quelle
Falls sich jemand interessiert, schaue ich mir nur die 32F-Serie von ST an und es sieht so aus, als ob die neuere 32L-Serie eine BCD-RTC verwendet, die 32F jedoch einen geraden 32-Bit-Zähler mit konfigurierbarer Voreinstellung verwendet und einen separaten Batterieeingang dafür bereitstellt (Hurra! ). Ich hätte lieber einen längeren geraden Zähler ohne konfigurierbaren Prescalar gehabt (so dass ich eine Genauigkeit von 1 / 256sec erzielen könnte, aber die Zeit jahrelang halten könnte, ohne mir Gedanken über das Wickeln machen zu müssen), aber wenn ich den Prescale auf 1 / 64sec einstellen würde, könnte der Timer laufen zwei Jahre ohne Überlauf. Nicht ideal, aber nicht schlecht. Ein wenig unästhetisch, dass, wenn jemand die Maschine einschaltet, nachdem sie zu lange ausgeschaltet war (über 2,1 Jahre), die Zeit / das Datum unerkennbar um 2,1 Jahre zurückrutschen würde, dies aber kaum ein großes Problem darstellt (der Zähler hat eine Überlaufmarkierung, aber in In vielen Fällen wäre das nicht besonders hilfreich. Wenn die Maschine zwei Jahre eingeschaltet war, bevor sie ausgeschaltet wurde, und drei Monate später eingeschaltet wurde, ist zu erwarten, dass der Timer überläuft. die frage wäre, ob es zweimal übergelaufen wäre und ich kenne keine flagge dafür.
quelle
Maxim scheint mit DS1372U genau das zu tun, was Sie wollen . Es benötigt weniger als 1μA, kostet 1,7 USD und ist (!) Auf DigiKey und Mouser erhältlich. Das einzige Problem ist, dass es keine Alarme mit einer Genauigkeit von mehr als 1 Sekunde zu bieten scheint und die niedrigste Ausgangstaktrate $ \ ca. $ 4kHz beträgt.
quelle