Du darfst das ruhig ausführlicher erklären. Ich glaube nicht nur der Fragesteller hat den letzten Beitrag nicht verstanden.
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.
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?
was die WS2812 angeht, die gibt es i.d.R. auch als einzel LEDs mit Trägerplatinchen und Stabbi Cs drauf, hab gerade 100 Stück für 44€ gefunden, bissl teuer aber Fair wenn man bedenkt dass es einzelne Platinchen sind![]()
Da sind dann 6 Lötaugen auf der Rückseite, 2xPlus 2xMinus 1xIn 1xOut, die kannst dann einfach in Reihe mit Draht verlöten.
Dann nimmst du eine dünne Sperrholzplatte, Bohrst dir deine Löcher für die LEDs und KLebst die Platinchen mit LED voran von unten auf die Löcher. Oben drauf packst du dann eine Glasplatte mit einer Diffusen Foiel oder Beschichtung drauf ... sieht bestimmt gut aus![]()
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Hallo,
das die Diskussion hier etwas aus dem Ruder läuft, ist halt so bei so vielen Experten mit unterschiedlichen Ansichten.
Also bemühen wir uns, sie wieder etwas einzufangen. Sag ruhig, wenn du was nicht verstehst.
Bei einer echten Matrix werden die LEDs einzeln angesteuert. Dabei gibt es einige Schaltungstricks, damit man nicht für jede LED einen einzelnen Ausgang hat. Soweit bist du ja wohl schon. Problem: Mit wachsender Größe und bei mehreren Farben braucht man sehr viele IOs. In dem Falle 8x8 mit 3 Farben auf jeden Fall mehr als der Uno hat. Eine Abhilfe könnten Porterweiterungs-ICs sein, wie schon in einer der ersten Antworten genannt. Will man aber auch noch die Helligkeit einstellen, braucht man IOs mit PWM, das wird dann komplizierter.
Bei Streifen hängen alle LEDs an den selben Leitungen. In diesen LEDs befindet sich ein kleiner Chip, der Befehle liest und die entsprechende Farbe und Helligkeit einstellt. Die Daten für alle LEDs werden durch den Streifen "durchgeschoben". Eine Matrix bildet man daraus, in dem man die Streifen "faltet" und ggf. mehrere Untermatrizen zusammenbaut. Schau dir mal hier die Bilder an, da sollte das deutlich werden.
https://learn.adafruit.com/adafruit-...matrix-library
Vorteil: Weniger Leitungen und IOs.
Nachteil 1: Zeitkritische schnelle Datenübertragung über die Datenleitungen. Dafür gibt es aber Bibliotheken.
Nachteil 2: Bei größeren Matrizen kommen die 8-Bit Rechner an ihre Grenzen. Lösung: 32 Bit Bastelrechner, wie der erwähnte Teensy.
Nachteil 3: Das "Schieben" dauert natürlich seine Zeit. Bei großen Matrizen werden bewegte Bilder langsam. Lösung: Viele (ggf. alle) Teilstreifen parallel beschreiben, großen schnellen Prozessor nehmen. (Das ist der Punkt, den Ceos anscheinend nicht bemerkt hat.)
Das ist exakt DER Punkt, weswegen ich pro Streifen nach einer Kostengünstigen Version zur Protokollübersetzung suche!Das ist der Punkt, den Ceos anscheinend nicht bemerkt hat.
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Lesezeichen