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/03/21 15:14]
bvandepo [Analyse]
tpir [2019/03/13 10:22] (Version actuelle)
bvandepo [Analyse]
Ligne 24: Ligne 24:
  
 ===Format des trames=== ===Format des trames===
-Pour rappel, une trame NEC étendue est constitué ​d'un train de bits modulé à 38Khz. Il existe 2 types de trames:+Une trame NEC étendue est constituée ​d'un train de bits modulé à 38Khz. Il existe 2 types de trames:
   - les trames complètes   - les trames complètes
   - les trames de répétition   - les trames de répétition
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, 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, bit de poids faible d'​abord ​(identifiant la touche) +  - une valeur sur 8 bits (codant le numéro de la touche), bit de poids faible d'​abord 
-  - le complément à 1 de la précédente valeur sur 8 bits+  - 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)
   - l'​envoi d'un bit à 1 et un retour à l'​état de repos   - l'​envoi d'un bit à 1 et un retour à l'​état de repos
  
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 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 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 (attention au piège!).
  
-Dessiner l'​allure des chronogrammes pour l'​envoi d'une trame complète depuis la télécommande 0x1234 pour la touche 0x56. 
  
- +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​validation.png}}
-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. +
- +
- +
  
  
  
-===Configuration du timer 2=== +===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: ​[[http://​homepages.laas.fr/​bvandepo/​files/​iut/​Atmega328p_timer2.pdf]]
  
 L'​Atmega328 dispose de 4 timers : L'​Atmega328 dispose de 4 timers :
Ligne 69: Ligne 68:
  - Timer 2/3 : 8-bit avec PWM et possibilité d'​horloge externe  - Timer 2/3 : 8-bit avec PWM et possibilité d'​horloge externe
  
-Dans la suite des exercices nous utiliserons le Timer 2 en mode 7 "FAST PWM" (voir les différents mode en p 155!!!). +Dans la suite des exercices nous utiliserons le Timer 2 en mode 7 "FAST PWM" (voir les différents mode en p 155 de la documentation). 
  
  
-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 90: 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 96: 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. Programmer la maquette et vérifier à l'aide d'un oscilloscope le signal généré. Faire valider. +
- +
-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 114: 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 123: 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 131: 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.
 +
 +
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​validation.png}}
  
  
Ligne 136: Ligne 142:
 ==== Codage et tests ==== ==== Codage et tests ====
  
-Implémenter ​la fonction ​**void setup(void)** pour configurer la sortie PWM à 38Khz. <color #​FF0000>​**Vérifier à l'​oscilloscope ​la fréquence du signal ​généré.**</​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>​
  
  
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​validation.png}}
  
-Implémenter les fonctions **void TimerEnablePWM()** et **void TimerDisablePWM()** qui activent ou désactive la sortie PWM sur la broche 3. 
  
-Implémenter ​las fonction ​**void ​mark(int time)** qui active ​la sortie PWM pendant ​time microsecondes.+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 las fonction **void space(int time)** qui déactive la sortie PWM pendant time microsecondes. 
  
-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+{{http://​homepages.laas.fr/​bvandepo/​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.
 +  ​
 +
 +{{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_pic/​validation.png}}
  
  
tpir.1458569651.txt.gz · Dernière modification: 2016/03/21 15:14 par bvandepo