Show Posts
Pages: [1]
1  International / Deutsch / Re: testbericht zum WS2812 on: February 02, 2013, 06:21:49 am
hi, dirk,

ist zwar nicht meine situation, aber so läßt es sich am einfachsten beschreiben:
stell Dir die weihnachtsbeleuchtung an einer häuserfront vor. mehrere streifen an veschiedenen plätzen. wenn ich da die enden eines streifens mit dem anfang des nächsten verbinde, komm' ich auf eher untragbare leitungslängen (da bricht mir wahrscheinlich die spannung der datenleitung weg). wenn ich allerdings einen controller in der mitte hab, sollte es problemlos gehen...

gruß stefan

Hi Stefan

wie wäre es als Leitung gutes Cat 7 Netzwerkkabel  zu legen?
Durch die Schirmung lässt sich damit bestimmt einiges an Länge gewinnen.

Gruss
Diddy


//edit:
von wievielen Metern reden wir denn? evtl kann ich das testen, hab noch irgendwo 70 meter davon rumliegen smiley-wink
2  International / Deutsch / Re: testbericht zum WS2812 on: February 01, 2013, 04:26:59 pm
Den Thread habe ich jetzt erst gesehen, aber da so viele Interesse an den LEDs haben schreibe ich das hier auch nochmal, da Eisebaer ja per PN angefragt hatte.

Der Schaltplan ist wirklich nicht schön (erster eagle Versuch)  und ich bin auch kein Elektroniker, aber zur Veranschaulichung sollte er reichen.
(und ob der so funktioniert weiß ich auch noch nicht)

http://imageshack.us/photo/my-images/802/ws2812.png/

Pinbelegung der LED
unbelegt  4      3  Plus
Plus         5      2  Data In
Masse(-)   6      1  Data Out

Wie man sieht, hat man 2 mal Plus, welche miteinander verbunden werden.
Jeweils der Data Out Pin muss auf den Data In Pin der nächsten LED.


Hier ein Teil meines Codes. Mit dem habe ich getestet, es sind eigene Funktionen dabei und es muss jeder selber wissen ob er die benötigt.
Ansich ist vieles davon eine Portierung des Adafruit Codes des WS2801.

Anschluss der ersten LED des Data In Pins auf Arduino-Pin #13.

Der Code ist noch nicht ganz schön, basiert jedoch auf der FastSPI library.. aber ich glaub hier wird mehr Interesse auf Funktion gegeben


Code:
#include <FastSPI_LED.h>
#define NUM_LEDS 25  // Anzahl der LEDs definieren



struct CRGB { unsigned char g; unsigned char r; unsigned char b; };  // die WS2812 haben GRB anstelle RGB
//struct CRGB { unsigned char r; unsigned char g; unsigned char b; };   // Bei bedarf ersetzen, wenn rot und grün vertauscht sind
struct CRGB *leds;
#define PIN 13  

void setup()
{
  FastSPI_LED.setLeds(NUM_LEDS);            
  FastSPI_LED.setChipset(CFastSPI_LED::SPI_WS2811);
  FastSPI_LED.setDataRate(2);
  FastSPI_LED.setPin(PIN);
  FastSPI_LED.init();
  FastSPI_LED.start();


  leds = (struct CRGB*)FastSPI_LED.getRGBData();
}


void loop() {

// Alle LEDs nacheinander rot aufleuchten lassen
int i;
for (i = 0; i < NUM_LEDS; i++){
 
  setPixelColor(i, 255,0,0);
 FastSPI_LED.show();  // Daten ausgeben
 delay(500); // nur ein delay,

}

blanking(1000); // Alle LEDs ausschalten
rainbow(50);
rainbowCycle(50);


}
  void rainbow(uint8_t wait) {
  int i, j;
  
  for (j=0; j < 256; j++) {    
    for (i=0; i < NUM_LEDS; i++) {
      colorHex(i, Wheel( (i + j) % 255));
    }  
    FastSPI_LED.show();  
    delay(wait);
  }}
  


void rainbowCycle(uint8_t wait) {
  int i, j;
  
  for (j=0; j < 256 * 5; j++) {    
    for (i=0; i < NUM_LEDS; i++) {
       colorHex(i, Wheel( ((i * 256 / NUM_LEDS) + j) % 256));
    }  
    FastSPI_LED.show();  
    delay(wait);
  }}


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

// 24 Bit Farbwert umwandeln
    void colorHex(int pix, uint32_t c){
  leds[pix].r = (c >> 16) & 0xFF;
  leds[pix].g = (c >> 8) & 0xFF;
  leds[pix].b = c & 0xFF;
  }


// 3 x 8 bit color to 24bit color
  uint32_t Color(byte r, byte g, byte b){
  uint32_t c;
  c = r;
  c <<= 8;
  c |= g;
  c <<= 8;
  c |= b;
  return c; }
  
  
  // Aufruf mit setPixelColor(LED, rot, grün, blau); mit jeweils 0-255 als Wert.  
    void setPixelColor(int pix, int rr, int gg, int bb){
  leds[pix].r = rr;
  leds[pix].g = gg;
  leds[pix].b = bb;  
  }
  
  
  // Alle LEDs ausschalten
  
void blanking (uint16_t wait) {
    int i;
    for (i=0; i < NUM_LEDS; i++) {
    setPixelColor(i, 0,0,0); }
    FastSPI_LED.show();
    
  delay(wait);}
    
    


// edit

Quote from: dischneider
- Müssen die WS permanent mit Daten versorgt werden oder kann eine (wenn ja, Zeitlimit?) Pause nach Datensatz für alle WS + Anzeigereset kommen?
- Gibt es Probleme mit einigen Zentimetern Bahn oder Kabel zwischen Dout und Din nach jeweils etwa 5-7 LED mit kleinem Abstand, wie störanfällig ist der Dout/Din-Bus?
- Muss der letzte Dout terminiert werden?
- kann man die Anzahl der WS irgendwie ermitteln, wenn die Anzahl dynamisch ist?


1. Sobald keine Daten mehr kommen, bleiben die LEDs in ihrem letzten "Status" - hast du z.B. einer LED gesagt sie soll rot sein und du trennst die Data Leitung - bleibt diese rot, sofern noch Strom vorhanden ist.
2. Ich habe keine Probleme gehabt mit ca 10 cm - aber da kann ich nichts genaueres dazu sagen.
3. der Dout muss nicht terminiert werden
4. Soviel ich weiß muss man das manuell festlegen, die Daten werden ja einfach nur durchgeschoben wie bei einem Schieberegister und keine zurückgegeben.


Falls ihr noch einen Ethernet Adapter habt, empfehle ich euch noch folgenden Link: http://www.deskontrol.net/blog/arduino-based-artnet-node-for-led-pixels/
Dazu z.B. die Software "Glediator" oder ein anderes Artnet LED Pixel Programm. Für mein großes Projekt werde ich das Artnet nutzen, für mein kleines POV Display bleibe ich bei der FastSPI smiley-wink

Ich hoffe dass damit die meisten in die WS2811 einsteigen können, ganz so einfach ist das Thema ja leider nicht, da sind die WS2801 einfacher aber leider teurer


// edit 2
Die Strips bekommt man jedoch auch wesentlich günstiger über China (50% vom Bucht Preis). Ich habe dort noch nichts bestellt, aber ab 4 metern lohnt sich das eher und werde über china auch bestellen (ich werde wohl aber auch ca 40-50 meter benötigen)

China LED Strips WS2811
3  International / Deutsch / Re: FastSPI Funktion (setRGBData) on: December 27, 2012, 09:56:17 am
zur Vollständigkeit vom Thread:

Ich hab grad mal eine LED mit einem ws2811 angeschlossen zum testen und es funktioniert smiley-wink

Aufruf der FastSPI mit:
FastSPI_LED.setChipset(CFastSPI_LED::SPI_WS2811);

rot und grün müssen getauscht werden, wenn man vorher die WS2801 genutzt hat
und diese Zeile sollte dann auch entfernt werden: FastSPI_LED.setDataRate(2);


/edit

bei 10 Stück funktioniert das ganze auch einwandfrei
4  International / Deutsch / Re: FastSPI Funktion (setRGBData) on: December 26, 2012, 09:13:14 am
Laut der FastSPI Projektseite soll dieser unterstützt werden und man findet einige Projekte die angeblich FastSPI und WS2811 nutzen?


http://code.google.com/p/fastspi/
Quote
Initial support:

    595 style shift registers - http://www.usledsupply.com/shop/rgb-32-spi-dmx-decoder.html
    hl1606 based led strips - http://bliptronics.com/item.aspx?ItemID=83
    lpd6803 based led pixels - http://bliptronics.com/item.aspx?ItemID=86
    tm1809 based led strips
    tm1804 based pixels
    ws2801 based led strips and pixels
    lpd8806 based led strips - https://www.adafruit.com/products/306
    ucs1903 based led strips
    sm16716 chipset
    support for the ws2811 chipset

Ich erwarte ein paar Test LEDs mit WS2811 diese Woche, aber falls ich irgendwas übersehen habe, wäre ich für jede Info dankbar.
5  International / Deutsch / Re: FastSPI Funktion (setRGBData) on: December 26, 2012, 07:26:16 am
Die Frage hat sich soweit erledigt.
Ich hab bereits eine Lösung gefunden/geschrieben.

Falls das noch jemand benötigen sollte, Poste ich die kleine Funktion mal. Ist nichts grosses, aber für meine Zwecke nützlich: 

24 Bit RGB Werte für einzelne Pixel:
Code:
  void setColor(int pix, uint32_t c){
  leds[pix].r = (c >> 16) & 0xFF;
  leds[pix].g = (c >> 8) & 0xFF;
  leds[pix].b = c & 0xFF;
  }
6  International / Deutsch / FastSPI Funktion (setRGBData) on: December 25, 2012, 05:31:53 am
Hallo zusammen,

da ich noch ziemlich am Anfang stehe mit C Programmierung bräuchte ich etwas Hilfe.
Es geht um den Aufruf der setRGBData Funktion im FastSPI:

Code:
  // call this method whenever you want to output a block of rgb data.  It is assumed that
  // rgbData is nNumLeds * 3 bytes long.
  void setRGBData(unsigned char *rgbData) { memcpy(m_pData,rgbData,m_nLeds); m_nDirty=1;}

Wie rufe ich die genau auf im sketch? "FastSPI_LED.setRGBData ..." ?  oder muss ich zuvor noch den definierten struct aufrufen? 

Falls die Info noch notwendig sein sollte, ich nutze derzeit die WS2801 ICs, jedoch muss ich auf die WS2811 für ein kleines Projekt umsteigen,da die günstiger sind und die Adafruit library kann das wohl nicht. Die LEDs laufen alle mit FastSPI, ich hänge wirklich nur an dem Aufruf der Funktion

Danke schonmal im Voraus
Pages: [1]