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
Leider ist mein DIO schon auf PB5 festgelet. Platine ist geätzt. Kennst du eine andere lösung? mfg Matze
>Kennst du eine andere lösung?
Skalpell und Draht. Eine GENAU für dich passende
Lösung wird sicher niemand haben.
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
>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?
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
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?
>>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....
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
>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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.