Go Down

Topic: Daten speichern + 16x16 RGB-LED-Matrix ansteuern (Read 18041 times) previous topic - next topic

Nathax

Hab ich gemacht.
Ich hab bemerkt, dass wenn ich den Sketch uploade, das Kabel einmal raus nehme und wieder reinstecke,
nicht mehr die ganze Reihe leuchtet, allerdings dafür immer nur die erste LED der Reihe.
Die Spalte kann ich irgendwie nicht beeinflussen.

Nathax

Was meint ihr?
Soll ich mal 3 TLCs, 2 Matrizen, 2 UDNs und 1 SR verkabeln?
Ich hab jetzt nämlich neue Steckbrücken bekommen.

Nathax

So, ich habe jetzt mal 3 TLCs verbaut und jeweils die ersten 8 Channel (0-7) mit einer Farbe belegt.
TLC1: 0-7 Grün
TLC2: 0-7 Rot
TLC3: 0-7 Blau
Beim zweiten Zusammenbau ist mir aufgefallen, was der Fehler sein könnte:

Einst hat Megaionstrom geschrieben:
Quote
Arduino -> 74HC595
-------------------
A0        -> Pin 14
A1        -> Pin 11
D9        -> Pin 12


Ich benutze ja einen Mega. Wo sollen dann D9, A0 und A1 liegen.
Output 9 ist ja schon vom TLC belegt, und damals hab ich das wohl gar nicht bemerkt, weil ich glaub ich 74HC595-Pin12 an den analogen Eingang 9 geklemmt habe.
Also wo genau sollen die 3 obigen Pins am Mega angeschlossen werden und welchen Sketch soll ich nun benutzen?

Megaionstorm

Sowohl der TLC als auf der 74HC595 werden an D9 angeschlossen !!!

A0, A1 ? Da wo die Analog Pins des Arduino Mega sind !
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Nathax


Nathax

#155
Aug 23, 2012, 07:50 pm Last Edit: Aug 23, 2012, 08:18 pm by Nathax Reason: 1
Also es leuchtet weiterhin die ganze 1 Reihe/Spalte blau,
wenn ich das USB-Kabel raus ziehe und wieder reinstecke leuchtet dann nur die erste LED der Reihe/Spalte,
und manchmal auch die ersten zwei, oder random irgendwelche.
Folgender Code wird benutzt:
Code: [Select]
#define  NUM_TLCS  3 // Hier Anzahl der verwendeten TLC5940 hinschreiben
#define  NUM_ROWS  8 // Anzahl der ROWS der Matrix
#define  NUM_COLUMNS 8 // An zahl der Columns der Matrix
#include "Tlc5940Mux.h"

volatile uint8_t isShifting;
uint8_t shiftRow;

                     
// SHIFT_DATA_PIN (PC0 is analog 0) = '595 SER pin (Pin 14)
#define SHIFT_DATA_PORT PORTC
#define SHIFT_DATA_PIN  PC0
#define SHIFT_DATA_DDR  DDRC
// SHIFT_CLK_PIN (PC1 is analog 1) = '595 SRCLK (Pin 11)
#define SHIFT_CLK_PORT  PORTC
#define SHIFT_CLK_PIN   PC1
#define SHIFT_CLK_DDR   DDRC
// '595 RCLK is hooked to tlc XLAT pin (Arduino digital Pin 9, 74HC595 Pin 12)

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;
  }
}

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

void loop()
{
  Matrix_Pixel(0, 0, 0, 0, 255);
   //RandomColors(NUM_ROWS, NUM_COLUMNS, 150, 250);
   delay(250);
}

void RandomColors(uint8_t NumRow, uint8_t NumColumn, int Again, int Speed)
{
  byte Nr;
  uint8_t Row;
  uint8_t Column;
  for (Nr = 0; Nr < Again; Nr += 1)
  {
     for (Row = 0; Row < NumRow ; Row += 1)
     {
        for (Column = 0; Column < NumColumn; Column += 1)
        {
           if (Nr < (Again - 1))
           {
              Matrix_Pixel(Row, Column, random(255), random(255), random(255));
           }
             else
             {
                Matrix_Pixel(Row, Column, 0, 0, 0);
             }
        }
     }
     delay(Speed);
  }
}

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


Megaionstorm

#156
Aug 23, 2012, 09:41 pm Last Edit: Aug 23, 2012, 09:56 pm by Megaionstorm Reason: 1
Kopier mal die folgenden beiden Dateien in das Pinouts Verzeichnis deiner TLCMux Library !

Danach IDE neu starten !
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/


Megaionstorm

Probier dies nun mal mit folgender Änderung in deinem Sketch aus !

Code: [Select]
#define  NUM_TLCS  3 // Hier Anzahl der verwendeten TLC5940 hinschreiben
#define  NUM_ROWS  8 // Anzahl der ROWS der Matrix
#define  NUM_COLUMNS 8 // An zahl der Columns der Matrix
#include "Tlc5940Mux.h"
#define __AVR_ATmega2560__


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

Nathax

Leider keine Wirkung!
Edit: Hab folgendes Board: http://www.ebay.de/itm/SainSmart-MEGA-2560-ATMEGA-2560-AVR-Module-Board-Free-Cable-DE-shipping-/320858965905?pt=Wissenschaftliche_Ger%C3%A4te&hash=item4ab4af4791

Nathax

Megaionstrom und ich sind schon etwas weiter gekommen.
An meinem Uno klappt alles einwandfrei.
Muss wohl irgendwie an den PinMappings des Megas liegen.
Leider wissen wir/weiß ich nicht genau, was verändert werden muss, sowohl soft- als auch hardwareseitig,
damit es auch mit dem Mega klappt.

Megaionstorm

#161
Aug 26, 2012, 03:17 pm Last Edit: Aug 26, 2012, 03:30 pm by Megaionstorm Reason: 1
Habe mir das Pinout des Mega2560 nochmal angeschaut, vielleicht klappt es mit dieser Änderung im Sketch:

Code: [Select]
// 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



Die analog Pins befinden sich beim Atmega328 bei PortC, beim Atmega2560 hingegen bei PortF !

Weiterhin gilt:
Arduino -> 74HC595
-------------------
A0        -> Pin 14
A1        -> Pin 11
D9        -> Pin 12
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Nathax

Sorry, aber da muss ich dich leider entäuschen, ich habe das bereits getestet, doch es funktioniert nicht.
Ich muss, wenn ich F nehme, Data und Clock an die analogen Eingänge 0 und 1 klemmen, oder?

Megaionstorm

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

Nathax

Geht wie gesagt nicht.
Hast du sonst noch Ideen, was ich ändern könnte?

PS: Habe nicht den Arduino Mega R3 sondern einen Sainsmart Mega mit dem Atmega8U2 (anstelle des Atmega16U2).

Go Up