Arduino Mega Anfängerfragen

Hallo Zusammen

Ich habe vor kurzem mit Arduino UNO&Nano angefangen und habe jetzt das erste mal einen Arduino Mega vor mir. Nun möchte ich einen WS2811 Treiber IC benutzen um einen 3W Buckconverter PWM anzusteuern. Für die Schaltung der Verbindung von Buck-Converter und WS2811 hab ich einen Ansatz… denke der läuft auch. Nun kommt das erste Problem, da ich mich eher in der Analogtechnik ausf^kenne und weniger in der Programmierwelt.

Wenn ich den PWM Pin 2 vom Arduino Mega ansprechen will mit meinem Skript, und de Neopixel Libary verwende, stimmt dann die die Pinnr. 2?

#include <Adafruit_NeoPixel.h>
#ifdef AVR
#include <avr/power.h>
#endif

#define PIN 2

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic ‘v1’ (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(1, PIN, NEO_GRB + NEO_KHZ800);

Ich habe das Gefühl der Arduino arbeitet gar nicht auf meinem Pin 2, bin mir aber nicht sicher da meine neuen Oszi-Proben noch unterwegs sind…

Aktuell kommt auf den Buckconverter am PWM Eingang nur High… sprich keine PWM…
An der Schaltung zwischen Buckconverter und WS2811 denk ich liegts nicht, da wenn ich eine LED an den WS2811 anschliesse wofür er ja eigentlich gedacht wäre passiert auch nichts…

Also so wie es scheint ist der Pin 2 der PWM Pin 2.

Kann es sein, dass ich den Pin 2 als Output definieren muss? Dies musste ich auf dem Arduino Uno/Nano mit der Neopixel Libary nie.

So wie es in diesem AnalogWriteMega Tutorial beschrieben ist? http://www.arduino.cc/en/Tutorial/AnalogWriteMega

Kann es sein, dass ich den Pin 2 als Output definieren muss?

Merkwürdig, ja ;)

Am besten, ein Tutorial erstmal unverändert nachbauen. Dann kannst du immer noch ausprobieren, was bei Änderungen passiert.

Auch hilft die Referenz oft: Bei analogWrite findest du

You do not need to call pinMode() to set the pin as an output before calling analogWrite().

In diesem Tutorial http://www.arduino.cc/en/Tutorial/AnalogInOutSerial geht es auch ohne pinMode

Schadet aber nicht...

RomN: Adafruit_NeoPixel strip = Adafruit_NeoPixel(1, PIN, NEO_GRB + NEO_KHZ800);

Das hat nichts mit PWM zu tun. Da werden digitale Signale mit 800 kHz wie zu einem Schieberegister geschickt, wobei jeder Lichtpunkt, der aus RGB-LEDs besteht, je LED ein Byte bekommt, 0 ist Aus, 255 ist An.

Schau Dir mal FastLED\examples\AnalogOutput\AnalogOutput.ino an.

Ja die Ansteuerung eines WS2811 ist in dem Sinne nicht PWM, aber soviel ich recherchiert hab, dass diese Anschlüsse verwendet werden. (Ich nehme an da sie genug schnell sind?)

Das empfohlene Example versteh ich soweit. In diesem werden die Pins 3,5,6 als Out definiert. Wenn ich nun das Strandtest-Example der Neopixel Libary anschaue, find ich nirgends die Definition der des Pins als Out, kann sowas in der Libary erledigt werden?

Ich werde sicher nun probieren das ganze mit der FastLed-Libary zum laufen zu bringen, aber die Neopixel-Libary müsste den WS2811 auch unterstützen soweit ich das verstanden habe...

"Edit" Ich hab den Thread von Michael_X nicht gesehen dazwischen. und nur auf agmue geantwortet...

Normalerweise lad ich das Strandtest file der Neopixel-Libary und schau mal wies blinkt aber da hatte ich immer ws2812b led und nicht den ws2811 treiber...

Ich forsche mal weiter...

Best Dank für die Antworten

Mir kommt der Verdacht, Du schreibst PWM, meinst aber das 800 kHz Signal für WS2811. Bitte verlinke mal den WS2811, dann sollte sich das schnell klären lassen.

In Adafruit_NeoPixel\examples\strandtest\strandtest.ino sehe ich: // NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)

https://www.adafruit.com/datasheets/WS2811.pdf

Es gibt mehrere Datasheets zu diesem Treiber welche nicht alle miteinnader übereinstimmen, aber dies sollte meiner Recherchen keine Rolle spielen wenn ich die Libarys verwende...

"Edit" ah jetzt, der WS2811 wird via 800kHz Signal angesteuert, der WS2811 macht mir dann drei (für jede Farbe eines) PWM-Signal, welche ich dann via Transistor auf den Buck-Converter geb...

Verwendetes Schema Dieses Schema ist nicht von mir, soll aber funktionieren.

Das funktioniert nicht. Der WS2811 ist nicht dazu gemacht als ansteuerung eines DC/DC Converters zu arbeiten. Bau Dir den Converter aus dem richtigen IC oder kauf einen fertigen
Grüße Uwe

An den IC-Ausgängen OUTR, OUTG, OUTB gibt es PWM für die LEDs, aus Sicht des Arduino ist es aber ein NeoPixel-Signal von 400 oder 800 kHz an DIN. AnalogOutput.ino ist also falsch!

Dann würde ich NEO_KHZ400 versuchen, wobei der Pin egal ist und auch nicht als Ausgang definiert werden muß.

Hier im Forum wird FastLED bevorzugt, da gibt es WS2811 (800 kHz) und WS2811_400. Aus FastLED\examples\FirstLight\FirstLight.ino:

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

uwefed: Das funktioniert nicht. Der WS2811 ist nicht dazu gemacht als ansteuerung eines DC/DC Converters zu arbeiten. Bau Dir den Converter aus dem richtigen IC oder kauf einen fertigen Grüße Uwe

Oder verwende eine PWM Pin des Arduinos... Was der 2811 dazwischen soll, ist mir ein Rätsel.

:slight_smile: ja alles berechtigte Fragen, es geht am Schluss um 20 3w LED und im Idealfall noch 20 WS2812b Leds So stell ich mir zumindest vor ich könne am Schluss alles Leds auf einem Pin ansteuern. Da jedes LED induviduell angesteuert werden soll, und ich nicht 40PWM Signale auf 40 Pins ausgeben möchte. Die Wahl des 2811 ist die vermutliche kompatibilität mit den WS2812b Leds und der faktor das ich bis jetzt immer mit den WS2812b Leds gearbeitet habe…

Ob sich WS2811 und WS2812B vertragen, wäre praktisch zu prüfen, aber dann sind es halt maximal zwei Pins.

Genau auf einen Pin mehr könnt ich dann am Ende verzichten :-D Ich werde die Fast-LED heute Abend ausprobieren.

@Uwe mit dir oben geposteten Schaltung sollte ich den Converter und den WS2811 aneinander anpassen können?

Ich werde das ganze mit folgendem Code testen. So wie es aussieht ist die FastLed Libary einfacher zu verstehen als die andere, vielen Dank für die zahlreichen Antworten!

// #include “FastLED.h”

// How many leds in your strip?
#define NUM_LEDS 1

// For led chips like Neopixels, which have a data line, ground, and power, you just
// need to define DATA_PIN. For led chipsets that are SPI based (four wires - data, clock,
// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN
#define DATA_PIN 2

// Define the array of leds
CRGB leds[NUM_LEDS];

void setup() {
// Uncomment/edit one of the following lines for your leds arrangement.
// FastLED.addLeds<TM1803, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<TM1804, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<TM1809, DATA_PIN, RGB>(leds, NUM_LEDS);
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);
// FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
// FastLED.addLeds<APA104, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<UCS1903, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<UCS1903B, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<GW6205, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<GW6205_400, DATA_PIN, RGB>(leds, NUM_LEDS);

// FastLED.addLeds<WS2801, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<SM16716, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<LPD8806, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<P9813, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<APA102, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<DOTSTAR, RGB>(leds, NUM_LEDS);

// FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<SM16716, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<LPD8806, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<P9813, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<APA102, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<DOTSTAR, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
}

void loop() {
// Turn the LED on, then pause
leds[0] = CRGB::Red;
FastLED.show();
delay(500);
// Now turn the LED off, then pause
leds[0] = CRGB::Black;
FastLED.show();
delay(500);
leds[0] = CRGB::Blue;
FastLED.show();
delay(500);
// Now turn the LED off, then pause
leds[0] = CRGB::Black;
FastLED.show();
leds[0] = CRGB::Green;
FastLED.show();
delay(500);
// Now turn the LED off, then pause
leds[0] = CRGB::Black;
FastLED.show();
delay(500);
}
}

Hey! Hat alles geklappt WS2811 und WS2812b vertragen sich auch auf einem Anschluss zumindest wenn ich je eines nehme!