Hey,
meine Matrix befindet sich im Aufbau:
Es handelt sich hierbei um eine 16 x 16 Matrix mit Pixelraster, jedes "Pixel" wird 30mm*30mm groß und hat eine Höhe von 35mm - 40mm.
Die einzelnen Zellen/Pixel enthalten je zwei RGB-LED's. Die LED's werden mit 60mA PWM betrieben, wobei jeweils 16Zeilen und 4Spalten einen "Block" bilden.
Bis jetzt Organisiert/Bestellt:
- 1k LED's bestellt (PLCC6 aus China) Ankunft wegen Neujahr ~April
- MDF Platten: 2 Stück 481,1mm x 481,1mm Grundfläche, 6mm stark, zwischen die Platten werden die Kabel verlegt
- 2 mal 70cm*100cm Bristol Pappe (1mm Dick) für das Pixelraster
- Plexiglas: fertige "Haube" aus Satin-Ice 3mm, bin noch im Gespräch mit dem Händler
Mechanisch:
Aus der Bristol Pappe werden 30 Streifen je 40mm*482mm geschnitten, diese werden alle 30mm bis zur hälfte eingeschnitten und anschließend ein Gittermuster/Pixelraster daraus zusammengesteckt und mit Epoxy verklebt.
In die erste MDF Platte wird mit einer Oberflächenfräse/CNC-Fräse ein Gitter geschnitten. Dieses soll von der vorm genau dem Pixelraster entsprechen, so das ich dieses dort hineinstecken und anschließend befestigen kann. Vorher werde ich eine Seite weiß färben und Löcher für die LED's hineinbohren.
Die zweite MDF Platte kriegt Nuten (genauer 48 Stück) für die Spalten Ansteuerung. Dort werde ich Schweißdraht/Kupferadern hineinlegen und anschließend mit Holzleim/Epoxy vergießen.
Anschließend wird die erste MDF Platte oben drauf geklebt und das Grundgerüst steht.
Elektrisch:
Schaltplan Konzept bisher (verbessert):
Erklärung:
Die Matrix wird per USB und selber entwickelten (Usermode-) Treiber angesprochen, desweiteren sollen einige "kleine" Programme direkt auf dem ATmega laufen (z.B. Uhr).
Insgesamt hab ich versucht möglichst alles auszulagern was nicht unbedingt berechnet werden muss.
Jede LED soll mit ~500Hz (sind etwas weniger) laufen, genauer sind es
Block-Frequenz: 8Mhz / (4096+x) = ~1950 Hz
LED - Frequenz: 1950Hz / 4 = ~487 Hz
Das ist eine Konstante von grob 10. Grund ist das ich nicht unmittelbar nach Abschluss des PWM-Zykluses das Blank Signal aufrufe (siehe Software).
Mein µC gibt konstant einen Takt von 8MHz aus [Port 17], dieser geht direkt in das Clock Signal der TLC5940.
Zusätzlich speist dieser auch das Binärzählwerk 4020N, welches alle 1024 Ticks ein Signal an den µC sendet. Dieses sorgt nun für einen Interrupt (weiteres hierzu siehe Software).
Die BLANK-Lines resetten den jeweiligen TLC-Block und schieben das mit "0111" Initialisierte zyklische Schieberegister ein Bit weiter. Das Signal der Register (GND/VCC) schaltet die IRF7314 P-Kanal Mosfets.
Diese sind an die Spalten der Matrix angeschlossen sind.
Die Serielen Daten werden über USART im SPI-Modus geschickt. (Vorteil: gepuffert -> schneller)
Nach der initialisierung der internen und externen Bausteine arbeitet der µC vorallem im Interrupt Betrieb. Alle 1024 PWM Takte wird dieser ausgelöst und sorgt für das Setzen der neuen Daten für einen "Block".
Dabei müssen (3x96Bit DC + 3*192Bit PWM=) 864Bit Daten geschrieben werden. Da ich genau 2048 CPU Takte Zeit habe wird das eine knappe angelegenheit.
Inwieweit Datenempfang mit USB noch möglich ist muss ich ausprobieren.
Laufzeitanalyse Interrupt:
Senden - 1728 Takte
Bits kopieren - 108 Takte
Interrupt - ~15 Takte (stimmt das?)
BusyWaiting - 108 Takte (hoffentlich... im schlechtesten Fall 216, weiß einer mehr?)
--------------------------------
Macht im worstcase 2067
Die etwas ausgefallenere Ansteuerung der TLC's sorgt hoffentlich dafür das ich auch DotCorrection nutzen kann ohne das dabei etwas flackert.
Die Spannungsversorgung stammt aus einem 7,5V/20A Schaltnetzteil und sollte mehr als ausreichen.
Gibt es noch fragen/Fehler/Verbesserungen?
Besteht überhaupt Interesse das ich den Bau dokumentiere,
oder gibt es inzwischen genug?
Beste Grüße
Matyr
Ps. Bilder kommen wenn es ich die ersten Sachen habe.
Edit (07.02.2013 20:00) - genauere Beschreibung, Fehler berichtigt
Edit (08.02.2013 14:30) - FlowGraph + Erklärung hinzugefügt
Edit (23.02.2013 15:00) - Update