modele2

Nous allons commencer à développer une télécommande infrarouge avec son récepteur. Le but désiré dans ce montage est de contrôler à distance 4 ampoules (allumer, éteindre) et d'en contrôler la luminosité.



Les moyens mis a notre disposition :

Nous savons comment faire une carte de puissance pouvant faire passer une sortie 5V/20ma en une sortie 220 alternative en provenance du secteur (via un circuit muni d'un optocoupleur et d'un triac (voir article : AddOn)).

Le contrôle de la luminosité peut se faire au travers du module de luminosité par tension continue variable entre 0 et 10 présenté sur ce site.

Le pic 16f84, un microcontrôleur suffisamment puissant pour cette application et peu coûteux peut servir de base au montage, ce qui permettra une construction aisée et de réduire fortement le nombre de composants nécessaire. La gamme des Pics ne se limite pas à ce composant, mais il est très simple à programmer et idéal pour un exemple pédagogique. Il est aussi très répandu, l'un des buts de ce site étant de permettre à n'importe qui de développer sans avoir le problème pour trouver la pièce rare. Le nombre d'entrées/sorties disponible sur ce Pic est largement suffisant pour notre application. Il faudra en effet sur le récepteur 4 broches pour les sorties de puissance, 3 pour le convertisseur numérique vers analogique qui permettra de régler le montage de contrôle de luminosité, et 1 pour l'entrée du récepteur infrarouge. Un 16f84 sera également utilisé sur la télécommande afin de mettre a disposition suffisamment d'entrées pour gérer facilement les boutons.

La télécommande utilisera de simple petit bouton poussoir. Ceux que j'utilise sont récupérés sur des appareils (magnétoscopes, imprimantes, …) cassés.

bouton

Le convertisseur numérique vers analogique que j'utilise est un tlv5620 de chez Texas Instrument, 4 sorties analogiques et l'entrée numérique se fait en série ce qui permettra de simplifier le circuit imprimé. Maintenant, ce composant est fort basique et l'adaptation pour un autre convertisseur plus simple à trouver, peut se faire aisément… Celui-ci est tout de même disponible chez Farnell, donc doit pouvoir être trouvable chez n'importe quel marchant de composants.

Les processus à développer

Pour que la télécommande soit utile, il est préférable qu'elle puisse envoyer différents ordres au récepteur, afin que celui-ci réagisse de la façon désirée. Pour ça il faut envoyer des informations sans utiliser de « Clock » et sans avoir la confirmation que l'information est bien transmise. En effet, le signal n'est envoyé que dans un sens et ne peut être que être haut ou bas. De plus, les bits qui constituent l'information doivent être envoyé rapidement, afin de limiter le risque que le message ne soit pas transmis complètement.

Pour ça nous avons développé un petit protocole de transmission très simple à comprendre, et qui à un très bon taux de réussite… (99.99% sur les essais réalisés).

Explication du protocol

signal

L'émission du signal commence par l'envoie d'un « 1 » pendant un peu plus de 1280µs, cet envoie permet de signaler au récepteur qu'il va commencer à envoyer des bits… Le récepteur attend alors que le signal passe à l'état bas… La durée de 1280µs a été choisie à l'œil, vraiment et uniquement parce que c'était joli ;)… Il est éventuellement possible d'optimiser ce temps, mais pas trop non plus car le TSOP (récepteur infrarouge) risque de ne pas réagir.

Une fois le premier signal fini, on commence directement à envoyer le premier bit, l'émetteur arrête de transmettre pendant 640µs, le récepteur reçoit alors 0. Une fois les 640µs passée, soit l'émetteur, si le bit à envoyé est 1, recommence à réémettre pendant 640µs, si le bit est 0, l'émetteur continue à ne rien envoyer pendant 640µs… Une fois ce temps écoulé, l'émetteur envoie de nouveau que ce soit pour 1 ou 0 un signal haut pendant 640µs afin de prévenir le récepteur que le bit est envoyé et qu'on va passé au suivant (sauf si on est au huitième bit, dans ce cas c'est juste pour prévenir de la fin d'émission)… Et on recommence avec le bit suivant.

Génération d'un signal à 36kHz

Pour envoyer de pareils signaux, il faut faire osciller la sortie du Pic connectée à la led infrarouge à la fréquence du récepteur, dans notre cas nous devront faire osciller à 36khz, car le TSOP utilisé est sensible à cette fréquence. Pour osciller nous allons simplement allumer puis éteindre la broche du Pic pendant un certain temps, ce temps est facilement calculable, vu que la fréquence à générer doit être de 36000hz, la période d'oscillation doit donc être de 1/f = 28µs, donc la led doit rester allumée 14µs et restée coupée 14µs. Vu qu'un cycle de Pic cadencé à 4mhz s'effectue en 1µs. Nous pouvons générer le code suivant :

send1280 ; envoie de données pendant un peu plus de 1280µs
movlw h'35'
movwf compteur
goto bouclesend
send640
movlw h'18'; on envoie des données pendant 640µs
movwf compteur
bouclesend
bsf PORTA, 0;
nop
nop ; 3 µs
nop ; 4 µs
nop ; 5 µs
nop ; 6 µs
nop ; 7 µs
nop ; 8 µs
nop ; 9 µs
nop ; 10 µs
nop ; 11 µs
nop ; 12 µs
nop ; 13 µs
nop ; 14 µs
bcf PORTA, 0;
nop ; 2 µs
nop ; 3 µs
nop ; 4 µs
nop ; 5 µs
nop ; 6 µs
nop ; 7 µs
nop ; 8 µs
nop ; 9 µs
nop ; 10 µs
nop ; 11 µs
decfsz compteur,F ; 12 µs
goto bouclesend ; 14 µs
return

Les instructions nop, bcf et bsf prennent 1 cycle d'horloge, donc 1µs, l'instruction goto utilise deux cycle d'horloge, donc 2µs. Lors de l'appel de la fonction send1280, nous plaçons la variable compteur à 53 (35 en hexadécimal), c'est le nombre de fois que nous allons répéter la période d'oscillation. 53 * 27µs > 1280µs donc c'est bon. Pour envoyer un signal de 640µs, on appel send640 qui place dans compteur 24 (18 en hexadécimal). 24*27 = 648µs très proche de 640µs donc c'est bon aussi.