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.
>Die RTC gibt alle Werte in hex aus.
Falsch, sie gibt sie in BCD aus. Einfach mal nach BCD suchen.
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
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.
holger schrieb: > Einfach mal nach BCD suchen.
1 | uint8_t bcdtoint( uint8_t bcd ) |
2 | { return ((uint8_t)(((bcd>>4)*10)+(bcd&15))); |
3 | } // uint8_t bcdtoint( uint8_t bcd ) |
4 | |
5 | uint8_t int2bcd( uint8_t integer ) |
6 | { return ((uint8_t)(((integer/10)<<4)+(integer%10))); |
7 | } // 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
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.