Electronique > Réalisations > Affichage / Mesures > Enc-LED-Ring 002 (encodeur avec anneau LED)

Dernière mise à jour : 13/07/2025

Présentation

Ce circuit comporte sur un même circuit imprimé un encodeur rotatif et un anneau de 12, 15 ou 20 LED. 

encoder-led-ring_002a_pcb_3d_front encoder-led-ring_002b_pcb_3d_front encoder-led-ring_002c_pcb_3d_front encoder-led-ring_002d_pcb_3d_front   
   

Par rapport à la version Enc-LED-Ring 001, ce modèle présente une particularité : celle de transmetre une valeur numérique comprise entre 0 et 255 ou un caractère "+" ou "-", selon le sens de rotation de l'encodeur. Pour cela, un petit microcontrôleur PIC24 a été mis à contribution. Il assure à lui seul le "décryptage" des signaux en quadrature A et B de l'encodeur, le pilotage/affichage des LED et la transmission des données sur un port série. Quatre circuits ont été étudiés :

- Schéma 002a : version avec PIC24F04KA200 et 12 LED, modes Point et Ruban
- Schéma 002b : version avec PIC24F04KA200 et 15 LED, mode Ruban seul
- Schéma 002c : version avec PIC24F04KA200 et 20 LED, mode Ruban seul
- Schéma 002d : version avec PIC24F08KA101 et 20 LED, modes Point et Ruban

La limitation "mode ruban seul" des versions 002b et 002c est liée à la taille mémoire programme du PIC24F04KA200 qui n'est que de 4K et insuffisante pour tout faire avec 15 ou 20 LED, raison pour laquelle le PIC24F08KA101 avec ses 8K de mémoire est venu à la rescousse pour la version 002d.

   

Schéma 002a (12 LED avec PIC24F04KA200)

Le schéma révèle le coeur du montage : un encodeur EC12D à contacts mécaniques et un PIC24 pour la gestion de l'ensemble.

   
encoder-led-ring_002a

   

Schéma 002b (15 LED avec PIC24F04KA200)

Idem schéma 002a, mais avec 15 LED au lieu de 12.

encoder-led-ring_002b

 

Schéma 002c (20 LED avec PIC24F04KA200)

Idem schéma 002a, mais avec 20 LED au lieu de 12.

encoder-led-ring_002c

   

Schéma 002d (20 LED avec PIC24F08KA101)

Changement de PIC pour un petit complément de resources mémoire programme bienvenu.
 
encoder-led-ring_002d

   

Fonctionnement

Le fonctionnement de base est identique pour toutes les versions :
- décodage du sens de rotation de l'encodeur rotatif
- affichage LED sur anneau 12, 15 ou 20 éléments
- transmission de données au format série UART-TTL

Décodage des signaux A et B
L'encodeur rotatif EC12D permet d'obtenir les deux signaux en quadrature de phase sur les broches A et B quand l'axe est mis en mouvement dans un sens ou dans l'autre. Ce modèle équipé de contacts mécaniques ne réclame aucune alimentation, contrairement aux encodeurs équipés de LED. Les broches A et B de l'encodeur sont directement reliées à deux broches du microcontrôleur PIC24 configurées en entrées avec pullup internes activées. Quand les contacts mécaniques se ferment, on dispose de signaux logiques actifs à l'état bas qui provoquent des interruptions au sein du PIC.

Affichage LED
L'affichage LED se fait en mode Point ou en mode Ruban. Dans le mode Point, une seule LED au maximum peut être allumée à tout instant. En mode Ruban, plusieurs LED peuvent s'allumer "en même temps". Dans le second cas, la consommation moyenne de courant est plus élevée, tout en restant modeste (environ 20 mA). Le microcontrôleur PIC24 assure l'affichage en mode multiplexé des LED selon un principe astucieux qui permet de n'utiliser que 4 ou 5 lignes d'entrée/sortie (méthode expliquée à la page Affichage Multiplexé). C'est grâce à ce principe qu'on peut ici se contenter d'un boitier 14 broches pour assurer la totalité des fonctions.

Remarque : pour la version 12 LED, 4 lignes d'entrée/sortie suffisent. Si j'en ai utilisé 5, c'est pour assurer la compatibilité de câblage entre les 3 versions 12/15/20 LED.

Chacune des LED travaille sur une période de temps partagé : 1/12 du temps total pour la version à 12 LED, 1/20 du temps pour la version à 20 LED. La vitesse de rafraichissement global est de 1 kHz, soit environ 83 Hz pour chaque LED dans la version 12 LED, ou encore 50 Hz pour la version 20 LED. Ce rythme est assez élevé pour limiter le risque de scintillement gênant.

Synchronisation avec votre système
Les données émises (Tx) ou reçues (Rx) par l'encodeur 002a respectent le format de transmission série (UART) suivant :
19200 bauds, 8 bits data, 1 bit stop, sans parité
Un seul octet est nécessaire pour définir la valeur transmise, cette dernière sera donc limitée à la plage 0-255.
Transmission
Au repos, quand l'encodeur mécanique n'est pas manipulé, aucune donnée n'est transmise sur la sortie Tx. Dès qu'une rotation vers la gauche ou la droite est detectée, un octet est transmis sur la sortie Tx. Cet octet représente :
Comme les données émises par l'encodeur 002a sur la sortie Tx se limitent à un octet par valeur transmise, la durée d'un message est d'environ 500 us (0,5 ms).
Réception
Votre système peut transmettre des données sur l'entrée Rx de l'encodeur 002a afin de le synchroniser lors de la mise sous tension, pour permettre un affichage LED autre que "0" et correspondant à une valeur mémorisée dans votre système (preset ou recall). Les données reçues par l'encodeur sont retransmises en écho pour valider leur bonne prise en compte. Un buffer circulaire de 128 octet permet au système de digérer de grandes quantités de données entrantes dans de courts intervales de temps.
La valeur à transmettre pour allumer une ou plusieurs LED peut être comprise entre 1 et 248. Le bit de poids fort (bit #7) détermine le mode d'affichage Point (bit7=0) ou Ruban (bit7=1). Ainsi, toute valeur inférieure à 128 correspond au mode d'affichage Point, alors que toute valeur supérieure à 128 correspond au mode ruban. Le tableau ci-après résume les valeurs acceptées.
   
Pilotage de 12 LED (schéma 002a)
Mode Point Mode Ruban
Aucune LED allumée 0, 128
LED1 1~10 129~138
LED2 11~20 139~148
LED3 21~30 149~158
LED4 31~40 159~168
LED5 41~50 169~178
LED6 51~60 179~188
LED7 61~70 189~198
LED8 71~80 199~208
LED9 81~90 209~218
LED10 91~100 219~228
LED11 101~110 229~238
LED12 111~120 239~248
Aucun changement 121 à 127, 249 à 255
-

Pilotage de 20 LED (schéma 002d)
Mode Point Mode Ruban
Aucune LED allumée 0, 128
LED1 1~6 129~134
LED2 7~12 135~140
LED3 13~18 141~146
LED4 19~24 147~152
LED5 25~30 153~158
LED6 31~36 159~164
LED7 37~42 165~170
LED8 43~48 171~176
LED9 49~54 177~182
LED10 55~60 183~188
LED11 61~66 189~194
LED12 67~72 195~200
LED13 73~78 201~206
LED14 79~84 207~212
LED15 85~90 213~218
LED16 91~96 219~224
LED17 97~102 225~230
LED18 103~108 231~236
LED19 109~114 237~242
LED20 115~120 243~248
Aucun changement 121 à 127, 249 à 255
-

Une valeur de 0 ou 128 provoque l'extinction de toutes les LED, et une valeur comprise dans la plage [121..127] ou dans la plage [249..255] n'engendre aucun changement. La partie de code utilisée dans le PIC pour l'affichage des LED en fonction de la valeur en cours (ou dernièrement reçue) est la suivante (pour la version à 12 LED) :
 

procedure Disp_ValueToLEDs(iVal: byte);
begin
  if ((iVal >= 121) and (iVal <= 127)) or (iVal >= 249) then exit;
  iLEDs := $00;
  iLEDs.1  := (((iVal >= 001) and (iVal <= 010)) or (iVal >= 129));
  iLEDs.2  := (((iVal >= 011) and (iVal <= 020)) or (iVal >= 139));
  iLEDs.3  := (((iVal >= 021) and (iVal <= 030)) or (iVal >= 149));
  iLEDs.4  := (((iVal >= 031) and (iVal <= 040)) or (iVal >= 159));
  iLEDs.5  := (((iVal >= 041) and (iVal <= 050)) or (iVal >= 169));
  iLEDs.6  := (((iVal >= 051) and (iVal <= 060)) or (iVal >= 179));
  iLEDs.7  := (((iVal >= 061) and (iVal <= 070)) or (iVal >= 189));
  iLEDs.8  := (((iVal >= 071) and (iVal <= 080)) or (iVal >= 199));
  iLEDs.9  := (((iVal >= 081) and (iVal <= 090)) or (iVal >= 209));
  iLEDs.10 := (((iVal >= 091) and (iVal <= 100)) or (iVal >= 219));
  iLEDs.11 := (((iVal >= 101) and (iVal <= 110)) or (iVal >= 229));
  iLEDs.12 := (((iVal >= 111) and (iVal <= 120)) or (iVal >= 239));
end;

 
Dans le code qui précède, on distingue dans chaque ligne  iLEDs.x :=  la portion qui assure l'allumage en mode Point (condition de gauche) et celle qui assure l'allumage en mode Ruban (condition de droite).

  

Utilisation du système

La sortie Tx de l'encodeur 002a doit aboutir à l'entrée Rx de votre système, et l'entrée Rx de l'encodeur 002a doit aboutir à l'éventuelle sortie Tx de votre système (câblage facultatif pour cette deuxième liaison).

   

Prototype

En cours de réalisation pour la version 002d avec PIC24F08KA101 (ou PIC24F16KA101).
PCB en attente de réception.

    

Logiciels du PIC

Les fichiers binaires compilés *.hex à flasher dans le PIC est disponible dans l'archive zip ci-après. 
Enc-LED-Ring_002x - 24F0xKAxxx - (13/07/2025)
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

     

Circuits imprimés (PCB)

Tous sont réalisés en double face. Les trois circuits 002a, 002b et 002c avec PIC24F04KA200 ont une base identique, mais les PCB sont forcément différents du fait que chacun héberge un nombre de LED différent.
 
encoder-led-ring_002a_pcb_components_top encoder-led-ring_002b_pcb_components_top encoder-led-ring_002c_pcb_components_top
 
Le circuit 002d avec PIC24F08KA101 est le plus complet et le boîtier du PIC est un SOP (espacement broches de 1,27 mm), nettement plus facile à souder que le boîtier SSOP du PIC24F04KA200 (espacement broches de 0,65 mm).

encoder-led-ring_002d_pcb_components_top 

Pour toutes les versions, le PIC et les résistances de limitation de courant des LED sont câblés "côté soudure".

   

Historique

13/07/2025
- Première mise à disposition