RGBLEDmodul: Unterschied zwischen den Versionen

Aus C3D2
Wechseln zu: Navigation, Suche
(Modulkonfigurationen)
Zeile 3: Zeile 3:
 
=RGBLEDmodul=
 
=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 einige TCL5941 (diese waren zuerst geplant) bestellt, um Prototypen zu bauen.
+
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 50 TCL5941 und 250 LEDs bestellt, um erste Module 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).
  
 
==Hardware==
 
==Hardware==
Zeile 10: Zeile 10:
  
 
Ein beliebiges Bord, das einen Microcontroller beherbergt und mindestens die unten beschriebene Hardware-Schnittstelle besitzt, um die Module ansteuern zu können.
 
Ein beliebiges Bord, das einen Microcontroller beherbergt und mindestens die unten beschriebene Hardware-Schnittstelle besitzt, um die Module ansteuern zu können.
Konkret wohl ein Atmel, der ausreichend RAM besitzt, um 8 Bit * 3 LEDs * LED-Anzahl = (bei 16x20 = 320 LEDs also 960 Byte) im Speicher zu halten. Weniger RAM wäre denkbar, sogar ganz ohne RAM ist möglich, geht aber irgendwann zu Lasten der erreichbaren Geschwindigkeit.
 
  
 
===Modul===
 
===Modul===
[[Datei:RGBLEDmodul Verbinder.png|rechts]]
+
Die Module werden zweiseitig mit SMD-Teilen bestückt werden. Auf der Vorderseite die LEDs und auf der Rückseite die Steckverbinder, den TLC5941 und einen Atmel, nebst Kleinkram (ein Kondensator, einige Widerstände).
Die Module werden zweiseitig mit SMD-Teilen bestückt werden. Auf der Vorderseite die LEDs und auf der Rückseite die Steckverbinder, den TLC5947 und evtl. einen Atmel, nebst Kleinkram.
+
 
 +
Ein TLC5941 (16 Output-Pins bis zu 80mA, eingestellt auf ca. 20mA; 12 Bit PWM, Oszillator-Takt muss zugeführt werden) auf der Rückseite nebst Anschluss-Steckern, dazu ein Atmel. Auf der Vorderseite 5 RGB-LEDs. Es werden von Modul zu Modul alle Pins verbunden. Es gibt keine Reihenfolge der Module, sondern sie müssen adressiert werden.
 +
 
 +
Verbindung Atmel<->TLC5941
  
Hier sind zwei Varianten überlegt worden, die denkbar sind:
 
:a) Modul-Platine besitzt nur einen TLC5947 (24 Output-Pins zu 30mA; 12 Bit PWM, Oszillator im Chip) auf der Rückseite nebst Anschluss-Steckern und 8 RGB-LEDs auf der Vorderseite. Es werden von Modul zu Modul alle Pins durchgeschleift:
 
 
::GND
 
::GND
 
::VCC (evtl. nur Logik) (5V)
 
::VCC (evtl. nur Logik) (5V)
Zeile 25: Zeile 25:
 
::SCLK (Takt der seriellen Verbindung)
 
::SCLK (Takt der seriellen Verbindung)
 
::XLAT (Latch-Eingang, sodass die reingestreamten Daten zu den LED-Ausgängen übernommen werden)
 
::XLAT (Latch-Eingang, sodass die reingestreamten Daten zu den LED-Ausgängen übernommen werden)
::BLANK (resettet auch den PWM-Zyklus - wird benötigt, da sonst die LEDs für den Rest des aktuellen Zyklus abgeschaltet werden, nachdem Daten mit XLAT übernommen wurden)
+
::BLANK (resettet u.a. den PWM-Zyklus - wird benötigt, da sonst die LEDs für den Rest des aktuellen Zyklus abgeschaltet werden, nachdem Daten mit XLAT übernommen wurden - muss auch alle 4096 GSCLK-Takte gezupft werden)
::(XERR (auf anderen Chips der Baureihe verfügbar, auf dem TLC5947 leider nicht - somit kein langfristig unbeaufsichtigter Betrieb möglich, da kein LED-Ausfall gemeldet werden kann))
+
::XERR (unbeaufsichtigter Betrieb möglich, da LED-Ausfall gemeldet werden kann)
::(GSCLK (auf anderen Chips der Baureihe notwendig, der TLC5947 besitzt allerdings einen internen Oszillator von 4 MHz))
+
::GSCLK (Takt für den PWM-Teil)
::(SOUT-Rückkanal (bei Chips der Baureihe mit XERR wünschenswert, um den per XERR gemeldeten Fehler auslesen zu können - der SOUT des letzten Moduls der Kette würde dann auf den Rückkanal gejumpert, und damit über alle vorherigen Module zurück zum Controller geschleift))
+
::SOUT als Rückkanal (darüber werden Status-Informationen rausgestreamt, z.B. welche LED defekt ist usw.)
:Damit ergibt sich eine Mindest-Anzahl von 7 Pins.
 
  
  
:b) Auf jedem Modul könnte zusätzlich zum TLC5947 auch ein kleiner Atmel verbaut werden. Dies ermöglicht eine Ansteuerung bspw. per I2C, sodass nicht zwingend eine Ketten-Anordnung notwendig ist. Jedoch muss von jedem Modul die Adresse bekannt sein, um eine vorhersagbare Ausgabe erzeugen zu können.
+
Auf jedem Modul zusätzlich zum TLC5941 ist auch ein kleiner Atmel verbaut. Dies ermöglicht eine Ansteuerung bspw. per I2C, jedoch muss von jedem Modul die Anordnung und Adresse bekannt sein, um eine vorhersagbare Ausgabe erzeugen zu können.
 +
 
 +
Verbindung zwischen den Modulen (logisch: parallel zu allen Modulen geführt - physisch: von Modul zu Modul durchgeschleift):
 +
 
 
::GND
 
::GND
 
::VCC (evtl. nur Logik) (5V)
 
::VCC (evtl. nur Logik) (5V)
Zeile 53: Zeile 55:
 
===Controller<->Modul===
 
===Controller<->Modul===
  
Je nach Hardware-Variante des Moduls (ob mit oder ohne Atmel auf jedem Modul) ergibt sich natürlich eine andere Ansteuerung. Bei Variante a wird die komplette Ansteuerung des TLC5947 von der Controller-Platine aus gemacht, die notwendigen Daten stehen im Datenblatt des TLC5947 [http://focus.ti.com/lit/ds/sbvs114a/sbvs114a.pdf] (PDF). Hier können allerdings maximal 40 ICs hintereinander betrieben werden (jedenfalls stand das im Datenblatt des TLC5940, für den TLC5947 habe ich keine derartige Beschränkung gefunden).
+
Es kommt I2C (oder eine Modifikation) zur Anwendung. Problematisch ist nur die Auswahl der Adressbreite, denn es sollen ja ausreichend viele Module für übliche Anwendungen ermöglicht werden, jedoch ermöglicht schon eine Adressbreite von nur 6 Bit mehr Module, als wenn man auf den Atmel verzichten und die TLC5941 hintereinander verketten würde.
Bei Variante b käme I2C (oder eine Modifikation) zur Anwendung. Problematisch ist nur die Auswahl der Adressbreite, denn es sollen ja ausreichend viele Module für übliche Anwendungen ermöglicht werden, jedoch ermöglicht schon eine Adressbreite von nur 6 Bit mehr Module als Variante a.
 
  
 
==Modulkonfigurationen==
 
==Modulkonfigurationen==
 
[[Datei:RGBLEDmodul Anordnungen.png|rechts|Die möglichen Anordnungen der Module.]]
 
[[Datei:RGBLEDmodul Anordnungen.png|rechts|Die möglichen Anordnungen der Module.]]
Um eine Fläche zu legen, ist bei Hardware-Variante a) ein mäanderförmiges Zusammenstecken erforderlich. Das bedeutet, man braucht Links- und Rechtskurven (Fälle D1 und D2) sowie geradeaus zusammensteckbare Module (Fall A). Daraus ergibt sich die Notwendigkeit für jeweils 3 Verbindungsstellen (links, geradeaus, rechts) an beiden Seiten (siehe oben, Hardware->Modul). Dies ermöglicht dann auch die Fälle B1,B2,C1 sowie C2.
+
Um eine Fläche zu legen, benötigt man mehrere Stecker und Buchsen auf jedem Modul. Da kein Strang erforderlich ist, kann man mehrere Verbindungspunkte zwischen den Modulen in Kauf nehmen, sodass ein Netz entsteht. In diesem Fall braucht man nur einen Stecker nach Oben und Rechts bzw. eine Buchse von Unten und Links. (Bild ist nicht up-to-date)
 
 
Alternativ kann man, wenn Hardware-Variante b) betrachtet wird und kein Strang erforderlich ist, mehrere Verbindungspunkte zwischen den Modulen in Kauf nehmen, sodass ein Netz entsteht. In diesem Fall braucht man nur einen Stecker nach Oben und Rechts bzw. eine Buchse von Unten und Links und spart noch einigen Aufwand, da man ja nicht mehr zwingend einen Strang erzeugen muss.
 

Version vom 20. Januar 2011, 21:20 Uhr


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 50 TCL5941 und 250 LEDs bestellt, um erste Module 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).

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

Die Module werden zweiseitig mit SMD-Teilen bestückt werden. Auf der Vorderseite die LEDs und auf der Rückseite die Steckverbinder, den TLC5941 und einen Atmel, nebst Kleinkram (ein Kondensator, einige Widerstände).

Ein TLC5941 (16 Output-Pins bis zu 80mA, eingestellt auf ca. 20mA; 12 Bit PWM, Oszillator-Takt muss zugeführt werden) auf der Rückseite nebst Anschluss-Steckern, dazu ein Atmel. Auf der Vorderseite 5 RGB-LEDs. Es werden von Modul zu Modul alle Pins verbunden. Es gibt keine Reihenfolge der Module, sondern sie müssen adressiert werden.

Verbindung Atmel<->TLC5941

GND
VCC (evtl. nur Logik) (5V)
(VCC LEDs (mglw. weniger Volt, mglw. auch nicht auf getrenntem Pin))
SIN (Daten von Controller zu Modul)
SOUT (Daten von Modul zu Modul; Daisy Chain - SOUT auf SIN des nächsten Moduls)
SCLK (Takt der seriellen Verbindung)
XLAT (Latch-Eingang, sodass die reingestreamten Daten zu den LED-Ausgängen übernommen werden)
BLANK (resettet u.a. den PWM-Zyklus - wird benötigt, da sonst die LEDs für den Rest des aktuellen Zyklus abgeschaltet werden, nachdem Daten mit XLAT übernommen wurden - muss auch alle 4096 GSCLK-Takte gezupft werden)
XERR (unbeaufsichtigter Betrieb möglich, da LED-Ausfall gemeldet werden kann)
GSCLK (Takt für den PWM-Teil)
SOUT als Rückkanal (darüber werden Status-Informationen rausgestreamt, z.B. welche LED defekt ist usw.)


Auf jedem Modul zusätzlich zum TLC5941 ist auch ein kleiner Atmel verbaut. Dies ermöglicht eine Ansteuerung bspw. per I2C, jedoch muss von jedem Modul die Anordnung und Adresse bekannt sein, um eine vorhersagbare Ausgabe erzeugen zu können.

Verbindung zwischen den Modulen (logisch: parallel zu allen Modulen geführt - physisch: von Modul zu Modul durchgeschleift):

GND
VCC (evtl. nur Logik) (5V)
(VCC LEDs (mglw. weniger Volt, mglw. auch nicht auf getrenntem Pin))
I2C-CLK
I2C-DATA

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 (oder eine Modifikation) zur Anwendung. Problematisch ist nur die Auswahl der Adressbreite, denn es sollen ja ausreichend viele Module für übliche Anwendungen ermöglicht werden, jedoch ermöglicht schon eine Adressbreite von nur 6 Bit mehr Module, als wenn man auf den Atmel verzichten und die TLC5941 hintereinander verketten würde.

Modulkonfigurationen

Die möglichen Anordnungen der Module.

Um eine Fläche zu legen, benötigt man mehrere Stecker und Buchsen auf jedem Modul. Da kein Strang erforderlich ist, kann man mehrere Verbindungspunkte zwischen den Modulen in Kauf nehmen, sodass ein Netz entsteht. In diesem Fall braucht man nur einen Stecker nach Oben und Rechts bzw. eine Buchse von Unten und Links. (Bild ist nicht up-to-date)