Pages: 1 2 [3]   Go Down
Author Topic: 64 RGB-LED Matrix, TLC5940, Leistungsversorgung  (Read 5174 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Edison Member
*
Karma: 20
Posts: 1980
Wo ein Wille ist, da ist auch ein Weg !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bei der Verwendung von nur einer RGB-Matrix würde ich 3 TL5940 einen 74HC595 nehmen und mich für eine Common Anode RGB-Matrix entscheiden.

Ist wesentlich günstiger !
Logged

Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21494
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Der 595 bringt nicht den Sttrom um die Anoden ansteuern zu können; Du brauchst zusätzliche einen A2983.
Grüße Uwe
Logged

0
Offline Offline
Edison Member
*
Karma: 20
Posts: 1980
Wo ein Wille ist, da ist auch ein Weg !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Der 595 bringt nicht den Sttrom um die Anoden ansteuern zu können; Du brauchst zusätzliche einen A2983. Grüße Uwe

3 TLC5940 und ein 74HC595 !



Code:
#include "Tlc5940.h"

char* Frame;
int Light1[48] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int Light2[48] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
byte Rot[128] = {255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,
                 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                 255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,
                 255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,
                 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                 255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0};
byte Gruen[128] = {255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,
                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                   255,155,255,155,255,155,255,155,0,0,0,0,0,0,0,0,
                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                   255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,
                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                   255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0};
byte Blau[128] = {255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,
                  255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,
                  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                  255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,
                  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                  255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,
                  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
byte Zaehler;
int Zufall;
byte Zufall2;
byte inByte;
long Zeit1;
long Zeit2;
byte Neu;
byte Alt;
int Sekunden;
byte MatrixZeile;
const int latchPin = 8; // digital Pin 8 connected to 74HC595 latch pin (ST_CP, Pin 12)
const int clockPin = 6; // digital Pin 6 connected to 74HC595 clock pin (SH_CP, Pin 11)
const int dataPin = 7;  // digital Pin 7 connected to 74HC595 Data in (DS, Pin 14)

void setup()
{
   Zufall = 0;
   Neu = 0;
   Alt = 0;
   Zeit1 = 0;
   Zeit2 = 0;
   Tlc.init();
   Tlc.clear();
   Tlc.update();
   randomSeed(analogRead(0));
   pinMode(latchPin, OUTPUT);
   pinMode(dataPin, OUTPUT);  
   pinMode(clockPin, OUTPUT);
}

void loop() {
  byte LedNr;
  Tlc.clear();
  for (MatrixZeile = 0; MatrixZeile <= 7; MatrixZeile++)
  {
    for (LedNr = 0; LedNr <= 15; LedNr++)
    {
      Tlc.set(LedNr, (Rot[MatrixZeile * 16] + LedNr) / 2);
    }
    for (LedNr = 16; LedNr <= 31; LedNr++)
    {
      Tlc.set(LedNr, Gruen[(MatrixZeile * 16) + (LedNr - 16)]);
    }    
    for (LedNr = 32; LedNr <= 47; LedNr++)
    {
      Tlc.set(LedNr, Blau[(MatrixZeile * 16) + (LedNr - 32)]);
    }    
    registerWrite(MatrixZeile, HIGH);
    Tlc.update();
    delayMicroseconds(500);
  }
}

// This method sends bits to the shift register:

void registerWrite(int whichPin, int whichState) {
// the bits you want to send
  byte bitsToSend = 0;

  // turn off the output so the pins don't light up
  // while you're shifting bits:
  digitalWrite(latchPin, LOW);

  // turn on the next highest bit in bitsToSend:
  bitWrite(bitsToSend, whichPin, whichState);

  // shift the bits out:
  shiftOut(dataPin, clockPin, MSBFIRST, bitsToSend);

    // turn on the output so the LEDs can light up:
  digitalWrite(latchPin, HIGH);

}

Der Code ist übrigens für 2 Matrixen ausgelegt !
Logged

Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

0
Offline Offline
Edison Member
*
Karma: 20
Posts: 1980
Wo ein Wille ist, da ist auch ein Weg !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bei der von mir benutzen Matrix handelt es sich um eine 60mm square 8*8 LED Matrix - super bright RGB (circle).


http://iteadstudio.com/store/index.php?main_page=product_info&cPath=35_37&products_id=189
Logged

Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21494
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie heiß wird der 595?
Grüße Uwe
Logged

0
Offline Offline
Edison Member
*
Karma: 20
Posts: 1980
Wo ein Wille ist, da ist auch ein Weg !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Uwefed,

der 74HC595 ist auch nach einer Laufzeit von 30 Minuten immer noch so kalt wie vor dem Einschalten !
Logged

Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21494
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich hab mir mal kurz den Code angeschaut.

Du hast keine Kontrolle eingebaut, wie hoch die Multiplexzeit ist. Das kann zu flackern führen, da die neue Zeile nicht synchronisiert zur PWM Zyklus übertragen/weitergeschlaltet wird. 

Ich rate Dir die TLC5940Mux Bibiothek zu verwenden. http://www.thebox.myzen.co.uk/Hardware/Mini_Monome.html unter Arduino Firmware. Diese muß aber angepasst werden, weil sie für eine 4x4 Matrix ausgelegt ist und die Zeile direkt über Transistoren ansteuert. Du müßtest die 595 Ansteuerung hinzufügen und die Anzahl der TLC auf 3 setzen. In wenigen Worten an die Bibiothek ist massiv Hand anzulegen.
 
Grüße Uwe
Logged

0
Offline Offline
Edison Member
*
Karma: 20
Posts: 1980
Wo ein Wille ist, da ist auch ein Weg !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Das kann zu flackern führen ...

Da hast Du sogar sehr recht.

Deshalb habe ich die Zeile delayMicroseconds(500) eingefügt.

Bei jedem anderen Zeitwert kommt es zu einem Flackern, dazu reicht schon eine Erhöhung oder Veringerung um 5 Microseconds aus !
« Last Edit: May 18, 2012, 06:34:20 pm by Megaionstorm » Logged

Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21494
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich hatte schon die Erfahrung mit dem Flackern gemacht, da ich beim Aufbau einer TIX-Uhr mit den Monome inspirierten Silikontasten von Sparkfun bin (baue gerade das Möbel), Rest ist fertig.

Der TLC5940 hat keine automatische PWM Zyklus Steuerung wie zB ein MAX7219 (7 segment Display 8 Stellen LED Treiber). Man muß ihm den Takt geben und jeden Zyklus nach 4096 durch einen Impuls am BLANK wieder starten. Wenn man nun nach x Zyklen die Daten für die nächste Zeile überträgt und die betreffende Zeile aktiviert und dann wieder x Zyklen macht kommt kein Flackern zustande. Genau das macht die TLC5940MUX - Bibiothek.

Grüße Uwe
Logged

Pages: 1 2 [3]   Go Up
Jump to: