Go Down

Topic: 64 RGB-LED Matrix, TLC5940, Leistungsversorgung (Read 6069 times) previous topic - next topic

Megaionstorm

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 !
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

uwefed

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

Megaionstorm

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: [Select]
#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 !
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Megaionstorm

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
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

uwefed


Megaionstorm

Hallo Uwefed,

der 74HC595 ist auch nach einer Laufzeit von 30 Minuten immer noch so kalt wie vor dem Einschalten !
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

uwefed

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

Megaionstorm

#37
May 19, 2012, 01:18 am Last Edit: May 19, 2012, 01:34 am by Megaionstorm Reason: 1
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 !
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

uwefed

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

Go Up