DS3231 impostazione registro ore (12/24 ore)[Risolto]

Salve,

Vorrei impostare la lettura ore am/pm invece di 24H nel DS3231. Dal datasheet vedo che deve stare a 1 il bit 6 nel byte 02h. Ho provato con il codice che segue:

#include <Wire.h>
byte secondi, minuti, ore;

void setup() {
Wire.begin();
Serial.begin(9600);
Wire.beginTransmission(0x68);
Wire.write(0);
Wire.write(0);                 // azzero i secondi
Wire.write(0b01011001);        // minuto 59
Wire.write(0b01010001);        // ore 12
Wire.endTransmission(); 
}

void loop() {
  Wire.beginTransmission(0x68);
  Wire.write(0);
  Wire.endTransmission(false);
  Wire.requestFrom(0x68, 3);
  secondi = Wire.read();          // lettura secondi
  minuti = Wire.read();           // lettura minuti
  ore = Wire.read();              // lettura ore
  delay(500);
  // conversione da BCD a decimale
  ore = (ore >> 4) * 10 + (ore & 0x0f);                          
  minuti = (minuti >> 4) * 10 + (minuti & 0x0f);
  secondi = (secondi >> 4) * 10 + (secondi & 0x0f);
  Serial.print(ore);
  Serial.print(" ");
  Serial.print(minuti);
  Serial.print(" ");
  Serial.println(secondi);
}

In questo modo, nel monitor seriale leggo ore 51 invece di 12.
Dove sbaglio?

Grazie

Gaetano

Sta scrivendo 0x51 al registro delle ore. 0x51 significa: abilita modo 12/24 e imposta ora 11 di mattina. Secondo il datasheet, in modo AM/PM, le ore sono tra 1-12. In modo 24h, sono tra 0-23.

byte bPM;
char szTemp[16];
...
ore = Wire.read();
minuti = (minuti >> 4) * 10 + (minuti & 0x0f);
secondi = (secondi >> 4) * 10 + (secondi & 0x0f);
if (ore & 0x40) // modo AM/PM
{
   bPM = ore & 0x20; // AM/PM bit
   ore &= 0x1f;
   ore = ((ore >> 4) * 10) + (ore & 0xf); // convert to decimal
   sprintf(szTemp, "%02d:%02d:%02d %s", ore, minuti, secondi, bPM ? "PM":"AM");
}
else // modo 24h
{
   ore = ((ore >> 4) * 10) + (ore & 0xf); // convert to decimal
   sprintf(szTemp, "%02d:%02d:%02d", ore, minuti, secondi);
}
   Serial.print(szTemp);

Grazie per il prezioso aiuto. Ero lontano dalla soluzione. Appena possibile provo il codice e aggiorno.
Saluti
Gaetano