Bastelprojekte: Elektronik

WoDoCoBo C: Mood Cluster

Bastelprojekte: - Hortlicht - Flintstone - Moodlight - Mood Cluster -Dragonology - Doomsday Machine -
Cluster

Ein einzelnes MoodLight war uns nicht genug, schnell stand die Idee im Raum gleich mehrere MoodLights an einem separaten Atmel zu kombinieren - das MoodCluster war geboren. Es sollte vier kleine Würfel mit je drei LEDs beinhalten sowie einen größeren Würfel, der neben weiteren drei LEDs noch den Steuerchip enthielt. Die Kommunikation mit dem PC soll über die bereits vorhandenen WoDoInCo mittels I2C laufen.

Die benötigten Teile wurden zusammengestellt und bei Reichelt bzw. Led1 bestellt. Als Atmel wählte ich wieder den ATMega8535, da ich bei diesem schon wusste was er alles kann. Da er jedoch die benötigten 300mA für die insgesamt 15 superhellen LEDs nicht bereitstellen kann haben wir noch zwei ULN2803A (je acht Darlingtons zur Stromverstärkung) vorgeschaltet. Die Spannungsversorgung übernahm ein altes ATX-Netzteil, welches an 5V-Standby auch saubere 5V-Spannung liefert, jedoch deutlich mehr Strom verträgt als mein billiges Netzteil von Pollin.

TODO:
ganz fertig ist es noch nicht. So ist I2C noch nicht implementiert und das MoodCluster somit noch Standalone.
Update soon!

Aufbau

Die Würfel besorgte Mendra als mein Geburtstagsgeschenk. Für den großen verwendeten wir wieder einen fertigen MoodLight-Würfel, identisch zu dem von Microsoft, jedoch ohne Werbeaufdruck. Die kleinen Würfel beherbergten mal Geduldsspiele wo man ein Kügelchen umherbugsieren musste. Mendra versuchte es zuerst mit anrauhen, doch dies brachte weder genügend Diffusion noch hätte er es durchgängig machen können ohne sie komplett zu zerlegen. Stattdessen nahm er weiße Sprühfarbe. Zwar ist diese leider ein wenig verlaufen so daß es nicht ganz einheitlich aussieht, sie erfüllt jedoch ihren Zweck. Als zusätzlicher Diffusor ist ein halber Tischtennisball über den Platinenstück mit den LEDs platziert.

Die Platine des großen Würfels enthält wenige Bauelemente. Neben dem Atmel selber gibt es nur den Quarz nebst zugehörigen zwei Kondensatoren (welche aus Platzgründen unter den Chip gerutscht sind), die zwei Darlington-ICs, eine Pfostenleiste für ISP und drei Westernbuchsen zum Anschluss nach aussen. Je zwei Würfel (4 Adern) teilen sich einen Stecker in den äußeren Buchsen, die mittlere ist für die Spannungsversorgung und I2C bestimmt. Oh, und zur Sicherheit eine Diode gegen Verpolung - die sich bereits sehr bezahl gemacht hat da wir anfangs den am Telefonkabel existierenden 6-poligen Stecker verwendeten, im Glauben dieser würde auch in einer 8er-Buchse gut passen. Wie wir feststellten passte er nicht nur gut in der mittleren Position sondern auch einen Pin versetzt, so daß man leicht aus Versehen plötzlich VCC dort hat wo man Masse erwartet...

 
Mendra versucht meinen handgezeichnete Schaltplan zu verstehen, mit der Vorlagenversion der ersten Platine abzugleichen und überlegt, wie er die Komponenten möglichst platzsparend auf der Platine unterbringen kann.
Ich, während ich sämtliche verwendete LEDs mit der Feile bearbeite um sie matter zu kriegen. Es waren nur 15 - Respekt an jene die 125 LEDs abschmirgelten.
Müde betrachte ich die Platine, welche (fast :) keine Fehler oder Kurzschlüsse aufwies, aber dennoch nicht funktionierte und wir uns den Spannungsabfall von 1,5 Volt nicht erklären konnten. Obwohl das Netzteil saubere 5 Volt lieferte, erreichte den Atmel gerade einmal 3,2 Volt. Eine Mesung ergab daß Masse um 0,76 Volt angehoben und VCC um 0,76 Volt abgesenkt war gegenüber direkt am Netzteil. Nach einer ganzen Weile des Suchens, in der wir schon grübelten ob wir Kurzschlüsse hätten oder die Datenblätter falsch verstehen würden, kamen wir darauf, daß das verwendete Telefonkabel einen unerwartet hohen Widerstand hatte. Durch ein Netzwerkkabel ausgetauscht konnten wir somit alles zum Laufen kriegen.
 
Drachenkompaktbauweise: der Taktgenerator ist unter den Atmel gerutscht, die anderen Bauteile ebenfalls sehr eng gedrängt angeordnet. An die drei Westernbuchsen kommen links und rechts je zwei kleine Moodwürfel (zwei pro Stecker) und in der Mitte die Verbindung zur WoDoInCo über I2C. Oben die ISP-Programmierschnittstelle, auf einen seriellen Anschluss (mit Treiberbaustein) haben wir hier verzichtet.
Eine einzelne Platine wie sie in den vier kleinen sowie oberhalb des Atmels auch im großen Würfel verwendet wurde. Drei Leuchtdioden mit Vorwiderständen. Da wir uns vertan hatten (wir hatten Widerstandsnetzwerke gekauft, aufgrund der Leitungsverlegung benötigten wir jedoch einzelne) kam es uns gerade recht daß nifelan sich bei seiner Bestellung mit Stück und Packung vertan hat und uns eine Packung 81 Ohm Widerstände überlassen hatte.
 
Das MoodCluster vollständig aufgebaut und im Probebetrieb. Die Ansteuerung erfolgt momentan noch über einzelne Drähte mit denen man die Farbe einstellen bzw. die Farbwechselfunktion starten kann. Dies wird später auf eine I2C-Steuerung umgestellt.
Ein zweites Bild und ein kleines Video des MoodClusters.
SUC

Neben RS232 (abgesehen vom Spannungsniveau) ist I2C eines der Dinge die der Atmel von Haus aus kann. Aus rechtlichen Gründen nennt Atmel es TWI (Two Wire Protocol), es ist jedoch das gleiche. Da I2C ein Bus ist, ich jedoch eine sternförmige Struktur bevorzuge, habe ich vorgesehen daß die beiden Adern wieder zurückgeführt werden können. Für einen Informatiker macht es zwar keinen Unterschied ob ich ein weiteres Kabel am vorderen oder hinteren Ende eines existierenden Kabels befestige, doch um kein Risiko einzugehen mache ich es halt so (und aktiviere auch die internen Pullups als Endwiderstände).

Da über den gleichen Stecker auch die Versorgungsspannung läuft haben wir dem ganzen einen neuen Namen gegeben: SUC, Slave Unit Control. Die Pinbelegung wurde so definiert:

PinSUCEthernetPower
1I2C SDARX+5V Standby
2I2C SDA (return)RX-GND
3I2C SCLTX+Power On
4Groundn/aGND
5+5Vn/a+5V
6I2C SCL (return)TX-+5V
7+12Vn/a+12V
8Groundn/aGND

Der Vergleich mit Ethernet zeigt daß die stromführenden Leitungen dort unbenutzt sind, um nicht irgendwelche Netzwerkkomponenten zu grillen wenn man sie versehentlich dort einsteckt. Lediglich beim Einstecken in die Doomsday Machine (Power) wird es brutzeln.

AVRlib

Eine C-Bibliothek für den AVR um I2C zu sprechen war auch rasch gefunden - die AVRLIB. Sehr praktisch, enthält sie neben den I2C-Modulen auch allerhand anderes nützliches. Leider schien sie auf einer alten Version des AVR-GCC zu basieren und benötigt diverse Macros, die mittlerweile nicht mehr definiert (da als deprecated bezeichnet) sind. Auf der special function list) fand ich diese Deprecated Macros jedoch noch und konnte sie einbinden:

#define 	cbi(sfr, bit)   (_SFR_BYTE(sfr) &= ~_BV(bit))
#define 	sbi(sfr, bit)   (_SFR_BYTE(sfr) |= _BV(bit))
#define 	inb(sfr)   _SFR_BYTE(sfr)
#define 	outb(sfr, val)   (_SFR_BYTE(sfr) = (val))
#define 	inw(sfr)   _SFR_WORD(sfr)
#define 	outw(sfr, val)   (_SFR_WORD(sfr) = (val))
#define 	outp(val, sfr)   outb(sfr, val)
#define 	inp(sfr)   inb(sfr)
#define 	BV(bit)   _BV(bit)
Ein paar der Links die ich als recht nützlich empfand
AVRlibSourcen für AVR, z.B. I2C und PWM
CubatronDas Cubatron, eine 3D-Installation aus über 700 RGB-Leds
FnordLichtEine programmierbare Lampe vom CCC Köln. 9 LEDs pro Farbe, 16bit PWM
Shoe Dance MessangerLustiges Projekt um beim Tanzen Botschaften in die Luft zu schreiben
SpokePOVAnzeige von Bildern in den Fahradspeichen durch sich drehende LEDs
Electric ClothingNoch so ein Bastler mit diversen netten Projekten
Stand: August 2005. Fragen, Kommentare, Hinweise an Zefiro.