Outils pour utilisateurs

Outils du site


tpir

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
tpir [2016/06/24 10:34]
bvandepo
tpir [2021/03/14 11:11] (Version actuelle)
bvandepo
Ligne 1: Ligne 1:
-<===== TD Bus de communication : Communication infrarouge NEC  étendue =====+===== TD Bus de communication : Communication infrarouge NEC  étendue =====
  
-cours bus de com {{http://homepages.laas.fr/bvandepo/files/iut/cours_bus_terrain_livret_portrait.pdf}}+cours bus de com {{https://bvdp.inetdoc.net/files/iut/cours_bus_terrain_livret_portrait.pdf}}
  
 === Objectifs === === Objectifs ===
Ligne 30: Ligne 30:
 La trame complète contient: La trame complète contient:
   - un entête de trame   - un entête de trame
-  - une adresse sur 16 bits (codant le numéro de la télécommande), octet de poids fort d'abord et bit de poids faible d'abord (identifiant la télécommande)+  - une adresse sur 16 bits (codant le numéro de la télécommande), octet de poids fort d'abord et bit de poids faible d'abord 
   - une valeur sur 8 bits (codant le numéro de la touche), bit de poids faible d'abord   - une valeur sur 8 bits (codant le numéro de la touche), bit de poids faible d'abord
   - une valeur sur 8 bits codant le complément à 1 de la précédente valeur sur 8 bits (redondance pour la détection d'erreur)   - une valeur sur 8 bits codant le complément à 1 de la précédente valeur sur 8 bits (redondance pour la détection d'erreur)
Ligne 44: Ligne 44:
 ===Codage des bits=== ===Codage des bits===
 Les bits sont codés de la manière suivante:  Les bits sont codés de la manière suivante: 
-  - Le bit "1" est représenté par un train d'impulsion à 38Khz (avec rapport cyclique 50%) pendant 560us suivi par une inactivité pour une durée totale du bit de 2.25ms. +  - Le bit "1" est représenté par un train d'impulsion à 38Khz (avec rapport cyclique 50%) pendant 560us suivi par une inactivité. La durée totale du bit est de 2.25ms. 
-  - Le bit "0" est représenté par un train d'impulsion à 38Khz (avec rapport cyclique 50%) pendant 560us suivi par une inactivité pour une durée totale du bit de 1.12ms.+  - Le bit "0" est représenté par un train d'impulsion à 38Khz (avec rapport cyclique 50%) pendant 560us suivi par une inactivité. La durée totale du bit est de 1.12ms.
  
 Les entêtes de trames sont codés de la manière suivante:  Les entêtes de trames sont codés de la manière suivante: 
Ligne 51: Ligne 51:
   - La trame de répétition commence par un train d'impulsion à 38Khz (avec rapport cyclique 50%) pendant 9ms suivi par une inactivité de durée 2.25ms.   - La trame de répétition commence par un train d'impulsion à 38Khz (avec rapport cyclique 50%) pendant 9ms suivi par une inactivité de durée 2.25ms.
 ===Dessin des chronogrammes=== ===Dessin des chronogrammes===
-A faire sur papier quadrillé et à faire noter par l'enseignant:   +A faire sur papier et à faire noter par l'enseignant:   
-  - Dessiner l'allure des chronogrammes pour l'envoi d'une trame complète depuis la télécommande 0x1234 pour la touche 0x56. +  - Dessiner l'allure des chronogrammes pour l'envoi d'une trame complète depuis la télécommande 0x1234 pour la touche 0x56 en faisant apparaître la valeur des différents bits transmis et la correspondance avec les données à transmettre (adresse de A15 à A0, touche de B7 à B0).  
-  - Dessiner l'allure des chronogrammes pour l'envoi d'une trame de répétition depuis la télécommande 0x1234 pour la touche 0x56.+  - Dessiner l'allure des chronogrammes pour l'envoi d'une trame de répétition depuis la télécommande 0x1234 pour la touche 0x56 (attention au piège!).
  
- + 
 +{{https://bvdp.inetdoc.net/files/iut/tp_pic/validation.png}}
  
  
  
 ===Configuration du timer 2 pour la génération du signal modulé à 38Khz=== ===Configuration du timer 2 pour la génération du signal modulé à 38Khz===
-[[http://homepages.laas.fr/bvandepo/files/iut/Atmega328p_timer2.pdf]]+Consulter la documentation du timer 2 de l'ATMEGA328P: [[https://bvdp.inetdoc.net/files/iut/Atmega328p_timer2.pdf]]
  
 L'Atmega328 dispose de 4 timers : L'Atmega328 dispose de 4 timers :
Ligne 70: Ligne 71:
  
  
-A l'aide de la documentation, nous allons définir l'algorithme de configuration du timer 2 pour pouvoir générer un signal à 38Khz sur une broche du microcontrôleur sans solliciter le processeur. Le timer 2 peut piloter la broche 3 (numnérotation Arduino) du micro-contrôleur. Cette broche peut recopier l'état d'un signal OC0B, que l'on peut décider de commuter à intervalle de temps fixé. La recopie ou non de ce signal sur la broche permet de générer facilement le signal modulé à 38Khz.+A l'aide de la documentation, nous allons définir l'algorithme de configuration du timer 2 pour pouvoir générer un signal à 38Khz sur une broche du microcontrôleur sans solliciter le processeur. Le timer 2 peut piloter la broche 3 (numérotation Arduino) du micro-contrôleur. Cette broche peut recopier l'état d'un signal OC0B, que l'on peut décider de commuter à intervalle de temps fixé. La recopie ou non de ce signal sur la broche permet de générer facilement le signal modulé à 38Khz.
  
 Pour configurer le timer, les registres TCCR2A et TCCR2B doivent être réglés en "Normal port operation" Pour configurer le timer, les registres TCCR2A et TCCR2B doivent être réglés en "Normal port operation"
  
-Pour OC0A en "disconnected":+Pour OC0A en "disconnected", les bits COM2A doivent être réglés à:
   COM2A=00      COM2A=00   
-Pour OC0B en "disconnected": +Pour OC0B en "disconnected", (initialement le timer ne doit pas générer de signal PWM) les bits COM2B doivent être réglés à
   COM2B=00    COM2B=00 
-Pour OC0B en "Clear OC2B on Compare Match, set OC2B at BOTTOM, (non-inverting mode)":  
-  COM2B=10   
 Le mode de fonctionnement doit être réglé à 7 (voir table 18-8, p155):  Le mode de fonctionnement doit être réglé à 7 (voir table 18-8, p155): 
   WGM2 = 111: Fast PWM, TOP=OCRA   WGM2 = 111: Fast PWM, TOP=OCRA
Ligne 88: Ligne 87:
 Pour régler la valeur du TON pour obtenir un rapport cyclique de 50%: Pour régler la valeur du TON pour obtenir un rapport cyclique de 50%:
   OCR2B=OCR2A/2   OCR2B=OCR2A/2
 +  
 +
 +
 +Proposer l'algorithme pour la fonction **void setup(void)** qui permet de configurer le timer en réglant les registres TCCR2A, TCCR2B, OCR2A et OCR2B pour qu'il soit prêt à générer le signal à 38Khz. Vous penserez également à configurer la broche en sortie et à lui imposer un état bas.  
 +  
 +  
 +  
 +Le signal modulé est obtenu en alternant les mode de fonctionnement "disconnected" et "Clear OC2B on Compare Match, set OC2B at BOTTOM, (non-inverting mode)" pour OC0B. Pour activer le signal PWM en sortie du timer, OC0B devra être réglé en "Clear OC2B on Compare Match, set OC2B at BOTTOM, (non-inverting mode)": 
 +  COM2B=10      
 Pour autoriser la sortie PWM sur cette broche, il faut passer le timer en mode 10 en mettant  1 le bit COM2B1: Pour autoriser la sortie PWM sur cette broche, il faut passer le timer en mode 10 en mettant  1 le bit COM2B1:
   TCCR2A |= _BV(COM2B1);   TCCR2A |= _BV(COM2B1);
Ligne 94: Ligne 102:
 Dans la suite, pour maîtriser les durées, nous utiliserons la fonction **delayMicroseconds(time);** Dans la suite, pour maîtriser les durées, nous utiliserons la fonction **delayMicroseconds(time);**
  
- +Les fonctions **void mark(int time)** et **void space(int time)** sont fournies. Elles permettent respectivement d'activer (ou inhiber) le signal à 38 kHz pendant une durée time exprimée en us.
- +
-Proposer l'algorithme pour la fonction **void setup(void)** qui permet de configurer le timer en réglant les registres TCCR2A, TCCR2B, OCR2A et OCR2B pour qu'il soit prêt à générer le signal à 38Khz. Vous penserez également à configurer la broche en sortie et à lui imposer un état bas. +
- +
-Proposer l'algorithme pour la fonction **void loop(void)** qui permet de piloter le timer pour activer la sortie à 38Khz pendant 200us puis la désactiver pendant 400us.  +
- +
-Les fonctions **void mark(int time)** et **void space(int time)** sont fournies. Elles permettent respectivement d'activer (ou inhiber) le signal à 38 kHz pendant time us.+
  
 <file cpp ir1.ino> <file cpp ir1.ino>
Ligne 112: Ligne 114:
 } }
 //////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
-void space(int time)+void space(int time) // pulse parameters in usec
 { {
   // Sends an IR space for the specified number of microseconds.   // Sends an IR space for the specified number of microseconds.
Ligne 121: Ligne 123:
 //////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
 </file> </file>
 +
 +
 +Proposer l'algorithme pour la fonction **void loop(void)** qui permet de piloter le timer pour activer la sortie à 38Khz pendant 200us puis la désactiver pendant 400us.
  
  
Ligne 129: Ligne 134:
  
 Proposer l'algorithme pour la fonction **void  sendNECFrameRepeat()** qui permet d'envoyer la trame NEC de répétition. Proposer l'algorithme pour la fonction **void  sendNECFrameRepeat()** qui permet d'envoyer la trame NEC de répétition.
 +
 +
 +{{https://bvdp.inetdoc.net/files/iut/tp_pic/validation.png}}
  
  
Ligne 134: Ligne 142:
 ==== Codage et tests ==== ==== Codage et tests ====
  
-Implémenter les fonctions **void setup(void)** et **void loop(void) pour configurer la sortie PWM à 38Khz pendant 200us puis inactive pendant 400us. <color #FF0000>** Programmer la maquette et vérifier à l'aide d'un oscilloscope le signal généré. Faire valider.**</color>+Implémenter les fonctions **void setup(void)** et **void loop(void)** pour configurer la sortie PWM à 38Khz. <color #FF0000>** Programmer la maquette et vérifier la fréquence du signal obtenu sur la broche 3 à l'aide d'un oscilloscope.**</color> 
 + 
 + 
 +{{https://bvdp.inetdoc.net/files/iut/tp_pic/validation.png}} 
 + 
 + 
 +Implémenter les fonctions **void sendNECBYTE(unsigned char data)**, **void sendNECFrame(unsigned int adr, unsigned char cmd)** et **void  sendNECFrameRepeat()** et proposer un programme principal de test qui permette de balayer plusieurs adresses et numéros de commandes. Vous veillerez à assurer un temps d'attente entre l'émission de 2 trames consécutives pour obtenir au minimum une durée de 110ms entre chaque début de trame (pour cela calculer la durée minimum pour chacune des trame, et ajouter un délai à l'aide de la fonction Delay(time) ) .  
  
-Implémenter les fonctions **void sendNECBYTE(unsigned char data)**, **void sendNECFrame(unsigned int adr, unsigned char cmd)** et **void  sendNECFrameRepeat()** et proposer un programme principal de test qui permette de balayer plusieurs adresses et numéros de commandesVous veillerez à assurer un temps d'attente entre l'émission de 2 trames consécutives pour obtenir au minimum une durée de 115ms entre chaque début de trame+{{https://bvdp.inetdoc.net/files/iut/tp_pic/validation.png}}
  
  
 Programmer la carte Arduino et fermer le cavalier permettant de relier les Leds à la broche 3 de l'Arduino. Utiliser une caméra de téléphone portable pour visualiser l'activité de la Led infrarouge et demander à l'enseignant de valider avec le récepteur/démodulateur infrarouge. Programmer la carte Arduino et fermer le cavalier permettant de relier les Leds à la broche 3 de l'Arduino. Utiliser une caméra de téléphone portable pour visualiser l'activité de la Led infrarouge et demander à l'enseignant de valider avec le récepteur/démodulateur infrarouge.
 +  
 +
 +{{https://bvdp.inetdoc.net/files/iut/tp_pic/validation.png}}
  
  
Ligne 260: Ligne 278:
 datasheet: http://www.farnell.com/datasheets/30485.pdf datasheet: http://www.farnell.com/datasheets/30485.pdf
  
-Lire et interpréter le fichier suivant: {{http://homepages.laas.fr/bvandepo/files/iut/tp_ir/maeNECPIC2.pdf}}+Lire et interpréter le fichier suivant: {{https://bvdp.inetdoc.net/files/iut/tp_ir/maeNECPIC2.pdf}}
 Proposer un portage de cette fonctionnalité sur l'Arduino UNO R3. Proposer un portage de cette fonctionnalité sur l'Arduino UNO R3.
  
Ligne 267: Ligne 285:
  
 <file cpp testrecep2.ino> <file cpp testrecep2.ino>
 +//B.Vandeportaele 2018
  
 #define PIN_RX_IR  8 #define PIN_RX_IR  8
tpir.1466757255.txt.gz · Dernière modification: 2016/06/24 10:34 de bvandepo