Contrôleur de LED

Le contrôleur, dont vous trouverez la documentation ici, permet de faire varier l'intensité lumineuse de 24 LEDs, en utilisant une modulation appelée PWM. Il est relié aux broches "colonnes" de la matrice de LED. Les broches "lignes" sont directement sur des GPIO sur processeur. Conséquence, pour allumer la LED en haut à gauche en rouge, on fera ceci :

  • on mettra la GPIO correspondant à la ligne 0 à VCC, et celles aux autres lignes à GND.
  • on programmera le DM163 pour qu'il fasse passer du courant sur la LED rouge de la colonne 0 (broche 28 de la matrice), et pas de courant sur les autres broches de colonne.

Comment contrôler le DM163 ?

Le DM163 est un double registre à décalage :

  • le premier, appelé BANK0 qui stocke 6 bits par LED. Il contient donc 24*6 = 144 bits.
  • le deuxième, appelé BANK1 qui stocke 8 bits par LED. Il contient donc 24*8 = 192 bits.

L'intensité passant dans chaque LED sera proportionnelle à (BANK0/64) * (BANK1/256).

Nous n'utiliserons que le BANK1, de façon à avoir 256 degrés d'intensité par LED, ce qui nous donne 16 millions de couleurs par point de la matrice.

Conséquence : pour pouvoir utiliser le BANK1, il faudra auparavant mettre tous les registres de BANK0 à 1 (si on les met à zéro, les LEDs seront éteintes quel que soit ce qui est stocké dans BANK1).

Le protocole de communication avec le DM163 est simple. C'est un protocole série, où :

  1. on commence par sélectionner le registre à décalage qu'on veut mettre à jour à l'aide du signal SB : 0 pour BANK0, 1 pour BANK1
  2. on envoie sur SDA le bit de poids fort de la dernière LED (led23[7] si on met à jour le BANK1, led23[5] si on met à jour le BANK0),
  3. puis on fait un pulse positif sur SCK (front montant puis front descendant)
  4. et on recommence en 2 jusqu'à ce que tous les bits aient été envoyés
  5. enfin, on fait un pulse négatif sur LAT, ce qui transfère le contenu du registre à décalage dans le BANK choisi. Les sorties du DM163 sont alors mises à jour instantanément.

Timings communication DM163