ws2812B mit attiny13 und 20Mhz quarz - einfach?

Gast #3564640
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
Gast #3565522
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.
Gast #3568026
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.
#3568281
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.
Gast #3568293
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.
Gast #3568936
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren