Hallo User, nach dem ich jetzt schon länger am suchen bin, um wenigstens einen Ansatz zu finden wie ich am besten den WS2812 programmiere, wollte ich mal in diesem Forum fragen und nach Hilfe bitten. Die meisten Ansätze die ich bis jetzt gefunden habe sind leider in anderen Sprache geschrieben. Ich benutze einen at89c51. Dies ist ein Schulprojekt. Es wäre ganz nett, wenn mir jemand erklären würde wie ich den passenden Timer einfach und richtig konfigurieren kann, da ich es bisher nicht wirklich verstanden habe. Es werden pro Farbe 8 Bit, also insgesamt 24 Bit seriell weitergegeben. Für die High und Low braucht man eine spezielle sequenz. Für ein High muss das Signal 0.7us auf HIGH und 0.6us auf LOW sein. Für ein Low muss das Signal 0.35us auf HIGH und 0.8us auf LOW sein. Am Ende wird noch ein Latch Command benötigt, ich weiß aber nicht was das ist und wie es funktioniert. datasheet: http://cdn.sparkfun.com/datasheets/Components/LED/WS2812.pdf PS: Was sehr cool wäre, aber ich auch verstehen würde wenn man es nicht macht da es viel Zeit kostet, ist ein Beispiel Programm mit Kommentaren zu schreiben das ich dann nachvollziehen kann und das ich auch gleich direkt auf den Mikrocontroller spielen kann.
Max Bla schrieb: > Am Ende wird noch ein Latch Command benötigt, ich weiß aber nicht was > das ist und wie es funktioniert. das ist eigentlich ganz einfach eine längere Pause mit konstantem "Low"-Pegel. Solange die Datenübertragung weiterläuft, machen die LEDs nämlich nichts, außer die Daten an die jeweils nächste LED weiterzuleiten. Erst wenn eine Pause eintritt (lt. Datenblatt min. 50µs, in der Praxis geht es aber auch deutlich kürzer), stellt die LED sich auf die vorher übertragenen, neuen Helligkeitswerte um.
Max Bla schrieb: > Es wäre ganz nett, wenn mir jemand erklären würde wie ich den passenden > Timer einfach und richtig konfigurieren kann, da ich es bisher nicht > wirklich verstanden habe. Ein Timer ist eine Möglichkeit von vielen. Toll, falls hier einer lang und breit den Timer erklärt und drei Tage später jemand kommt: Mit einem UART und einem Inverter geht es doch viel einfacher … Eine sehr gute Informationsquelle ist das Weblog von Tim: https://cpldcpu.wordpress.com/tag/ws2812/
Es kann sein, das es gar nicht funktioniert, wenn es sich hier um einen Standard 80C51 handelt, der mit 12MHz getaktet wird. Die minimale Granularität ist dann nämlich 1µs, und damit sind Zeiten wie 0,6µs oder sowas nicht ohne externe Hardware hinzukriegen. Selbst bei 24MHz Takt wird es hier kompliziert. Entweder nimmt man dann einen MCS51 mit WARP Architektur (pro Oszillator Takt ein Befehl), oder man muss auf z.B. einen Mega8515 ausweichen, der wenigstens in den gleichen Sockel passt, wenn man auch am Reset Signal basteln muss. Mehr Info zu der Problematik liefert das Datenblatt des AT89C51.
:
Bearbeitet durch User
Max Bla schrieb: > Ich benutze einen at89c51 Welcher Typ an welchem Quarz? Du mußt unter 0,5µs High-Zeit kommen. Das kann z.B. ein AT89C51RB2 im X2-Mode an 14,7456MHz. Die Low-Zeit muß lt. Blog <9µs sein.
:
Bearbeitet durch User
Matthias Sch. schrieb: > Es kann sein, das es gar nicht funktioniert, wenn es sich hier um einen > Standard 80C51 handelt, der mit 12MHz getaktet wird. Auch nicht über UART und Inverter? Ich kenne das Datenblatt nicht, aber 2400 KBd mit 12MHz klingt doch erstmal unproblematisch. Das sind 5 Takte pro UART-Bit. Falls der UART nur Teiler von 2, 4, 8, … kann, müsste man halt mit 9,6MHz takten und die Baud-Rate auf 1/4-Teiler stellen.
Torsten C. schrieb: > Ich kenne das Datenblatt nicht Schon mal gar nicht gut - das ist Grundlagenliteratur... Torsten C. schrieb: > aber 2400 KBd mit 12MHz klingt doch > erstmal unproblematisch 2400 kbit/s? Nö, ist nicht drin. Die UART in der MCS51 Standardfamilie wird von einem Timer getaktet und kann damit nur so schnell wie dieser sein. Die höchste erzielbare Baudrate bei 12MHz Takt ist also 750.000 bit/s. http://www.keil.com/products/c51/baudrate.asp Das sind also in deiner Schreibweise 750 kbit/s.
Torsten C. schrieb: > aber 2400 KBd mit 12MHz klingt doch > erstmal unproblematisch. Welche UART kennst Du denn überhaupt, die 5 Takte kann? Typischer Weise teilen UARTs erstmal /16 und dann durch den Baudratengenerator. Bei der 8051-UART gibt es den Mode 0, der durch 2 oder 4 teilt (5 geht aber nicht). Wenn man dann noch nen 1-Clocker nimmt (AT89LP51), kommt man mit 20MHz Quarz auf 10MBaud.
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.