Electronique > Réalisations > Télécommandes > Télécommande 002

Dernière mise à jour : 07/11/2010

Présentation

Cette télécommande, composée d'un circuit émetteur et d'un circuit récepteur, permet de piloter de un à dix (ou de un à huit) appareils au travers d'une seule ligne de transmission filaire ou autre. Elle est réversible, c'est à dire que le récepteur peut aussi faire office d'émetteur, et inversement.

telecommande_002_pcb_3d_a

Pour cette réalisation, j'ai mis en oeuvre deux PIC de type 16F628A, chacun pouvant être placé en mode émetteur ou en mode récepteur, les deux PIC faisant tourner le même programme. La sélection entre mode émetteur et mode récepteur s'effectue à l'aide d'un interrupteur simple (SPST) ou d'un cavalier. Afin d'assurer une bonne protection contre les parasites ambiants éventuels, les données reçues par le récepteur peuvent être comptées et prise en compte uniquement si les mêmes ordres sont reçus trois fois de suite quand un changement dans les données reçues est détecté. Cette protection supplémentaire, qui ralentit un poil la commande au niveau du récepteur, peut être désactivée pour un temps de réponse plus rapide (si version 002 - pas possible dans la version 002b, voir plus loin). La transmission entre les deux modules s'effectuant de façon sérielle, il est parfaitement envisageable de faire appel à un support sans fil tel que laser, infrarouge, ultrasons ou HF. De plus, la transmission des données s'effectue selon un protocole standard de type "RS232" à une vitesse de 9600 bauds, ce qui rend compatible la fonction émetteur ou récepteur avec un système autre (ordinateur ou autre type de montage à UC doté d'une liaison série).
Trois schémas sont proposés, avec ou sans quartz externe :
- Schéma 002 : sans quartz externe (utilisation oscillateur interne 4 MHz), possibilité de choisir le mode "envoi seul / répétition" (1 ou 3 ordres successifs pour chaque commande),
- Schéma 002b : avec quartz externe 4 MHz, envoi uniquement en mode "répétition" (3 ordres successifs identiques pour chaque commande).
- Schéma 002c : avec quartz externe 12 MHz, envoi en mode "sur changement d'état des entrées" ou en mode "continu".
Les différences entre chaque montage sont décrites au paragraphe suivant.

Différences entre les trois montages proposés

Le premier schéma 002 est le plus simple mais risque de moins bien fonctionner si d'un côté ou de l'autre de la liaison la température ambiante est extrême. En effet, la fréquence de l'oscillateur interne joue un peu en fonction de la température, et si les deux modules émetteur et récepteur sont soumis à des températures opposées (l'un très chaud et l'autre très froid), le récepteur pourrait avoir du mal à reconnaitre les données entrantes. 
Le second schéma 002b requiert un quartz externe de 4 MHz et garantit un fonctionnement plus stable dans des conditions de températures "extrêmes". Les données sont toujours envoyées trois fois, la fonction de répétition d'envoi n'est pas désactivable. Le fait de ne pas pouvoir choisir le mode d'envoi "seul / répétition" avec la version quartz externe est simplement lié au fait qu'il n'y a plus assez de broches d'entrée / sortie au niveau du PIC. Avec une liaison bifilaire (Tx / Rx), un accusé de réception est envoyé par le récepteur à l'émetteur. Ce circuit est très fiable si la qualité de la ligne de transmission est au rendez-vous.
Le troisième schéma 002c est reservé pour transmettre des données logiques et non plus des états d'interrupteurs. Le but de cette version est de pouvoir transmettre des données plus rapidement, avec un rythme de changement d'état sur les entrées d'au moins 100 Hz. Pour cela, la fonction d'anti-rebond de chaque entrée a été retirée, la vitesse du port série a été doublée, les données sont transmises une seule fois et non plus trois fois et la LED d'indication des données envoyées / reçues n'est plus sollicitée (elle est toujours là pour indiquer que le programme démarre bien à la mise sous tension). En complément, le nombre d'entrées est désormais limité à 8, ce qui permet de n'utiliser qu'un seul octet pour transmettre l'état des huit entrées en une seule étape. On a en quelque sorte affaire à un registre à décallage type CD4094 "automatique et intelligent".
En résumé, un petit tableau pour y voir plus clair :

Type
d'oscillateur
Vitesse
transmission
Nombre
d'entrées
Modes
d'envoi
Répétition
envoi
Accusé
réception
Vitesse
transfert max
Schéma 002Interne 4 MHz9600 bauds10Sur changement d'état des entrées3 fois (désactivable)NonQuelques Hz
Schéma 002bExterne 4 MHz9600 bauds10Sur changement d'état des entrées3 fois (non désactivable)OuiQuelques Hz
Schéma 002cExterne 12 MHz19200 bauds8Sur changement d'état des entrées ou en continuPas de répétitionNon300 Hz (Nota 1)

Nota 1 : La vitesse est donnée pour des octets complets, ce qui signifie qu'on peut envoyer au moins 300 octets différents par seconde avec la certitude qu'ils seront traités correctement à l'arrivée (hors problème de ligne de transmission bien sûr). On peut en réalité monter jusqu'à 500 Hz, mais avec un peu moins de certitude sur le bon traitement à l'arrivée car on commence à constater des petits décallages temporels (à cette fréquence de 500 Hz, on s'approche des limites liées à la vitesse de transmission des données).

Avertissements

Pour un usage avec des boutons poussoirs ou interrupteurs et bien que la version 002 puisse être utilisée, je conseille la version 002b pour les raisons suivantes :
- stabilité d'horloge bien meilleure (transmission des données plus fiable);
- présence d'un accusé de réception envoyé par le récepteur vers l'émetteur, indiquant que l'ordre a bien été reçu.
Le schéma 002c sera préféré pour des vitesses de transmission plus élevées, avec des sources logiques provenant de circuits logiques et non d'interrupteurs (plus de fonction d'anti-rebond).
En conclusion, le schéma 002 est désormais déconseillé et les schémas 002b et 002c conseillés.

Schéma 002 (désormais déconseillé mais utilisable)

Chaque circuit émetteur / récepteur fait donc appel à un seul circuit intégré de type 16F628A, et très peu de composants additionnels sont nécessaires. Le schéma qui suit montre un ensemble émetteur / récepteur configuré en mode émetteur à dix entrées (SW1 fermé).

telecommande_002

Principe de base
Il consiste à transformer une information "parallèle" en une information "série" si le système est placé en mode Emetteur, ou à transformer une information "série" en une information "parallèle" si le système est placé en mode Récepteur. Parallèle car plusieurs informations sont disponibles en même temps sur plusieurs fils indépendants, et série parce que la liaison entre émetteur et récepteur s'opère sur un seul fil. La transmission de données s'effectue de façon asynchrone (pas de fil d'horloge pour cadencer l'envoi ou la réception des données), comme pour une liaison série RS232 traditionnelle. La vitesse est fixée ici à 9600 bauds, mais rien ne vous empêche d'en choisir une plus élevée. Au tout début de la conception de cette télécommande, j'avais utilisé un mode de transfert "propriétaire" des états des entrées / sorties, qui demandait 12 bits pour transmettre l'ensemble des informations. J'ai ensuite décidé d'utiliser un protocole standard, qui permet de réceptionner et traiter les données transmises sur un autre système, basé sur PC ou non. Certes, cela demande un peu plus de données à envoyer, puisque chaque changement d'état d'une entrée (système en mode émetteur) se traduit par l'envoi de 10 bits (1 bit start, 8 bits de donnée et 1 bit stop), qui contient le numéro et l'état du port qui a changé de statut. Mais en pratique, la réactivité du système est amplement suffisante pour que cette façon de faire ne constitue pas un problème.

Format des données série
Les données sont transmises selon le principe "Numéro voie" + "Information Marche / Arrêt", un peu à la façon du protocole MIDI utilisé dans l'industrie musicale pour décrire les notes qui doivent être jouées. Chaque octet de commande utilisé pour décrire l'état d'une voie de la télécomande, est composé de quatre bits décrivant le numéro de voie et de quatre bits décrivant l'état de la voie en question. Le premer quartet de bit indique l'état de la voie ("F" pour ON et "0" pour OFF), et le deuxième quartet de bits indique le numéro de voie (entre 0 et 9). Ainsi, l'activation de l'entrée IO1 conduit à l'émission du message (octet) F0, et sa désactivation provoque l'envoi de l'octet 00. L'activation de l'entrée IO5 conduit à l'émission du message (octet) F4, et sa désactivation provoque l'envoi de l'octet 04. Si on se place côté Récepteur, l'arrivée d'un octet ayant comme valeur F0 provoque l'activation de la sortie IO1, et l'arrivée d'un octet ayant comme valeur 00 provoque la désactivation de cette même sortie IO1.

Action
Octet émis
(côté émetteur)
Octet reçu
(côté récepteur)
Action
Activation IO1
F0
F0
Activation IO1
Désactivation IO1
00
00
Désactivation IO1
Activation IO2 F1
F1
Activation IO2
Désactivation IO2 01
01
Désactivation IO2
Activation IO3 F2
F2
Activation IO3
Désactivation IO3 02
02
Désactivation IO3
...
...
...
...
Activation IO9 F8
F8
Activation IO9
Désactivation IO9 08
08
Désactivation IO9
Activation IO10 F9
F9
Activation IO10
Désactivation IO10 09
09
Désactivation IO10

Bien entendu, un seul bit suffirait pour indiquer un statut "marche ou arrêt", mais ici on a de la marge. Toujours avec un seul octet, on peut pousser le principe jusqu'à 127 voies de télécommande, au lieu de 16 ici (la capacité est de 16 mais on ne dispose que de dix sorties à cause des capacités physique du PIC employé). C'est d'ailleurs ce que j'ai fait avec mon interface série RS232 001, dotée de 32 voies. Pour renforcer la sécurité et limiter le risque de réception de mauvais "codes", le programme intègre un système de vérification supplémentaire des données reçues, qui doivent alors être reçues de la même façon trois fois de suite pour être considérées comme valides. Cette protection peut être activée ou désactivée, au choix de l'utilisateur, via l'interrupteur SW2 Repeat.

Utilisation des ports du PIC
Les dix voies de télécommande sont partagées entre les ports A et B du PIC :
- 4 voies occupent une partie des E/S du port A : RA0 à RA3,
- 6 autres voies occupent une partie du port B : RB0 et RB3 à RB7.
Le port A possédant 8 pins d'E/S, il en reste 4 de disponibles :
- RA4, utilisée pour confirmer visuellement qu'une entrée (ou sortie) au moins est activée,
- RA5, non utilisée
- RA6, utilisée pour spécifier si le mode Répétition doit oui ou non être activé,
- RA7, utilisée pour spécifier le mode émission ou réception.
Le port B possédant 8 pins d'E/S, il en reste 2 de disponibles :
- RB1, configurée en UART-Rx et utilisée pour la réception des données (système utilisé en mode récepteur),
- RB2, configurée en UART-Tx et utilisée pour la transmission des données (système utilisé en mode émetteur).
En mode émetteur, une boucle de scrutation des entrées se charge de lire l'état des dix voies IO1 à IO10, et de transmettre une trame de données vers le récepteur si au moins une voie à changé d'état depuis la dernière lecture (ou trois trames répétées si le mode de protection supplémentaire Repeat est activé). Aucune interruption n'est utilisée dans ce mode.
En mode récepteur, aucune boucle de lecture de données n'est mise en oeuvre, l'entrée principale de données (RB1) déclanchant une interruption uniquement si des données arrivent. Les interruptions sont donc ici utilisées pour mettre à jour l'état des E/S configurées ici en sorties.
Vu l'utilisation faite ici des entrées / sorties, il est impératif que les deux PIC émetteur et récepteur tournent avec la même fréquence d'horloge. L'utilisation du mode RC basse fréquence (sans quartz) aurait pû faire notre affaire si le timing avait moins d'importance, mais on ne peut malheureusement pas se le permettre. L'emploi de l'oscillateur interne de 4 MHz a été choisi, et sa précision suffit amplement pour la vitesse de transmission de données employée ici, à condition toutefois que la température ambiante soit à peu près la même côté émetteur et récepteur.

Schéma 002b (désormais conseillé)

Même principe général de fonctionnement qu'avec le schéma précédent, avec quelques différences matérielles et logicielles.

telecommande_002b

Différences matérielles
Au niveau des 10 entrées / sorties de commande elles-mêmes, rien n'a changé. Mais voici pour le reste :
- présence du quartz externe de 4 MHz et de ses deux condensateurs associés pour une meilleur stabilité d'horloge;
- retrait de l'interrupteur SW2 qui permettait de choisir le mode "envoi seul / répétition" (désormais répétition obligatoire);
- déplacement de l'entrée du mode "émetteur / récepteur" (Tx/Rx) : anciennement en broche RA7, se trouve désormais en broche RA5.

Différences logicielles
Là, ça change pas mal :
- les commandes envoyées par l'émetteur sont toujours constituées de trois octets consécutifs et identiques.
- le récepteur envoie un accusé de réception quand un ordre a été correctement reçu. Cet accusé est matérialisé par un allumage bref de la LED de l'émetteur. Dans la version précédente 002, la LED s'allumait quand on envoyait un ordre, maintenant elle s'allume quand elle reçoit l'accusé de réception.
Si l'émetteur ne reçoit aucun accusé de réception dans les 200 ms qui suivent l'envoi de la commande, une nouvelle tentative (nouvel envoi de la commande) est effectuée. Si toujours aucune réponse au bout de 200 ms, troisième tentative. Pas plus de trois tentatives, ça ne servirait pas à grand chose. L'accusé de réception est constitué de trois octets :
- le premier octet est toujours égal à $FF, valeur qu'on ne rencontre jamais dans les commandes
- le second octet est identique à ceux reçus pour la commande
- le troisième octet est toujours égal à $FF.

Liaison deux fils ou trois fils ?
Ce mode de fonctionnement bidirectionnel implique des échanges de données dans les deux sens, que le module soit configuré en émetteur ou en récepteur. Il est donc nécessaire d'avoir trois fils de liaison (masse, Tx et Rx) pour bénéficier des accusés de réception. Il reste toutefois bien sûr possible de conserver une liaison bifilaire si on n'a que faire de ces accusés. Dans ce cas l'émetteur ne recevant pas d'accusé va réitérer ses commandes trois fois de suite, et le récepteur ne réagira que sur la première commande reçue avec succès. Ce qui veut dire qu'en terme de temps de réaction cela ne change absolument rien du tout (il est toujours voisin de 20 ms). Si pour une raison ou une autre la fonction d'accusé de réception vous semble superflue ou même vous embête, vous pouvez la supprimer puisque le code source est livré et que vous pouvez recompiler le programme avec la version gratuite de MikroPascal.

Schéma 002c - Version 8 bits plus rapide

Ce troisième schéma présente une grande ressemblance avec les deux précédents. On supprime deux lignes d'entrée / sortie (IO9 et IO10) et on ajoute un interrupteur (SW2) pour indiquer si l'envoi des données doit survenir sur un changement d'état des entrées ou si s'il doit être effectué de façon continue.

telecommande_002c

Mode d'envoi :
- si SW2 ouvert : mode OnChange, l'octet représentatif des entrées I1 à I8 est envoyé dès qu'une entrée au moins change d'état.
- si SW2 fermé : mode Continu, l'octet représentatif des entrées I1 à I8 est envoyé en rafale même si l'état des entrées ne change pas.
Le premier mode sera sans doute suffisant dans la majorité des cas, et permet une consommation un peu moindre. Mais si l'unique octet envoyé n'est pas correctement réceptionné, les sorties du module récepteur ne reflèteront pas forcement l'état des entrées du module émetteur. Avec le second mode, la perte éventuelle d'un octet au niveau du récepteur (liaison perturbée) ne pose pas de problème car ce dernier se "resynchronise" avec les octets suivants. Vous avez le choix, faites comme bon vous semble.
Remarque : si raccord des lignes d'entrée / sortie sur des circuits logiques CMOS ou TTL, les résistances de rappel R1 à R9 peuvent à priori être supprimées.

Mise en pratique des entrées et des sorties

Le montage est alimenté sous une tension de +5 V, ce qui le rend compatible TTL. Mais comment donc exploiter les entrées et les sorties ? Interrupteurs, boutons poussoirs et relais peuvent-ils être de la partie ?

Utilisation des entrées
Les broches du PIC qui peuvent servir d'entrées ou de sorties sont toutes reliées à la masse au travers de résistance de rappel, appelées en anglais pull-down. Quand ces broches sont utilisées en entrée, il faut appliquer une tension de +5 V pour les activer. Cette tension peut être amenée par un simple interrupteur ou par les contacts d'un relais, par exemple. Au repos, entrées désactivées, vous n'avez pas besoin d'amener une tension de 0 V puisque cela est déjà fait avec les résistances de rappel. Mais si vous le faites, ça ne pose pas de problème.

Utilisation des sorties
Quand les broches du PIC qui peuvent servir d'entrées ou de sorties sont configurées en sortie, vous disposez d'une tension de 0 V pour toute sortie désactivée et d'une tension de +5 V pour toute sortie activée. Quand une sortie est activée, la tension de +5 V peut servir à allumer une LED munie de sa résistance de limitation de courant, ou commander un relais via un petit transistor monté en commutation.

Commande relais 001

Si l'intention est de piloter plusieurs relais, vous aurez sans doute intérêt à utiliser un octuple darlington en circuit intégré tel un ULN2803 ou ULN2804 qui permet de piloter huit relais à lui seul. Pour plus de détails sur la commande de relais, merci de vous reporter aux pages Relais et Commandes logiques.

Liaison entre émetteur et récepteur

La liaison peut se faire avec fil ou sans fil. Si vous utilisez un câble, attention à sa longueur, qui peut poser problème à cause des parasites environnant (il y en a partout de nos jours). Si la longueur de la liaison dépasse quelques mètres, vous aurez intérêt à utiliser un mode de transport de type "courant" et non de type "tension", voir page Interface tension courant 001 pour un exemple d'interface autorisant une liaison grande distance. Pour une distance de plusieurs centaines de mètres, il est possible que la vitesse de transmission doive être baissée, par exemple à 1200 bauds ou 2400 bauds (au lieu de 9600 ou 19200 actuellement).

Logiciel du PIC

Comme dit auparavant, le programme est le même pour le mode émetteur et le mode récepteur, même si bien sûr les routines internes mises en oeuvre diffèrent selon le mode choisi. Vous devez donc charger dans votre PIC le programme mis ici à disposition, et choisir ensuite son mode d'utilisation en appliquant sur la borne RA7 (schéma 002) ou RA5 (schéma 002b ou 002c) un état logique haut (mode émetteur) ou un état logique bas (mode récepteur), avec l'interrupteur SW1. Le code a été écrit en MikroPascal V8.3 pour la version 002, en MikroPascal Pro V3.20 pour la version 002b et en MikroPascal V3.80 pour la version 002c. Les trois ensembles de fichiers (codes sources et fichiers compilés *.hex) sont dispos dans la même archive dont le lien suit :
Telecommande 002, 002b et 002c- 16F628A - (07/11/2010)
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Circuit imprimé

Non réalisé. Vue 3D uniquement faite pour donner un aperçu des composants utilisés.