A toutes fins utiles, voici un exemple ultra minimal d'accès en lecture/écriture à un RTC.
const uint8_t adresseRTC = 0x68; //Adresse du circuit RTC sur le bus I2C
uint8_t bin2dcb(uint8_t bin) {return bin + 6 * (bin / 10);} //conversion binaire en dcb
uint8_t dcb2bin(uint8_t dcb) {return dcb - 6 * (dcb >> 4);} //conversion dcb en binaire
bool ecrireRTC(uint8_t annee, uint8_t mois, uint8_t jour, uint8_t heure, uint8_t minute, uint8_t seconde)
{
Wire.beginTransmission(adresseRTC);
Wire.write((uint8_t)0);
Wire.write(bin2dcb(seconde));
Wire.write(bin2dcb(minute));
Wire.write(bin2dcb(heure));
Wire.write(1); //joursem non géré
Wire.write(bin2dcb(jour));
Wire.write(bin2dcb(mois));
Wire.write(bin2dcb(annee));
return (Wire.endTransmission() == 0); //retourne true si transmission ok
}
bool lireRTC(uint8_t *annee, uint8_t *mois, uint8_t *jour, uint8_t *heure, uint8_t *minute, uint8_t *seconde)
{
Wire.beginTransmission(adresseRTC);
Wire.write((uint8_t)0);
bool accesOK = (Wire.endTransmission() == 0);
if (accesOK) accesOK = (Wire.requestFrom(adresseRTC, (uint8_t) 7) == 7);
if (accesOK)
{
*seconde = dcb2bin(Wire.read());
*minute = dcb2bin(Wire.read());
*heure = dcb2bin(Wire.read());
Wire.read(); //joursem non géré
*jour = dcb2bin(Wire.read());
*mois = dcb2bin(Wire.read());
*annee = dcb2bin(Wire.read());
}
return accesOK;
}