Forum: Mikrocontroller und Digitale Elektronik ws2812 mit atmega32


von Mathias G. (motze)


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

: Bearbeitet durch User
von holger (Gast)


Lesenswert?


von Mathias G. (motze)


Lesenswert?

Leider ist mein DIO schon auf PB5 festgelet. Platine ist geätzt. Kennst 
du eine andere lösung?

mfg Matze

von holger (Gast)


Lesenswert?

>Kennst du eine andere lösung?

Skalpell und Draht. Eine GENAU für dich passende
Lösung wird sicher niemand haben.

von Mathias G. (motze)


Angehängte Dateien:

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

von holger (Gast)


Lesenswert?

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

Hast du deine Fuses auch so eingestellt das der AVR
mit 16MHz läuft?

von Mathias G. (motze)


Lesenswert?

ja geprüft er läuft mit 16MHz per oszi.

bei einer 1 habe ich 2us TH1 und 4.5 us TL1. Das passt leider nicht.

mfg Matze

von holger (Gast)


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?

von holger (Gast)


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....

von Mathias G. (motze)


Angehängte Dateien:

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

: Bearbeitet durch User
von holger (Gast)


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.

von Werner (Gast)


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?

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.