Forum: Mikrocontroller und Digitale Elektronik WS2812b über PCA9685 an Arduino?


von Kira P. (ktp13)


Lesenswert?

Hallo zusammen,
ich will für ein größeres Projekt viele WS2812b über einen Arduino Mega 
in Rot, Gelb und Orange zum Flackern bringen. Da es eben sehr viele sind 
und das Projekt ziemlich groß ist, wollte ich einen PCA9685 an den 
Arduino anhängen und an die Pins des PCA je 5 WS2812b anschließen. Das 
könnte ja theoretisch nach bedarf jederzeit mit einem oder mehreren 
weiteren PCA ergänzt werden.
Ich habe dafür bereits einen Sketch geschrieben. Allerdings bin ich mir 
sicher, dass er nicht korrekt ist. Könnt ihr mir helfen, den Sketch zu 
berichtigen?
Ein ganz anderes Problem ist dann auch noch, dass ich nicht sicher bin, 
ob WS2812b über einen PCA vom Arduino überhaupt angesteuert werden 
können. Ich habe dazu nichts brauchbares finden können. Weiß jemand dazu 
etwas?

Der Sketch:

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
#include <Adafruit_NeoPixel.h>

#define LED_COUNT 1

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); // Erstellen 
Sie eine Instanz des PCA9685-Chips
Adafruit_NeoPixel strip(LED_COUNT, 0, NEO_GRB + NEO_KHZ800);

void setup() {
 Serial.begin(9600); // Starten Sie die serielle Kommunikation
  pwm.begin(); // Starten Sie den PCA9685
  pwm.setPWMFreq(800); // Legen Sie die PWM-Frequenz auf 800 Hz fest

  strip.begin();
}

void loop() {
  strip.setPixelColor(0, strip.Color(239, 58, 51)); // Setze die Farbe 
des ersten Pixels auf Rot
  strip.show(); // Aktualisiere die LED
  delay(random(50, 500)); // Warte für eine zufällige Zeit zwischen 50 
und 500 Millisekunden

  strip.setPixelColor(0, strip.Color(245, 153, 52)); // Setze die Farbe 
des ersten Pixels auf Grün
  strip.show(); // Aktualisiere die LED
  delay(random(50, 500)); // Warte für eine zufällige Zeit zwischen 50 
und 500 Millisekunden

  strip.setPixelColor(0, strip.Color(245, 216, 52)); // Setze die Farbe 
des ersten Pixels auf Blau
  strip.show(); // Aktualisiere die LED
  delay(random(50, 500)); // Warte für eine zufällige Zeit zwischen 50 
und 500 Millisekunden
}

: Verschoben durch Moderator
von Jörg R. (solar77)


Lesenswert?

Du weißt aber schon wie WS2812B funktionieren? Ich verstehe den Sinn 
deines Vorhabens nicht.

von Kira P. (ktp13)


Lesenswert?

Ja, ich weiß, wie WS2812b funktionieren. Der Sinn, sie über einen PCA 
anzusteuern ist die Flexibilität. Im Optimalfall sind nicht alle 
gleichzeitig an, sondern die WS2812b wechseln sich ab. Einige der PCA 
Pins sind aktiv, andere nicht. Das ganze soll in ein 3D Modell 
installiert werden, weshalb die Pin auch noch den Zweck haben, möglichst 
viel Übersicht zu haben, welche WS2812b sich in welchem Gebäude 
befindet. Außerdem sollte dadurch auch bei einer größeren Anzahl von 
WS2812b die Geschwindigkeit der Datenübertragung nicht so stark 
nachlassen.
So waren zumindest meine Überlegungen. Macht das keinen Sinn?

von Kira P. (ktp13)


Lesenswert?

Jörg R. schrieb:
> Du weißt aber schon wie WS2812B funktionieren? Ich verstehe den Sinn
> deines Vorhabens nicht.

Ja, ich weiß, wie WS2812b funktionieren. Der Sinn, sie über einen PCA
anzusteuern ist die Flexibilität. Im Optimalfall sind nicht alle
gleichzeitig an, sondern die WS2812b wechseln sich ab. Einige der PCA
Pins sind aktiv, andere nicht. Das ganze soll in ein 3D Modell
installiert werden, weshalb die Pin auch noch den Zweck haben, möglichst
viel Übersicht zu haben, welche WS2812b sich in welchem Gebäude
befindet. Außerdem sollte dadurch auch bei einer größeren Anzahl von
WS2812b die Geschwindigkeit der Datenübertragung nicht so stark
nachlassen.
So waren zumindest meine Überlegungen. Macht das keinen Sinn?

von Jörg R. (solar77)


Lesenswert?

Kira P. schrieb:
> Jörg R. schrieb:
>> Du weißt aber schon wie WS2812B funktionieren? Ich verstehe den Sinn
>> deines Vorhabens nicht.
>
> Ja, ich weiß, wie WS2812b funktionieren. Der Sinn, sie über einen PCA
> anzusteuern ist die Flexibilität. Im Optimalfall sind nicht alle
> gleichzeitig an, sondern die WS2812b wechseln sich ab. Einige der PCA
> Pins sind aktiv, andere nicht. Das ganze soll in ein 3D Modell
> installiert werden, weshalb die Pin auch noch den Zweck haben, möglichst
> viel Übersicht zu haben, welche WS2812b sich in welchem Gebäude
> befindet. Außerdem sollte dadurch auch bei einer größeren Anzahl von
> WS2812b die Geschwindigkeit der Datenübertragung nicht so stark
> nachlassen.
> So waren zumindest meine Überlegungen. Macht das keinen Sinn?

Du kannst Doch 100 Stück (um eine Zahl zu nennen) WS2812B hintereinander 
schalten, aber nur eine davon leuchten lassen. Es ist doch nur Sache der 
Programmierung.

Der PCA9685 wäre zudem eher nicht geeignet. Das ist ein LED-Treiber der 
LEDs per PWM bedient. Du müsstest ja das Datensignal für die WS2812B 
durchreichen.

: Bearbeitet durch User
von Norbert (der_norbert)


Lesenswert?

Kira P. schrieb:
> Macht das keinen Sinn?

Nein, das ergibt keinen Sinn.
Um an eine WS2812 ein Bit zu übertragen braucht es ~1¼µs.
Bei 24b mithin 30µs.
Tausend LEDs in Reihe brauchen also nur 30ms.
Und man kann einzelne im Strang auch ausschalten! ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.