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/13 11:26]
bvandepo [Carte d'extension pour le TD]
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 =====+===== 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}} 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}} 
  
  
Ligne 19: 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 38: 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 ) qui sera utilisée dans un prochain TP concernant le bus SPI: http://​homepages.laas.fr/​bvandepo/​wiki/​doku.php?​id=tdethindus1   - 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 ) et sera utilisée dans un prochain TP concernant le bus OneWire: http://​homepages.laas.fr/​bvandepo/​wiki/​doku.php?​id=tp_one_wire   - 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 365: 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 455: 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. 
  
  
tdcom2.1550053592.txt.gz · Dernière modification: 2019/02/13 11:26 par bvandepo