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

Help with codes to add 1 more shift register and add more to matrix LED

tcp client

Is there an HTML component in Flex 2.0?