Outils pour utilisateurs

Outils du site


tdcom2

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
tdcom2 [2018/02/17 14:11]
bvandepo
tdcom2 [2020/05/28 17:32] (Version actuelle)
bvandepo
Ligne 1: Ligne 1:
-===== TD Bus de communication : Utilisation du bus Série synchrone I2C sur Arduino ===== 
  
-cours bus de com {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​cours_bus_terrain_livret_portrait.pdf}} 
  
-Documentations pour le TD: {{http://​homepages.laas.fr/​bvandepo/​files/​comm/​datasheet/PCF8574_TD.pdf}}+===== TD/TP Bus de communication ​Utilisation du bus Série synchrone I2C sur Arduino ===== 
 + 
 +cours bus de com {{http://​homepages.laas.fr/​bvandepo/​files/​iut/cours_bus_terrain_livret_portrait.pdf}}
  
  
  
 Complément d'​informations sur le bus I2C: http://​i2c.info/​i2c-bus-specification Complément d'​informations sur le bus I2C: http://​i2c.info/​i2c-bus-specification
 +
 +Comparaison entre le bus I2C et le SMBUS: https://​www.maximintegrated.com/​en/​app-notes/​index.mvp/​id/​476 ​ et  https://​www.totalphase.com/​support/​articles/​200349186-Differences-between-I2C-and-SMBus
 === Objectifs === === Objectifs ===
   * Utilisation de la maquette Arduino   * Utilisation de la maquette Arduino
Ligne 15: Ligne 17:
  
  
-==== Carte d'​extension pour le TD ===+==== Carte d'​extension pour le TD/TP ===
  
 {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​td2_capt//​CARTECOM.png}} {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​td2_capt//​CARTECOM.png}}
Ligne 34: Ligne 36:
  
  
-La carte d'​extension utilisée pour ce TP permet de connecter plusieurs périphériques à l'​Arduino. Elle dispose: ​+La carte d'​extension utilisée pour ce TD/TP permet de connecter plusieurs périphériques à l'​Arduino. Elle dispose: ​
   - de deux port E/S sur bus I2C dont un est piloté par des interrupteurs et l'​autre pilote des leds. Le composant utilisé est un circuit PCF 8574A, dont la documentation est à l'​adresse:​ http://​www.farnell.com/​datasheets/​1846877.pdf. L'​adresse de chacun de ces composants est en partie configurable via 3 cavaliers dont la fermeture revient à imposer un 0 logique sur le bit correspondant.   - de deux port E/S sur bus I2C dont un est piloté par des interrupteurs et l'​autre pilote des leds. Le composant utilisé est un circuit PCF 8574A, dont la documentation est à l'​adresse:​ http://​www.farnell.com/​datasheets/​1846877.pdf. L'​adresse de chacun de ces composants est en partie configurable via 3 cavaliers dont la fermeture revient à imposer un 0 logique sur le bit correspondant.
-  - d'une EEPROM SPI  AT25040 (documentation:​ http://​www.atmel.com/​images/​doc3348.pdf )+  - d'une EEPROM SPI  AT25040 (documentation:​ http://​www.atmel.com/​images/​doc3348.pdf ) qui sera utilisée dans un prochain TP concernant le bus SPI: http://​homepages.laas.fr/​bvandepo/​wiki/​doku.php?​id=tdethindus1
   - d'une led infrarouge pour assurer la fonction de télécommande   - d'une led infrarouge pour assurer la fonction de télécommande
-  - d'un module amovible assurant la fonction de RTC via le composant DS1307 (documentation:​ http://​datasheets.maximintegrated.com/​en/​ds/​DS1307.pdf ) et EEPROM I2C AT24C32N (documentation:​ http://​www.atmel.com/​images/​doc0336.pdf ). Une sonde de températeur DS18B20 sur bus OneWire est également présente (documentation:​ http://​datasheets.maximintegrated.com/​en/​ds/​DS18B20.pdf )+  - d'un module amovible assurant la fonction de RTC via le composant DS1307 (documentation:​ http://​datasheets.maximintegrated.com/​en/​ds/​DS1307.pdf ) et EEPROM I2C AT24C32N (documentation:​ http://​www.atmel.com/​images/​doc0336.pdf ). Une sonde de températeur DS18B20 sur bus OneWire est également présente (documentation:​ http://​datasheets.maximintegrated.com/​en/​ds/​DS18B20.pdf ) et sera utilisée dans un prochain TP concernant le bus OneWire: http://​homepages.laas.fr/​bvandepo/​wiki/​doku.php?​id=tp_one_wire 
 + 
 + 
 +===== Partie TD===== 
 +====Généralités sur le Bus I2C==== 
 +  - Quels sont les niveaux électriques possibles sur un bus i2c ? 
 +  - Dans quels états peut se trouver une broche (par exemple SDA) d'un composant i2c ? 
 +  - Quels composants discrets doivent être connectés au bus i2c pour assurer son fonctionnement ? 
 +  - Combien d'​esclaves maximum peuvent être théoriquement connectés sur un bus I2c pour pouvoir les adresser tous individuellement?​ 
 +  - Le bus i2C est-il half-duplex ou full-duplex ? justifier votre réponse. 
 + 
 +La documentation de la librairie Arduino permettant d'​utiliser l'​interface I2C est accessible à l'​adresse:​ https://​www.arduino.cc/​en/​reference/​wire . Lire les descriptions des fonctions suivantes: **begin()**,​ **requestFrom()**,​ **beginTransmission()**,​ **endTransmission()**,​ **write()**,​ **available()**,​ **read()**, **SetClock()** 
 + 
 + 
 +====Composant PCF8574(A)==== 
 +Dans un premier temps, lire la documentation suivante: {{http://​homepages.laas.fr/​bvandepo/​files/​comm/​datasheet/​PCF8574_TD.pdf}} 
 + 
 +Pour les questions suivantes, on considère les prototypes de fonctions suivants: 
 +<file cpp prototypes.cpp>​ 
 +  char writePort8574(char addr, char value); 
 +    // addr, l'​adresse du PCF8574 sur 7 bits 
 +    // value, la valeur à écrire sur le port 
 +    // retourne -1 si échec 0 sinon 
 + 
 +  char readPort8574(char addr, char * ptr_value);​ 
 +    // addr, l'​adresse du PCF8574 sur 7 bits 
 +    // ptr_value, pointeur pour renvoyer la valeur lue sur le port 
 +   // retourne -1 si échec 0 sinon 
 +</​file>​ 
 + 
 + 
 +  - Quel est le rôle de ce composant?​ 
 +  - Quel est le rôle des brôches A2, A1 et A0?  
 +  - Quelle différence existe-t-il entre les références PCF8574 et PCF8574A et pourquoi le constructeur a-t-il fait ces deux références?​ Quelle est la plage d'​adresses I2C utilisables pour la référence de composant ​ PCF8574A? Dans la suite, des composants PCF8574A seront considérés. 
 +  - Décrire l'​algorithme de la fonction **readPort8574(...)** en indiquant ce qu'​elle fait en français (phase d'​adressage,​ d'​échange des données etc...). 
 +  - Implémenter en C++ la fonction **readPort8574(...)** en utilisant les fonctions de la librairie **Wire**. 
 +  - Tracer le chronogramme des signaux SDA et SCL si l’on appelle **readPort8574(0x2,&​val)**. Indiquer quelle est la valeur retournée par la fonction. 
 +  - Tracer le chronogramme des signaux SDA et SCL si l’on appelle **readPort8574(0x38,&​val)** et que les valeurs de A2-0=000 et les entrées du 8574A sont à 0x27. Indiquer quelle est la valeur retournée par la fonction. 
 +  - Décrire la fonction **writePort8574(...)** en indiquant ce qu'​elle fait en français (phase d'​adressage,​ d'​échange des données etc...). 
 +  - Implémenter en C++ la fonction **writePort8574(...)** en utilisant les fonctions de la librairie **Wire**. 
 +  - Tracer le chronogramme des signaux SDA et SCL si l’on appelle **writePort8574(0x39,​0x82)** et que les valeurs de A2-0=001. Indiquer quelle est la valeur retournée par la fonction. 
 +  - Décrire un programme permettant de lire les entrées d'un PCF8574 dont les bits d'​adresse sont reliés à 0 et de recopier cette valeur sur un PCF8574A dont les bits d'​adresse forment la valeur 3. 
 + 
 + 
 +====Composant DS13072==== 
 +Dans un premier temps, lire la documentation suivante: {{http://​homepages.laas.fr/​bvandepo/​files/​comm/​datasheet/​DS1307.pdf}} 
 + 
 + 
 +Pour les questions suivantes, on considère les prototypes de fonctions suivants: 
 +<file cpp prototypes.cpp>​ 
 +  char writeRegRTC(char I2Caddr, char Regaddr, char value) 
 +    // I2Caddr, l'​adresse du DS13072 sur le bus sur 7 bits 
 +    // Regaddr, l'​adresse du registre du DS13072 à écrire 
 +    // value,la valeur à écrire dans le registre 
 +    // retourne -1 si échec 0 sinon 
 + 
 +  char readRegRTC(char I2Caddr, char Regaddr, char * ptr_value) 
 +    // I2Caddr, l'​adresse du DS13072 sur le bus sur 7 bits 
 +    // Regaddr, l'​adresse du registre du DS13072 à lire 
 +    // ptr_value, pointeur pour renvoyer la valeur lue dans le registre 
 +    // retourne -1 si échec 0 sinon 
 +</​file>​ 
 + 
 +  - Quel est le rôle de ce composant?​ 
 +  - Du point de vue de la communication,​ qu'est ce qui le différencie du PCF8574(A)?​ 
 +  - Le composant se comporte comme une série de compteurs mis en cascade. Dessiner la mise en cascade des compteurs de l'​unité de seconde jusqu'​à la dizaine d'​heure telle que réalisée dans le composant. Expliquer l'​intérêt de l'​utilisation de la base Binary Coded Decimal (Décimal Codé en Binaire) pour les valeurs de comptage. 
 +  - Décrire l'​algorithme de la fonction **writeRegRTC(...)** en indiquant ce qu'​elle fait en francais (phase d'​adressage,​ d'​échange des données etc...). 
 +  - Implémenter en C++ la fonction **writeRegRTC(...)** en utilisant les fonctions de la librairie **Wire**. 
 +  - Tracer le chronogramme des signaux SDA et SCL si l’on appelle **writeRegRTC(0x68,​0x2,​0x52)**. Indiquer quelle est la valeur retournée par la fonction. 
 +  - Décrire l'​algorithme de la fonction **readRegRTC(...)** en indiquant ce qu'​elle fait en francais (phase d'​adressage,​ d'​échange des données etc...). 
 +  - Implémenter en C++ la fonction **readRegRTC(...)** en utilisant les fonctions de la librairie **Wire**. 
 +  - Tracer le chronogramme des signaux SDA et SCL si l’on appelle **readRegRTC(0x68,​0x1,&​val)** et que la valeur lue est 0x21. Indiquer quelle est la valeur retournée par la fonction. 
 +  - Proposer un schéma de câblage pour un montage connectant la plateforme Arduino à une RTC DS13072 et deux expander de ports I2C PCF8574. 
 + 
 +===== Partie TP=====
  
    
Ligne 130: Ligne 206:
 {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​td2_capt/​scanI2C.png}} {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​td2_capt/​scanI2C.png}}
  
-{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Débrancher et rebrancher le module amovible RTC et interpréter le résultat. En déduire l'​adresse de tous les composants que vous allez utiliser.+{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Débrancher et rebrancher le module amovible RTC et interpréter le résultat. Jouez sur les cavaliers permettant de configurer l'​adresse matérielle des 8574. En déduire l'​adresse de tous les composants que vous allez utiliser.
  
  
Ligne 352: Ligne 428:
 </​ifauth>​ </​ifauth>​
  
-===== Exercice 3 : Utilisation de la RTC ===== 
-{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} ​ Compléter le sketch suivant pour activer la broche SQW/OUT successivement à 1 et à 0 en changeant toutes les secondes dans la fonction loop. Pour cela implémenter la fonctions writeRegI2C. 
  
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} ​ Observer les signaux SDA et SCL à l'​oscilloscope. Déterminer la fréquence d'​horloge utilisée pour le signal SCL. Repérer les phases d'​adressage et d'​échange des données et vérifier la valeur du bit d’acquittement lorsque l'​adresse utilisée est correcte et lorsqu'​elle est incorrecte.
 +
 +
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} ​ Appeler la fonction Wire.setClock() (  https://​www.arduino.cc/​en/​Reference/​WireSetClock ) dans setup() pour configurer l'​horloge I2C à une fréquence de 400KHz et vérifier les signaux à l'​oscilloscope. Comparer avec la fréquence d'​horloge maximum autorisée pour le PCF8574 et conclure.
 +
 +  ​
 +
 +===== Exercice 3 : Utilisation de la RTC =====
  
 <file cpp i2c_DS13072.ino>​ <file cpp i2c_DS13072.ino>​
Ligne 443: Ligne 525:
 } }
 //////////////////////////////////////////​ //////////////////////////////////////////​
- </​file> ​      ​+ </​file> ​   
 +     
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} ​ Compléter le sketch précédent pour activer la broche SQW/OUT successivement à 1 et à 0 en changeant toutes les secondes dans la fonction loop. Pour cela implémenter la fonctions writeRegI2C. 
  
  
Ligne 680: Ligne 765:
 </​file>​ </​file>​
 </​ifauth>​ </​ifauth>​
 +
 +
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} ​ Consulter la documentation du composant DS1337 ( https://​datasheets.maximintegrated.com/​en/​ds/​DS1337-DS1337C.pdf ​ )  pour comprendre la fonction supplémentaire qu'il propose par rapport au DS1307 et proposer un moyen d'​exploiter cette fonctionnalité. Faire valider à l'​enseignant votre proposition. ​
 +
 +
 +
  
 ===== Exercice 4 : Utilisation de l' EEPROM I2C AT24C32===== ===== Exercice 4 : Utilisation de l' EEPROM I2C AT24C32=====
Ligne 721: Ligne 812:
 } }
 //////////////////////////////////////////​ //////////////////////////////////////////​
 +</​file>​
 +
 +
 +===Gestion écriture avec timeout===
 +
 +<file cpp timeout.cpp>​
 +
 +void ecrEeprom(int addr,byte val){
 +  unsigned long  timeout;
 + 
 +  timeout=millis();​
 +   bool fini=false;
 +  while (!fini){
 +    if(writeRegEEPROM(0x50,​ addr, val) == 0)
 +      fini =true;
 +    else if (millis()>​=timeout+6)
 +      {
 +      Serial.println("​Problème écriture"​);​
 +      fini =true;
 +      }
 +    else
 +      Serial.println("​."​);​
 +      ​
 +  }
 +}
 +
 </​file>​ </​file>​
  
tdcom2.1518873081.txt.gz · Dernière modification: 2018/02/17 14:11 par bvandepo