Matrix Tisch

Hallo,

Ich bin eigentlich noch relativ unerfahren mit dem Arduino Board.
Ich Besitze das Arduino Uno r3 Board und habe mir einen Tisch mir 8x8 WS2801 Platinen gebaut.
Diese besitzen 4 Anschlüsse: 12V, GND, CLK und Data.
12V und GND sind mir klar, doch ich habe jetzt CLK und Data auf der Platine in den Steckplatz 2 und 3 gesteckt und mit diesem Programm testen lassen: (Das habe ich in diesem Beitrag gefunden: Arduino Forum )

int SDI = 2; //Red wire (not the red 5V wire!)
int CKI = 3; //Green wire
int ledPin = 13; //On board LED

#define STRIP_LENGTH 32 //32 LEDs on this strip
long strip_colors[STRIP_LENGTH];

void setup() {
  pinMode(SDI, OUTPUT);
  pinMode(CKI, OUTPUT);
  pinMode(ledPin, OUTPUT);
  
  //Clear out the array
  for(int x = 0 ; x < STRIP_LENGTH ; x++)
    strip_colors[x] = 0;
    
  randomSeed(analogRead(0));
  
  //Serial.begin(9600);
  //Serial.println("Hello!");
}

void loop() {
  //Pre-fill the color array with known values
  strip_colors[0] = 0xFF0000; //Bright Red
  strip_colors[1] = 0x00FF00; //Bright Green
  strip_colors[2] = 0x0000FF; //Bright Blue
  strip_colors[3] = 0x010000; //Faint red
  strip_colors[4] = 0x800000; //1/2 red (0x80 = 128 out of 256)
  post_frame(); //Push the current color frame to the strip
  
  delay(2000);

  while(1){ //Do nothing
    addRandom();
    post_frame(); //Push the current color frame to the strip

    digitalWrite(ledPin, HIGH);   // set the LED on
    delay(250);                  // wait for a second
    digitalWrite(ledPin, LOW);    // set the LED off
    delay(250);                  // wait for a second
  }
}

//Throws random colors down the strip array
void addRandom(void) {
  int x;
  
  //First, shuffle all the current colors down one spot on the strip
  for(x = (STRIP_LENGTH - 1) ; x > 0 ; x--)
    strip_colors[x] = strip_colors[x - 1];
    
  //Now form a new RGB color
  long new_color = 0;
  for(x = 0 ; x < 3 ; x++){
    new_color <<= 8;
    new_color |= random(0xFF); //Give me a number from 0 to 0xFF
    //new_color &= 0xFFFFF0; //Force the random number to just the upper brightness levels. It sort of works.
  }
  
  strip_colors[0] = new_color; //Add the new random color to the strip
}

//Takes the current strip color array and pushes it out
void post_frame (void) {
  //Each LED requires 24 bits of data
  //MSB: R7, R6, R5..., G7, G6..., B7, B6... B0 
  //Once the 24 bits have been delivered, the IC immediately relays these bits to its neighbor
  //Pulling the clock low for 500us or more causes the IC to post the data.

  for(int LED_number = 0 ; LED_number < STRIP_LENGTH ; LED_number++) {
    long this_led_color = strip_colors[LED_number]; //24 bits of color data

    for(byte color_bit = 23 ; color_bit != 255 ; color_bit--) {
      //Feed color bit 23 first (red data MSB)
      
      digitalWrite(CKI, LOW); //Only change data when clock is low
      
      long mask = 1L << color_bit;
      //The 1'L' forces the 1 to start as a 32 bit number, otherwise it defaults to 16-bit.
      
      if(this_led_color & mask) 
        digitalWrite(SDI, HIGH);
      else
        digitalWrite(SDI, LOW);
  
      digitalWrite(CKI, HIGH); //Data is latched when clock goes high
    }
  }

  //Pull clock low to put strip into reset/post mode
  digitalWrite(CKI, LOW);
  delayMicroseconds(500); //Wait for 500us to go into reset
}

Jetzt ist meine Frage:
Das Board habe ich an einem 9V Netzteil angeschlossen. Doch es wird nach wenigen sekunden schon sehr heiß. Leider kann ich nach meinem Versuch keine Verbindung mehr vom Computer zum Board herstellen. Ich denke also es ist defekt :frowning:
Was habe ich Falsch gemacht? Reichte die Ausgangsspannung der Pins 2&3 nicht für die 64 Module aus?

[EDIT] CODE Tags hinzugefügt Grüße Uwe[/EDIT]

Laut Angaben des Datenblattes des WS2801 ist die Spannung:

Power supply voltage 3.3~5.5V

Dann wird empfohlen, den WS2801 mit einem Widerstand ~30 Ohm zu begrenzen = LED-Strom ca. 20 mA, wie z.B. hier aufgezeigt.

Welcher Chip wird / wurde heiß (Arduino?) und wie wurde der Aufbau beschaltet?
Für die Steuerung der LEDs und Treiber mit Versorgungsspannung reicht der Strom des Arduino (ca. 40 mA pro PIN) natürlich nicht aus, für die Datenleitungen ist das unkritisch, da fließt ein vernachlässigbarer Strom.
Die 9V am Netzteileingang des Arduino sind OK, dort sind 6V-20V möglich (empfohlen 7V - 12V, siehe Boardbeschreibung).

Liebe Grüße

Dirk

Nachtrag: Laut Datenblatt ist der Ausgangsstrom -> LED 30 mA - 50 mA pro Farbe, je nach Beschaltung. Ergibt bei 8x8 = 64 LED = 64503 mA Strom maximal, das Netzteil sollte also 9600 mA = 9,6 A liefern können.

Hi Matrix,

Du hast aber nicht etwa versucht, die ganze LED Kette über den Spannungsregler vom Arduino laufen zu lassen, oder?

Du brauchst ein (zweites) stabiles Netzteil für die Kette, verbindest dessen Minus mit Minus vom Arduinonetzteil, dann wird das was.

Ich würde den Tisch nicht "zick-zack" verkabeln, sondern das Ende einer Reihe zum Anfang der nächsten führen, sonst bekommt man doch beim Programmieren ständig einen Knoten im Hirn, oder vergeudet Rechenzeit beim ständigen umsortieren des Bildarrays...falls da was konkretes mit hoher framerate passieren soll und nicht nur "irgendwie bunt"...

Die Lib FastSPI_LED eignet sich übrigens vorzüglich für solche Sachen und ist sauschnell.

Der Daten- u. Clockausgang vom Arduino spricht effektiv nur mit dem ersten 2801 und dieser dann seinerseits mit dem nächsten usw. Der benötigte Strom, um mit einem Controller zu sprechen, ist völlig unkritisch.

Beste Grüße

Hallo,

Danke schoneinmal für die schnellen Antworten :slight_smile:

Also laut Datenplatt hat eine WS2801 Platine, die ich verbaut habe 60mA. Ich habe den Tisch in 2 Stränge mit jeweils 32 WS2801 Platinen unterteilt und jeweils ein 2,5A stabilisiertes Netzteil angebracht. (32*0,06mA= 1,92A, sollte also reichen) Wie Auf dem Bild vll zu erkennen habe ich die beiden Datenleitungen von der ersten bis zur letzen Platine durchverbunden.

Das ArduionoBoard wurde heiß (in der nähe vom "USB Eingang"). Habe ich das jetzt richtig verstanden, dass ich von den Pin 2&3 erst auf einen Widerstand und dann auf den strang gehen muss?

Dankeschön :slight_smile:

Ach, auf dem zweiten Bild ist nur ein Versuch dargestellt. Ich greife NICHT die 5V Spannung von dem Arduino Board ab, sondern über 2 12V Netzteile.

MatrixWS28012:
Das ArduionoBoard wurde heiß (in der nähe vom "USB Eingang"). Habe ich das jetzt richtig verstanden, dass ich von den Pin 2&3 erst auf einen Widerstand und dann auf den strang gehen muss?
Dankeschön :slight_smile:

Nee, das ist nicht erforderlich.

MatrixWS28012:
Ich habe den Tisch in 2 Stränge mit jeweils 32 WS2801 Platinen unterteilt und jeweils ein 2,5A stabilisiertes Netzteil angebracht.

Ok. Und alle Minuspole miteinander verbunden, ja?!

Was genau heißt "in der Nähe vom USB Eingang"? Welches Bauteil?

Ok. Und alle Minuspole miteinander verbunden, ja?!

Nein, ich habe den ersten und zweiten strang nur durch die beiden Datenleitungen verbunden. Also die erste Platine ist an 12V, GND und den beiden Datenleitungen angeschlossen. Die 33te Platine ist durch ein zweites Netzteil an 12V und GND angeschlossen, die Datenleitungen kommen von der 32ten Platine.

Das Bild ist nicht 100 aktuell (da sind die Datenleitungen nicht durchverbunden),
nur damit man sehen kann wie in etwa es aussieht :wink:

Was genau heißt "in der Nähe vom USB Eingang"? Welches Bauteil?

Ich weiß nicht genau was es für ein Bauteil ist, aber da steht "09TI R5R" drauf. Das Bauteil ist zwischen dem SPK16.000G und den Kondensatoren "i0 47 16V".
Jetzt ist nur die frage wie das passieren konnte. Ihr meint also nicht, dass die Belastung an den Ausgangspins 2&3 zu groß ist? Es ist auch nicht auszuschließen, dass ich vll beim Basteln irgendwo einen Kontakt überbrückt habe und somit die Platine gehimmelt habe.
Also wenn ich das Board an den Computer anschließe, passiert gar nichts. nicht mal eine Meldung, dass ein Gerät angeschlossen wurde.

Ok. Und alle Minuspole miteinander verbunden, ja?!

Nein, ich habe den ersten und zweiten strang nur durch die beiden Datenleitungen verbunden. Also die erste Platine ist an 12V, GND und den beiden Datenleitungen angeschlossen. Die 33te Platine ist durch ein zweites Netzteil an 12V und GND angeschlossen, die Datenleitungen kommen von der 32ten Platine.

Das ist schlecht. Alle Minuspole miteinander verbinden, für ein gemeinsames Bezugspotential.
Warum eigentlich 12V an der "Platine"? Der 2801 läuft doch auf 5V? Gibt es einen Schaltplan/beidseitiges Photo/Hersteller von den den "Platinen"?

Das Bild ist nicht 100 aktuell (da sind die Datenleitungen nicht durchverbunden),
nur damit man sehen kann wie in etwa es aussieht :wink:

Ein vollständiger Schaltplan des gesamten Aufbaus wäre deutlich hilfreicher, als "wie es in etwa aussieht".
Aber, ja, das ist mechanisch ein Anfang... :wink:

Ich weiß nicht genau was es für ein Bauteil ist, aber da steht "09TI R5R" drauf. Das Bauteil ist zwischen dem SPK16.000G und den Kondensatoren "i0 47 16V".

Zwischen den 2 Elkos und dem Quarz sehe ich 2 Bauteile.

Nun mach es nicht so spannend: 8 Pins oder 5?

Oder doch der Spannungsregler (etwas größer, 3 Pins an der einen Seite, ein Kühlfähnchen an der anderen)? Auf meinem steht was anderes drauf, aber dass muss nix heißen. Kannst Du es mit dem bloßen Auge lesen oder nur mit Lupe? Ist das Bauteil am Rand des Boards direkt neben dem Betriebsspannungseingang?

Es ist auch nicht auszuschließen, dass ich vll beim Basteln irgendwo einen Kontakt überbrückt habe und somit die Platine gehimmelt habe.

Ich muß schon wieder mutmaßen: vom Arduino? Aber egal, so etwas darf grundsätzlich NIE passieren.

Also wenn ich das Board an den Computer anschließe, passiert gar nichts. nicht mal eine Meldung, dass ein Gerät angeschlossen wurde.

Das bedeutet wohl, dass er tot ist.

Die Experten hier im Forum können vielleicht beantworten, ob es "nur" den Spannungsregler und den ATMega erwischt hat (wäre grundsätzlich beides tauschbar) oder, ob da noch mehr mit in den Abgrund gerissen wurde und Du einen neuen Arduino brauchst.

Bitte, lieber Matrix: drücke Dich präzisestmöglich aus! Und eindeutig. Danke.

Beste Grüße

von einem anderen Anfänger

Nach deinen Bildern sieht es so aus, als würdest du die erste Platine mit 4 Kabeln am Arduino haben, also nicht Spannung getrennt?
Wenn das so geblieben ist und du 12V auf die Teile gejagt hast sind diese auch am Arduino angelegt worden -> bruzzel.
Poste mal ein Datenblatt zu deinen Platinen, bisher konnte ich nix 12V zum WS2801 sondern immer nur 5V finden. Und vielleicht mal einen Grobschaltplan, das macht's einfacher zu verstehen ...
Ich hab mal ein Beispiel (ein paar WS2801 und LED weggelassen ...) beigefügt, wie es funktionieren müsste ...

Liebe Grüße

Dirk

Oh, jetzt war ich dank Schaltbild malen zu langsam ...

Hi Dirk,

wie bindest Du das Bild ein? Muss ich das vorher auf einem externen Hoster uppen oder geht das auch direkt hier?

Ah, ok, erledigt.

Hier nochmal in anderer Form (falls die 12V stimmen), und die Minuspole der 2 Netzteile auf GND legen, sieht Sch**** aus, ich weiß...

Beste Grüße

konzept.jpg

danke für die Antworten. Ich habe jetzt mal von allen Netzteilen den Minus verbunden. Die Farben leuchten echt besser. Leider ist mein Arduino board immernoch defekt, doch dank der Garantie bekomme ich die tage ein neues :slight_smile: Ich habe mal ein paar bilder gemacht, wie es JETZT aussieht :wink:
ist zwar noch nicht 100% schön verkabelt aber das ändert ja nichts an den Anschlüssen :wink:
Ich habe auf der Platine mal einen roten Kreis gemacht, da wo es warm wird.

vielen dank

hier die beiden anderen Bilder :wink:

Bleibt die Frage nach den 5V / 12V offen.
Wenn die Dinger mit 12V arbeiten erwarten sie trotzdem 5V-Pegel als Signal?
Und wie sind die ICs / LEDs auf den Platinen selbst beschaltet?
Wieso leuchten die LED ohne Signal, wenn der Arduino doch defekt ist?

Liebe Grüße

Dirk

MatrixWS28012:
Ich habe auf der Platine mal einen roten Kreis gemacht, da wo es warm wird.


Da darf nichts warm werden.
Das sind der Operationsverstärker (8 Pins) für die 5V Spannungsumschaltung bei Spannungsversorgung mit externen Netzteil und 3,3V Spannungsstabilisator (5 Pin).

Du mußt die Masse der 12V Netzteile mit der Masse das Arduino zusammenschalten.

Die Kabel zum LED-Strip hast Du auf diesem Foto an Pin 1 und 2 angeschlossen und nicht an 2 und 3 wie Du schreibst.

Grüße Uwe

Wozu eigentlich das Extranetzteil für den Aduino? Die paar mA mehr kannst Du auch einem der anderen beiden Netzteile zusätzlich zumuten.

Das sind der Operationsverstärker (8 Pins) für die 5V Spannungsumschaltung bei Spannungsversorgung mit externen Netzteil und 3,3V Spannungsstabilisator (5 Pin).

Danke...

Wozu eigentlich das Extranetzteil für den Aduino? Die paar mA mehr kannst Du auch einem der anderen beiden Netzteile zusätzlich zumuten.

Ich hatte es erst an den 12V Netzteil mit dran, dann habe ich gemerkt, dass das Board warm wurde, also habe ich ein 9V Netzteil verwendet. Und jetzt lasse ich das einfach so :wink:

Bleibt die Frage nach den 5V / 12V offen.
Wenn die Dinger mit 12V arbeiten erwarten sie trotzdem 5V-Pegel als Signal?
Und wie sind die ICs / LEDs auf den Platinen selbst beschaltet?

Ich habe die WS2801 Module hier her:
http://de.aliexpress.com/item/20pcs-string-NON-waterproof-led-pixel-module-4pcs-SMD-RGB-5050-1pcs-WS2801-256-gray-level/636894105.html
Leider war kein schaltplan dabei.
Hat vielleicht jemand schon erfahrungen mit diesen Modulen?

Wieso leuchten die LED ohne Signal, wenn der Arduino doch defekt ist?

Mein Board "funktioniert" noch, nur ich kann keine verbindung mit dem Computer herstellen, was es dann für mich nicht mehr zu gebrauchen macht :wink:

Die Module funktionieren mit 12V weil 2 LED in Reihe geschalten sind und da 5V nicht reichen. Der WS2801 wird mit Hilfe eine Z-Diode mit 5V versorgt.
Der Arduino nur mit den Daten und Takt des LED-Streifens darf nicht sonderlich warm werden auch wenn er mit 12V versorgt wird.

Hast Du irgendetwas an 3,3V angeschlossen?
Grüße Uwe

Danke Uwe,

meine Befürchtung war, dass an den Steuerleitungen evtl ein 12V-Pegel rückfließt und irgendwas dummes macht.
Aber dann würde der ATMega sterben, nicht irgendwas anderes ...

Sonst sieht das IMHO OK aus wie es ist.
Das mit den PINS 1/2 oder 2/3 erkenne ich nicht gut genug auf dem Bild, meine Hochachtung!

Dirk