Hi Ich habe vor mir ein Moodlight zu bauen. Es soll aus 9 ws2811 Chips bestehen woran je 3 rgb Led hängen. Fernsteuerbar über Ir Fernbedienung Allerdings hab ich schon bei der Planung Probleme. Und zwar beim Microcontroller. Eigentlich wollte ich einen kleinen nehmen und dachte an Attiny45 mit 8MHz. Fernbedienung wollte ich mit dem IRMP auswerten. Dieser muß min. 10000 pro Sekunde aufgerufen werden für das Nec42 Protokoll. Also würde alle 800 Takte der Interrupt aufgerufen werden. Soweit noch in Ordnung. Nun kommt allerdings noch die Steuerung der ws2811 Kette hinzu. Dafür hab ich die Light_ws2812 Library von Tim (cpldcpu) ausgesucht. Nur komm ich jetzt auf ein Zeitproblem. Für die Led müssen 24x9 Bits übertragen werden was bei den 8MHz 2268 Takte verbrauchen würde. Allerdings hab ich wegen dem IRMP nur 800 zur Verfügung (Eigentlich noch weniger da der IRMP ja auch noch was braucht, leider steht da nicht wie viel genau. ) Jetzt stellt sich die Frage ob ein solcher Aufbau überhaupt möglich ist und wenn ja, wie?
Keiner eine Idee? Bei so viel Profis hier im Forum schon seltsam. Mir ist bis jetzt nur dazu eingefallen das auf 2 Tinys aufzuteilen. Einmal IR, einmal ws2811 Steuerung. Oder aber einen anderen LED Treiberchip.
Da ich keine Ahnung von den WS2811-Dingern habe und daher auch nicht weiß, wie zeitkritisch das Timing ist, klingt Deine Idee, einfach zwei ATTinys dafür zu nehmen, gar nicht so schlecht.
Tja, zwei zeitkritische Protokolle per Bitbanging gleichzeitig zu bedienen ist ein nicht einfach zu lösendes Problem. - Verträgt das IR-Protokoll Unterbrechnungen? Hat es Redundanz? Vielleicht ist es ja gar kein Problem, wenn ab und zu ein paar Zyklen ausfallen? - Ansonsten könntest Du Deine LEDs in mehrere Strings aufteilen, so dass die einzelnen, kurzeren, Strings schneller programmiert werden können. - Natürlich könnte man auch Versuchen, beide Codes zu "verheiraten" und zu parallelisieren. Das solltest Du aber nur machen, wenn Du Spass an taktzyklengenauer Assemblerprogrammiernug hast. Die Idee mit dem zweiten Mikrokontroller sieht zwar auf den ersten Blick unelegant aus, wird aber von der Entwicklungszeit her das einfachste sein. Ein Attiny10 oder 85 kostet ja eh nicht viel...
> - Verträgt das IR-Protokoll Unterbrechnungen? Hat es Redundanz? > Vielleicht ist es ja gar kein Problem, wenn ab und zu ein paar Zyklen > ausfallen? Also Redundanz ist nicht vorhanden. Unterbrechung vom IR währen ärgerlich. Gut IR ist auch nur zu einem bruchteil der Laufzeit nötig. Halt immer dann wenn ich per Fernbedienung etwas ändern will. Ansonsten soll das Programm für die Farbsteuerung ablaufen. (Farbwechsler bzw. fester Wert) Nur ist es dann grad am blödesten wenn was verloren geht und man sich wundert was das ding nun schon wieder hat. > - Ansonsten könntest Du Deine LEDs in mehrere Strings aufteilen, so dass > die einzelnen, kurzeren, Strings schneller programmiert werden können. Hm auf 3x3 und dann pro Interrupt 1/3 erledigen. Da muß ich mal drüber nachdenken, nachrechnen ob das hinhauen könnte. > - Natürlich könnte man auch Versuchen, beide Codes zu "verheiraten" und > zu parallelisieren. Das solltest Du aber nur machen, wenn Du Spass an > taktzyklengenauer Assemblerprogrammiernug hast. Ähm, nein. Assembler kann ich nicht.
Hab mal ein wenig rumgerechnet. Tiny85 @ 8MHz IR Interrupt min. 10.000/sec = 800 Takte WS2811 Steuerung Bit7-1 je 10 Takte Bit0 14 Takte = 84 x3 = 252 Takte pro Ws2811 Chip x3 = 756 Takte Dreierkette 800 -756 ---- 44 Takte für IRMP Dazu kommt noch Auswahlanweisung welche Kette drann ist. Wird wohl nix ---------------------------------------------------------------------- Tiny85 @ 16MHz PLL IR Interrupt min. 10.000/sec = 1600 Takte WS2811 Steuerung Bit7-1 je 20 Takte Bit0 21 Takte = 161 x3 = 483 Takte pro Chip x3 = 1449 Takte pro Dreierkette 1600 -1449 ----- 151 Takte für IRMP Plus Auswahlanweisung welche Kette drann ist. ---------------------------------------------------------------------- Und dann ist noch nichtmal das Farbprogramm mit dabei. Läuft zwar nicht im Interrupt aber brauch ja auch etwas Zeit. Ich glaub ich verrenn mich da grad ein bischen.
Ich habe auch mal etwas gerechnet, da ich es sehr interessant fände, das Projekt mit nur einem Controller zu realisieren: Ich rechne mit einem 16MHz-Takt (62.5ns Zykluszeit), da ich hierfür schon eine geeignete WS2811-Ansteuerung hätte... Irq-Frequenz: 15000 Irqs/Sekunde => alle 66,67us ein Irq => rund 1000 Befehle pro Irq abarbeitbar. Die Ansteuerung der WS-Chips sollte in einem Rutsch geschehen. 24 Bits pro WS-Chip, 9 Chips => 216 Bits mit jeweils 1,25us Bitzeit => 270us Übertragungszeit für alle WS-Daten. Daraus folgt: Eine vollständige Übertragung alles WS-Daten bringt den Interrupt aus dem Takt. Es gehen Irqs verloren. Möglichkeit 1: Man überträgt pro Irq nur ein WS-Datum (24 Bits). Im nächsten Irq dann das nächste WS-Datum und so weiter. Könnte klappen, man muss nur aufpassen, das die Pausen zwischen den Übertragungen nicht zu lang wird, da sonst der WS-Chip eine 50us-Pause erkennt und einen Reset macht. Das ließe sich durch erhöhen der Irq-Frequenz realisieren (auf z.B. 30000 Irqs pro Sekunde). Wenn alle WS-Daten übertragen sind, übertragt man ein paar Irqs lang nichts und hat automatisch seine 50us-Pause für einen Reset. Möglichkeit 2: (Wurde schon erwähnt) Auslagerung des IRMP auf einen extra Controller. Beide Controller würde ich dann seriell verbinden und die Fernbedienungscodes dann seriell weiterreichen. Dieses läßt sich wohl am schnellsten realisieren. Möglichkeit 3: Man schreibt sich eine eigene Erkennung für die Fernbedienung. Die Interruptroutine wird auf sagen wir 1000 Irqs pro Sekunde gesetzt. In jedem Irq werden alle WS-Chips bedient und andere Irqs blockiert. Zusätzlich wird der IR-Empänger so angeschlossen, dass er einen Irq auslösen kann (Pin-Change-Interrupt). Sobald jetzt ein Irq vom IR-Empänger auftritt werden die WS-Chips nicht mehr versorgt und es erfolgt nachdem die WS-Übertragung beendet ist, eine Prüfung auf das Startbit (Pulsbreite) der IR-Übertragung (mit zeitlicher Latenz von bis zu ca. 270us). Wenn kein Startbit erkannt wird, werden die WS-Chips wieder mit Daten versorgt. Wird ein Startbit erkannt (9ms-Puls, 4,5ms-Pause), erfolgt eine genaue Untersuchung und Auswertung der folgenden IR-Pulse, ohne das die WS-Chips mit Daten versorgt werden und den IR-Empfang und Auswertung des Signals stören. Gruß, Thomas
Werde für mein Vorhaben 2 Tinys nutzen. Habe den ersten auch schon halb fertig. Irmp läuft darauf und Fernbedienung wird erkannt, denke ich, jedenfalls blinkt Kontroll Led im Tackt der Fernbedienung :) Fehlt noch die Datenübertragung zum zweiten Tiny. Leider haben die ja kein Hardware I2C sondern nur USI.(Serielle Schnittstelle ohne Protokoll) Muss da noch mehr nachlesen ob man die einfach so zusammenschalten kann. Einwas gutes hat diese Lösung mit 2 Chips allerdings. Ich könnte noch eine weitere Ansteuerung später mit hinzufügen. Funk z.B. Allerdings sollte dann wohl I2C zwischen den Chips verwendet werden.
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.