Hilfe mit Arduino Uno/Teensy 3.2 und einem SK6812 RGBWW Led Streifen

Hi,

ich habe mir einen SK6812 RGBWW Led Stripe gekauft.
Dieser funktioniert wunderbar mit einem Arduino Uno.
Alles leuchtet wie es soll, die Effekte funktionieren etc ...

Nehme ich den identischen Sketch (siehe Anhang) und Pins (GND und PIN3 - ebenfalls PWM am Teensy) bekomme ich beim Teensy 3.2 leider nur grell leuchtende Leds, keine Farben, keine Effekte. Mir ist auch aufgefallen, dass der Streifen sehr heiß wird.
Das einzige was funktioniert ist die Beschränkung per NUMPIXELS.

Hat jemand eine Ahnung was ich falsch machen könnte, bzw. was beim Teensy 3.2 hier anders ist?
Ich habe uach bereits verschiedene PINS probiert.

Danke
scratch

Color_Definitions.h (4.54 KB)

strandtest_rgbw.ino (7.33 KB)

Zwischen UNO/Teensy-Pin und Din fehlt ein Widerstand von 220 bis 1000 Ohm, um den ersten Lichtpunkt vor Schaden zu bewahren. Hat aber mit Deinem Problem nichts zu tun.

#define NEO_PIN 5  // NeoPixel DATA

Das ist nicht Pin 3. (GND, 0, 1, 2, 3 ...)

scratch85:
... was beim Teensy 3.2 hier anders ist?

Die LEDs wollen 5V Signale, der Teensy liefert nur 3,3V. Für meine LEDs ist das kein Problem, sonst verwende ich ein IC 74LS245 als Levelshifter (die für I2C sind ungeeignet!).

Das Testprogramm funktioniert.

agmue:
Zwischen UNO/Teensy-Pin und Din fehlt ein Widerstand von 220 bis 1000 Ohm, um den ersten Lichtpunkt vor Schaden zu bewahren. Hat aber mit Deinem Problem nichts zu tun.

#define NEO_PIN 5  // NeoPixel DATA

Das ist nicht Pin 3. (GND, 0, 1, 2, 3 ...)
Die LEDs wollen 5V Signale, der Teensy liefert nur 3,3V. Für meine LEDs ist das kein Problem, sonst verwende ich ein IC 74LS245 als Levelshifter (die für I2C sind ungeeignet!).

Das Testprogramm funktioniert.

Danke für deine Antwort!

Ich wollte wirklich alle Fehlerquellen ausschließen, daher kein Widerstand.
PIN 5 war wohl mein letzter Test, ich habe mehrere PINs getestet.

Der IC liefert dann das PWM Signal mit 5V?

scratch85:
Der IC liefert dann das PWM Signal mit 5V?

Das ist kein PWM-Signal, sondern ein Kommunikationsprotokoll wie für ein Shiftregister, aber mit Takt und Daten auf einer Leitung. Siehe Writing Your Own Library, bei RGBW aber mit 32 Bits.

Der Teensy liefert 3,3V.

Da es bei mir funktioniert, liegt der Fehler an einer anderen Stelle.

agmue:
Da es bei mir funktioniert, liegt der Fehler an einer anderen Stelle.

Ich glaube ich habe das "Problem" gefunden, wobei sich mir der Zusammenhang nicht erschließt!
In der Arduino IDE war der Teensy auf 24Mhz eingestellt.
Nachdem ich alles wieder auf Standard (72Mhz, wie bei Auslieferung) gestellt habe funktionierts nun auch mit dem Teensy.
Interessehalber habe ich dann alle anderen CPU Speed Settings probiert und siehe da: 48Mhz und 72Mhz läuft. 24Mhz, das alte Resultat => Alles leuchtet grell weiß.

agmue:
Zwischen UNO/Teensy-Pin und Din fehlt ein Widerstand von 220 bis 1000 Ohm, um den ersten Lichtpunkt vor Schaden zu bewahren. Hat aber mit Deinem Problem nichts zu tun.

220 bis 1000 Ohm, von was ist es abhängig, was man am besten nimmt? Vielleicht Kabellänge (Distanz vom Arduino/Teensy zum Stripe?), usw...?

scratch85:
Ich glaube ich habe das "Problem" gefunden, wobei sich mir der Zusammenhang nicht erschließt!
In der Arduino IDE war der Teensy auf 24Mhz eingestellt.

Mit dem RGBW-Juwel von Adafruit kann ich das Problem nicht reproduzieren, ich habe alle Frequenzen mit USB durchprobiert. Normal verwende ich "96 MHz optimized (overclock)".

Den möglichen Zusammenhang hat mir freundlicherweise der Entwickler von FastLED erklärt, als ich mit einem I2C-Levelshifter versuchte, WS2812 Lichtpunkte anzusteuern. Der zeitliche Ablauf für das Kommunikationsprotokoll wird je nach Takt unterschiedlich erzeugt. Daher unterscheidet sich das Ergebnis ein wenig, was normalerweise nicht auffällt. Kommt nun aber ein weiterer Fehler hinzu (bei mir verschliffenes Signal, bei Dir zu geringer Spannungspegel), kann es bei einer Frequenz gerade noch so funktionieren, bei einer anderen nicht. Mit einem Oszilloskop kann man sich solche Dinge schön ansehen.

Mit einem Levelshifter sollten auch 24 MHz möglich sein.

scratch85:
220 bis 1000 Ohm, von was ist es abhängig, was man am besten nimmt? Vielleicht Kabellänge (Distanz vom Arduino/Teensy zum Stripe?), usw...?

Lady Ada schreibt im Adafruit NeoPixel Überguide "Adding a ~470 ohm resistor between your microcontroller's data pin and the data input on the NeoPixels can help prevent spikes on the data line that can damage your first pixel." und "Place a 300 to 500 Ohm resistor between the Arduino data output pin and the input to the first NeoPixel. The resistor should be at the end of the wire closest to the NeoPixel(s), not the microcontroller."

Hier im Forum wurde der Widerstand als Schutz der Dioden im Lichtpunkt beschrieben. An DIN darf nur eine Spannung von VCC+0,6V liegen. Wird das Netzteil der LEDs ausgeschaltet, geht VCC auf 0V, vom Arduino, der von USB versorgt wird, kommt aber ein 5V-Signal an DIN, dann brennt da eine Diode (?) durch. Der Widerstand soll das verhindern.

Vertrauen wir Lady Ada, die weiß normalerweise, was sie schreibt.