RGBLEDmodul

Aus C3D2
Zur Navigation springen Zur Suche springen


Disclaimer: Der nachfolgende Text ist nicht für Personen unter IQ 18 geeignet.

Die Projektdokumentation ist erwartungsgemäß unvollständig und veraltet, bzw. das Projekt in neueren Projekten aufgegangen. Siehe z.B. auch [1]

RGBLEDmodul

Es war einmal, in einer dunklen Nacht im HQ, der Mond schien zwischen den Wolken hindurch, und der Schnee lag ruhig über der Stadt... Genug geschwafelt. In besagter Nacht saßen carwe und sebseb7 im HQ zusammen und es entstand die erste Idee, ein Modul zu entwickeln, das frei relativ zusammensteckbar und damit flexibel, aber auch ausreichend leistungsfähig sein muss, um RGB-LEDs mit mehr als nur 7 Farben (3 LEDs jeweils ganz an oder ganz aus) zu betreiben. In den nächsten Tagen und Wochen kristallisierten sich dann die hier beschriebenen Überlegungen heraus. Sebseb7 hat Material beschafft, um eine erste Charge von 50 Modulen zu bauen. Dem vorangegangen ist ein Prototyp, der mittlerweile behobene Schwächen aufgezeigt hat (falsche Beschaltung des blauen LED-Teils, unzureichende Bohrungen unter der Massefläche des TLC, nur knapp passende Pads am TLC). Für diese 50 Module entstehen überschlagsmäßig Kosten i.H.v. 450 Euro, sodass ein Modul dieser Charge circa 9 Euro kostet. Wenn Platinen nachbestellt werden oder man längere Lieferzeiten in Kauf nimmt, kostet es weniger.

Hardware

Controller

Ein beliebiges Bord, das einen Microcontroller beherbergt und mindestens die unten beschriebene Hardware-Schnittstelle besitzt, um die Module ansteuern zu können.

Modul

[2]

Das PCB ist 110x22 Millimeter groß und beidseitig mit SMD-Teilen bestückt. Auf der Vorderseite befinden sich ein TLC5941 (16 Output-Pins bis zu 80mA, eingestellt auf ca. 20mA; 12 Bit PWM, Oszillator-Takt muss vom Microcontroller zugeführt werden), ein Atmel ATmega48/88/168/328 (verwendet wird erstmal ein 168PA) und einige Widerstände und Kondensatoren. Auf der Rückseite befinden sich fünf RGB-LEDs Osram LRTB G6TG. Beidseitig (da DIP) befinden sich 2 Buchsen und 1 Stecker, der zweite Stecker ist wegen Platzmangel eine SMD-Version und befindet sich auf der Vorderseite.

Pro LED-Farbe fließen etwa 26mA in den TLC5941 hinein und 22,6mA weiter vom TLC5941 zur LED. Dies ergibt 390mA pro Modul, ohne den ATmega zu betrachten. Bei 48 Modulen (20x12 oder auch 16x15 LEDs) benötigt man also mindestens 18,7A bei 5 Volt.

Der ATmega ermöglicht es, dass man die Module als Netz verbinden kann, also keine Reihenfolge künstlich herstellen muss durch hintereinanderstecken. So ist jedes Modul mit jedem Nachbarmodul verbunden. Die Ansteuerung erfolgt per I2C, jedoch muss die Anordnung der Module und deren Adressen bekannt sein, um eine vorhersagbare Ausgabe erzeugen zu können.

Die LEDs müssen mittels Exponentialfunktion angesteuert werden, denn sonst sind sie bereits bei etwa 50% der Steuergröße bei ihrer scheinbaren Endhelligkeit. Eine Tabelle findet man vorerst bei [3] - veraltet und fehlerhaft (sind 257 Werte), stattdessen für verschiedene Farbtiefen: [4] [5] [6] [7] [8]. Ein Video von einem ersten Test mit exponentieller Ansteuerung findet man unter [9], einen Test aller LEDs unter [10]. Am 12. Februar 2011 hat sebseb7 5 Module fertig gebaut und eine 5x5-Matrix getestet, siehe [11]. Am 4. März wurde begonnen, die zweite Charge von 45 Stück zu bauen.

Die Eagle-Dateien (Schaltplan, Board, Library für TLC5941 und Osram-LED) sind unter public domain verfügbar [12] bzw. [13]. Bei Gefallen wird um Zusendung einer Postkarte gebeten.

Verbindung ATmega <-> TLC5941

Die Ansteuerung erfolgt durch das Hardware-SPI-Interface des ATmega.

(Pin-Name des TLC; Pin-Nummer & -Name des ATmega; Beschreibung)

SCLK (Pin 17; SCK) Takt der seriellen Verbindung
SIN (Pin 15; MOSI) serielle Daten vom ATmega zum TLC5941
SOUT (Pin 16; MISO) als Rückkanal - darüber werden Status-Informationen des TLC5941 rausgestreamt, z.B. welche LED defekt ist
XLAT (Pin 13; PB1) Latch-Eingang des TLC, sodass die reingestreamten Daten zu den LED-Ausgängen übernommen werden
BLANK (Pin 11; PD7)) schaltet alle LEDs ab und resettet den PWM-Zyklus - muss auch alle 4096 GSCLK-Takte gezupft werden, sonst zählt der PWM-Counter nicht weiter und die LEDs werden abgeschaltet
XERR (Pin 32; PD2) unbeaufsichtigter Betrieb möglich, da LED-Ausfall und Überhitzung gemeldet werden kann - Open-Drain-Ausgang, mit Pullup-Widerstand verbunden
GSCLK (Pin 12; PB0) Takt für den PWM-Teil des TLC

Verbindung der Module untereinander

Die Verbindung zwischen den Modulen erfolgt per 2x5-Pin-Stecker/-Buchse, dabei entsteht ein Netz, in dem jedes Modul mit allen Nachbarn verbunden ist. Daher gibt es keine Reihenfolge der Module, sondern sie müssen adressiert werden.


GND (Pins 1,2,3)
VCC (5V) (Pins 7,9,10)
I2C-CLK (Pin 5)
I2C-DATA (Pin 4)

Die Pins 6 und 8 sind nicht belegt.

Firmware

Controller

Modul

Protokolle

PC<->Controller

Eine USB-Verbindung, die z.B. über FT232 eine RS232-Verbindung ermöglicht. Mit RS232 sind bei 8N1 bei 115200 Baud durch das Start- und Stopbit 92160 Bit/s = 11520 Byte/s erreichbar. Bei angenommenen 3 Byte pro LED sind das 3840 LED-Aktualisierungen pro Sekunde, bei angenommenen 16x20 = 320 LEDs erreicht man also bis zu 12 Frames pro Sekunde.

Controller<->Modul

Es kommt I2C zur Anwendung (Nachtrag: inzwischen werden alle Daten nach einem Startzeichen rausgestreamt und die Cients wissen anhand einer internen ID, welcher Teil der Daten für sie bestimmt ist). Die Adressbreite wird standardgemäß 7 Bit betragen, damit sind 23x25 Pixel erreichbar. Schon eine Adressbreite von nur 6 Bit erlaubt mehr Module, als würde man auf den Atmel verzichten und die TLC5941 hintereinander verketten (diese Anordnung ist auf 40x TLC5941 limitiert).