Module RTC

Bonjour
J'ai la pile du module RTC qui est sortie de sont logement en fonctionnement,
j'ai plus rien en affichage est ce réparable ou c'est foutu?
Merci

Il suffit de la remettre et de reprogrammer l'heure de ton module...

patoche76:
Bonjour
J'ai la pile du module RTC qui est sortie de sont logement en fonctionnement,
j'ai plus rien en affichage est ce réparable ou c'est foutu?
Merci

bonsoir
quel module RTC ?
mais si vraiment il n'y a eu que la pile de sauvegarde qui est sortie , ça ne devrait pas avoir causé de dommages.
tu remets la pile , tu reinjecte l'heure et ça ne devrait pas tirer à conséquences

bonsoir
Le module est un Tiny RTC I2C

je suis nul comment fait on pour réinjecte l'heure?

hello
trouvé sur le net il y a qq temps ( il est très bien fait, il teste l'ecriture et la lecture de la date et l'ecriture et la lecture en zone eeprom). merci a son auteur "bricoleau"
regarde ce code et exécutes le après avoir mis la date et l'heure en ligne 242
puis moniteur en 9600 bauds

//*********************************************************************
//Bricoleau
//*********************************************************************

#include <Wire.h> 
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void I2C_init()
{
    Wire.begin();
}

uint8_t I2C_ping_composant(uint8_t id_composant)

{
  Wire.beginTransmission(id_composant);
  return Wire.endTransmission();
}

void I2C_lecture(uint8_t id_composant, uint8_t nb_octets, uint8_t buffer[])
{
  uint8_t i;

  Wire.requestFrom(id_composant, nb_octets);
  for(i=0; i<nb_octets; i++) {
    if (Wire.available()) buffer[i]=Wire.read();
  }
}

void I2C_ecriture(uint8_t id_composant, uint8_t nb_octets, uint8_t buffer[])
{
  uint8_t i;
  Wire.beginTransmission(id_composant);
  for(i=0; i<nb_octets; i++) {
    Wire.write(buffer[i]);
  }
  Wire.endTransmission();
}

void I2C_ecriture_2paquets(uint8_t id_composant, uint8_t nb_octets1, uint8_t buffer1[], uint8_t nb_octets2, uint8_t buffer2[])
{
  uint8_t i;
  Wire.beginTransmission(id_composant);
  for(i=0; i<nb_octets1; i++) {
    Wire.write(buffer1[i]);
  }
  for(i=0; i<nb_octets2; i++) {
    Wire.write(buffer2[i]);
  }
  Wire.endTransmission();
}

#define DS1307_ID B1101000

uint8_t DS1307_ping()
{
  return I2C_ping_composant(DS1307_ID);
}

void DS1307_lecture(uint8_t adresse, uint8_t nb_octets, uint8_t buffer[])
{
  uint8_t buffer_adresse[1];

  buffer_adresse[0] = adresse;
  I2C_ecriture(DS1307_ID, 1, buffer_adresse);
  I2C_lecture(DS1307_ID, nb_octets, buffer);
}

void DS1307_ecriture(uint8_t adresse, uint8_t nb_octets, uint8_t buffer[])
{
  uint8_t buffer_adresse[1];

  buffer_adresse[0] = adresse;
  I2C_ecriture_2paquets(DS1307_ID, 1, buffer_adresse, nb_octets, buffer);
}

void DS1307_init_horloge()
{
  uint8_t I2C_buffer[1];

  DS1307_lecture(0,1,I2C_buffer);
  if (I2C_buffer[0] > 127) {
    I2C_buffer[0] = I2C_buffer[0] & 127;
    DS1307_ecriture(0,1,I2C_buffer);
  }
}

void DS1307_lecture_horloge(uint8_t *annee, uint8_t *mois, uint8_t *jour, uint8_t *joursem, uint8_t *heure, uint8_t *minute, uint8_t *seconde)
{
  uint8_t I2C_buffer[7];

   DS1307_lecture(0, 7, I2C_buffer);
  *seconde =(10*((I2C_buffer[0]&B01110000)>>4))+(I2C_buffer[0]&B1111);
  *minute  =(10*((I2C_buffer[1]&B01110000)>>4))+(I2C_buffer[1]&B1111);
  *heure   =(10*((I2C_buffer[2]&B00110000)>>4))+(I2C_buffer[2]&B1111);
  *joursem =      I2C_buffer[3]&B00000111;
  *jour    =(10*((I2C_buffer[4]&B00110000)>>4))+(I2C_buffer[4]&B1111);
  *mois    =(10*((I2C_buffer[5]&B00110000)>>4))+(I2C_buffer[5]&B1111);
  *annee   =(10*((I2C_buffer[6]&B11110000)>>4))+(I2C_buffer[6]&B1111);
}

void DS1307_ecriture_horloge(uint8_t annee, uint8_t mois, uint8_t jour, uint8_t joursem, uint8_t heure, uint8_t minute, uint8_t seconde)
{
  uint8_t I2C_buffer[7];

    I2C_buffer[0] = (((seconde / 10) & B0111) << 4) + (seconde % 10);
  I2C_buffer[1] = (((minute  / 10) & B0111) << 4) + (minute  % 10);
  I2C_buffer[2] = (((heure   / 10) & B0011) << 4) + (heure   % 10);
  I2C_buffer[3] =    joursem       & B0111;
  I2C_buffer[4] = (((jour    / 10) & B0011) << 4) + (jour    % 10);
  I2C_buffer[5] = (((mois    / 10) & B0001) << 4) + (mois    % 10);
  I2C_buffer[6] = (((annee   / 10) & B1111) << 4) + (annee   % 10);
  DS1307_ecriture(0, 7, I2C_buffer);
}

#define AT24C32_ID B01010000

uint8_t AT24C32_ping()

{
  return I2C_ping_composant(AT24C32_ID);
}

void AT24C32_lecture(uint16_t adresse, uint8_t nb_octets, uint8_t buffer[])
{
  uint8_t buffer_adresse[2];

  buffer_adresse[0] = adresse >> 8;  //adresse MSB
  buffer_adresse[1] = adresse & 255; //adresse LSB
  I2C_ecriture(AT24C32_ID, 2, buffer_adresse);
  I2C_lecture(AT24C32_ID, nb_octets, buffer);
}

void AT24C32_ecriture(uint8_t adresse, uint8_t nb_octets, uint8_t buffer[])

{
  uint8_t buffer_adresse[2];

  buffer_adresse[0] = adresse >> 8;  //adresse MSB
  buffer_adresse[1] = adresse & 255; //adresse LSB
  I2C_ecriture_2paquets(AT24C32_ID, 2, buffer_adresse, nb_octets, buffer);
  delay(10);  // d'après Twr du datasheet AT24C32 : le laisser finaliser l'écriture
}


void Test_DS1307()
{
  uint8_t a,m,j,js,hh,mm,ss, i, buffer[1];

  Serial.println("Test du circuit RTC DS1307...");
  if (DS1307_ping()) {
    Serial.println("Non trouve !");
    Serial.print("Verifier la signification du code retour ");
    Serial.println(DS1307_ping());
    Serial.println("http://arduino.cc/en/Reference/WireEndTransmission");
    return;
  }
  Serial.println("Present !");

  DS1307_init_horloge();

  for (i=0;i<20;i++)
  {
    Serial.print("Lecture horloge : ");
    DS1307_lecture_horloge(&a,&m,&j,&js,&hh,&mm,&ss);
    switch (js)
    {
      case 1 : Serial.print("lundi ");break;
      case 2 : Serial.print("mardi ");break;
      case 3 : Serial.print("mercredi ");break;
      case 4 : Serial.print("jeudi ");break;
      case 5 : Serial.print("vendredi ");break;
      case 6 : Serial.print("samedi ");break;
      case 7 : Serial.print("dimanche ");break;
    }
    if (j<10) Serial.print('0');
    Serial.print(j);
    Serial.print('/');
    if (m<10) Serial.print('0');
    Serial.print(m);
    Serial.print("/20");
    if (a<10) Serial.print('0');
    Serial.print(a);
    Serial.print(' ');
    if (hh<10) Serial.print('0');
    Serial.print(hh);
    Serial.print(':');
    if (mm<10) Serial.print('0');
    Serial.print(mm);
    Serial.print(':');
    if (ss<10) Serial.print('0');
    Serial.println(ss);
    delay(1000);
    //le if suivant est à commenter (//)une fois l'horloge initialisée
    if (i==9) {
       Serial.println("Ecriture horloge : mardi 7/07/2015 15:22:00");
       //année:15,mois:7,jour:07, jour semaine:1, heure, minutezs, secondes
       DS1307_ecriture_horloge(15,7,7,2,22,27,00);
       delay(1000);
    }
  }

  for (i=0;i<3;i++) {
    Serial.print("Lecture NVRAM adresse 10 : ");
    DS1307_lecture(10,1,buffer);
    Serial.println(buffer[0]);
    if (buffer[0] == 67) {
      buffer[0] = 116;
    } else {
      buffer[0] = 67;
    }
    Serial.print("Ecriture NVRAM adresse 10 : ");
    Serial.println(buffer[0]);
    DS1307_ecriture(10,1,buffer);
  }

}

void Test_AT24C32()
{
  uint8_t i, buffer[1];

  Serial.println("Test du circuit EEPROM AT24C32...");
  if (AT24C32_ping()) {
    Serial.println("Non trouve !");
    Serial.print("Verifier la signification du code retour ");
    Serial.println(AT24C32_ping());
    Serial.println("http://arduino.cc/en/Reference/WireEndTransmission");
    return;
  }
  Serial.println("Present !");


  for (i=0;i<3;i++) {
    Serial.print("Lecture EEPROM adresse 10 : ");
    DS1307_lecture(10,1,buffer);
    Serial.println(buffer[0]);
    if (buffer[0] == 67) {
      buffer[0] = 116;
    } else {
      buffer[0] = 67;
    }
    Serial.print("Ecriture EEPROM adresse 10 : ");
    Serial.println(buffer[0]);
    DS1307_ecriture(10,1,buffer);
  }
}

void setup()
{
  Serial.begin(9600); //on n'est pas pressé
  delay(5000); //...le temps d'ouvrir le moniteur série
  Serial.println("Programme de test de circuit TinyRTC");
  I2C_init();
  Test_DS1307();
  Serial.println();
  Test_AT24C32();
  Serial.println();
  Serial.println("Fin de test. Effectuer une mise hors tension et recommencer pour verifier la stabilite des valeurs");
}

void loop()
{
  delay(1000);
}

Mince alors, je ne me souvenais pas avoir posté ce truc quelque part.
;D

Mais y a pas de doute, je reconnais le style, même si c'est celui de mes premiers pas sur arduino.

Content de voir que ça a servi à d'autres

Merci
Mais il est mort il m'affiche des rectangle blanc
merci

patoche76:
Merci
Mais il est mort il m'affiche des rectangle blanc

Ce n'est pas sur l'ecran lcd qu'il faut regarder, mais sur le terminal serie.

En fait il est tout pourri le programme à dfgh :smiling_imp:
Il appelle la librairie LiquidCrystal pour ensuite ne pas l'utiliser.

Bonjour Patoche

Cela me chagrine d'avoir lu à plusieurs reprises des "je suis nul" dans tes posts.

Une personne nulle, cela n'existe pas.
Il n'y a que des débutants, qui n'ont pas encore les connaissances et l'expérience nécessaires à la maîtrise d'un arduino.

Et justement, un arduino est le terrain de jeu idéal pour apprendre, même en partant de zéro.
Les seules choses dont un débutant à besoin pour progresser, c'est l'envie de faire, et du temps à y consacrer.

Personnellement, je recommande de commencer par là :
arduino-pour-bien-commencer-en-electronique-et-en-programmation.pdf

Attention : pour apprendre véritablement, il ne faut pas se contenter de tout survoler rapidement.
Il convient de prendre le temps de lire chaque chapitre, effectuer les montages et exercices proposés, en partant des plus simples. Cela peut prendre des semaines.

Cela permet de progresser étape par étape, et justement de sentir que l'on progresse, ce qui est très important pour la satisfaction que l'on en retire, et l'envie de pousser le bouchon plus loin.

Dans cette démarche, un débutant trouvera toujours ici une aide sur les problèmes rencontrés.

Si tu veux te lancer, tu peux compter sur mon assistance.
a+

post #5

puis moniteur en 9600 bauds

la lib LCD c'est parce que je me suis fait une version sur lcd.

j'ai du également virer tous les commentaires pour sortir de l'interdiction du prg supérieur à 9000 caractères.
@Bricoleau
mais oui ton prg m'a été bien utile :slight_smile:

Bonjour
La ligne 242 correspond a buffer[0] = 67;
je fais quoi?
merci

ET merci pour tes encouragement Bricoleau j'ai touché a l’électronique il y a au bien longtemps je fessais
mes circuits imprimé moi même avec des transfères mais la programmation c'est tout nouveau pour moi il y a
pas d'age pour si mettre.

J'ai trouvé mon RTC fonctionne sans pile de sauvegarde sa pose un problème ?

il va perdre la date et l'heure à chaque mise hors tension

la modif est à faire là
if (i==9) {
Serial.println("Ecriture horloge : mardi 7/07/2015 15:22:00");
//année:15,mois:7,jour:07, jour semaine:1, heure, minutes, secondes
DS1307_ecriture_horloge(15,7,7,2,22,27,00);

Ok merci c'est fais sa fonctionne mais si je remet la pile sa plante le système.

Bonjour

Ce que tu décris est trop vague pour qu'on puisse t'aider.
"Ca plante le système", ça veut dire quoi exactement ?

Décris tes symptômes, ton montage, et mets nous le source exact chargé dans l'arduino = un copier/coller de ton code en entier, entre une balise [code] et une balise [/code].

+1
Et j'ajoute qu'une pile épuisée peut faire planter en imposant une tension trop faible (il y a du vécu sur le sujet).

Bonjour
Sans pile le programme fonctionne bien mais des que j'inserts la pile mon afficheur 16x2 me met des rectangles sur la première ligne .
Je vous met le programme.

#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

RTC_DS1307 RTC;
int potPin = 3;
float temperature = 0;

void setup () {
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();
    lcd.begin(16, 2);
    // lcd.print("*cheaphousetek*");
    
    // following line sets the RTC to the date & time this sketch was compiled
    // RTC.adjust(DateTime(__DATE__, __TIME__));
}

void printTenths(long value) {
  // prints a value of 123 as 12.3
  Serial.print(value / 10);
  Serial.print('.');
  Serial.print(value % 10);
  Serial.println();
  lcd.setCursor(10, 1);
  lcd.print(value / 10);
  lcd.setCursor(12, 1);
  lcd.print('.');
  lcd.setCursor(13, 1);
  lcd.print(value % 10);
}

void loop () {
    DateTime now = RTC.now();
    int span = 10;
    long aRead = 0;
    unsigned long tmp;
    





    
    tmp = now.hour();
    if (now.hour() < 10) {
      Serial.print('0');
      Serial.print(now.hour(), DEC);
      lcd.setCursor(0, 1);
      lcd.print('0');
      lcd.setCursor(1, 1);
      lcd.print(tmp);
    }
    else {
      Serial.print(now.hour(), DEC);
      lcd.setCursor(0, 1);
      lcd.print(tmp);
    }
    Serial.print(':');
    lcd.setCursor(2, 1);
    lcd.print(':');
    
    tmp = now.minute();
    if (now.minute() < 10) {
      Serial.print('0');
      Serial.print(now.minute(), DEC);
      lcd.setCursor(3, 1);
      lcd.print('0');
      lcd.setCursor(4, 1);
      lcd.print(tmp);
    }
    else {
      Serial.print(now.minute(), DEC);
      lcd.setCursor(3, 1);
      lcd.print(tmp);
    }
    Serial.print(':');
    lcd.setCursor(5, 1);
    lcd.print(':');
    
    tmp = now.second();
    if (now.second() < 10) {
      Serial.print('0');
      Serial.print(now.second(), DEC);
      lcd.setCursor(6, 1);
      lcd.print('0');
      lcd.setCursor(7, 1);
      lcd.print(tmp);
    }
    else {
      Serial.print(now.second(), DEC);
      lcd.setCursor(6, 1);
      lcd.print(tmp);
    }
    Serial.print (' ');
    lcd.setCursor(8, 1);
    lcd.print(' ');
    // Serial.println();
    
    for (int i=0;i<span;i++) {
      aRead = aRead + analogRead(potPin);
      // Serial.print(aRead);
      // Serial.print(' ');
    }
    // aRead = aRead / span;
    temperature = (aRead / span * 500.0 / 1024.0);
    // Serial.print(aRead);
    // Serial.print(' ');
    // Serial.print(temperature);
    // Serial.print(' ');
    printTenths(long (temperature * 10));
    lcd.setCursor(14, 1);
    lcd.print(char(223));
    lcd.setCursor(15, 1);
    lcd.print('C');
        
    delay(968);
    
    // Serial.print(" since 2000 = ");
    // Serial.print(now.get());
    // Serial.print("s = ");
    // Serial.print(now.get() / 86400L);
    // Serial.println("d");
    
    // calculate a date which is 7 days and 30 seconds into the future
    // DateTime future (now.get() + 7 * 86400L + 30);
    
    // Serial.print(" now + 7d + 30s: ");
    // Serial.print(future.year(), DEC);
    // Serial.print('/');
    // Serial.print(future.month(), DEC);
    // Serial.print('/');
    // Serial.print(future.day(), DEC);
    // Serial.print(' ');
    // Serial.print(future.hour(), DEC);
    // Serial.print(':');
    // Serial.print(future.minute(), DEC);
    // Serial.print(':');
    // Serial.print(future.second(), DEC);
    // Serial.println();
    
    // Serial.println();
    // delay(3000);
}

et j'ai essayé une pile neuve aussi.