module DS1307, bibliothèque RTClib.h et port I2C


bonjour à tous,

je suis débutant et suis occupé à relire des projets que j'ai fait voici deux mois.
j'avais utilisé un  projet trouvé sur un blog (http://electroniqueamateur.blogspot.ca/2013/06/une-horloge-pour-votre-arduino-real.html).
en voici le code :
code: [select]
horloge arduino
 
 horloge simple avec un arduino, un module breakout
 rtc ds1307 et un afficheur lcd.
 
 branchements du breakout rtc ds1307:
 gnd --> gnd
 vcc --> 5 v
 sda --> analog pin a4
 scl --> analog pin a5
 
 branchements de l'afficheur lcd:
 lcd rs pin --> digital pin 12
 lcd enable pin  --> digital pin 11
 lcd d4 pin  --> digital pin 5
 lcd d5 pin  --> digital pin 4
 lcd d6 pin  --> digital pin 3
 lcd d7 pin  --> digital pin 2
 lcd r/w pin  --> ground
http://electroniqueamateur.blogspot.ca/2013/06/une-horloge-pour-votre-arduino-real.html
 
 ***************************************************/

#include <liquidcrystal.h>
#include <wire.h>
#include <rtclib.h>


rtc_ds1307 rtc;
liquidcrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  wire.begin();
  rtc.begin();
  lcd.begin(16, 2);
}

void loop() {
  datetime = rtc.now();
 
  // l'heure sur la premiêre ligne du lcd
  lcd.setcursor(0, 0);
  lcd.print(now.hour());
  lcd.print(":");
  if (now.minute() < 10) {
    lcd.print("0");
  }
  lcd.print(now.minute());
  lcd.print(":");
  if (now.second() < 10) {
    lcd.print("0");
  }
  lcd.print(now.second());
 
 
  // la date sur la deuxième ligne du lcd
  lcd.setcursor(0, 1);
  lcd.print(now.day());
  lcd.print(" ");

  switch (now.month()) {
  case 1:
    lcd.print("janvier");
    break;
  case 2:
    lcd.print("fevrier");
    break;
  case 3:
    lcd.print("mars");
    break;
  case 4:
    lcd.print("avril");
    break;
  case 5:
    lcd.print("mai");
    break;
  case 6:
    lcd.print("juin");
    break;
  case 7:
    lcd.print("juillet");
    break;
  case 8:
    lcd.print("aout");
    break;
  case 9:
    lcd.print("septembre");
    break;
  case 10:
    lcd.print("octobre");
    break;
  case 11:
    lcd.print("novembre");
    break;
  case 12:
    lcd.print("decembre");
    break;
  }
  lcd.print(" ");
  lcd.print(now.year());
  delay(1000);
  lcd.clear();
}

 
le module ds1307 est câblé sda/scl sur les broches a4 et a5.
or dans ce croquis, on ne définit nulle part l'adresse i2c du ds1307 (il en d'ailleurs 2  : 0x50 et 0x68).
je voulais brancher un deuxième périphérique i2c, l'afficheur lcd 16*2 i2c du numéro d'avril de elektor (0x27). d'où mon étonnement de ne pas trouver d'adresse pour le module.
et pourtant cela marche ????
pouvez-vous m'expliquer ?
je vous en remercie d'avance.

pour la rtc si vous regardez le .h de la librairie vous verrez
#define ds1307_address  0x68
c'est donc câblé en dur dans la librairie (de nombreuses adresses sont déjà attribuées par les fabricants). l'adresse i²c du module ds1307 est non modifiable. elle est codée en dur dans le module et elle est identique pour tous les modules ds1307.

la notion de 2 adresses pour le module est toute relative: l'octet d'adressage peut être scindé en deux parties:
les sept premiers bits correspondent à l'adresse proprement dite, le dernier bit est nommé r/w :
s'il est à 0, le maître signale qu'il va envoyer des octets, et donc que l'esclave doit les lire,
s'il est à 1, le maître indique qu'il veut recevoir des octets, et donc que l'esclave doit les fournir.
on peut également considérer que l'adresse est codée sur les 8 bits, chaque esclave alors deux adresses, l'adresse paire qui sert à lui envoyer des données, l'adresse impaire pour lui demander d'en envoyer.

c'est généralement pour cela que l'on parle de ses 2 adresses mais dans votre cas, l'autre adresse 0x50 est l'ic atmel correspondant à l'eeprom du module car votre rtc offre un peu de mémoire aussi

pour le second point - au vu de la déclaration de votre instance lcd, liquidcrystal lcd(12, 11, 5, 4, 3, 2); vous n'utilisez pas l'i2c mais le mode avec les 4 broches de données (d2 à d5) et 2 broches de commandes (rs=12et e=11)





Arduino Forum > International > Français (Moderators: jfs, Snootlab) > module DS1307, bibliothèque RTClib.h et port I2C


arduino

Comments

Popular posts from this blog

Flip address is out of range arduino uno r3

Arduino Uno not uploading

Indesign and MathType fonts