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