Julien De Bona
Free Software, Cooking, and Everything


Charlieplexing amélioré

Publié le 2015-02-22.

Dans ma dernière fiche, j'ai présenté une manière de faire du charlieplexing.  Après avoir dépecé une lampe à LEDs, j'ai découvert qu'il manquait deux propriétés au câblage que j'ai présenté.  Ces propriétés sont:

  • la proximité des LEDs opposées; je voudrais que deux LEDs connectées aux deux mêmes pins aient des numéros consécutifs
  • l'extensibilité: je voudrais ne pas avoir à recâbler tout lorsque l'augmentation du nombre de LEDs nécessite d'utiliser un pin en plus

Le schéma de numérotation est le suivant (chaque ligne est une LED, chaque colonne est un pin):

LED \ Pin43210
0   +-
1   -+
2  + -
3  - +
4  +- 
5  -+ 
6 +  -
7 -  +
8 + - 
9 - + 
10 +-  
11 -+  
12+-   
13-+   

Sous forme de code, cela donne:

void setPins(byte led,byte *high,byte *low) {
  byte rhigh,rlow;
  if (led == 0) {
    *high = 1;
    *low = 0;
  } else {
    setPins(led-1,&rhigh,&rlow);
    if (rhigh > rlow) {
      *high = rlow;
      *low = rhigh;
    } else if (rlow - rhigh > 1) {
      *high = rlow;
      *low = rhigh + 1;
    } else {
      *high = rlow +1;
      *low = 0;
    }
  }
}

La fonction est récursive et peut être injectée dans le sketch du premier article sur le charlieplexing.  Le câblage doit être adapté en conséquence; on a deux possibilités.
La première garde la même apparence que l'expérience précédente:

La deuxième apparie les LEDs (remarquer comme les polarités des LEDs rouges et vertes sont opposées):

On peut voir que les objectifs sont atteints

  • Le fil orange (3ème pin) n'intervient qu'à partir de la 3ème LED (les 2 premières sont gérées par les 2 premiers pins)
  • Le fil bleu (4ème pin) n'intervient qu'à partir de la 7ème LED (les 6 premières sont gérées par les 3 premiers pins)
  • Le câblage est fortement réduit.

tags: arduino

Quelques tags ...