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*
Äh, das ist doch gerade das charmante an den Beagle Beispielen.
Man nutzt die beiden Prozessoren, die da sowieso sonst arbeitslos im Chip stecken. Damit eine Grafikeinheit zu programmieren, finde ich schon recht cool.
Noch mal zum Hintergrund
TI's ARM processors feature a unique subsystem, called the Programmable-Realtime Unit Industrial Communications Subsystem (PRU-ICSS), which enables the integration of real-time industrial communications protocols and eliminates the need for an external ASIC or FPGA.
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 14: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 16:21 Uhr)
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Vielleicht sollten wir auch noch mal zu den Basics zurückkehren.
Der Fragesteller hat sich noch nicht wieder gemeldet und wir wissen noch nicht, ob er sich für eine echte Matrix oder Streifen entscheidet.
Also was mir ehrlich gesagt an den fertigen Matrizen nicht gefällt, die sind einfach total klein oder die Abstände zwischen den LEDs sind zu gering. Ursprünglich wollte ich mir einen Couchtisch mit Matrix bauen, nur wohin ich den dann stelle ist die Frage. Also hab ich mich umentschieden und möchte nun eben einen Gameframe nachbauen, den ich an die Wand hängen kann und mit dem ich z.B. auch ein paar Ründchen Snake zocken kann
. Größe mindestens 20x20 cm. Auflösung 8x8 reicht glaube ich aus.
Ansonsten wollte ich noch darauf hinweisen, ich bin ein Anfänger, was Elektronik und Hardwarenahe Programmierung angeht^^. Das Projekt sollte mir auch dazu dienen, meine Kenntnisse zu erweitern und zu vertiefen.
Trotzdem mal aus reinem Interesse:
fertige Matrix vs. Streifen, was für Vorteile/Nachteile gibt es? Und wie funktionieren die beiden Möglichkeiten überhaupt? Wofür ist z.B. dieser Controller WS2812?
Lesezeichen