2009-07-15 10 views
5

Ich habe gerade ein Rainbowduino gekauft, um eine Last von einzelnen LEDs (keine RGB-Matrix) zu steuern. Die ganze bisherige Dokumentation zielt auf die Steuerung von RGB-Arrays ab, was nicht ist, wonach ich suche.Probleme bei der Steuerung eines Rainbowduino

Wenn Sie mit dem Rainbowduino nicht vertraut sind, handelt es sich um einen Arduino Klon mit 24 Konstantstromkanälen von 120 mA, 8 Superquellen-Treiberkanälen von je 500 mA und einer großen Ausgangsspannung von 5 V - 12 V DC. Perfekt zum Ansteuern von LEDs. Die Produktwebseite befindet sich hier: http://www.seeedstudio.com/blog/?page_id=187

Ich habe 16 LEDs angeschlossen und möchte sie einzeln mit digitalWrite() ein- und ausschalten können. Ich habe einen Demo-Code auf das Board hochgeladen, der nicht wirklich funktioniert. Ich habe herausgefunden, dass die 8 Treiber Quellkanäle leicht steuerbar sind mit digitalWrite() auf den Pins 3-11. Die Steuerung der anderen 24 Senkenkanäle ist jedoch schwieriger. Anscheinend werden sie von 3 Schieberegistern (jeweils eins) gesteuert, auf die ich nur mit shiftOut zugreifen kann. Ich habe keine Ahnung, wie das funktioniert. Kann mir jemand helfen, in die richtige Richtung zu weisen?

Die Hälfte der LEDs ist in Blau 1-8 und die andere Hälfte in Grün 1-8 verdrahtet. Die positiven Zweige sind in VCC1-2 verdrahtet, die auf HIGH gesetzt wurden. Ich bin zuversichtlich, dass die Schaltung richtig verdrahtet ist, es ist die Programmierung, mit der ich Probleme habe.

Ich habe über den Beispielcode nachgeschaut, der mit dem Rainbowduino geliefert wird, aber ich kann keinen Sinn daraus machen. Wie kann ich dieses Problem beheben?

+0

Ein Bild von meiner Schaltung so weit: http://farm3.static.flickr.com/2436/3716019895_99b95b30c6_b.jpg Auch Heres eine Verbindung zu der Rainbowduino Beispielskizze: http://www.seeedstudio.com/depot/images/product/RaibowduinoCMD_Bata.rar – James

+0

Was meinst du mit "a 3 shift register"? – unwind

+0

Das wurde mir von jemand anderem gesagt, ich nehme an, es ist ein 3 Bit Schieberegister. – James

Antwort

3

Die Verwendung eines Schieberegisters zum Multiplexen (oder Demultiplexen, je nach Blickwinkel) von Ein-/Ausgängen ist in der digitalen Elektronik sehr üblich.

Grundsätzlich tauschen Sie Sparpins auf Ihrem Controller, um einen weiteren Chip (das Schieberegister) in das Design einbeziehen zu müssen.

In diesem Fall arbeitet das Register als Seriell-zu-Parallel-Konverter; Es hat eine serielle Eingangsleitung, die mit Bits von Ihrer CPU gespeist wird. Es hat auch 8 parallele Ausgänge, die mit einem 8-Bit-Speicher verbunden sind, der seriell von der CPU geladen wird. Damit können Sie 8 Datenbits auf einem einzelnen Pin (plus einem Pin für die Taktung) "verschieben", die dann im Schieberegister gespeichert werden und 8 LEDs parallel treiben können.

In diesem speziellen Fall müssen Sie herausfinden, welche AVR-Port pins die Schieberegister (die MBI5168 Konstantstrom-Senke Treiber enthalten die Schieberegister, hier) verbunden sind. Sie sollten an ein Paar Ausgänge gekoppelt sein, einen für Daten und einen für Takt. Sobald Sie diese Pins kennen, sollten Sie in der Lage sein, sie selbst mit dem Befehl ShiftOut zu fahren.

etwas weiter Graben, this sample "sketch" enthält die folgenden Definitionen in der Datei mit dem Namen „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 

Das ist natürlich total digital „Hörensagen“ (ich das Gerät nicht besitzen, Ich habe noch nie auf irgendeine Art von Duino programmiert, aber ich würde sagen, das ist das Partikel speiende Geschosssystem, das du suchst.

I diese so zu interpretieren, wie:

  • PORTC der einen in die Schieberegister verbunden ist, werden alle Steuerstifte in PORTC.
  • Vier Pins sind dediziert (anstatt der optimistischen zwei, die ich oben erwähnt habe).
  • Die Uhr ist PIN PORTC: 2 und die Daten sind PORTC: 1.
+0

Danke entspannen, ich bin vertraut mit den Grundlagen der Schieberegister, aber ich weiß nicht, welche 2 Ports (Daten-Pin und Clock-Pin) ich für jeden Kanal verwenden muss. – James

+0

Vielen Dank nochmal entspannen. Ich habe deine Antwort zusammen mit dem Beispielcode verwendet, den das Rainbowduino gestern gepostet hat (hier: http://www.seeedstudio.com/blog/?p=512) und jetzt funktioniert es perfekt. Video hier: http://www.youtube.com/watch?v=t9m28RFg14E – James

2

jede einzelne LED Steuerung ist recht zeitaufwendig, es besser ist, in Reihen zu denken, während jede LED-Farbe wie auf Bit dargestellt wird, so ist es 8 Bit x 3 Farben (rot, grün, blau). Ich schrieb eine kleine Rainbowduino Bibliothek, die Sie jede Zeile oder Rahmen leicht einstellen können:

Read my blog post on that

+1

ah, ein und sehe meinen Rainbowduino Editor: mtXcontrol auch: http://www.rengtg.com/mtXcontrol – RngTng

Verwandte Themen