Forum: Mikrocontroller und Digitale Elektronik ws2812B mit attiny13 und 20Mhz quarz - einfach?


von fragensteller (Gast)


Lesenswert?

Hallo zusammen,
Ich würde gerne eine ganz einfache Schaltung haben.
Ich habe mir bei ebay einen Streifen mit 20 ws2812b LEDs gekauft.
Nun würde ich diese gerne nacheinander im Abstand von x Sekunden 
aufleuchten lassen.
Zu Beginn sollen alle LEDs ausgeschaltet sein.
Wenn der uc mit Strom versorgt wird sollen LED 1 und 11 dann nach x 
Sekunden LED 2 und 12 wieder nach x Sekunden LED 3 und 13 usw. Angehen 
und auch anbleiben.
Ich habe die tutorials hier gelesen aber werde nicht So ganz schlau. Am 
schönsten wäre für mich ein Code der etwa So aussieht.

Alle_LEDs_aus()
Led1_an()
   Rot(255)
   Grün(100)
   Blau(0) /die Werte möchte ich natürlich.anpassen
Led11_an()
   Rot(255)
   Grün(100)
   Blau(0)
Delay_ms(500)
Led2_an()
   Rot(255)
   Grün(100)
   Blau(0)
Led12_an()
   Rot(255)
   Grün(100)
   Blau(0)
Delay_ms(500)
.
.
.

Nur habe ich leider keinen Schimmer wie das geht.

Ich habe den 20mhz quarz angenommen da ich gelesen hatte dass dies für 
die ws2812b benötigte wird zur ansteuerung und der attiny13 nicht So 
viel ohne externes quarz schafft.

Wäre nett wenn mir jemand einen Hinweis gegen könnte wie ich der Code im 
etwa aussehen müsste.

Danke

von Tim  . (cpldcpu)


Lesenswert?

Klicke doch einmal hier --> WS2812

von Icke ®. (49636b65)


Lesenswert?

fragensteller schrieb:
> Nur habe ich leider keinen Schimmer wie das geht.

Inwieweit bist du überhaupt mit der Programmierung von µCs vertraut?

von ul5255 (Gast)


Lesenswert?

fragensteller schrieb:
> der attiny13 nicht So
> viel ohne externes quarz schafft

Der ATTiny13 laeuft nicht mit externem Quarz.
Er braucht einen externen Oszillator.

von Mike (Gast)


Lesenswert?

Naja ich denke nicht, dass es das ist was sich der Fragensteller hier 
erhofft hat.

Er scheint ja schonmal ein Grundverständis zu haben, da er ja die 
"Programmstruktur" schon geschrieben hat.

Viel fehlt ja im Prinzip nicht.

Aber daran scheint es zu scheitern, sonst wäre die Frage ja nicht hier 
gestellt worden.

von Icke ®. (49636b65)


Angehängte Dateien:

Lesenswert?

Mike schrieb:
> Er scheint ja schonmal ein Grundverständis zu haben, da er ja die
> "Programmstruktur" schon geschrieben hat.

Ich kann das Haus vom Nikolaus malen. Also habe ich ein Grundverständnis 
von Architektur...

von fragensteller (Gast)


Lesenswert?

Hi nochmal,

war über das wochenende leider weg.

schade dass mir keiner einmal einen ganz simplen code schicken kann wie 
man denn eine LED nacheinander z.B. in meheren Farben aufleuchten lassen 
kann.

Das tutorial habe ich versucht zu verstehen, aber ledier keinen erflog.

von Tim  . (cpldcpu)


Lesenswert?

Welches Tutorial? Wenn Du die Links durchgehst, findest Du mehrere 
Beispiele, in denen genau das gemacht wird.

z.B. hier:

https://github.com/cpldcpu/light_ws2812

Mein Eindruck ist allerdings, dass Du den ATtiny13 selbst noch nicht 
komplett verstanden hast. Du solltest evtl. erst einmal eine normale 
Leuchtdiode blinken lassen.

von Icke ®. (49636b65)


Lesenswert?

fragensteller schrieb:
> Das tutorial habe ich versucht zu verstehen, aber ledier keinen erflog.

Die Tutorials hier sind sehr ausführlich und so verständlich 
geschrieben, daß ein Anfänger Schritt für Schritt herangeführt wird. Du 
mußt dich allerdings mehr als nur zwei Minuten damit beschäftigen. Wenn 
du die Zeit (oder auch die Lust) nicht investieren willst, dann kauf dir 
besser ein fertiges Gerät.

von fragensteller (Gast)


Lesenswert?

ich habe mich schon länger damit beschäftigt,

leider bleibt es aber für mich unverständlich, aber naja vielleicht 
verstehe ich es ja doch noch irgendwann

von ..... (Gast)


Lesenswert?

Hi,
ich geh einfach mal davon aus, das dein µC bereits läuft.

zum Programm
Wenn ich Programme schreibe, warte ich nicht aktiv mit delays oder so 
sondern lass ihn in der zeit was irgendwas zeitunkritisches machen.

Normal verwende ich einen Timer, mit interrupt, auf einer festen 
Zeitbasis (meist 1µS). Jede µS wird ein Interrupt ausgelöst in dem ich 
eine Variable 1 setz und der µC somit weiß jetzt ist eine µS vorbei. Der 
Rest ist nur Zählen.
Hoffe das hilft dir weiter.

von Max H. (hartl192)


Lesenswert?

fragensteller schrieb:
> ganz simplen code schicken kann
https://github.com/cpldcpu/light_ws2812/blob/master/light_ws2812_AVR/Examples/RGB_blinky.c
Hier ein ganz simpler Code, wie man eine LED nacheinander in 
verschiedenen Farben leuchten lassen kann.

: Bearbeitet durch User
von fragensteller (Gast)


Lesenswert?

@Max:

Danke für den Link.

jetzt muss ich den nur noch zum laufen bekommen, da werd ich mich mal 
ransetzten und die Fehlermeldungen des AVR Studio analysieren.

von Max H. (hartl192)


Lesenswert?

Tim    schrieb:
> https://github.com/cpldcpu/light_ws2812
Das hier und 4 Klicks und du bist genau dort, wo ich dich verlinkt 
habe...

von Tim  . (cpldcpu)


Lesenswert?

Max H. schrieb:
> Tim    schrieb:
>> https://github.com/cpldcpu/light_ws2812
> Das hier und 4 Klicks und du bist genau dort, wo ich dich verlinkt
> habe...

Wenn man das Readme liest schafft man es sogar in drei Klicks :)

von fragensteller (Gast)


Lesenswert?

Hier mal die ersten 3 Fehlermeldungen.
Wieso kennt er denn "F_CPU" nicht?

1  #warning "F_CPU not defined for <util/delay.h>"
2  #warning "Compiler optimizations disabled; functions from 
<util/delay.h> won't work as designed"
3  expected identifier or '(' before '<' token
1
/*
2
* Light_WS2812 library example - RGB_blinky
3
*
4
* cycles one LED through red, green, blue
5
*
6
* This example is configured for a ATtiny85 with PLL clock fuse set and
7
* the WS2812 string connected to PB4.
8
*/
9
10
#include <util/delay.h>
11
#include <avr/io.h>
12
#include <avr/interrupt.h>
13
#include "light_ws2812.h"
14
15
struct cRGB led[1];
16
17
int main(void)
18
{
19
20
#ifdef __AVR_ATtiny10__
21
  CCP=0xD8;  // configuration change protection, write signature
22
  CLKPSR=0;  // set cpu clock prescaler =1 (8Mhz) (attiny 4/5/9/10)
23
#else
24
  CLKPR=_BV(CLKPCE);
25
  CLKPR=0;  // set clock prescaler to 1 (attiny 25/45/85/24/44/84/13/13A)
26
#endif
27
28
29
  while(1)
30
  {
31
    led[0].r=255;led[0].g=00;led[0].b=0; // Write red to array
32
    ws2812_setleds(led,1);
33
    _delay_ms(500); // wait for 500ms.
34
35
    led[0].r=0;led[0].g=255;led[0].b=0;  // green
36
    ws2812_setleds(led,1);
37
    _delay_ms(500);
38
39
    led[0].r=0;led[0].g=00;led[0].b=255;  // blue
40
    ws2812_setleds(led,1);
41
    _delay_ms(500);
42
  }
43
}

von Svenska (Gast)


Lesenswert?

Arbeite erstmal das AVR-(GCC-)Tutorial durch. Da wird dir sowas erklärt.

von Lothar (Gast)


Lesenswert?

Svenska schrieb:
> Arbeite erstmal das AVR-(GCC-)Tutorial durch. Da wird dir sowas erklärt.

Oder statt ATTiny lieber LPC810 nehmen :-)

https://github.com/cpldcpu/light_ws2812/tree/master/light_ws2812_ARM

von chris (Gast)


Lesenswert?

fragensteller schrieb:
> Wieso kennt er denn "F_CPU" nicht?

weil du es nicht definiert hast. Sagt er dir doch auch

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.