[erledigt] Welche Programm-Bibliothek für PTH RGB LED WS2812

Ich habe 10 PTH RGB LED WS2812 in Reihe geschaltet, die ich mit einem teensy 3.2 über Level Shifter ansteuere und durch ein separates Netzteil versorge. Ich habe noch keine Anwendung dafür.

Welche Bibliothek ist empfehlenswert?

Sollte die mich nicht überraschende Antwort FastLED sein, so habe ich dies bereits probiert:

#define NUM_LEDS 10
#define DATA_PIN 6
CRGB leds[NUM_LEDS];
void setup() {
...
  FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);
...
}

Wenn ich vor dem Compilieren die “CPU Speed 24 MHz” einstelle, funktioniert der Demosketch auch. Bei höheren Frequenzen machen die LEDs dann wirres Zeug. Was muß ich tun, damit die LEDs richtig angesteuert werden?

FastLed wäre wieder meine Antword gewesen. Versuch mal WS2812B im setup zu deklarieren;)

Das habe ich erfolglos probiert:

  // FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
  FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);
  // FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);

Du verwendest Arduino 1.6.5 + Teensyduino 1.25 + FastLED 3.1, richtig?

Falls nein - mach das bitte.

Falls ja und wenn das Problem weiterhin besteht - bitte das Problem + Code + Versionsnummern aller verwendeten Softwarekomponenten + Hardwaresetup hier posten.

Danke und Gruß,

Helmuth

P.S. Es sind gelegentliche Probleme mit 120+Mhz und langen Zuleitungen bekannt.
<=96Mhz funktionierte soweit bei allen…

P.P.S. Deklariere mal für einen Test

FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);

und nicht

FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);

Versionen: - arduino-1.6.5-r5-windows.exe - teensyduino.exe zeigt Version 1.25 - FastLED-3.1.0.zip (kein Unterschied im Verhalten zu der von teensyduino installierten Version)

Lange Zuleitungen: Teensy Pin 6 -> 10 cm Kabel -> Logic Level Converter von Flikto -> 10 cm Kabel -> 470 R -> 1. LED; alles auf Steckbrett Ich würde beim Schaltungsaufbau suchen, wenn es überhaupt nicht funktionieren würde. Da es bei 24 MHz aber geht und es ja immer 800 kHz konstante Frequenz sein sollten, kann es eigentlich nicht daran liegen, oder?

Tests:

  • WS2812 mit 24 MHz: geht
  • WS2812 mit 48 MHz: wirre Reaktionen, die entfernt was mit dem Sketch zu tun haben.
  • WS2812B kein Unterschied zu WS2812
  • Mit Adafruit_NeoPixel.h 96 MHz geht nicht
  • Mit Adafruit_NeoPixel.h Frequenzen kleiner 96 MHz funktionieren

In fastspi.h habe ich gefunden:

#if defined(FASTLED_TEENSY3) && (F_CPU > 48000000)
#define DATA_RATE_MHZ(X) (((48000000L / 1000000L) / X))
#define DATA_RATE_KHZ(X) (((48000000L / 1000L) / X))
#else
#define DATA_RATE_MHZ(X) ((F_CPU / 1000000L) / X)
#define DATA_RATE_KHZ(X) ((F_CPU / 1000L) / X)
#endif

Eine Änderung auf 24000000L hatte keinen Erfolg. Kann ich sowas irgendwo sinnvoll einbauen?

Noch Ideen?

Sieht alles gut aus, soweit.

Da hast Du wohl einen Bug gefunden - bitte poste das im FastLED Forum, Daniel fixt sowas normalerweise binnen 12h.

Hast Du einen G+ Account? Oder soll ich es posten?

edit: Okay, habe es selbst gepostet.

hi,

finde ich super, daß man ein google+-konto braucht.

gruß stefan

Hi Eisebaer,

ja, das ist in der Tat Mist. Das ist noch aus FastSPI Zeiten und am Anfang waren wir ca. 50 Leute, die jetzt und sofort eine funktionierende Plattform zum Kommunizieren brauchten. So fing das an...

Heute hat die Gruppe 2195 Mitglieder und es ist utopisch, den einmal gesammelten Wissens- und Erfahrungsschatz in ein "normales" Forum zu überführen.

Naja, eine Fakeaccount bei Google ist in 3 Minuten eingerichtet.

LG, Helmuth

Helmuth: Hast Du einen G+ Account? Oder soll ich es posten? edit: Okay, habe es selbst gepostet.

Nein - Ja - Danke!

Bei Nachfragen: Ich bin online ... und erfreue mich solange am APA102 Streifen.

hi,

Naja, eine Fakeaccount bei Google ist in 3 Minuten eingerichtet.

ist wahr. außerdem bin ich in der hinsicht eher locker. daß die amis auf jede festplatte schauen können, egal ob privat oder bei einer firma, ist mir klar.

ich finde es nur einzigartig, daß ausgerechnet ein technikforum mit computerbezug ein G+ - forum betreibt...

gruß stefan

Ich habe allgemein den Eindruck, dass die Amis da viel unkritischer sind, als die Europäer. Erstaunlich / erschreckend, dass praktisch jeder eine Gmail Adresse hat. Wird aber als völlig normal und notwendig betrachtet.

SmartMatrix hat auch als relativ lebendige G+ Gruppe angefangen. Seit es ein extra Forum (ohne den ganzen schönen Multimedia-Schnickschnack) dafür gibt, hat die Zahl der aktiven Mitglieder deutlich abgenommen.

Wahrscheinlich das stressige anmelden usw. G+ hat offenbar jeder und ist ohnehin eingeloggt.

Der Vorteil von einer G+ Gruppe ist halt, dass es sofort und mit allem funktioniert. Selbst ein Forum aufzusetzen oder auch nur anzupassen und zu administrieren / moderieren ist dagegen eine Mordsarbeit.

Schwieriges Thema, das Ganze.

Gruß,

Helmuth

@agume: Antwort von Daniel

I don't have any 3.2's with me (traveling) to test right now - but they should make sure that they're using the latest master pull of the library. Also they might need to try level shifters.

Die aktuellste Master-Version ist diese hier.

Runtergeladen, ausprobiert, leider kein Erfolg :( schade.

Die Ausgabe der IDE:

In file included from Test_PTH_RGB_LED_WS2812.ino:1:0: F:\Arduino\libraries\FastLED/FastLED.h:12:2: warning: #warning FastLED version 3.001.000 (Not really a warning, just telling you here.) [-Wcpp]

warning FastLED version 3.001.000 (Not really a warning, just telling you here.)

^ Multiple libraries were found for "FastLED.h" Used: F:\Arduino\libraries\FastLED Not used: C:\Program Files (x86)\Arduino165\hardware\teensy\avr\libraries\FastLED.teensy_ori

Der Sketch verwendet 11.432 Bytes (4%) des Programmspeicherplatzes. Das Maximum sind 262.144 Bytes. Globale Variablen verwenden 2.532 Bytes (3%) des dynamischen Speichers, 63.004 Bytes für lokale Variablen verbleiben. Das Maximum sind 65.536 Bytes.

Du schreibst "At 48MHZ many distorted frames, at 96MHz no frames at all." Zwischen 48 und 72 MHz sehe ich aber keinen signifikanten Unterschied. Das verwechselst Du womöglich mit meiner Aussage "Adafruit_NeoPixel.h 96 MHz geht nicht". Ich weise nur darauf hin, da ich nicht abschätzen kann, ob es relevant ist.

Dann hoffen wir, daß Daniels Reise irgendwann zu Ende ist. "Good travelings! " dem schließe ich mich an!

Glücklicherweise besteht bei mir keinerlei Zeitdruck :)

Du kannst nur einen FastLED Ordner haben, sonst gibt es Probleme - siehe Deine Fehlermeldung.

Du schriebst:

WS2812 mit 48 MHz: wirre Reaktionen, die entfernt was mit dem Sketch zu tun haben.

Das habe ich interpretiert / übersetzt mit "At 48MHZ many distorted frames"

Nachtrag von Dan: Es KÖNNTE auch der Level Shifter sein.

Wait, what are they using for level shifters? If they are using something that is too slow it will mess with the signal timings (especially if it's signal raising time is different than the signal dropping time). The reason why the lower clock speed would work is that it would slow the signal down enough to compensate a bit (eg a slow rise/fast drop would end up treating 1's like 0's where a slower clock speed that slightly dragged out how long the line was held high for a 1 would compensate for that)

Ich nehme immer den 74HCT245. BSS138 kenne ich nicht.

Das kriegen wir schon noch raus, wo das Problem liegt.

Helmuth: Du kannst nur einen FastLED Ordner haben, sonst gibt es Probleme - siehe Deine Fehlermeldung.

Deshalb schreibt die IDE auch "Used" und "Not used", also zwei erkannt, eine genutzt. Das benutzte Verzeichnis "F:\Arduino\libraries\FastLED" enthält die aktuellste Verstion der Bibliothek.

Helmuth: Das habe ich interpretiert / übersetzt mit "At 48MHZ many distorted frames"

Da stimme ich zu, aber "96MHz no frames at all" stammt nicht von mir.

Der Level Shifter arbeitet ja problemlos mit der Adafruit Bibliothek, die auf 800 kHz eingestellt ist.

Sollte ich übrigens etwas pingelig rüberkommen, so liegt es nur daran, daß ich Daniel bestmögliche Informationen anbieten möchte. :)

hi,

da wird man ja optimistisch. ich hab' gestern einen teensy 3.1 bei reichelt bestellt und will damit ca. 250 WS2812 betreiben. hoffentlich wird's was. als levelshifter soll ein 2N7000 herhalten.

gruß stefan

Sollte ich übrigens etwas pingelig rüberkommen, so liegt es nur daran, daß ich Daniel bestmögliche Informationen anbieten möchte.

Nicht doch, alles ist gut.

Der Level Shifter arbeitet ja problemlos mit der Adafruit Bibliothek, die auf 800 kHz eingestellt ist.

Moment! Den 800kHz Takt machen beide Libs i.V. mit jeder "CPU" Taktfrequenz. Der interessante Punkt ist, wie das Signal aussieht (Flankensteilheit). Das ist bei verschiedenen Taktfrequenzen verschieden - auch wenn es immer im 800kHz Raster läuft.

Und wenn es mit schlechter Signalqualität geht und mit besserer nicht, könnte das auf ein Geschwindigkeitsproblem vom Levelshifter hindeuten.

Pobier mal aus, ob Deine 2812 eventuell auch ohne Shifter mit den 3,3V zuverlässig arbeiten. Manche tun das. (Ohne Schutzwiderstand in der Datenleitung.)

als levelshifter soll ein 2N7000 herhalten.

Warum nehmt ihr irgendwelchen exotischen Kram, wenn das 1000fach getestete Standardprodukt für einen Euro zu haben ist? ;) Trotzdem viel Erfolg, freut mich zu sehen, dass LEDs hier langsam in Gebrauch kommen...

hi,

wieso exotischer kram? kennst Du arduinobasicconnections von pighixxx? dort werden diese mosfets verwendet...

aber ich hab' vorhin schon vorsichshalber nachgesehen. ob ich die 74HCT245 bei conrad bekomme. der hat 3 verschiedene in DIP-form. naja, und ich und datenblätter. mal schauen.

gruß stefan

Helmuth:
Moment! Den 800kHz Takt machen beide Libs i.V. mit jeder “CPU” Taktfrequenz. Der interessante Punkt ist, wie das Signal aussieht (Flankensteilheit). Das ist bei verschiedenen Taktfrequenzen verschieden - auch wenn es immer im 800kHz Raster läuft.

Und wenn es mit schlechter Signalqualität geht und mit besserer nicht, könnte das auf ein Geschwindigkeitsproblem vom Levelshifter hindeuten.

Da paßt es ja, daß ich zwei Bilder gemacht habe, hoffentlich kann der Fachmann was erkennen:
WS2812_signal.png

Helmuth:
Warum nehmt ihr irgendwelchen exotischen Kram, wenn das 1000fach getestete Standardprodukt für einen Euro zu haben ist?

Unwissenheit. Ich dachte, was für I2C gut ist, taugt auch für die LEDs. :confused:

kennst Du arduinobasicconnections von pighixxx? dort werden diese mosfets verwendet...

Nee, kenn ich nicht - aber das bedeutet gar nichts! Wenn sie sich bei 800kHz nicht verschlucken, ist alles gut.

der hat 3 verschiedene in DIP-form.

Interessant, ich finde nur einen.