Outils pour utilisateurs

Outils du site


tp_one_wire

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
tp_one_wire [2018/03/07 11:24]
bvandepo [Plusieurs esclaves sur le bus]
tp_one_wire [2019/03/19 11:13] (Version actuelle)
bvandepo
Ligne 14: Ligne 14:
  
   * Implémenter les fonctions bas niveau pour la communication sur le bus OneWire   * Implémenter les fonctions bas niveau pour la communication sur le bus OneWire
-  * Implémenter les fontions ​match_rom et read_rom du protocole OneWire+  * Implémenter les fonctions ​match_rom et read_rom du protocole OneWire
   * Lire une sonde de température OneWire et afficher la mesure   * Lire une sonde de température OneWire et afficher la mesure
  
Ligne 22: Ligne 22:
  
  
-Le bus One-Wire ​est un bus série asynchrone utilisant la largeur d'​impulsion pour représenter les symboles:+Le bus OneWire ​est un bus série asynchrone utilisant la largeur d'​impulsion pour représenter les symboles:
  
 [[http://​en.wikipedia.org/​wiki/​1-Wire]] [[http://​en.wikipedia.org/​wiki/​1-Wire]]
Ligne 295: Ligne 295:
 Tester vos fonctions avec un programme principal qui éxecute en boucle: Tester vos fonctions avec un programme principal qui éxecute en boucle:
   -réinitialiser le bus OneWire   -réinitialiser le bus OneWire
-  -écrire deux bits à 1 sur le bus +  ​-Si un composant a répondu au reset sur le bus: 
-  -écrire un bit à 0 +    ​-écrire deux bits à 1 sur le bus 
-  -lire 3 bits+    -écrire un bit à 0 
 +    -lire 3 bits
   -attendre 100ms    -attendre 100ms 
 Vérifier à l'​oscilloscope les signaux générés, le module DS18B20 étant successivement branché et débranché. Interpréter les résultats. Vérifier à l'​oscilloscope les signaux générés, le module DS18B20 étant successivement branché et débranché. Interpréter les résultats.
Ligne 315: Ligne 316:
 ===== Mise en oeuvre des fonctions de contrôle du bus One-Wire ===== ===== Mise en oeuvre des fonctions de contrôle du bus One-Wire =====
  
-Une fois les fonctions de base mises en place, nous allons pouvoir communiquer avec le composant DS18B20. Les composants sur le bus OneWire sont identifiés par un rom-code de 64-bit unique utilisé en tant qu'​adresse MAC (deux DS18B20 ont un rom code différents). Ce rom-code doit être spécifié pour la plupart des transactions sur le bus.+Une fois les fonctions de base mises en place, nous allons pouvoir communiquer avec le composant DS18B20. Les composants sur le bus OneWire sont identifiés par un ROM-code de 64-bit unique utilisé en tant qu'​adresse MAC (deux DS18B20 ont des ROM-codes ​différents). Ce ROM-code doit être spécifié pour la plupart des transactions sur le bus.
  
-**Dans le cas d'un bus à plusieurs périphériques**,​ il est nécessaire d'​effectuer une recherche de tous les rom-codes présents sur le bus si ils ne sont pas connus à priori. Une recherche exhaustive prendrait trop de temps, et un algorithme dichotomique de recherche à travers un arbre binaire est mis en place tel que décrit dans :+**Dans le cas d'un bus à plusieurs périphériques**,​ il est nécessaire d'​effectuer une recherche de tous les ROM-codes présents sur le bus si ils ne sont pas connus à priori. Une recherche exhaustive prendrait trop de temps, et un algorithme dichotomique de recherche à travers un arbre binaire est mis en place tel que décrit dans :
 [[http://​www.maximintegrated.com/​en/​app-notes/​index.mvp/​id/​187]] [[http://​www.maximintegrated.com/​en/​app-notes/​index.mvp/​id/​187]]
  
-**Dans le cas d'un composant unique**; il est possible de lire ce rom-code à l'aide de la commande **read_rom**. C'est ce que nous ferons dans ce TP. A partir de la datasheet du DS18B20, compléter la fonction suivante:+**Dans le cas d'un composant unique**; il est possible de lire ce ROM-code à l'aide de la commande **read_rom**. C'est ce que nous ferons dans ce TP. A partir de la datasheet du DS18B20, compléter la fonction suivante:
  
   void read_rom_one_wire(unsigned char pin, unsigned char * rom );   void read_rom_one_wire(unsigned char pin, unsigned char * rom );
Ligne 326: Ligne 327:
 Cette fonction doit: Cette fonction doit:
   - Envoyer le code commande 0x33 sur le bus OneWire   - Envoyer le code commande 0x33 sur le bus OneWire
-  - Lire les 8 octets du code ROM et les stocke ​dans un tableau de 8 octets **rom**. Vous pourrez utiliser la fonction **void read_bytes_one_wire(unsigned char pin, unsigned char * buf, unsigned int count);** fournie. +  - Lire les 8 octets du ROM-code et les stocker ​dans un tableau de 8 octets **rom**. Vous pourrez utiliser la fonction **void read_bytes_one_wire(unsigned char pin, unsigned char * buf, unsigned int count);** fournie. 
-  - Afficher le code ROM sur la console (fourni)+  - Afficher le ROM-code sur la console (fourni)
  
 Modifier la fonction loop pour: Modifier la fonction loop pour:
Ligne 363: Ligne 364:
  
 ===== Contrôle de Redondance Cyclique ===== ===== Contrôle de Redondance Cyclique =====
-Nous souhaitons maintenant vérifier les données lues sur le bus (le rom code et le contenu de scratchpad). Pour cela le code de vérification de CRC suivant est fourni:+Nous souhaitons maintenant vérifier les données lues sur le bus (le ROM-code et le contenu de scratchpad). Pour cela le code de vérification de CRC suivant est fourni:
  
 <file cpp crc.ino> <file cpp crc.ino>
Ligne 419: Ligne 420:
  
 ====Plusieurs esclaves sur le bus==== ====Plusieurs esclaves sur le bus====
-Vous pouvez connecter plusieurs capteurs sur le même bus. Les adresses MAC (codes ROM) sont indiquées sur les capteurs donc il n'y a pas besoin de faire l'​énumération par recherche des adresses. Reportez ces codes ROM dans des variables globales telles que: +Vous pouvez connecter plusieurs capteurs sur le même bus. Les adresses MAC (ROM-codes) sont indiquées sur les capteurs donc il n'y a pas besoin de faire l'​énumération par recherche des adresses. Reportez ces ROM-code dans des variables globales telles que: 
-  unsigned char romSensor[8]={0,​0,​0,​0,​0,​0,​0,​0} ; //global variable: array to store the ROM Code of one sensor (its MAC Address)+  unsigned char romSensor[8]={0,​0,​0,​0,​0,​0,​0,​0} ; //global variable: array to store the ROM-Code of one sensor (its MAC Address)
  
 Adapter le programme pour permettre la lecture sur les différents capteurs. Les lectures de Scratchpad devront utiliser l'​adressage MAC en appelant la fonction ****float read_scratchpad_and_get_temperature(unsigned char pin, unsigned char * rom  )**. Eventuellement,​ la demande de conversion pourra être envoyée en diffusion. Adapter le programme pour permettre la lecture sur les différents capteurs. Les lectures de Scratchpad devront utiliser l'​adressage MAC en appelant la fonction ****float read_scratchpad_and_get_temperature(unsigned char pin, unsigned char * rom  )**. Eventuellement,​ la demande de conversion pourra être envoyée en diffusion.
Ligne 426: Ligne 427:
  
 ====Plusieurs bus==== ====Plusieurs bus====
-Vous pouvez connecter plusieurs capteurs sur des bus différents en utilisant des broches différentes. Toutes les fonction ​ayant été codées avec le numéro de la broche en paramètre, il suffit d'​appeler les fonctions plusieurs fois avec des numéros de broches différents. S'il y a un unique capteur par bus, il est possible d'​utiliser la diffusion.+Vous pouvez connecter plusieurs capteurs sur des bus différents en utilisant des broches différentes. Toutes les fonctions ​ayant été codées avec le numéro de la broche en paramètre, il suffit d'​appeler les fonctions plusieurs fois avec des numéros de broches différents. S'il y a un unique capteur par bus, il est possible d'​utiliser la diffusion.
  
 Vous ferez attention à ce que chaque bus OneWire dispose de sa propre résistance de tirage à l'​état haut, cette dernière n'​étant pas installée ni sur la sonde ni sur le module RTC. Vous ferez attention à ce que chaque bus OneWire dispose de sa propre résistance de tirage à l'​état haut, cette dernière n'​étant pas installée ni sur la sonde ni sur le module RTC.
tp_one_wire.1520418262.txt.gz · Dernière modification: 2018/03/07 11:24 par bvandepo