jeudi 8 novembre 2012

expérimentation avec PIC10F322, partie 4, charlieplexing

La technique de multiplexage appellée charlieplexing tire avantage des interfaces 3 états comme ont les retrouvent sur les MCU. Par interface 3 états j'entends un port dont les connections externes peuvent-être configurées en entrée ou en sortie. Il y a effectivement 3 états puisqu'en configuration sortie, on peut avoir un niveau haut ou bas tandis que si la connection est configurée en entrée on a un 3ième état qui est la haute impédance (résistance).

Je disais donc que le charlieplexing tire avantage de ces 3 états en permettant de contrôler un nombre supérieur de dispositifs qu'il y a d'E/S. Le nombre possible est de
N*(N-1)
ou N est le nombre d'E/S utilisées.
Pour cette expérience puisqu'on utilise un PIC10F322 on dispose de 3 broches configurables en entrée ou en sortie. Ce qui nous donne la possibilité de contrôler 6 LEDs. Comme indiqué sur le schéma suivant:




fonctionnement du charlieplexing

Si on se réfère on schéma ci-haut on voit que les LEDs sont connectées entre 2 broches. Si par exemple on veut allumer D1 qui est branchée entre RA0 et RA1, on configure RA0 et RA1 en sortie et on laisse RA2 en mode entrée haute impédance. On met ensuite la Sortie RA1 à 1 et RA0 à 0 de sorte que le courant va passé de RA1 vers RA0 à travers D1. D2 reste éteinte puisque qu'une diode ne conduit pas dans le sens inverse. Pour allumer D2 on inverse les polaritées. C'est à dire qu'on mets RA1 à 0 et RA0 à 1. Les diodes électroluminescentes fonctionnent donc par paires branchées entre les 2 mêmes broches:

  • D1 et D2 entre RA0 et RA1
  • D3 et D4 entre RA0 et RA2
  • D5 et D6 entre RA1 et RA2

Donc pour contrôler D3 et D4 on laisse RA1 en mode entrée et on configure RA0 et RA2 en mode sortie. De même pour contrôler D5 et D6 on laisse RA0 en entrée haute impédance et on configure RA1 et RA2 en mode sortie. De cette manière chacune des 6 LEDs peut-être allumée individuellement. Évidemment on ne peut toutes les allumées en même temps mais à cause de la persistance rétinienne si on allume séquentiellement chacune d'elle à tour de rôle rapidement on a l'impression qu'elles sont toutes allumées en même temps, c'est ce qu'on appelle un affichage multiplexé. Tous les affichages qui utilise un nombre élevé d'éléments sont multiplexés, c'est le cas pour l'éran de votre ordinateur et de votre téléviseur et on a pourtant l'impression que tous les pixels sont allumés en même temps.

expérimentation

Cette expérience utilise le montage illustré dans le schéma ci-haut et le programme charlieplexing.asm. Le fichier de macros pic10f322_m.inc est aussi nécessaire.

Le logiciel a 2 modes de fonctionnement. Le premier mode est un compteur binaire qui compte de 0 à 63 en boucle et le deuxième est un LED allumé qui se promème de gauche à droite et de droite à gauche alternativement. On passe d'un mode à l'autre en pressant le bouton qui est branché sur RA3.

Description du logiciel

Le timer0 est configuré pour générer une interruption à tous les 256usec. La routine d'interruption appelle la sous-routine charlie qui gère l'afficheur. la s.r. charlie affiche le contenu de la variable dsp_byte. A chaque appelle de la s.r. un nouveau bit est affiché. On passe d'un bit à l'autre en boucle. Comme il y a 6 bits à afficher le cycle complet prend 6*256usec, soit 1,5msec. La fréquence de muliplexage est donc de 667Herz. Beaucoup trop rapide pour que l'oeil percoive qu'il n'y a qu'un seul LED d'allumé à la fois. À 70herz l'oeil ne perçoit déjà plus de scintillement.

La routine principale du programme ne fait que gérer la lecture du bouton et le mode de fonctionnement. Dans le mode 0 la variable dsp_byte est simplement incrémentée 4 fois par seconde. Dans le mode 1 tous les bits de dsp_byte sont à zéro sauf 1 et ce bit est déplacé de gauche à droite et de droite-gauche avec les instructions rlf et rrf. A chaque fois que le bit arrive à une extrémitée la direction du déplacement est inversée.


Aucun commentaire:

Publier un commentaire