Sinon pour le codage des 2 shift register:
c est plus en série (sur 3 sortie) ou 2 biens distinct donc sur 6 sortie ? (pour un débutant)
On peut faire les 2.
Petit topo sur les shift register :
C'est une puce qui sert de convertisseur série vers parallèle. Ces mots sont à prendre dans le même sens que les câbles informatique.
En mode parallèle, chaque diode a un fil. Il faut donc plein de fils (et dans le cas de l'arduino de ports).
En mode série, on un nombre de fils (et donc de ports) fixe et on envoie les informations les unes après les autres.
Le shift register le plus courant fait 3 fils en entrées et 8 en sorties (je ne compte pas l'alimentation). Ca veut dire qu'on utilise 3 ports pour commander 8 diodes (par exemple). Je connais le principe en sorties mais il semblerait que ça puisse fonctionner en entrée aussi.
Voilà à quoi servent les 3 fils :
A) données (data) : on le met à 0 ou à 1
B) décaler (clock) : ça sert à passer à la valeur suivant
C) appliquer (register) : on valide les 8 valeurs
Le principe de fonctionnement est le suivant :
1) on met A à 0 ou 1 suivant nos besoins
2) on met B à 1
3) on recommence 1 et 2 jusqu'à avoir fixé les 8 valeurs
4) on met C à 1 pour valider
En fait, on donner une valeur à chaque sortie, une par une puis on va valider. Ca prend 3 fils au lieu de 8 mais c'est à peu près 2 fois plus long (17 opérations au lieu de
. Pour l'instant, 2 fois pas beaucoup, c'est encore peu.
Si on veut plus de 8 sorties, on peut bien sûr reproduire ce montage à l'identique, sur 3 autres sorties mais on peut mieux faire : avec on peut utiliser les ports B et C sur les 2 puces, du coup on passe à 4 sorties pour 16. Ca commence à être intéressant d'autant que ça ne va pas être plus long.
Le fonctionnement devient (si A' est le nouveau port) :
1) on met A et A' à 0 ou 1 suivant nos besoins
2) on met B à 1
3) on recommence 1 et 2 jusqu'à avoir fixé les 8 valeurs
4) on met C à 1 pour valider
Bref c'est pareil sauf qu'on fixe les 2 ports de données en même temps (à des valeurs éventuellement différentes) puis on passe au port suivant et ainsi de suite. Ici on a 25 opérations au lieu de 16, ça va encore.
On peut rajouter encore des shift register si besoin.
Le problème c'est qu'on utilise une sortie de plus par lot de 8. Ca va être bien pour un lot de 32 diodes mais pour une matrice de 32x16 ça va pas aller. Du coup, on peut les mettre en série.
Dans ce mode, on va demander à notre shift register de piloter d'autres shift register qu'on a branché dessus. On a sans doute plusieurs branchements possibles mais celui qui me vient à l'esprit est le suivant :
SR0 = shift register commandé directement par l'arduino
SR1 à SR8 = shift register commandés par le SR0 (mais je branche quand même le fil qui sert à décaler et à appliquer à l'arduino (en les reliant aux
, ça me fait 5 fils.
A) données SR0 : on le met à 0 ou à 1
B) décaler SR0 : ça sert à passer à la valeur suivant
C) appliquer SR0 : on valide les 8 valeurs
D) décaler SR1 à SR8
E) appliquer SR1 à SR8
La procédure sera un peu plus lourde (y compris au niveau du code) :
1) on met A à 0 ou 1 suivant nos besoins
2) on met B à 1
3) on recommence 1 et 2 jusqu'à avoir fixé les 8 valeurs du premier port de chaque SRx
4) on met C à 1 pour valider
5) on recommence 1, 2, 3 et 4 jusqu'à avoir fixé les 8 valeurs des 8 SRx
Là on a :
- 5 ports utilisés sur l'arduino
- 64 ports commandés
- 136 opérations pour commander 64 ports
Voilà, on peut continuer tant qu'on veut. A un moment donné on doit choisir de complexifier ou de prendre un arduino avec plus de ports.
Reste que si on a juste 32 leds à allumer une par une, on a juste besoin de savoir quelle diode allumer en plus et ça fait juste une opération en parallèle ou 17 si on a la led sur un SR mais si on a 64 ports avec des SR comme indiqué plus haut, on ne peut pas changer une seule led, il faut tout reparamétrer et ça fait du coup 136 opérations contre 1 avec un super aduino qui aurait plus de 32 sorties.
x136 ça commence à ne pas être ridicule : si on imagine que l'arduino ne soit pas très rapide et mette 1/100è de seconde à faire une opération (je ne connais pas le vrai chiffre), on passerait à plus d'une seconde.
Si on passe à une matrice à LED de 512 leds, on a le choix entre un lag de 2 ou 3 secondes (valeur toujours au pif, ça peut être 10 fois plus ou 10 fois moins) et optimiser le circuit. Mieux vaut acheter un circuit tout près et optimisé.
Alors je continu encore et encore a me documenter et j ai pu lire que toute les leds allumé en même temps consommerait trop.. Avez vous des infos la dessus ?
Là on commence à sortir de mon domaine : je ne suis pas très calé en électronique.
J'ai lu qu'un arduino uno ne peut pas dépasser 200mA sur le port et qu'une diode consommait 20mA. On va vite avoir un problème si on allume tout (merci pour la remarque soit dit en passant).
La solution me semble de l'ordre de l'électronique : il va falloir utiliser des transistors pour commander l'allumage des diodes.
Un transistor permet de contrôler un circuit qui est alimenté à part. On peut espérer que ça consomme pas grand chose et que ça fasse l'affaire.
Dit autrement, on a une alimentation indépendante qui fait s'allumer les diodes mais on intercale des transistors (il doit leur falloir une résistance aussi) dont on branche la 3è patte sur l'arduino.
Si je n'ai pas été assez clair, posez moi toutes les questions que vous voulez.
Régis.