Pages: [1]   Go Down
Author Topic: FastSPI Funktion (setRGBData)  (Read 1782 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 271
Posts: 21881
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Meines wissens ist der WS2811 nicht mit der SPI-Schnittstelle kompatibel. Er hat keine Takt-Pin.
Grüße Uwe
« Last Edit: December 26, 2012, 09:27:55 am by uwefed » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 271
Posts: 21881
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja, im Internet wird die FastSPI Bibiothek für den WS2811 (WS2812) verwendet.
Versuchs einfach mal wenn Du die LEDs bekommen hast.
Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: December 28, 2012, 06:36:26 am by Diddy5 » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ich habe mittlerweile ziemlich viele ICs durchprobiert. Darunter WS2801/3, TM1804, HL1606, TLC5941, UCS5903/LPD6803 und natürlich den LPD8806.

Der HL1606 ist eine Katastrophe, dass er nicht so viel kann ist nicht mal das Problem, auch elektrisch ist er sehr störanfällig.

Der WS280/3 ist ok, allerdings ist die 500us "Latch"-Pause nervig. Das Tm1804-Protokoll hat sowieso ein vergleichsweise aufwendiges Timing, hat aber durch das 1-Draht Protokoll natürlich Vorteile bei der Verdrahtung. Da man Hardware-SPI eh nicht verwenden kann, kann man jeden Port eines uC nutzen und sogar relativ leicht einige Strips parallel ansprechen.

Der LPD8806 ist jedoch m.E. für den Programmierer das angenehmste IC, denn er ist nahezu unempfindlich gegenüber Timing. Da die PWM-Informationen immer mit einer Startsequenz aus einigen 0-Bytes eingeleitet wird und die Daten angezeigt werden, sobald der Chip alle Informationen hat, kann auf der einen Seite die volle Bitrate des Hardware-SPI reinjagen (bis zu 20MHz hat bei mir problemlos funktioniert), ohne irgendwelche Pausen einbauen zu müssen. Auf der anderen Seite kann man über einen Debugger die PWM-Informationen sogar per Einzelschritt dem Strip übergeben und werden LED für LED angezeigt. Das kann bei machen Animationen durchaus praktisch sein.

Dass die PWM nur 7-Bit sind ist zwar ein kleiner Wermutstropfen, aber wer mehr Stufen braucht kann dank der hohen Datenrate ein paar zusätzliche Bits simulieren.
Logged

Pages: [1]   Go Up
Jump to: