Home | Diary | Beschreibung | Galerie | Fotoberichte | IRC | Projekte | Gästebuch | Kontakt |
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!
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. |
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. |
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:
Pin | SUC | Ethernet | Power |
---|---|---|---|
1 | I2C SDA | RX+ | 5V Standby |
2 | I2C SDA (return) | RX- | GND |
3 | I2C SCL | TX+ | Power On |
4 | Ground | n/a | GND |
5 | +5V | n/a | +5V |
6 | I2C SCL (return) | TX- | +5V |
7 | +12V | n/a | +12V |
8 | Ground | n/a | GND |
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.
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 |
Sourcen für AVR, z.B. I2C und PWM | |
Cubatron | Das Cubatron, eine 3D-Installation aus über 700 RGB-Leds |
FnordLicht | Eine programmierbare Lampe vom CCC Köln. 9 LEDs pro Farbe, 16bit PWM |
Shoe Dance Messanger | Lustiges Projekt um beim Tanzen Botschaften in die Luft zu schreiben |
SpokePOV | Anzeige von Bildern in den Fahradspeichen durch sich drehende LEDs |
Electric Clothing | Noch so ein Bastler mit diversen netten Projekten |