I2C LED MatrixSchlag auf Schlag: Ich habe nicht vor, jetzt jede Woche ein neues Projekt auf die Seite zu stellen. Ideen hätte ich genug, aber nicht ansatzweise die Zeit um alles umzusetzen. Im Moment drängt es mich aber etwas, mein nächstes größeres Projekt fertig zu kriegen, unter anderem habe ich deshalb auch letzte Woche schnell die Tastatur fertig gemacht. Hier geht es um einen Teil des nächsten Projektes.

Vor einer ganzen Weile habe ich mal billig einen Posten Siebensegmentanzeigen gekauft. Die sollen jetzt mal zum Einsatz kommen. Grün, vierstellig, gemeinsame Anode (letzteres ist der Grund warum ich doch nicht auf Charlieplexing zurückgreifen kann). Die haben also 12 Pins an der Unterseite: acht Segmente und jeweils eine Anode pro Ziffer. Ich werde zwei davon brauchen. Die Segmentanschlüsse kann ich jeweils verbinden, die Anoden muss ich vom Controller aus einzeln ansteuern. Also acht Segmente plus acht Anoden, macht 16 Pins. So viel habe ich nicht frei.

Sicher könnte man da was mit anderen Bausteinen machen, ich habe mir meinen eigenen gebaut. Einen ATmega8 der per I2C zu steuern ist, und der diese Aufgabe spielend übernehmen kann. So brauche ich an meinem ‚Hauptprozessor‘ nur noch die zwei Pins für den I2C-Bus. Außerdem verlagert sich der Job, die LEDs zu Multiplexen in den anderen Controller. So muss ich beim Programmieren auch nicht auf das Timing achten damit die LEDs nicht flimmern.

Das ganze habe ich schön dokumentiert und freigegeben, unter dem nicht sehr originellen Namen I2C LED Matrix.

‚Matrix‘ deshalb weil man an den Baustein einfach eine Matrix aus 8×8 LEDs anschließen kann. Das müssen nicht unbedingt Siebensegmentanzeigen sein. Der Vorteil ist, dass man so beliebige Zeichen darstellen kann, Nachteil dieser Flexibilität ist allerdings auch dass man sich die Zeichen auf dem steuernden Controller erstmal definieren muss. Naja, schwer ist das aber auch nicht, ein Beispiel habe ich auf der Seite.

Vielleicht kann das ja jemand gebrauchen. Und bevor die Befürchtung aufkommt dass es hier jetzt nur noch uC-Basteleien gibt: ich fürchte bis das angekündigte größere Projekt fertig wird, wird einige Zeit ins Land gehen… hoffentlich nur ein paar Wochen, aber… wer weiß?

Als ich letzte Tage das Dulcimer-Projekt vorgestellt habe, habe ich auch eine Mail an Objective Development geschrieben. Das sind die Leute die den USB-Treiber gemacht haben den ich jetzt zum wiederholten Mal benutzt habe. Die haben Links auf alle USB-Projekte die damit gemacht wurden. Auf der Seite mit den HID-Geräten findet sich seit Gestern auch mein Dulcimer.

Die Seite habe ich mir in den letzten zwei Monaten auch öfter angesehen, weil ich andere Projekte gesucht habe aus denen ich lernen kann. Allerdings sind da in den letzten Wochen einige dazu gekommen, unter anderem RUMP – Real USB Model M PCB. Da hat offenbar jemand das gleiche Projekt gemacht wie ich, parallel und ohne es zu wissen. :-)

Ich werde den jetzt gleich mal anschreiben und ihm meine Version vorstellen. Vielleicht will er sich ansehen wie ich es hingekriegt habe die LEDs der Tastatur zu benutzen. Ich werde seinen Algorithmus zur Verhinderung von Ghost-Keys nochmal eingehend studieren…

Zwei Kleinigkeiten habe ich gerade an dem Dulcimer-Projekt gefixt. Eine Fehlerkorrektur in einer Funktion die eigentlich eh nicht aufgerufen wird. Naja, später schon, wenn die Tastatur zusätzliche Features kriegt. Jetzt habe ich die nämlich beim Debuggen benutzt. Der andere Fehler ist für Nachbauer unangenehmer, und aufgrund der merkwürdigen USB-Spezifikation nicht leicht zu sehen: die Backslash-Taste ist da an zwei Stellen definiert. Und ich habe natürlich direkt die falsche gewählt… :-/

Naja, ist gefixt. Die neuen Pakete stehen zum Download auf der Seite.

DulcimerDas Autoquarium ist zwar mittlerweile auch fast fertig (in der ersten Ausbaustufe), aber zwischenzeitlich habe ich mich noch einem weiteren Projekt gewidmet. Das ist seit gerade eben online. Ebenfalls in der ersten Ausbaustufe: Dulcimer.

Der Name klingt erstmal nichtssagend, aber wer sich den grünen Kasten auf der Seite durchliest kann sich vielleicht denken warum ich ihn gewählt habe (Hint: wenn das nicht reicht kann man auch in der englischen Version spicken). :-)

Um das auch hier nochmal kurz zusammenzufassen: es geht um eine ziemlich alte klassische Tastatur: die IBM Model M. Ich wurde gefragt ob ich die zu einer USB-Tastatur umbauen kann, und hier ist das Ergebnis. Wer mit dem Namen nichts anfangen kann möge sich vielleicht mal bei eBay die Preise ansehen für die diese ‚alten Dinger‘ gehandelt werden…

Wie auch immer: diese eine spricht jetzt schon fließend USB. Und wenn ich Zeit dazu habe werde ich da noch ein paar Nettigkeiten einbauen. Ideen stehen ja schon auf der Seite, für neue bin ich immer offen. Eines meiner Ziele ist zum Beispiel — ohne mich über die Krankheit lustig machen zu wollen — eine (ein- und ausschaltbare) Tourette-Tastatur… :-D

AutoquariumGestern ist es erstmalig untergegangen, Heute dann erstmalig wieder auf.

Ich habe ja im Oktober schon mal mein Aquariencomputer-Projekt erwähnt, auch wenn es damals noch keinen Namen hatte. Ein paar bescheuerte Ideen (und eine Websuche die (praktisch) keine Fundstellen ergab) weiter war ich überzeugt davon dass man ein (teil-)automatisiertes Aquarium ja eigentlich nur Autoquarium nennen kann. Oder? ;-)

Seitdem ist eine Menge Zeit vergangen, die ich nicht zuletzt mit dem Aufbau eines dazu passenden Aquariums verbracht habe. Gestern Abend war dann aber der große Moment an dem ich beides zusammenführen konnte, und erstmalig die Lampen des neuen Aquariums gedimmt wurden.

Auf dem Bild sieht man den aktuellen Zustand des Teils: oben links die Relais-Karte (die hoffentlich im Laufe dieser Woche zum Einsatz kommen kann), links außen mein treues X22 mit dem das ganze Ding entwickelt wurde (und das da noch zu Testzwecken angeschlossen war), unten rechts das Bedienteil das später in ein Gehäuse kommt und dann sichtbar untergebracht wird, und darüber die Hauptplatine und das Dimmer-Modul.

Die Hauptplatine kommuniziert mit der Peripherie über einen sogenannten I2C-Bus. Das findet einerseits auf dem blauen Kabel statt (zur Relais-Platine wird auch noch eins führen), andererseits auf dem Steckverbinder zwischen den beiden Platinen. Letzterer ist durchgeschleift, so dass an das Dimmer-Modul noch weitere Platinen angeschlossen werden können, damit zum Beispiel auch pH- oder Redox-Werte gemessen, oder die Daten per Netzwerk verfügbar gemacht werden können. Das ist aber noch Zukunftsmusik.

Was bis jetzt funktioniert ist die Temperaturmessung an drei Stellen (im Wasser, über dem Wasser und in der Umgebung) und die Lichtsteuerung für die Leuchtstoffroehren (LEDs kommen später). Die Lampen werden nach einer Art Programm gedimmt, das als einfache Textdatei auf der SD-Karte liegt. Im Wesentlichen sieht das im Moment so aus:

07:45:00, 08:15:00, lamp3, , 127
08:00:00, 08:30:00, lamp2, , 127
08:00:00, 08:45:00, lamp4, , 80
08:15:00, 09:00:00, lamp1, , 127
12:00:00, 12:30:00, lamp3, , 30
12:15:00, 12:45:00, lamp2, , 30
12:30:00, 13:00:00, lamp1, , 30
14:00:00, 14:30:00, lamp2, , 127
14:15:00, 14:45:00, lamp1, , 127
14:30:00, 15:00:00, lamp3, , 127
14:30:00, 15:00:00, lamp4, , 127
18:30:00, 19:00:00, lamp4, , 80
20:00:00, 23:30:00, lamp4, , 0
21:00:00, 22:00:00, lamp1, , 0
21:15:00, 22:15:00, lamp3, , 0
21:30:00, 23:00:00, lamp2, , 0

Die Zeile 07:45:00, 08:15:00, lamp3, , 127 bewirkt zum Beispiel, dass in der Zeit von 07:45 bis 08:15 die Lampe 3 von ihrem vorherigen Zustand (deshalb die beiden Komma) auf volle Helligkeit (127) heraufgedimmt wird. Dabei ist lamp1 die vordere Röhre über dem Becken, lamp2 die mittlere (jeweils 865er Osram), lamp3 die hintere (840er Osram) und lamp4 die ‚obere‘ (ebenfalls 840er Osram), die beleuchtet nicht das Becken sondern die bepflanzte Rückwand darüber.

Wenn die Lampen auf 0 heruntergedimmt werden leuchten sie immer noch, wenn auch nur schwach. Später soll in dem Moment die Relaiskarte dafür sorgen dass die Lampen auch tatsächlich ausgeschaltet werden, im Moment wird das noch durch Zeitschaltuhren erledigt. Aber wie gesagt: ich hoffe dass die Relais noch diese Woche fertig werden…