Schema et montage d'une télécommande Infrarouge


Devenu un outil quotidien passant inaperçu, les télécommandes occupent nos tables et se perdent entre les coussins de nos fauteuils. Que ce soit pour allumer la télévision, couper le son de la chaîne stéréo ou régler l'éclairage la télécommande est là et tellement bien ancrée dans notre vie, qu'on se pose rarement la question : " Mais comment fonctionne-t-elle ? ".


Nous allons tenter de répondre à cette question. Pour commencer il existe plusieurs type de télécommande, celle à laquelle nous allons nous intéresser est la télécommande infrarouge qui est la plus habituel et la plus simple.

Petit rappel de physique

Pour ceux pour qui la physique remonte a un peu loin, la lumière visible est caractérisée par une plage de longueur d'onde allant de +/- 700nm (nano mètre) à +/- 400nm. La lumière émise a 700nm est de couleur rouge, celle a 400 est de couleur violette et entre nous retrouvons toutes les couleurs de l'arc en ciel. L'infrarouge comme son nom l'indique est la plage de longueur d'onde située au dessus du rouge. L'infrarouge n'est donc pas visible par l'oeil humain. Les rayons proviennent souvent des sources de chaleurs, si vous utilisez un jour une lunette infrarouge et que vous regardez le monde qui vous entoure vous remarquerez que vous pourrez percevoir les différentes sources de chaleur, c'est d'ailleurs un système utilisé par l'armée pour repérer l'ennemi.

Il est possible d'émettre de la lumière au travers des célèbres diodes électroluminescente (LED), celle-ci existe en différentes couleur : rouge, jaune, bleu, vert, ... Mais il existe aussi des diodes Infrarouge qui émette dans des longueurs d'onde variant suivant le modèle et la précision de 800 à 1000 nm.

Fonctionnement des télécommandes

Maintenant que l'on sait qu'il existe des diodes infrarouges, on se doute qu'elles vont être utilisées dans les télécommandes. En effet, si vous regardez de plus prés la télécommande de votre téléviseur, vous remarquerez que la partie supérieure, que vous devez diriger vers le poste, est soit munie soit d'un cache sombre soit d'une petite boule... Ce n'est rien d'autre que la diode émettrice...

Lorsque vous appuyez sur un bouton de la télécommande, un code va être émis par la led, ce code est une suite de 1 et de 0. Pour cela la LED va s'allumer et s'éteindre en fonction du message à envoyer. De son coté, la télévision va recevoir les différents bits, et va analyser le message et exécuter l'ordre désiré. Tout se passe en un très court instant, pour ne pas que l'on remarque qu'il y a eu un très court temps entre le moment où l'on a appuyer sur le bouton et le moment où le téléviseur a exécuté l'ordre (donc le temps de transmission du message). L'ordre de grandeur du temps de transmission est de quelques milli secondes, ce qui nous parait pratiquement instantané de notre coté, vu que l'oeil humain perçoit 25 images par seconde, donc pour que l'on puisse remarquer qu'un événement n'est pas instantané, il faut que celui-ci dure plus de 40ms. L'avantage d'avoir un message transmis rapidement est aussi que le risque que la télécommande ne soit plus orientée correctement vers le téléviseur entre le début et la fin de la transmission (un geste brusque au moment où l'on pousse sur le bouton) est très petit.

Mais tout ça est un peu utopique comme explication, comme il l'a été dit dans le rappel de physique, les sources de chaleur émettent des rayons infrarouges. Donc comment se peut-il que le poil à bois ou le chauffage central ne puisse pas allumer ou éteindre le téléviseur ?

Premièrement, le capteur placé sur le téléviseur ne va réagir que pour des infrarouges émis à une certaine longueur d'onde (choisi dans la plage de l'infrarouge bien évidemment). Deuxièmement, ce capteur est suivit d'un filtre. Ce filtre ne va garder que les rayonnements infrarouges oscillant à une certaine fréquence. C'est-à-dire : comme nous l'avons dit, la LED va s'allumer et s'éteindre pour émettre des bits, donc tel qu'il l'a été expliqué pour le moment, quand la led s'allume, le capteur est censé recevoir un 1 et quand la led est éteinte le capteur est censé recevoir 0. C'est vrai pour le 0, mais pas tout à fait exact pour le 1. Pour transmettre un état haut, il ne faut pas que la led soit simplement allumée, il faut qu'elle s'allume et s'éteigne à la fréquence demandée par le filtre du capteur (qu'elle oscille).

Bon un petit schéma, parce que j'en entend qui réclame ;)
oscillation
Dans la zone verte, la LED s'allume et s'éteint en une période de 1/f seconde, en oscillant de cette façon le filtre fait la différence entre un rayonnement infrarouge classique comme c'est le cas pour la zone orange et le rayonnement de la télécommande. Grâce à l'oscillation, le filtre réceptionne un état haut, dans tout autre cas il réceptionne un état bas.

Les composants utilisés

Mais qu'est ce que c'est que ce capteur ? Il existe plusieurs sortes de capteurs différents pour l'utilisation des télécommandes, celui que nous préférons est le TSOP de chez Vishay, plus particulièrement le TSOP1836. TSOP18 est le type de boîtier utilisé et 36 signifie que la fréquence d'oscillation du rayon infrarouge doit être de 36khz (36 000 hz).
tsop18
Comme nous pouvons le remarquez, le TSOP est un petit composant qui peut tenir au creux de la main, à peine plus gros qu'une mouche. Il existe plusieurs versions de ce composant : 30khz (1830), 33khz (1833), 36.7khz (1837), 38khz (1838), 40khz (1840), 56khz (1856). (Les valeurs sont à 5% près). Il existe un autre modèle qui est le TSOP17xx, la différence étant le boîtier (et le brochage) et le prix (un peu plus cher que le 18).

Comme l'indique le schéma ci-dessous le TSOP, réagit de la meilleur façon pour une longueur d'onde de 950nm. Il faut donc que la LED infrarouge utilisée soit le plus proche possible de cette valeur. Ce qui se trouve chez n'importe quel revendeur de composants électronique.
tsopwavelength
Voilà que nous sommes fixé sur le fonctionnement des principaux composants, nous allons pouvoir voir à présent comment construire une télécommande et un récepteur au travers d'un exemple de réalisation. Comme vous pouvez vous en douter, il va falloir établir un protocol de communication, programmer une puce pour d'un coté faire osciller la LED afin d'envoyer un code et de l'autre côté le réceptionner et l'analyser. Tout ça se trouve dans les pages suivantes.

Développement d'un Emetteur-Recepteur InfraRouge:


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µsmovlw h'35'movwf compteurgoto bouclesendsend640movlw h'18'; on envoie des données pendant 640µsmovwf compteurbouclesend bsf PORTA, 0;nopnop ; 3 µsnop ; 4 µsnop ; 5 µsnop ; 6 µsnop ; 7 µsnop ; 8 µsnop ; 9 µsnop ; 10 µsnop ; 11 µsnop ; 12 µsnop ; 13 µsnop ; 14 µsbcf PORTA, 0;nop ; 2 µsnop ; 3 µsnop ; 4 µsnop ; 5 µsnop ; 6 µsnop ; 7 µsnop ; 8 µsnop ; 9 µsnop ; 10 µsnop ; 11 µsdecfsz compteur,F ; 12 µsgoto bouclesend ; 14 µsreturn 
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.

La carte réceptrice

Nous venons de voir dans l'article précédent comment les 8 bits constituant le message allaient être envoyés, le tout maintenant est de les réceptionner correctement.

Nous savons que l'état haut se manifeste par une oscillation de la led infrarouge à 36kHz, et que pour réceptionner ce signal il existe un composant du nom de TSOP qui change d'état quand il reçoit une émission à une fréquence bien déterminée, dans notre cas nous utilisons un TSOP1836 qui change d'état s'il reçoit une émission infrarouge à 36kHz (à quelques pourcents près).

Nous allons donc avoir à la sortie du TSOP soit 1 soit 0 pendant des durées déterminées dans le protocole, il faut donc recevoir correctement les différents états, connaître leurs durées et les enregistrer. Pour cela nous utiliserons de nouveau un Pic 16f84. Ce dernier contrôlera dans notre application 4 sorties 220 Volt et 4 sorties analogique 0-10Volt (sur 8bits). (que nous analyserons plus tard)
schemarecept

Comment réceptionner correctement ?

La première étape est de recevoir le premier signal qui est d'une durée d'environ 1280µs, pour ça nous pourrions utiliser les interruptions du pic mais vu que nous n'avons pas à nous en faire au sujet de la consommation de la carte (car celle-ci sera branchée sur le secteur, donc pas de batterie à décharger), nous pouvons simplement utiliser une boucle qui ne s'interrompt que quand la broche sur laquelle la sortie du TSOP est branchée change d'état :
mainbtfss PORTB, 0 goto rxgoto main 
Quand celle-ci change d'état, le pic passe dans la procédure « rx ». A ce moment on doit s'assurer que le signal reçu est bien celui de départ. La procédure 1280µs va générer un temps légèrement plus court que celui de l'émetteur, le signal doit toujours être à l'état haut après cette période pour signifier que celui ci est bien le signal de départ.
rx movlw h'08';movwf boucle; le compteur qui va faire la boucle pour qu'on reçoive 8 bitcall pause1280; une pause de 1280µsbtfsc PORTB, 0; si le signal est déjà repassé a 0 c'est que c'est le mauvais,goto main; mauvais signal!!! 
Dans rx nous initialisons directement le registre boucle à 8… Celui-ci va permettre de compter les bits reçus…
Si le signal d'initialisation est correct, ça signifie que 8bits vont être envoyés. Nous allons donc attendre la fin du signal d'initialisation, afin d'obtenir le niveau 0 qui dure soit 640µs dans le cas d'envoie d'un 1, soit 1280µs dans le cas d'envoie d'un 0.
bouclerx btfss PORTB, 0;goto bouclerx; attendre que le signal repasse a 0call pause640; attend 640µsecrlf cle, 1;btfss PORTB, 0; le signal est repassé a 1 après la pause de 640µsecgoto rx1;bcf cle,0; le signal est toujours a 0;
rxendcall pause820; btfsc PORTB, 0; le signal doit être a 1, sinon le signal est perdugoto main; signal incorrect!!!decfsz boucle, 1; boucle jusqu'a 8 bit reçugoto bouclerxgoto analyse; les 8 bits sont réçu correctement, on va les analyser pour savoir ce qui faut faure
rx1bsf cle, 0; 1 à été reçu, on met le bit a l'état hautgoto rxend;
Nous remarquons donc, que en premier lieu, il attend un temps légèrement supérieur à 640µs. Si le signal après cette pause est passé à 1 dans ce cas la, nous savons que le bit envoyé est 1 et nous le plaçons dans la variable « clé » qui enregistre les 8bits afin de reconstituer la clé. Si maintenant le signal est toujours à 0, c'est que le bit envoyé est 0… Une fois le bit enregistré dans la clé, nous attendons 820µs, comme nous le savons, il va y avoir une envoie pendant 640µs qui sépare l'émission de 2 bit, vu qu'il reste approximativement 640µs avant la fin de l'envoie des information relative au bit, si nous attendons 820µs, nous sommes sur de tomber pile dans la phase qui sépare l'émission de deux bits, et nous pouvons dire que sauf cas de problème, à ce moment là, le signal doit obligatoirement être 1, si c'est le cas contraire c'est que le signal est perdu, et nous annulons toutes les opérations en retournant dans la boucle main (boucle qui attend le signal d'initialisation) . Une fois les 8 bits envoyés, nous partons dans une procédure d'analyse qui va simplement faire une action en fonction de la valeur qu'aura pris le registre « clé », c'est-à-dire le message envoyé par la télécommande…
Pour résumer ça, un petit schéma vaut plus que toutes les explications du monde :
recepteur 

Sorties de puissance et sorties analogiques pour contrôle de la luminosité :

Pour la sortie de puissance nous avons mis en place un schéma traditionnel optocoupleur/triac qui permet d'isoler la carte du 220volt du secteur. (voir rubrique AddOn pour le schéma)
Pour le contrôle de luminosité: nous avons décidé d'utiliser un kit de contrôle de luminosité de chez Velleman, le K8064, présenté lui aussi dans la rubrique AddOn et disponible pour environ 20€ dans tous les bons commerces d'électronique. Le tout est à présent de générer une tension variant de 0 à 10 volt depuis le microcontrôleur. Celui-ci n'ayant que des sorties logiques, il va nous falloir utiliser un convertisseur numérique vers analogique. Notre choix est d'utiliser un tlv5620 qui permet d'établir une tension suivant un référentiel sur une résolution de 8bits. Cette tension sera suivie d'une amplification par 2 via un lm324.
adc

La routine

Le tlv5620 est contrôler via un entrée série. Il faut ainsi pour le contrôler créer une routine qui permet d'envoyé les 8 bits ainsi que les bits définissants quelle sortie on veut diriger.
lightcontrol ; Permet de controller la luminosité; movlw lamp* [1-4];; movwf lamp;; movlw luminosité (Valeur au choix);; movwf lum;
bsf PORTB, load;bcf PORTB, dat;bcf PORTB, clockbtfsc lamp, 1;bsf PORTB, dat;bsf PORTB, clock;call waitbcf PORTB, clock;bcf PORTB, dat;btfsc lamp, 0;bsf PORTB, dat;bsf PORTB, clock;call waitbcf PORTB, clockbcf PORTB, dat;bsf PORTB, clock;call waitbcf PORTB, clock;movlw H'00'movwf loop;
beginlooplight; sous routine
movlw h'08' ;subwf loop, 0;btfss STATUS, C ;goto inlooplight;bcf PORTB, load;call waitbsf PORTB, load;return
inlooplight; sous routine
btfsc lum, 7;bsf PORTB, dat; bsf PORTB, clock;call waitbcf PORTB, clock;bcf PORTB, dat;rlf lum, 1;incf loop, f;goto beginlooplight;
wait; sous routine
nopnopnopnopreturn; 
 

Cette routine nécessite deux paramètres, lamp et lum. Lamp prendra une valeur entre 1 et 4 et permettra de déterminer quelle sortie doit être contrôlée. Les lignes de code jusqu'à la boucle envoient la porte à diriger. La boucle envoie en série les 8 bits donnant la tension à appliquer. La sous routine créée arbitrairement permet d'être sur que le bit envoyé est bien pris en compte par la puce. La fréquence du clock étant de maximum 1Mhz, nous avons choisi d'être en dessous de cette fréquence afin de mettre toute la sécurité de notre coté.

Montage du récepteur

Vous trouverez dans la rubrique téléchargement le schéma, le pcb et le firmware de la carte réceptrice. Niveau télécommande vous aurez le schéma ainsi que le code source du firmware, à vous de faire ce qui vous convient. N’ayant pas eu le temps de faire une télécommande correcte, ça viendra peut-être plus tard. Si vous en réalisez une, venez en parler sur le forum.

Niveau composants, les résistances de 0 sont à remplacer par un strap (un simple fil), les assemblages c6-r13, c5-r12,c3-r11,c4-r10 situé dans la partie de puissance de la carte sont à remplacer par une varistance de 250volts (simplement positionner une varistance sur la carte pas besoin de refaire un nouveau pcb). Les deux capacités radiales de 47µf, sont un peu au libre arbitre de chacun, j’ai mis celle là parce que j’avais ça sous la main, néanmoins ne pas oublier d’en mettre.
compo

Installation

La carte réceptrice peut-être soit utilisée en mode tout ou rien, c'est-à-dire soit la lampe est allumée soit éteinte. Dans ce cas on peut ignorer les sorties analogique et brancher directement les lampes sur les sorties 220 volts de la carte.
Dans le cas où l'on désire utiliser le contrôle de luminosité, on branchera la sortie 220 volts sur l'entrée 220 du K8064 et la sortie analogique sur l'entrée de celui-ci. Le K8064 prenant un certain temps à l'initialisation, le firmware est fait en sorte que quand on pousse sur augmenter la luminosité, la sortie 220 volt s'enclenche mais que pour couper la sortie il faudra laisser le doigt bien plus longtemps appuyé sur la touche après que la luminosité soit arrivée à 0.
La carte doit-être alimentée en 15volt.
montage

Télécharger l'archive des fichiers relatifs à cet article

Exemple de réalisation d'une petite télécommande à 2 boutons

telecommande
La première étape pour créer une liaison est de prévenir le récepteur que celui-ci va recevoir quelque chose. Pour cela, on lance un signal 1 d'un peu plus de1280µs, le temps que nous avons choisi a été pris à l'œil, car ça fonctionnait bien. Pour envoyer un signal pareil, 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 = 27µs, donc la led doit rester allumée 14µs et rester coupée 13µs. Vu qu'un cycle de Pic cadencé à 4mhz s'effectue en 1µs. Nous pouvons générer le code suivant :
send1280 ; envoie un peu plus long que 1280µsmovlw h'35' ; On va repeter 53 fois la bouclemovwf compteurgoto bouclesendbouclesend bsf PORTA, 0;nopnop ; 3 µsnop ; 4 µsnop ; 5 µsnop ; 6 µsnop ; 7 µsnop ; 8 µsnop ; 9 µsnop ; 10 µsnop ; 11 µsnop ; 12 µsnop ; 13 µsnopbcf PORTA, 0;nop ; 2 µsnop ; 3 µsnop ; 4 µsnop ; 5 µsnop ; 6 µsnopnopnopnopnopdecfsz compteur,Fgoto bouclesendreturn
Les instructions nop, bcf et bsf prennent 1 cycle, donc 1µs, l'instruction goto utilise deux cycles, 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.

Une fois le signal émis, nous allons regardé le premier bit à envoyé, si celui-ci est égal à 1 alors la télécommande ne va rien envoyer pendant 640µs puis envoyer un signal pendant 640µs. Si le bit est à 0, la télécommande ne va rien envoyer pendant 1280µs. Ensuite nous enverrons de nouveau un signal pendant 640µs pour indiquer que le bit est envoyé et que l'on va envoyer un nouveau (ce qui permet en cas de légère défaillance temporel que le récepteur soit toujours synchronisé avec l'émetteur). Pour ensuite lire le bit suivant et recommencer jusqu'à ce que les 8 bits soient envoyés
mainmovlw h'08';movwf bouclemovlw h'09'movwf INTCONsleep ; on plonge le pic dans le sommeil pour economiser les battries
go movf PORTB, w; on sauvegarde l'état du registre B (servira plus tard)movwf tjrs;btfss PORTB, 7 ; quel bouton a été prességoto tx1;btfss PORTB,4goto tx2;goto main; si aucun des deux boutons, ça doit être une erreur
tx2 movlw h'11'; on place h'11' comme clé, voir la liste des clé pour comprendremovwf clegoto tx
tx1 movlw h'01';movwf cle
boucletx btfsc cle, 7 goto send1call pause1280 ; envoie rien pendant 1280 cad qu'on envoie un 0goto endtxsend1:call pause640; envoie rien pendant 640 cad qu'on envoie un 1call send640; envoie pendant 640µs des donnéesendtx: rlf cle, 1 call send640; on envoie des données pendant 640µs afin d'indiquer qu'un prochain bit va être envoyédecfsz boucle, 1goto boucletx; boucle pour envoyer les 8 bitscall pause40000; on attend 40 msmovf tjrs,0 ; on regarde l'état du PORTB par rapport à l'état initialsubwf PORTB,wbtfsc STATUS,Zgoto go ; la touche est toujours pressée, on réenvoie une tramegoto main
pause1280 ; pause de 1280µsec exactementmovlw h'FF';movwf compteur;call pause;return
pause640 ; pause de 640 µsec exactementmovlw h'7C';movwf compteur;call pause;return
pause ; boucle de 5µsecnopnopdecfsz compteur,Fgoto pausereturn
pause40000: ; pause de 40ms, cad le temps de recevoir 2 fois les informations afin d'être sur de pas se trompermovlw h'c8'movwf compteur ; premiere variablemovlw h'32'movwf compteur2 pausebcl:nopdecfsz compteur, 1goto pausebclmovlw h'c8'movwf compteur ; premiere variabledecfsz compteur2, 1goto pausebclreturn

La liste des codes

tablecode

Schéma du fonctionnement

schemaemet
Le code source est disponible dans les téléchargements



Aucun commentaire:

Enregistrer un commentaire