Forum: Mikrocontroller und Digitale Elektronik AVR C-Code für WS2812B


von Jens (Gast)


Lesenswert?

Hallo Leute,

ich suche einen einfachen C-Code um einen 5 Meter WS2812B mittels AVR 
(Atmega, Atiny) im Kinderzimmer anzusteuern. Ich möchte das Rad ungern 
neu erfinden und wenn ich ehrlich bin wenig Zeit (davon habe ich gerade 
eigentlich keine) investieren. Eher schnell zumsammenlöten, Software 
drauf und leuchtet.

Ideal wäre eine einfache Schaltung mit Poti zum Einstellen der Farbe. 
Mehr muss nicht sein.

Hat doch bestimmt schon der ein oder andere in dieser Form realisiert 
und könnte ggf. seinen zur Verfügung stellen? C wäre halte schön, da ich 
Assembler erst lernen müsste.

von Einer K. (Gast)


Lesenswert?

In der Zeit, in welcher du auf eine kompetentere Antwort wartest, 
könntest du das Programm mit den Werkzeugen/Libs der Arduinowelt 
zusammendengeln.

incl IDE Installation, für einen geübten unter 1/2H

von Jens (Gast)


Lesenswert?

Dafür müssste ich mir 1. einen Arduino kaufen, 2. Arduino lernen.

Attiny85 oder auch Atmega8 / 168 fänden sich dagegen noch einige in der 
Bastelkiste.

Vielleicht findet sich ja noch jemand der was passendes im Angebot hat 
und dies auch teilen würde.

von Markus M. (adrock)


Lesenswert?

...ich hatte hier mal eine kleine Lib gepostet vor einiger Zeit. Ist 
allerdings in ASM, kann aber von C angesprochen werden.

Beitrag "AVR ASM ws2811 / ws2812 Ansteuerung mit FastPWM"

Verwendet FastPWM zur Erzeugung des Timings. Für ATtiny und Mega (z.B. 
168).

von N. M. (mani)


Lesenswert?

Jens schrieb:
> Dafür müssste ich mir 1. einen Arduino kaufen

Nö. Du kannst ja auch nur den Source nutzen.
z.B. hier steht:
https://github.com/adafruit/Adafruit_NeoPixel
1
AVR ATmega and ATtiny (any 8-bit) - 8 MHz, 12 MHz and 16 MHz

Jens schrieb:
> 2. Arduino lernen.

Arduino lernen? Du meinst C/Cpp. Ja das müsstest du.

von Jäckel (Gast)


Lesenswert?

N. M. schrieb:
> Arduino lernen? Du meinst C/Cpp. Ja das müsstest du.

Mal ne Frage dazu: Ist das Ganze Industrie tauglich?

Ich bin relativ neu dabei. Ich hab PC basiert prozedural und 
objektorientiert mit Windows Forms cpp gelernt. Mich interessiert wie 
ich Schnittstelle am besten anspreche.

Beispielsweise wenn ich mir einen Arduino Mega besorge und eine W-Lan 
oder LoraWAN Verbindung aufbauen wollen würde, ginge das? Dann würde ich 
mit Qt Visualisieren und Beispielweise LEDs oder Heizung ansteuern... So 
spontan aus der Luft gegriffen.

Danke!

von Joachim B. (jar)


Lesenswert?


von Jack V. (jackv)


Lesenswert?

Jäckel schrieb:
> Mal ne Frage dazu

Mal ’ne Frage dazu: warum machst du nicht deinen eigenen Trollthread 
auf?

von Jäckel (Gast)


Lesenswert?

OK. Eigener Fanden ist verständlich aber warum Troll? Haben etwa alle 
Cpp Entwickler Mikrocontroller Erfahrung?

von Jack V. (jackv)


Lesenswert?

Jäckel schrieb:
> warum Troll?

Arduino und Industrie in einem Beitrag ist eine Garantie für lustiges 
Geflame. Sowas machen in der Regel nur Trolle. Sorry, wenn’s bei dir 
tatsächlich ein Versehen gewesen sein sollte.

von Einer K. (Gast)


Lesenswert?

Jens schrieb:
> Dafür müssste ich mir 1. einen Arduino kaufen, 2. Arduino lernen.
1 nein.
2 C kannst du, sollte reichen

Jens schrieb:
> Attiny85 oder auch Atmega8 / 168 fänden sich dagegen noch einige in der
> Bastelkiste.

Die ArduinoWelt kann auch "Attiny85 oder auch Atmega8 / 168" bespielen.
Bedingt aber zusätzliche 10Min Einsatz um die Hardwaredefinitionen zu 
installieren

--------------



Jäckel schrieb:
> Mal ne Frage dazu: Ist das Ganze Industrie tauglich?
Irgendwelche Zertifikate, sind dünn gesät.
Hier ein positives Beispiel: https://www.controllino.biz/

Jäckel schrieb:
> Beispielsweise wenn ich mir einen Arduino Mega besorge und eine W-Lan
> oder LoraWAN Verbindung aufbauen wollen würde, ginge das?
Da der Mega kein Funk onBoard hat, nur mit Zusatzmodulen,
Dann ja.

von Wolfgang (Gast)


Lesenswert?

Jäckel schrieb:
> Beispielsweise wenn ich mir einen Arduino Mega besorge und eine W-Lan
> oder LoraWAN Verbindung aufbauen wollen würde, ginge das? Dann würde ich
> mit Qt Visualisieren und Beispielweise LEDs oder Heizung ansteuern...

Warum nicht direkt ESP8266 oder ESP32, wenn du WLAN brauchst?

von c-hater (Gast)


Lesenswert?

Jens schrieb:

> ich suche einen einfachen C-Code um einen 5 Meter WS2812B mittels AVR
> (Atmega, Atiny) im Kinderzimmer anzusteuern. Ich möchte das Rad ungern
> neu erfinden und wenn ich ehrlich bin wenig Zeit (davon habe ich gerade
> eigentlich keine) investieren. Eher schnell zumsammenlöten, Software
> drauf und leuchtet.

Also im Minimum faul...

> Ideal wäre eine einfache Schaltung mit Poti zum Einstellen der Farbe.

Obendrein auch noch vollständig inkompetent...

Zu deiner Aufschlauung: "Farbe" ist de facto immer ein Wert in einem 
dreidimensionalen Koordinatensystem. Es gibt sicherlich verschiedene, 
sie haben aber allesamt die drei Dimensionen gemeinsam. Du kannst nicht 
in drei Dimensionen mit nur einem Poti-Wert navigieren. Theoretisch zwar 
möglich, aber praktisch wohl nicht sehr sinnvoll, zumal bei den eher 
begrenzten Fähigkeiten der AVR8, den Potiwert in eine Zahl zu wandeln...

Mit drei Potis könnte das hingegen tatsächlich etwas werden. Du musst 
dich dann nur noch für ein Koordinatensystem entscheiden. Aus 
praktischen Gründen wäre wohl das HSV-Farbraummodell zu bevorzugen...

von Einer K. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Bedingt aber zusätzliche 10Min Einsatz um die Hardwaredefinitionen zu
> installieren
Das war nicht ganz richtig!
Boards mit ATMega168(P?) werden von Hause aus schon unterstützt.

Ansonsten:
Der Thread ist jetzt über 2H alt.
Du hättest schon fertig sein können, wenn du dich nicht selber 
blockieren würdest.

von Falk B. (falk)


Lesenswert?


von Jens M. (schuchkleisser)


Lesenswert?

Warum nimmt man WS2812, wenn die ganzen 5m in der gleichen Farbe 
leuchten sollen?
Für einfache RGB-LEDs und HSV-Fans hat der Zabex was schönes 
veröffentlicht: http://www.zabex.de/frames/sofabeleuchtung.html

Es gibt WS2812-Controller, die mit Fernbedienung und fertigen 
Farbwechseln und Fixfarben "schön" sind, für unter 15€, inklusive 
Versand und WLAN.
Eure Zeit muss echt billig sein...
Und die sind nicht schwer zu finden, echt jetzt. Wie kommt man drauf, 
das man sowas selber bauen will?

Und so nebenbei: 5m WS2812 "volle Pulle" nehmen locker zweistellige 
Ampere auf. Das kann der Streifen nicht alleine leisten.

von Jens (Gast)


Lesenswert?

Habe mich nun doch mal an Arduino getraut, und die Adafruit NeoPixel Lib 
intstalliert.

"https://github.com/adafruit/Adafruit_NeoPixel";

Wollte erstmal den angegeben Beispielcode testen:

1
#include <Adafruit_NeoPixel.h>
2
3
#ifdef __AVR__
4
  #include <avr/power.h>
5
#endif
6
#define PIN        6
7
#define NUMPIXELS 60
8
9
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
10
#define DELAYVAL 500
11
12
void setup() {
13
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
14
  clock_prescale_set(clock_div_1);
15
#endif
16
17
  pixels.begin();
18
}
19
20
void loop() {
21
  pixels.clear();
22
23
  for(int i=0; i<NUMPIXELS; i++) {
24
25
    pixels.setPixelColor(i, pixels.Color(0, 150, 0));
26
    pixels.show();
27
    delay(DELAYVAL);
28
  }
29
}


Mein Streifen hängt an PIN 6 vom ATtiny85 und hat 60 Leds.
Sollte also passen. Auch rennt der Kerl mit 16 Mhz (externes Quarz).
CKDIV FUSE ist deaktiviert. Es stehen also wirklich die vollen 16 Mhz 
zur Verfügung.

Per AVRISP mkII lässt sich der Code auch auf den Tiny85 schreiben.

Aber siehe da, nix. Kein Leuchten. Ein Test mit Oszilloskop zeigt an 
PIN6 vom Tiny auch nix.

Habe es daraufhin mal mit dem Code von Markus M. und den Hinweisen über 
das AtmelStudio 7 probiert. Damit wirds auf anhieb bunt auf dem 
Streifen. Das klappt also.

Warum nicht mit der Arduino Variante? Muss ich da noch was beachten?

von Jens (Gast)


Lesenswert?

Fehler gefunden, PIN falsch gesetzt. Jetzt läuft alles. Damit könnte der 
Tread dann gelöscht werden.

Danke allen für die Hilfe.

von Forist (Gast)


Lesenswert?

Jens schrieb:
> Damit könnte der Tread dann gelöscht werden.

Wird er aber nicht, damit andere nicht den selben Fehler machen wie du, 
sondern hier nachlesen können.

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.