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 [2019/02/11 15:35]
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}}
  
  
Ligne 17: 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 36: 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 363: Ligne 437:
  
 ===== Exercice 3 : Utilisation de la RTC ===== ===== 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. 
- 
  
 <file cpp i2c_DS13072.ino>​ <file cpp i2c_DS13072.ino>​
Ligne 453: 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 699: Ligne 774:
 ===== Exercice 4 : Utilisation de l' EEPROM I2C AT24C32===== ===== Exercice 4 : Utilisation de l' EEPROM I2C AT24C32=====
 {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Modifier le sketch précédent pour lire et écrire des cases dans la mémoire AT24C32. La documentation de ce composant est disponible ici:  {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Modifier le sketch précédent pour lire et écrire des cases dans la mémoire AT24C32. La documentation de ce composant est disponible ici: 
-http://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​doc3348.pdf ou http://​pdf.datasheetcatalog.com/​datasheet/​atmel/​doc0336.pdf+http://​pdf.datasheetcatalog.com/​datasheet/​atmel/​doc0336.pdf
  
 ATTENTION, par rapport à l'​exercice précédent:​ ATTENTION, par rapport à l'​exercice précédent:​
tdcom2.1549895715.txt.gz · Dernière modification: 2019/02/11 15:35 par bvandepo