RTC DS1307 et modification exclusive du registre des secondes

Bonjour,

Le code suivant mettant à jour les valeurs des registres du RTC DS1307 fonctionne sans problème.

Wire.beginTransmission(DS1307_ADDRESS); 
Wire.write(byte(0));
Wire.write(decToBcd(secondes));
Wire.write(decToBcd(minutes)); 	
Wire.write(decToBcd(heures));		
Wire.write(decToBcd(jourSemaine));	
Wire.write(decToBcd(JourDuMois));
Wire.write(decToBcd(mois));
Wire.write(decToBcd(annee));
Wire.write(byte(0));
Wire.endTransmission();

Toutefois, par souci de compacticité, je souhaiterais ne modifier que la valeur des secondes.

En supprimant les lignes apparemment inutiles comme suit...

Wire.beginTransmission(DS1307_ADDRESS); 
Wire.write(byte(0));
Wire.write(decToBcd(secondes));
// Autres lignes supprimées.
Wire.write(byte(0));
Wire.endTransmission();

...la valeur des secondes est correctement actualisée, mais celle des minutes passe systématiquement à "0". Les autres valeurs (heures,… année) sont conservées.

Comment faire pour avoir un code compact sans réinitialiser les autres valeurs ?

Merci pour votre aide.

Bonjour,

c'est normal:

Wire.beginTransmission(DS1307_ADDRESS); 
Wire.write(byte(0));
Wire.write(decToBcd(secondes));
// Autres lignes supprimées.

Wire.write(byte(0));          //cette ligne écrit  0 dans le 2°registre, celui des mn
Wire.endTransmission();

supprime la...

un exemple de fonction qui modifie 1 seul registre de la RTC:

void setJourSem()
{ 
  byte jourSem =3; //0-6        0=lundi 6=dimanche   ou 0=dimanche 6=samedi ....        
                                                  //      pour jourSem  le choix est libre 
  Wire.beginTransmission(0x68);
  Wire.write(0x03);      //adresse pour le pointeur du registre visé dans la RTC, ici le 4°registe de la RAM 
  Wire.write(decToBcd(jourSem));                  
  Wire.endTransmission();
 }

@papybricol

Merci pour la réponse.

Le principe (que j'avais oublié) Wire.write(0x03); me plaît bien !

Je n'avais pas supprimé la ligne Wire.write(byte(0)); . Je pensais que c'était une ligne obligatoire.