Pages: 1 ... 11 12 [13] 14   Go Down
Author Topic: Daten speichern + 16x16 RGB-LED-Matrix ansteuern  (Read 15892 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 1
Posts: 209
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So, kleiner Zwischenstand:
Ich habe jetzt die Platinen fertiggestellt.
Angeschlossen wurden bis jetzt zwei Matrizen, also 16x8 Pixel.
Klappt auch einigermaßen.
Allerdings flackert es, wenn ich alles Rot färbe.
Ich weiß nicht, ob ich das schonmal angesprochen habe,
aber weiß jemand, woran das liegen könnte?
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 209
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich habe folgenden Sketch und rot flackert:
Code:
#define  NUM_TLCS  3 // Hier Anzahl der verwendeten TLC5940 hinschreiben
#define  NUM_ROWS  16 // Anzahl der ROWS der Matrix
#define  NUM_COLUMNS 8 // An zahl der Columns der Matrix
#include "Tlc5940Mux.h"
//#define __AVR_ATmega2560__

volatile uint8_t isShifting;
uint8_t shiftRow;
                     
// SHIFT_DATA_PIN (PF0 is analog 0) = '595 SER pin
#define SHIFT_DATA_PORT PORTF
#define SHIFT_DATA_PIN  PF0
#define SHIFT_DATA_DDR  DDRF
// SHIFT_CLK_PIN (PF1 is analog 1) = '595 SRCLK
#define SHIFT_CLK_PORT  PORTF
#define SHIFT_CLK_PIN   PF1
#define SHIFT_CLK_DDR   DDRF
// '595 RCLK is hooked to tlc XLAT pin

uint16_t Led_Red;
uint16_t Led_Green;
uint16_t Led_Blue;

static inline void
shift8_595_row(uint8_t row)
{
  // the output of the '595 for the selected row should be low, all others
  // high
  //uint8_t output = ~(1 << row);
  uint8_t output = (1 << row); // Eventuell beides mal probieren
  for (uint8_t bit = 0x80; bit; bit >>= 1) {
    if (bit & output) {
      SHIFT_DATA_PORT |= _BV(SHIFT_DATA_PIN);
    } else {
      SHIFT_DATA_PORT &= ~_BV(SHIFT_DATA_PIN);
    }   
    // pulse the '595 sclk
    SHIFT_CLK_PORT |= _BV(SHIFT_CLK_PIN);
    SHIFT_CLK_PORT &= ~_BV(SHIFT_CLK_PIN);
  }
}

ISR(TIMER1_OVF_vect)
{
  if (!isShifting) {
    disable_XLAT_pulses();
    isShifting = 1;
    sei();
    TlcMux_shiftRow(shiftRow);
    shift8_595_row(shiftRow);
    shiftRow++;
    if (shiftRow == NUM_ROWS) {
      shiftRow = 0;
    }
    enable_XLAT_pulses();
    isShifting = 0;
  }
}


const int MatrixWidth = NUM_ROWS;
const int MatrixHeight = NUM_COLUMNS;

int PixelColor[MatrixWidth+1][MatrixHeight+1][4];


void setup()
{
  SHIFT_DATA_DDR |= _BV(SHIFT_DATA_PIN);
  SHIFT_CLK_DDR  |= _BV(SHIFT_CLK_PIN);
  TlcMux_init();
}



void loop()
{
  for(int i = 1; i <= MatrixWidth; i++)
  {
    for(int j = 1; j <= MatrixHeight; j++)
    {
      PixelColor[i][j][1] = 255;
      PixelColor[i][j][2] = 0;
      PixelColor[i][j][3] = 0;
    }
  }
  Render();
  delay(1000);
}



void Render()
{
  Display();
}



void Display()
{
  for(int i = 1; i <= MatrixWidth; i++)
  {
    for(int j = 1; j <= MatrixHeight; j++)
    {
      Matrix_Pixel(i, j, PixelColor[i][j][1], PixelColor[i][j][2], PixelColor[i][j][3]);
    }
  } 
}



void Clear()
{
  for(int i = 1; i <= MatrixWidth; i++)
  {
    for(int j = 1; j <= MatrixHeight; j++)
    {
      PixelColor[i][j][1] = 0;
      PixelColor[i][j][2] = 0;
      PixelColor[i][j][3] = 0;
    }
  }   
}



void Matrix_Pixel(uint8_t Row, uint8_t Column, byte Red, byte Green, byte Blue)
{   
   Row -= 1;
   Column -= 1;
   Led_Red = map(Red, 0, 255, 0, 4095);
   Led_Green = map(Green, 0, 255, 0, 4095);
   Led_Blue = map(Blue, 0, 255, 0, 4095);
   
   if(Row < 8)
   {
     TlcMux_set(Row, Column, Led_Red / 1.8);
     TlcMux_set(Row, Column+16, Led_Green);
     TlcMux_set(Row, Column+32, Led_Blue);
   }
   else
   {
     TlcMux_set(Row-8, Column+8, Led_Red / 1.8);
     TlcMux_set(Row-8, Column+8+16, Led_Green);
     TlcMux_set(Row-8, Column+8+32, Led_Blue);
   } 
   //TlcMux_set(Row, Column, Led_Green);
   //TlcMux_set(Row, Column, Led_Blue);

 

Auffällig ist auch, dass wenn Pixelfehler auftreten, sagen wir bei einer 6x3 Matrix, folgendes passiert:
xxxoox
ooxxxx
ooxxxx
Es tritt eine Art verschiebung des Pixelfehlers in die zweite Matrix ein.
Kann der "Arduino" eigentlich 2 Matrizen bewältigen, ohne ext. Spannungsversorgung?
« Last Edit: October 14, 2012, 01:33:44 pm by Nathax » Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 209
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Neue Beobachtungen:
Wenn man den "Arduino" über USB anschließt und alle LEDs (16x8) auf Lila setzt, flackert das Bild in verschiedenen Farben, und Mustern.
Schließt man nun ein Netzteil an, so erhält man die Wunschfarbe, in diesem Fall Lila und es flackert nicht.
Rot flackert jedoch trotz Netzteils. Nimmt man jedoch bei Pixelfehlern oder bei einem komplett roten Bild eine der beiden Matrizen raus,
so funktioniert die zweite so wie sie soll. Es tritt kein Flackern oder Pixelfehler mehr auf.
Manchmal, wenn die RGB-Werte eine sehr große Summe haben, erhitzen die TLCs sehr stark und schalten sich ab.
Jemand eine Idee woran das liegen könnte?
Und wv. Strom sollte die Matrix ziehen, wenn ich sie auf komplett Weiß stelle?
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
Und wv. Strom sollte die Matrix ziehen, wenn ich sie auf komplett Weiß stelle?

2 X 3 X 8 X 0.02A = 0,96A
Logged

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

Offline Offline
Full Member
***
Karma: 1
Posts: 209
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, dann war meine Rechnung richtig.
Kann das ganze trotzdem ein Problem der Spannung/Stromstärke sein?
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

Wenn ich mich nicht irre benutzt Du den ULN2981, der hat ein Turn-Off Delay von 5µs und ein Turn-On Delay von 1µs.

Ich weis jetzt nicht in welchem µs Abstand die Zeilen durch die TLCMux Library weitergeschaltet werden, aber theoretisch könnte es sein das für kurze Zeit 2 benachbarte Zeilen Strom ziehen.

Kann natürlich auch ein Irrtum meinerseits sein !
Logged

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

Offline Offline
Full Member
***
Karma: 1
Posts: 209
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Fast, ich benutze UDNs.
Uwe hat doch auch ein 16x8 und bei dem hats doch mein ich auch funktioniert.
Könnte man die Frequenz zum Shiften irgendwie umstellen?
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

Wieviel Ampere kann dein Netzteil den liefern ?
Logged

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

Offline Offline
Full Member
***
Karma: 1
Posts: 209
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Momentan zu wenig, aber ich werde mal nach einem 1A für die 16x8 Matrix suchen.

Habe das Flackern für die 16x8 beseitigen können, jedenfalls das bei rot.
Ich werde versuchen die komplette 16x8 weiß zu färben, wenn ich das passende Netzteil habe.
Anschließend werde ich versuchen, die 16x16 zum leuchten zu bringen.
Ich melde mich sobald ich mehr oder weniger Erfolg habe, könnte allerdings ein paar Wochen dauern, da ich momentan sehr beschäftigt bin.
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

Tu Dir was gutes und kauf dir eins mit 2A, dann hast Du in deiner Schaltung noch Erweiterungspotential.

Wie hast Du das Flackern bei Rot entfernt ?
Logged

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

Offline Offline
Full Member
***
Karma: 1
Posts: 209
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja, ich werde eins mit 2A nehmen. Wir haben noch ganz viele zu hause. Muss nur später gucken, ob ein passendes dabei ist.

Zu dem Flackern, sorry, hab vergessen das zu erwähnen. Ich habe die eine Matrix an den einen, die andere an den anderen Schieberegister+UDN drangeschlossen, vorher beide "Anoden-Blöcke" an zwei, parallel vom SR angesteuerte, UDNs.
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

Genau durch diesen AHA-Effekt lernt man dazu !
Logged

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

Offline Offline
Full Member
***
Karma: 1
Posts: 209
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ist das denn überhaupt logisch?
Ich meine ob das so muss, wie ich das jetzt angeschlossen habe,
und es vorher falsch war?
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

Vielleicht hat die Power eines 74HC595 Ausganges nicht dazu ausgereicht um 2 UDN2981 Eingänge gleichzeitig sauber zu schalten ?!?
Logged

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

Offline Offline
Full Member
***
Karma: 1
Posts: 209
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hmmm... wenn man an den + und - der ext. Schaltung ein 2,5A 5V Netzteil klemmt, dann wird der TLC für die rote Farbe ganz warm (rot wird gerade angesteuert) und das Bild wird nicht korrekt dargestellt.
Logged

Pages: 1 ... 11 12 [13] 14   Go Up
Jump to: