dann bin ich aber an den Beagle Bone gebunden, ich bin aber ein RPI Fan
mal ebgesehen davon dass man dann alles Bare Metal programmieren müsste *schüttel*
dann bin ich aber an den Beagle Bone gebunden, ich bin aber ein RPI Fan
mal ebgesehen davon dass man dann alles Bare Metal programmieren müsste *schüttel*
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
ich glaub wir verstehen unter dem Begriff Bare-Metal was unterschiedliches
Bare Metal so wie ich es verstehe heißt für die Hardware auf einem Fremdsystem zu Compilen und dann zum Board zu übertragen ... was ich aber viel schöner finde, gleich im laufenden Linux OS einfach den pyscript auszuführen oder die compiled binary auszuführen
Es muss doch irgwendwie universeller und günstiger gehen als einen 1GHz ARM dafür zu verballern .... mal abgesehn daovn dass der XMega auch hoffnungslos unterfordert wäre XD
Ich knobel gerade ob ich den KRam nicht auch mit einem ATTiny erledigen könnte O_o
Timer mit maximaler Auflösung und niedrigem TOP für das PWM und über den MOSI Steuern und über SCLK synchronisieren
also bei Timer Update den Compare je nach Zustand des MOSI Signal auf kurz oder langen Puls einstellen und Timer im One Shot Mode laufen lassen
Geändert von Ceos (13.07.2016 um 13:52 Uhr)
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
und trotzdem werde ich mir niemals so ein Ding kaufen für nur diesen einen Zweck! Ich werde bei meiner vorhandenen Hardware bleiben und eine sinnvolle, kostengünstige, kleine nicht übertriebene Lösung dafür finden.
Ich bin bereits bei dem Gedanken angekommen den Attiny als Software SPI Master arbeiten zu lassen!
Timer Overrun, PWM Pin High, Update Compare Register from Buffer, Interrupt -> Pull CLK high
Time Compare Match, PWM Pin Low, Interrupt -> SCLK auf low, Compare Buffer Register mit Wert in Abhängigkeit von MISO Pin laden, Sleep gehen und auf nächsten Overrun warten
Der Tiny zieht die Werte also aus dem Main Controller, der muss nur eine SPI Schnittstelle haben die schnell genug reagieren kann.
Die Anzahl der LEDs ermittle ich mit einer Feedbackleitung.
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Du darfst das ruhig ausführlicher erklären. Ich glaube nicht nur der Fragesteller hat den letzten Beitrag nicht verstanden.
Entschuldigung das war etwas unkontrolliert aus dem Kopf heraus geschrieben XD
Der Code wäre in der tat unheimlich simpel.
1 ATTiny mit
1 Timer mit einer Überlaufzeit 1/800kHZ , 2 Compare Outputs als Fast PWM
1ter PWM Output auf 50% und invertiert (der Pin simuliert unsere SCLK):
Immer wenn wir einen Überlauf vom Timer haben, wird die SCLK von der PWM Logik auf "low" gesetzt
Sobald der Compare Matchwert bei 50% Duty Cycle erreicht wird, wird SCLK auf "high" gesetzt und gleichzeitig ein Interrupt ausgeführt, welcher das Compare Register des 2ten PWM Output mit dem Timing für das Bit am MISO Eingang programmiert
Kurz vor dem Timer Überlauf wird dann der neue PWM Wert für den 2ten PWM Ausgang übernommen
Nach dem Update folgt der Überlauf und das Spiel geht von vorne los, bis alle LEDs mit Bits versorgt wurden, dann wird der Chipselect abgeschaltet und eine Pause gemacht damit die LEDs intern updaten.
Der Chipselect wird wieder eingeschalten, das erste Bit wird per Software eingelesen und der Timer neu gestartet.
Zum zählen der LEDs werden auf Knopfdruck einfach nur Nullen über den PWM geschoben und die Bits gezählt, bis von der letzen LED das erste Bit zurück kommt.
Leider blockieren in meinem Hirn gerade alle Programmierkenntnisse, vll. kann ich morgen mal einen brauchbaren Fetzen Code präsentieren
jetzt nur ganz grob, ohne Timer Werte für irgendwasCode:TCCR0A = \ (COM0A0 | COM0A1) | \ //Compare Output A low on Overrun/BOTTOM, high on Match (SCLK) (COM0B0) | \ //Compare B high on Overrun/BOTTOM, low on Match (WS2812 PWM) (WGM14); //WAveForm Mode 14: Fast PWM Count to TOP read from ICR0 ISR(TIM0_COMPA_vect) { if(PINB & PINB2){ TCCR0B = LONG_PULSE; } else { TCCR0B = SHORT_PULSE; } }![]()
PortB
Pin2 ist MISO
Pin 1 (Compare B) der PWM
Pin 0 (Compare A) ist SCLK
Geändert von Ceos (13.07.2016 um 15:21 Uhr)
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Lesezeichen