Hallo,
Ich bastle mir seit gestern ein Adalight mit folgenden Komponenten:
1x Strang WS2801 mit 50 LED's (kontrolliert auf den LED's)
1x Netzteil mit 5V und 3A
1x ArduinoUno R3
(dazu noch Anschlusskabel, JST-Stecker)
Problem ist, dass nur die ersten 4 LED's von Seite Arduino-Anschluss wie gewünscht funktionieren, die anderen bleiben aus.
Vorgehen:
Arduino IDE inkl. Treiber (COM4) erfolgreich installiert, inkl. WS2801 library
Processing IDE erfolgreich installiert
LED's mit ArduinoUno mit GND, Pin 13+11 angeschlossen, so dass es der Laufrichtung der Pfeile auf den LED's entspricht
An der gleichen Seite sind die beiden zusätzlichen 5V + GND 'Breakout'-Kabel, die ans NT angeschlossen sind.
Danach mit dem Upload und Testen begonnen:
Arduino IDE WS2801 Strandtest läuft korrekt auf den ersten 4 LED's
Arduino IDE LEDstream korrekt auf den ersten 4 LED's
Processing IDE Colorswirl läuft korrekt auf den ersten 4 LED's
Prismatik verbindet sich und funktioniert auf den ersten 4 LED's.
Die folgenden 46 LED's leuchten in keinem Versuch.
Habe mal versucht, die LED's direkt an der 5V Leitung des PC-PSU's anzuhängen mit gleichem Ergebnis. Was kann ich noch versuchen, um die restlichen LEDs zum Funktionieren zu überreden?
#include "SPI.h"
#include "Adafruit_WS2801.h"
/*****************************************************************************
Example sketch for driving Adafruit WS2801 pixels!
Designed specifically to work with the Adafruit RGB Pixels!
12mm Bullet shape ----> https://www.adafruit.com/products/322
12mm Flat shape ----> https://www.adafruit.com/products/738
36mm Square shape ----> https://www.adafruit.com/products/683
These pixels use SPI to transmit the color data, and have built in
high speed PWM drivers for 24 bit color per pixel
2 pins are required to interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
*****************************************************************************/
// Choose which 2 pins you will use for output.
// Can be any valid output pins.
// The colors of the wires may be totally different so
// BE SURE TO CHECK YOUR PIXELS TO SEE WHICH WIRES TO USE!
uint8_t dataPin = 11; // Yellow wire on Adafruit Pixels
uint8_t clockPin = 13; // Green wire on Adafruit Pixels
// Don't forget to connect the ground wire to Arduino ground,
// and the +5V wire to a +5V supply
// Set the first variable to the NUMBER of pixels. 25 = 25 pixels in a row
Adafruit_WS2801 strip = Adafruit_WS2801(25, dataPin, clockPin);
// Optional: leave off pin numbers to use hardware SPI
// (pinout is then specific to each board and can't be changed)
//Adafruit_WS2801 strip = Adafruit_WS2801(25);
// For 36mm LED pixels: these pixels internally represent color in a
// different format. Either of the above constructors can accept an
// optional extra parameter: WS2801_RGB is 'conventional' RGB order
// WS2801_GRB is the GRB order required by the 36mm pixels. Other
// than this parameter, your code does not need to do anything different;
// the library will handle the format change. Examples:
//Adafruit_WS2801 strip = Adafruit_WS2801(25, dataPin, clockPin, WS2801_GRB);
//Adafruit_WS2801 strip = Adafruit_WS2801(25, WS2801_GRB);
void setup() {
strip.begin();
// Update LED contents, to start they are all 'off'
strip.show();
}
void loop() {
// Some example procedures showing how to display to the pixels
colorWipe(Color(255, 0, 0), 50);
colorWipe(Color(0, 255, 0), 50);
colorWipe(Color(0, 0, 255), 50);
rainbow(20);
rainbowCycle(20);
}
void rainbow(uint8_t wait) {
int i, j;
for (j=0; j < 256; j++) { // 3 cycles of all 256 colors in the wheel
for (i=0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel( (i + j) % 255));
}
strip.show(); // write all the pixels out
delay(wait);
}
}
// Slightly different, this one makes the rainbow wheel equally distributed
// along the chain
void rainbowCycle(uint8_t wait) {
int i, j;
for (j=0; j < 256 * 5; j++) { // 5 cycles of all 25 colors in the wheel
for (i=0; i < strip.numPixels(); i++) {
// tricky math! we use each pixel as a fraction of the full 96-color wheel
// (thats the i / strip.numPixels() part)
// Then add in j which makes the colors go around per pixel
// the % 96 is to make the wheel cycle around
strip.setPixelColor(i, Wheel( ((i * 256 / strip.numPixels()) + j) % 256) );
}
strip.show(); // write all the pixels out
delay(wait);
}
}
// fill the dots one after the other with said color
// good for testing purposes
void colorWipe(uint32_t c, uint8_t wait) {
int i;
for (i=0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}
/* Helper functions */
// Create a 24 bit color value from R,G,B
uint32_t Color(byte r, byte g, byte b)
{
uint32_t c;
c = r;
c <<= 8;
c |= g;
c <<= 8;
c |= b;
return c;
}
//Input a value 0 to 255 to get a color value.
//The colours are a transition r - g -b - back to r
uint32_t Wheel(byte WheelPos)
{
if (WheelPos < 85) {
return Color(WheelPos * 3, 255 - WheelPos * 3, 0);
} else if (WheelPos < 170) {
WheelPos -= 85;
return Color(255 - WheelPos * 3, 0, WheelPos * 3);
} else {
WheelPos -= 170;
return Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
}
Scheint Du hast alles Richtig gemacht.
Ich habe einen Verdacht, daß eine Verbindung zwischen dem 4. und 5. LED nicht in Ordnumg ist. So wie der Strip gemacht ist hast Du keine Möglichkeit das nachzumessen.
Hast Du einen anderen Strip?
Hast Du versucht den strip beim Verkäufer zu reklamieren?
Kannst Du eventuell den Strip nach dem 4 (5.) Led abschneiden?
Frenzzik:
Was kann ich noch versuchen, um die restlichen LEDs zum Funktionieren zu überreden?
Test: Steckverbindung überprüfen!
Auf Deinem Foto sieht es eventuell so aus, als wenn der Stecker zwischen UNO und Strip nicht voll in die Steckfassung eingesteckt ist, sondern etwas heraussteht
Test: Durchgangswiderstand der Leitungen "GND" und "Stromversorgung" im Strip prüfen!
Messgerät: Multimeter mit Ohm-Messbereich
Zur Messung den Strip trennen von der Stromversorgung und vom Arduino, dann jeweils im niedrigsten Ohm-Messbereich den Durchgangswiderstand zwischen GND am Anfang des Strips und GND am Ende des Strips, sowie zwischen Plus am Anfang des Strips und Plus am Ende des Strips messen. Widerstand knapp über 0 Ohm?
Ist das denn soweit alles im grünen Bereich?
Dann könntest Du noch die Spannung im laufenden Betrieb testen:
Messgerät: Multimeter mit Volt-Messbereich
Zur Messung den Strip wieder an Stromversorgung und Arduino anschließen. Im Volt-Messbereich am Ende des Strips die Betriebsspannung messn.
Um das Signal auf der Leitung zu testen, z.B. mit einer Nadel reingepiekst in die Isolierung des Signalkabels zwischen den LEDs, würdest Du ein Oszilloskop benötigen. Das hat allerdings nicht jeder Arduino-Basteler (mich eingeschlossen).
Zerschneiden möchte ich den Strip nicht, da ich ihn noch reklamieren kann. Möchte aber sicher sein, dass es an den LEDs liegt, bevor ich ihn retourniere.
Einen Zweiten habe ich noch nicht, aber Ende Woche bekomme ich einen 25 Strang ws2801 zum testen.
Steckverbindung sitzt, mehrfach überprüft.
Multimeter Tests: Habe ich leider keinen, hab 'sowas ähnliches' in der Schublade gefunden, siehe Dropbox - Error
aber ich gehe davon aus, dass ich mit dem nur die ungefähren V messen kann? Kenn mich da leider (noch) nicht so aus.
Mir ist noch aufgefallen, dass, sobald ich den Strip mit dem Netzteil verbinde, alle LEDs für den Bruchteil einer Sekunde ganz schwach weiss leuchten. Danach bleibts beim alten, die ersten 4 LEDs lassen sich wunderbar steuern, der Rest macht keinen Wank.