ws2812 mit atmega32

OP #3762972
Lesenswert?

Hallo liebes Forum,

Ich würde gerne eine LED Matrix mit dem WS2812 conrtoller aufbauen.
Leider klappt bei mir das Timing noch nicht ganz.

Gibt es eine fertige Libary dafür?

Ich benutze atmega32 und ein 16MHz Quarz.

Die datenleitung dafür ist PB5 ich bekomme auch eine schönes signal. 
leider kommt das mit dem Timing noch nicht so.

Es ist leider recht dringend weil das ganze für ein Festival wird und 
das ganze fängt am freitag an(ich bin schon auf festival Gelände). Das 
ganze mache ich Ehrenamtlich also keine angst ich verdine mir damit 
keine goldene Nase, mehr das Gegenteil.

Bin für jede Hilfe dankbar.

Ach so ich benutze AVR Studio 6.0 und ich programmire in c das ganze.

lg Matze
OP #3763075
Lesenswert?

höchstwarscheinlich nicht, aber villeicht finden wir eine gemeinsam?

habe mal im anhang den code den ich verwende angehangen.

Ich möcht dazu sagen das der quellcode nicht von mir ist.

Wie gesagt ich bekomme ein signal aber das timing passt leider noch 
nicht.

mfg Matze
Angehängte Dateien:
Gast #3763174
Lesenswert?

Also das geht schonmal so nicht:

struct cRGB led[1];

led[1].r=255;led[1].g=255;led[1].b=255; // Write red to array

Das müsste so lauten:
led[0].r=255;led[0].g=255;led[0].b=255; // Write red to array

Das erste Element in einem Array bei C liegt an Index 0
und nicht 1.

>bei einer 1 habe ich 2us TH1 und 4.5 us TL1.

Tja, zu langsam. Wo kommt dein F_CPU für light_ws2812.c her?
Gast #3763312
Lesenswert?

>>bei einer 1 habe ich 2us TH1 und 4.5 us TL1.
>
>Tja, zu langsam. Wo kommt dein F_CPU für light_ws2812.c her?

Mal ein bisschen weiterbohren;)

Deine Periodendauer ist 6.5us, es sollten aber 1.25us sein.
Also 5x soviel. Wenn der AVR wirklich mit 16MHz läuft
müsste F_CPU für light_ws2812.c schlappe 80MHz sein.
Das sieht irgendwie so aus als wollte da jemand 8MHz eingeben,
hat aber eine Null zu viel gedrückt. 8MHz wären aber auch
falsch weil die CPU ja mit 16MHz läuft!

Fragen über Fragen....
OP #3763331
Lesenswert?

wie meinst du das denn? Also den Quarz habe ich gemessen der hat 16 MHz.
liegt der fehler wo anders? Also habe dort auch sämtliche varianten 
durch  von 8 - 16 Mhz. Könnte es villeicht auch dirket an der Platine 
liegen?

Ich hänge die Datei mal an mit der WS2812.

Gibt es eine einfach möglichkeit das ganze per SPI anzusteuern? Der Port 
ist ja genau der MOSI Pin.

mfg Matze
Angehängte Dateien:
Gast #3763337
Lesenswert?

>wie meinst du das denn? Also den Quarz habe ich gemessen der hat 16 MHz.
>liegt der fehler wo anders?

Ich denke das du in den Projekteinstellungen irgendwo
einen falschen Takt eingegeben hast.

Dein
# define F_CPU 16000000UL

in C_Programm.c  wirkt nicht in light_ws2812.c.
Das ist dort nicht sichtbar.

Gib doch einfach mal

# define F_CPU 16000000UL

in light_ws2812.c in der ersten Zeile ein.
Und dann gibst du uns mal die Ausgaben vom Compiler.
Gast #3763346
Lesenswert?

Mathias G. schrieb:
> Ich benutze atmega32 und ein 16MHz Quarz.

Der Quarz alleine nützt überhaupt nichts. Es kommt drauf an, dass trotz 
der diversen Fallstricke deine CPU auch mit 16MHz läuft.

Hast du mal ein LED-Blinkprogramm hochgeladen und damit die 
tatsächliche Frequenz überprüft oder die Laufzeit für eine bekannte 
Programmsequenz mit einem Oszi nachgemessen?

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