RTC problem 12/24 H Format

Ich habe in einem Beispiel von Bonezegei die RTC ausprobiert.
Bim umstellen von 12 auf 24h Format stimmt allerdings die Uhrzeit nicht mehr.
Statt zB 11 Uhr steht dann 31 Uhr. Wo ist da der Fehler ?

Ich habe eine Arduino MEGA 2560 von Elegoo mit dem RTC Modul DS1307 Module V03

/*
  Set Time And Date
  Author: Bonezegei (Jofel Batutay)
  Date: Jan 26 2024
*/

#include <Bonezegei_DS3231.h>

Bonezegei_DS3231 rtc(0x68);

void setup() {
  Serial.begin(9600);
  rtc.begin();
  rtc.setFormat(24);        //Set 12 Hours Format
  //rtc.setAMPM(1);           //Set AM or PM    0 = AM  1 =PM
  rtc.setTime("11:22:00");  //Set Time    Hour:Minute:Seconds
  rtc.setDate("6/25/25");   //Set Date    Month/Date/Year
}

void loop() {
  char d[32];
  if (rtc.getTime()) {
    //Serial.printf("Time %02d:%02d:%02d ", rtc.getHour(), rtc.getMinute(), rtc.getSeconds());
    sprintf(d, "Time %02d:%02d:%02d ", rtc.getHour(), rtc.getMinute(), rtc.getSeconds());
    Serial.print(d);

    if (rtc.getFormat() == 12) {  // returns 12 or 24 hour format

      if (rtc.getAMPM()) {  //return 0 = AM  1 = PM
        Serial.print("PM  ");
      } else {
        Serial.print("AM  ");
      }
    }

    //Serial.printf("Date %02d-%02d-%d \n", rtc.getMonth(), rtc.getDate(), rtc.getYear());
    sprintf(d, "Date %02d-%02d-%d \n", rtc.getMonth(), rtc.getDate(), rtc.getYear());
    Serial.print(d);
  }

  delay(1000);
}

Wieso verwendest Du eine Bibliothek fĂĽr die DS3231 verwendest aber eine DS1307?

Unterscheiden sich in Details.

Was den jetzt? 12 oder 24h?

Da bei beiden Uhren die Stunden und die Kennungen 12/24 und AM/PM auf denselben Bits sind, tippe ich drauf, dass du dich schon entscheiden musst,und beim Zeit stellen und abrufen dasselbe Format wählen. (Wieso willst du überhaupt 2*1..12 statt 0..23 ?)

Vielleicht hast du ja nur die Doku zur Lib(?) falsch gelesen.

den kommentar hab ich vergessen zu löschen - es stand voher (12) drin

Wo finde ich die Doku zur LIB ? ich habe keine gefunden.

zu den Versionen 1307 und 3231
das Programm ist das selbe

/*
  Set Time And Date
  Author: Bonezegei (Jofel Batutay)
  Date: Feb 2024
*/

#include <Bonezegei_DS1307.h>

Bonezegei_DS1307 rtc(0x68);

void setup() {
  Serial.begin(115200);
  rtc.begin();
  rtc.setFormat(12);        //Set 12 Hours Format
  rtc.setAMPM(1);           //Set AM or PM    0 = AM  1 =PM
  rtc.setTime("11:59:30");  //Set Time    Hour:Minute:Seconds
  rtc.setDate("1/27/24");   //Set Date    Month/Date/Year
}

void loop() {

  if (rtc.getTime()) {
    Serial.printf("Time %02d:%02d:%02d ", rtc.getHour(), rtc.getMinute(), rtc.getSeconds());

    if (rtc.getFormat() == 12) {  // returns 12 or 24 hour format

      if (rtc.getAMPM()) {  //return 0 = AM  1 = PM
        Serial.print("PM  ");
      } else {
        Serial.print("AM  ");
      }
    }

    Serial.printf("Date %02d-%02d-%d \n", rtc.getMonth(), rtc.getDate(), rtc.getYear());
  }

  delay(1000);
}

Nein. Es ist ein anderer include

ok stimmt - ich habe beide ausprobiert - bei beiden passiert das gleiche.

1.) wo finde ich die Doku zur Bibliothek ?
2.) was muss geändert werden um 24h format zu haben und die korrekte Uhrzeit anzeigen ?

Einfach mal in den Quelltext der Lib schauen, da findet man die Lösung. Sogar kommentiert.

GruĂź Tommy

Hast Du Dir mal das Datenblatt des DS3231 angesehen?

Wenn es Nachmittag ist und Du von 12h auf 24H umschaltest, dann wird das Bit PM/AM, das 1 ist, weil es Nachmittag (PM) ist, als zweites Bit der Zehner der Stunden interpretiert, also die Stunden ( 0 oder 1) als 2 bzw 3 interpretiert und dann kommst Du auf bis zu 32 Stunden.

Ich würde sagen, wenn Du von 12 auf 24 umschaltest bzw zurück, mußt Du die Stunden vorher auslesen und nach dem Wechsel im richtigen Format zurückschreiben. Die RTC macht das nicht automatisch da allgemein üblich ist, die eine oder die andere Zeitdarstellung zu wählen und dann niemals zu wechseln.

Also 0:00 bis 23:59

in

12:00 AM bis 12:59 AM ;

01:00 AM bis 11:59 AM ;

12:00 PM bis 12:59 PM ;

01:00 PM bis 11:59PM

GrĂĽĂźe Uwe

1 Like

Dann schau dir den Source-Code an oder wähle eine andere LIB, deren Doku dir besser gefällt.

Wenn ich mal ein gutes Buch lesen will, schreibe ich mir eins
:slight_smile:

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.