mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RTC DS1307 Ausgabeformat


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Flor B. (florben)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich benutze eine RTC DS1307 für eine Uhren-Projekt.
Ein Atmega 328P schreibt und liest die Daten von der RTC und gibt diese 
über eine UART-Schnittstelle aus.
Die RTC funktioniert auch soweit. Nur habe ich ein Problem mit dem 
Zahlenformat. Die RTC gibt alle Werte in hex aus.

gibt es eine einfache Möglichkeit diese hex Daten in Dezimal 
umzuwandeln?

Programmiersprache C

Danke im  Voraus.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Die RTC gibt alle Werte in hex aus.

Falsch, sie gibt sie in BCD aus. Einfach mal nach BCD suchen.

Autor: Michael U. (amiga)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Hallo,

holger schrieb:
> Falsch, sie gibt sie in BCD aus. Einfach mal nach BCD suchen.

genaugenommen sogar im Packed BCD, also 2 Ziffern in einem Byte, 7..4 
zehner, 3..0 Einer.
Allerdings sind die Ausnahmen bei Sekundenzehner (CH-bit) und 
Stundenzahner (AM/PM-Unterscheidung) zu beachten.

Gruß aus Berlin
Michael

Autor: derjaeger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
The time and calendar information is obtained by reading the appropriate 
register bytes. Table 2 shows
the RTC registers. The time and calendar are set or initialized by 
writing the appropriate register bytes.
The contents of the time and calendar registers are in the BCD format. 
The day-of-week register
increments at midnight. Values that correspond to the day of week are 
user-defined but must be
sequential (i.e., if 1 equals Sunday, then 2 equals Monday, and so on.) 
Illogical time and date entries
result in undefined operation. Bit 7 of Register 0 is the clock halt 
(CH) bit. When this bit is set to 1, the
oscillator is disabled. When cleared to 0, the oscillator is enabled.

Autor: Joachim B. (jar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
> Einfach mal nach BCD suchen.
uint8_t bcdtoint( uint8_t bcd )
{  return ((uint8_t)(((bcd>>4)*10)+(bcd&15)));
} // uint8_t bcdtoint( uint8_t bcd )

uint8_t int2bcd( uint8_t integer )
{  return ((uint8_t)(((integer/10)<<4)+(integer%10)));
} // uint8_t int2bcd( uint8_t integer )

oder gleich am Arduino ds1307new.lib nutzen
https://github.com/olikraus/ds1307new/blob/master/DS1307new.h

PS das DS3231 ist kompatibel aber viel genauer und stabiler

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.