Rainbowduino RGB Matrix, Leds einzeln ansteuern

Hallo Arduino Board! =)
Ich habe seit einen Monat ein Arduino Duemilanove, ein Rainbowduino und dazu eine RGB LED Matrix im Format 8x8. Auf der Seeedstudio Seite habe ich auch schon die Beispielprogramme heruntergeladen und erfolgreich getestet. Es lässt sich wirklich schwer erschließen wie die Leds angesteuert werden auch aufgrund weniger Bemerkungen an den Beispieldateien. Meine Frage ist, kann mir einer vielleicht eine ausführliche erklärung geben wie ich das mache? Es reicht aus, wenn ich das Grundprinzip verstehe, also eine einzige RGB LED in der Matrix zum leuchten bringen eventuell zwei.
Ich wäre sehr sehr dankbar, wenn sich einer bereit erklären würde.
Viele liebe Grüße

keiner eine Idee??

naja, da isn thread keine 2 seiten von hier entfernt. guck ma da rein.
Syntax hab ich keine ahnung, aber dort erliest du dir wie der prinzipiel funktioniert... Ich hab noch nie mit dem gehandwerkt, und weiß nimmer was die lib hergibt.

Hallo, ichahbe auch schon ein bischen rumgebastelt und geraetselt. ChrisS ebenfalls. Nun muss ich aber zugeben zu praktischen Testen kam ich nicht... Ich denke aber ich habe folgendes verstanden: Es befinden sich drei 8Bit Schieberegister auf dem Board diese schalten 3mal 8Kathoden durch. Seitens Arduino wird das von PortC0 und PortC1 angesteuert (Pin 23 und 24 vom AVR) Die Kathodne widerum werden von Port B0-B2 und Port D3-D7 als normale digitale Ausgaenge angesteuert. Wenn ich es richtig verstanden habe dann wird zu jedem Zeitpunkt von jeder Farbe exakt nur eine LED angesteuert. Egal welches Muster du darstellst. Helligkeiten machst Du auf der Anodenseite mit selbst gebauten PWM Signalen vermute ich. Ach ja etwas erschwerend kommt hinzu, dass es keine FTDI auf dem Borad gibt, Du brauchst nen SPI programmer, einen FTDI Chip oder einen normalen Arduino. Viel Spass, wenn Du was heraus bekommst lass es uns wissen, oder beginne einen playground Artikel. Ich finde auch das das tole Teil verdammt schlank dokumentiert ist...
Gruss Inside-Man

Inside-Man erstmal danke für deine Antwort. Ich programmier mein board über den Arduino 2009. Habe auf einer anderen Seite ein Rainbowconverter gefunden, der eine eine weitere Beispieldatei enthält "animdemo". Diese habe ich in soweit geändert, dass ich 110 Frames nach meinem Wunsch abspeichern kann aber 110 Frames sind auch nicht grad das wahre und allein Fading in verschiedene Farben kostet schon, wenn es sehr Detailreich sein soll, 30-40 Frames.

Ich hoffe es melden sich noch ein paar Experten. Viele empfehlen den Rainbowduino aber wie schon bereits erwähnt ist das Teil schlank dokumentiert. Ohne Hilfe kommt man da einfach nicht weiter.

Gruß

P.S ich habe alle Beitrage im Forum gelesen auch die im Englischsprachigen Forum, dennoch konnte ich mit diesen Tipps nichts anfangen.

Hallo, die Bibliotheken sind uebrigens auch ziemlich Rechtschreib fehlerbehaftet, vielleicht koennte man die im WIKI mal verbessern (ein paar weitere Beispiele hinzufuegen) und dann zum generalvertrieb schicken, damit es spaetere user einfacher haben...
bis denne inside-man

Hallo, na langsam tauchen hier nochmehr Suchende auf :)... puh, dachte schon ich wär auf verlorenem Posten :wink:

Also mit den Beispielen... meinst Du da die Plasmademos?

Warum nutzt Du den Rainbowduino nicht wie "gedacht" als Slave über i2C?

Hast Du Dir schonmal die Sourcen von mXtControl angesehen?

Lieber Gruß
ChrisS

Klar hab ich das, allerdings läuft das nicht. Aus anderen Quellen wurde mir gesagt, dass es an dem Update liegt. Hast du es zum laufen gekriegt? Wenn ja wie??? Die Plasmademo hab ich nicht verändert-ist einfach zu kompliziert aufgebaut. Auf folgender Seite ist die Beispieldatei "animdemo", die leicht verändert werden kann: http://code.google.com/p/rainbowduino-tools/downloads/list

Was meinst du mit Slave? Diese Fachtermine ist mir noch nicht geläufig...

Also, der Rainbowduino wird dann über ein anderes I2C fähiges Gerät gesteuert. In unserem Fall wohl ein zweiter Arduino. Der sagt mit sehr einfachen Befehlen über den I2C Bus was der Rainbowduino tun soll.
mtxcontrol funktioniert meines Wissens so. Allerdings habe ich es noch nicht zum laufen gebracht.

Lieber Gruß
ChrisS

Gibt es bei Dir schon Ergebnisse?

Ich beiße mir auch noch die Zähne aus.

Lieber Gruß
ChrisS

leider nicht wirklich :-/... bin gerade dabei die beispieldatei zu entschlüsseln. Vielleicht kann mir einer die Timer funktion erklären:

ISR(TIMER2_OVF_vect) //Timer2 Service
{
TCNT2 = GamaTab[level]; // Reset a scanning time by gamma value table
flash_next_line(line,level); // sacan the next line in LED matrix level by level.
line++;
if(line>7) // when have scaned all LEC the back to line 0 and add the level
{
line=0;
level++;
if(level>15) level=0;
}
}

void init_timer2(void)
{
TCCR2A |= (1 << WGM21) | (1 << WGM20); // Fast PWM mode??
TCCR2B |= (1<<CS22); // by clk/64
TCCR2B &= ~((1<<CS21) | (1<<CS20)); // by clk/64
TCCR2B &= ~((1<<WGM21) | (1<<WGM20)); // Use normal mode
ASSR |= (0<<AS2); // Use internal clock - external clock not used in Arduino
TIMSK2 |= (1<<TOIE2) | (0<<OCIE2B); //Timer2 Overflow Interrupt Enable
TCNT2 = GamaTab[0];
sei();
}

niemand eine Ahnung? Ansätze würden mir auch schon reichen..

Schon gesehen?

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1274728464/10

Lieber Gruß
ChrisS

Hallo zusammen,

versuche auch vergeblich Rainbowduino zum Laufen zu bringen.
Ich will ebenfalls einzelne Leds ansteuern...keine Matrix.
Nutze die Lib von Uncle Fester (v3_0h)

Ich kann beide Teile (Master & Slave) erfolgreich hochladen.
Dann versuche ich lediglich eine angeschlossene RGB Led (common anode aber kein Datenblatt vorhanden!) mit der DrawPixel-Funktion zum Leuchten zu bringen.

Die LED leuchtet auch, allerdings nicht wie von mir vorgegeben...
Eventuell habe ich ein Problem mit der Verdrahtung.

Per Multimeter habe ich alle Pins identifizieren können.
Ich habe die LED wie folgt angeschlossen:

Pin Rot -> Rainbowduino Red 1
Pin Grün -> Rainbowduino Green 8
Pin Blau -> Rainbowduino Blue 1

void loop() {     // Do some test with Rainbowduino
  sendCMD(0x10, CMD_CLEAR_PAPER);

  sendCMD(0x10, CMD_SET_INK, 0xD, 0xF, 0);
  sendCMD(0x10, CMD_DRAW_PIXEL, toByte(0), toByte(0));
  delay(500);
 

  sendCMD(0x10, CMD_SET_INK, 0xF, 0x0, 0);
  sendCMD(0x10, CMD_DRAW_PIXEL, toByte(0), toByte(0));
  delay(500);

  sendCMD(0x10, CMD_SET_INK, 0x0, 0x0, 15);
  sendCMD(0x10, CMD_DRAW_PIXEL, toByte(0), toByte(0));
  delay(500);
}

Müsste doch so passen?

Bin für jede Hilfe dankbar.
Gruß