Freitag, 9. September 2011

LED-Cube 8x8x8 Teil 2

Es geht weiter! Im ersten Teil ging es ja grob um die Grundlagen der Cube-Multiplextechnik und ein paar allgemeine Dinge zur Elektronik.

Nun aber endlich zum interessanten Teil: Welche Bauteile benötigt man und wie sind diese zu dimensionieren!?

Der Mikrocontroller:
Als Mikrocontroller hatte ich noch einen 40-poligen Atmel ATmega644 im DIL-Gehäuse in der Bastelkiste der für diese Anwendung mehr als geeignet ist. Er bietet alle Standard-Peripherie der ATmega-Serie,  hat 64kB Flash, 4kB RAM und 2kB EEPROM. Dieser uC bildet also die Basis unserer Ansteuerung.
Der Mikrocontroller muss ja ein Muster an die 64 LEDs einer Ebene anlegen. Da ein Mikrocontroller in der Regel keine 64 Ausgänge hat die man für diesen Zweck benutzen will, gibt es cleverere Ansteuermöglichkeiten um 64 Ausgänge bereitzustellen. Beim 4x4x4 Cube waren es nur 16 LEDs pro Ebene und ich hatte dafür zwei 74HC574 Latches benutzt. Da ich diesmal eine andere Variante der Ansteuerung ausprobieren wollte, die auch noch weniger Controllerpins benötigt, habe ich mich für "Standard"-Schieberegister 74HC595 (serial in, parallel out) entschieden. 

Die Schieberegister:
An diese Bausteine legt man ein Bit an und kann dies dann mit einer Flanke am Clock-Eingang in das Register übernehmen. Wie der Name schon sagt, schiebt das IC mit jedem neuen Bit das Vorherige eine Stelle im Register  weiter. Jeder Baustein hat 8bit (=1 Byte ;) Speicherplatz. Für 64 LEDs einer Ebene benötigen wir also acht Schieberegister. Man verbindet den höchstwertigen Ausgang eines Schieberegisters mit dem Eingang des jeweils nächsten Schieberegisters (kaskadieren). Somit schiebt man die 64 benötigten Bits im Gänsemarsch durch alle Register hindurch. Wenn man sich nun vorstellt, dass es ungünstig wäre, im eingeschalteten Zustand des Cubes die Bits hindurchzuschieben (da ja dann die LEDs flackern würden) haben diese Bausteine praktischerweise ein Ausgangslatch. Man kann also erst alle Bits hineinschieben und erst wenn alle Daten in den Schieberegistern sind kann man mit einem Impuls am RCK-Pin die Daten an den Ausgang übernehmen.
Also zusammenfassend kann man sagen, dass man nur 3 Mikrocontrollerpins benötigt. Einen Pin um das jeweilige Datenbit anzulegen (SER), einen Takt-Pin um das Bit in das Schieberegister hineinzuschieben (SCK) und einen Pin um das Ausgangslatch zu schalten und die eingeschobenen Daten an den Ausgang zu übernehmen (RCK). Die 74HC595 haben auch noch einen G-Eingang. Diesen kann man benutzen um den Ausgang generell an- bzw abzuschalten. Eventuell will ich damit später mal versuchen die LEDs mit PWM zu dimmen. Vorerst wird dieser Eingang aber fest auf Masse gelegt damit der Ausgang der Schieberegister immer aktiv ist.

Die Ebenen-Transistoren und deren Ansteuerung:
Wie schon beschrieben benötigt man Transistoren um die Kathoden der acht Cube-Ebenen auf Masse zu ziehen. Hierzu bieten sich N-Kanal MOSFETs an. Diese schalten fast leistungslos und sind sehr günstig. Ich habe wie auch beim 4x4x4 Cube MOSFETs vom Typ IRLU xxxx verwendet.
Da wir es mit acht Ebenen zu tun haben, müsste man acht Mikrocontrolelrpins Opfern um die MOSFETs anzusteuern. Um dies etwas eleganter zu lösen gibt es auch noch cleverere Möglichkeiten. Mit einem 74HC238 (3 zu 8 Decoder) ist es möglich eine Zahl zwischen 0 und 8 mit nur drei Eingängen im Dualsystem darzustellen. Je nach Wert der Eingänge ist immer genau ein Ausgang des Bausteins aktiv (low-active!!!). Für unsere Zwecke also genau das richtige da sowieso immer nur ein einziger MOSFET durchgeschaltet sein darf. Ansonsten wären ja zwei oder mehr Ebenen gleichzeitig aktiv. Das darf NIEMALS passieren!!! Außer diesen drei Pins für die Ebenencodierung nutze ich auch noch einen "Output-Enable"-Pin des 74HC238. Damit ist es möglich auch die Ebenen komplett abzuschalten (was ggf. sinnvoll sein kann).
Da die Ausgänge des 74HC238 low-aktiv sind, wir aber für die Ansteuerung der MOSFETs high-Pegel benötigen, schalten wir noch einen 8-fach inverter IC vom Typ 74HC540 dahinter. Damit haben wir die Möglichkeit mit insgesamt 4 Controllerpins unsere MOSFETs anzusteuern. Es sind sicherlich auch noch viele andere Möglichketen denkbar für die MOSFETs Controllerpins einzusparen...zB ein weiteres Schieberegister. Ich wollte aber mal etwas spielen und habe deswegen den 74HC238 genutzt!

Die Highside-Treiber für die LEDs:
Jetzt bleibt noch die Frage wie man die "Säulen" des Cubes ansteuert. Die 64 gemeinsamen Anoden direkt auf die Ausgänge der Schieberegister zu legen ist unvorteilhaft da die 74HC595 ICs nur sehr geringe Ströme treiben können. Die LEDs wären also extrem dunkel. Es bietet sich also an hinter die Schieberegister noch je einen Quellentreiber zu schalten. Auch hier habe ich wie beim ersten LED-Cube den Typ ULN2981 verwendet. Diese Bausteine haben leider einen Spannungsabfall von fast 2V und somit würde bei einem Betrieb der ICs an +5V Vcc nur noch gut 3V am Ausgang anliegen. Das ist zu wenig für meinen gewünschten Strom der durch die LEDs fließen soll. Aus diesem Grund habe ich die ULN2981 unabhängig von den anderen Bausteinen an eine Versorgungsspannung von 9V gelegt. Es stehen dann ca. 7V am Ausgang bereit. Die Differenz dieser Spannung zur gewünschten Flussspannung der LED muss am Vorwiderstand in Wärme vernichtet werden.
Da immer eine Ebene des Cubes aktiv ist und theoretisch alle 64 LEDs der ebene gleichzeitig leuchten können habe ich mich entschieden eine Stromgrenze einzuführen die ich später bei den Berechnungen mit einbeziehe. Diese Grenze liegt bei 350mA pro ULN2981. Dann bleibt für eine LED (8 Ausgänge pro ULN2981) 350mA/8 = 43,75mA. Das macht dann immerhin bei 64 gleichzeitig aktiven LEDs 64*43,75mA = 2,8 Ampere !
Doch gleich mehr zur Berechnung!

LED Flussspannung, Vorwiderstände:
TODO: Berechnung der LED Vorwiderstände etc einbauen.

LCD Display, Fernbedienungsempfänger:

Displays gibt es in allen erdenklichen Farben und Ausführungen. Ich habe mich für ein 4x20 Display (4 Zeilen mit je 20 Zeichen) mit Standard HD44780 Controller entschieden da dies bei einem Kollegen in der Bastelkiste vorhanden war. Die Ansteuerung erfolgt im 4-bit Modus. Das bedeutet, dass man nur 4 Controllerpins für die eigentlichen Daten benötigt die man an das Display sendet. Ein Byte wird dann in zwei Teilen von je 4 bit übertragen. Zusätzlich benötigt man aber auch noch drei Steuerleitungen die sich um den Datenfluss kümmern. Ich verweise an dieser Stelle auf das Wiki vom Roboternetz. Dort ist es gut beschrieben: LCD-Modul am AVR.

Der Empfänger für die Fernbedienung besteht aus einer "normalen" TSOP Infrarotempfängerdiode für eine 36kHz-Trägerfrequenz. Diese Diode wird an einen beliebigen Controllerpin gehängt und später per cleverer Software-Routine von Peter Danegger ausgewertet. Es muss kein Interrupt Pin dafür geopfert werden!

Das SD-Karten Interface:
TODO !!!

Schaltplan der LED Ansteuerung:
TODO !!!

Das Entwicklungsboard:
Für die ersten Schritte habe ich ein Atmel STK500 Evaluationsboard verwendet. Dieses Board ist für viele AVR-Typen im DIL-Sockel geeignet und fürt alle Controllerpins auf Stiftleisten heraus. Das Ansteuerboard für die LEDs war mir zu aufwendig auf einem Steckbrett zusammenzubauen und somit habe ich dieses kurzerhand direkt in EAGLE als Platine erstellt und selbst geätzt bzw. von einem Kollegen ätzen lassen.
Hier mal ein Bild wie das ganze zur Zeit auf dem Tisch so aussieht:
 
Im oberen Bereich des Fotos sieht man die Platine mit den bestückten Schieberegistern. Die ULN2981 habe ich noch nicht gesteckt da diese für den Funktionstest nicht relevant sind. Links ist das STK500 Board mit eingestecktem ATmega644 und rechts liegt das 4x20 Display. Die Infrarotempfängerplatine und das SD-Interface ist hier leider noch nicht zu sehen. Oben links sieht man noch einen AVRISPmkII Programmieradapter den ich benutze um den ATmega644 von extern über USB zu programmieren. Das geht prinzipiell auch wenn man das STK500 per RS232 vom PC aus ansteuert aber der AVRISPmkII ist schnelller :)

Wenn alle Komponeten in Betrieb genommen sind und laufen, werde ich eine Platine für den Mikrocontroller entwerfen. Diesmal wahrscheinlich mit dem Programm "Target3001". Dieses Programm soll flexibler sein als EAGLE und da wir auch dafür an der Fachhochschule eine Lizenz haben werde ich es vielleicht mal ausprobieren. Den eigentlichen LED Cube werde ich wahrscheinlich erst in Betrieb nehmen wenn die Mikrocontrollerplatine fertig ist. Dann ist nämlich alles etwas kompakter.

Keine Kommentare:

Kommentar veröffentlichen