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?

Était-ce utile?

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:

Lire mon blog sur ce

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top