Les problèmes de contrôle d'un Rainbowduino
Question
Je viens d'acheter un Rainbowduino pour contrôler une charge de diodes individuelles (pas une matrice RVB). Toute la documentation à ce jour vise à contrôler des réseaux RVB qui est pas ce que je suis après.
Si vous n'êtes pas familier avec le Rainbowduino il est Arduino clone de 24 canaux avec courant constant de 120 mA, 8 super-canal de commande de source de 500 mA chacune et une grande tension de sortie de 5 l'adaptation V - 12 V DC. Parfait pour l'entraînement des LED. La page Web du produit est ici: http://www.seeedstudio.com/blog/?page_id= 187
J'ai connecté jusqu'à 16 LED et que vous souhaitez pouvoir tourner chacun et hors individuellement avec digitalWrite()
. J'ai téléchargé un code de démonstration au conseil d'administration qui ne fonctionne pas vraiment. J'ai travaillé que les 8 canaux source de pilote sont facilement contrôlables avec digitalWrite()
sur les broches 3-11. Cependant le contrôle des autres 24 canaux d'évier est plus difficile. Apparemment, ils sont commandés par 3 registres à décalage (un de chaque) que je ne peux accéder avec SHIFTOUT. J'ai aucune idée de comment cela fonctionne. Quelqu'un peut-il aider à me diriger dans la bonne direction?
La moitié des LED sont câblés en bleu 1-8 et l'autre moitié sont câblés en vert 1-8. Les jambes positives sont câblés en VCC1-2 qui ont été mis à HIGH. Je suis convaincu que le circuit est branché correctement, il est la programmation que je vais avoir des problèmes avec.
Je l'ai regardé le code d'échantillon qui est livré avec le Rainbowduino, mais je ne peux pas lui donner un sens. Comment puis-je résoudre ce problème?
La solution
L'utilisation d'un registre à décalage à multiplexer (ou démultiplexer, selon votre point de vue) entrées / sorties est très courant dans l'électronique numérique.
En gros, le commerce vous permet d'économiser sur les broches de votre contrôleur pour avoir à inclure une autre puce (le registre à décalage) dans la conception.
Dans ce cas, le registre fonctionne comme un convertisseur série-parallèle; il comporte une ligne d'entrée en série, qui est alimenté avec des bits à partir de la CPU. Il a également 8 sorties parallèles, connectées à une mémoire de 8 bits qui est chargé en série à partir de la CPU. Avec cela, on peut « shift out » 8 bits de données sur une seule broche (plus une broche pour cadencer, typiquement), qui sont ensuite stockés dans le registre à décalage et peut conduire 8 LED en parallèle.
Dans ce cas particulier, vous devez comprendre que les broches du port AVR les registres de décalage (les pilotes de puits à courant constant MBI5168 contiennent les registres à décalage, ici) sont connectés. Ils devraient être enchaîné à une paire de sorties, une pour les données et l'un pour l'horloge. Une fois que vous savez ces broches, vous devriez être en mesure de les conduire vous-même en utilisant le SHIFTOUT commande .
bêcher un peu plus loin, cet échantillon "croquis" contient les définitions suivantes, dans le fichier appelé « Rainbow.h »:
//MBI5168
#define SH_DIR_OE DDRC
#define SH_DIR_SDI DDRC
#define SH_DIR_CLK DDRC
#define SH_DIR_LE DDRC
#define SH_BIT_OE 0x08
#define SH_BIT_SDI 0x01
#define SH_BIT_CLK 0x02
#define SH_BIT_LE 0x04
#define SH_PORT_OE PORTC
#define SH_PORT_SDI PORTC
#define SH_PORT_CLK PORTC
#define SH_PORT_LE PORTC
Ceci est bien sûr « ouï-dire » numérique totale (je ne possède pas l'appareil, je ne l'ai jamais programmé sur tout type de * Duino), mais je dirais que c'est le système de distribution balles de particules crachant vous » cherchez.
J'interprète cela comme ceci:
- PORTC est celle reliée aux registres à décalage, toutes les broches de commande sont en PORTC.
- Quatre axes sont dédiés (plutôt que les deux optimistes je l'ai mentionné ci-dessus).
- L'horloge est broche PORTC: 2 et les données sont PORTC: 1.
Autres conseils
Le contrôle de chaque LED est temps assez cher, il est préférable de penser en lignes, alors que chaque couleur LED est présenté comme le bit, il est donc 8 bits x 3 couleurs (rouge, vert, bleu). J'ai écrit une petite bibliothèque Rainbowduino qui vous permet de définir chaque ligne ou cadre facilement: