Wenn ich irgendwann mal was basteln möchte was mehr Rechenleistung braucht als ein ATmega bietet denke ich mal über eine ARM-CPU nach. Dachte ich. Gerade habe ich einiges über den Propeller von Parallax gelesen. Darauf gekommen bin ich über die YBox2 von Lady Ada.

Der Parallax ist ein Controller mit acht unabhängigen RISC-CPU-Kernen in 32 Bit. Klingt wie geschaffen für komplexe Projekte bei denen mehrere Sachen gleichzeitig stattfinden sollen. Im genannten Projekt wird der mit 80MHz getaktet, hat also auch genug Schwung um komplexere Sachen zu machen. Und teuer scheint der auch nicht zu sein: als Einzelstück 12,50 Euro klingt fair bei den Daten. Oh, und im Gegensatz zu ARMen gibt es den auch im ‚Lötbaren‘ Gehäuse, also in nicht-SMD-Form.

Doof ist nur, dass ein C-Compiler nur gegen Geld zu kriegen ist, während es eine Entwicklungsumgebung für eine proprietäre Sprache (Spin) kostenlos gibt.

Zwei wiedergeborene TastaturenIn den letzten Wochen habe ich mich wieder verstärkt um mein Projekt Dulcimer gekümmert. Seit Gestern habe ich ein neues benutzbares Hackbrett. Diesmal keine Model M, aber nichtsdestotrotz ein erlesenes Gerät. Ausführliches schreibe ich dann die Tage mal, wenn ich ein neues Paket online stelle. Wer sich für die Fortschritte interessiert kann auch einen Blick auf die Entwicklung werfen — das dürfte allerdings wohl eher was für den Connoisseur sein. :-)

USB-Tastaturen in speUnd ich habe Heute neue Rohlinge für solche Basteleien bekommen. Zwei Model M, eine von 1991 und eine von 1995. Ob ich letztere wirklich zerlegen sollte muss ich mir noch überlegen. Das scheint irgendwie ein Sondermodell zu sein. Das Kabel ist — untypisch für die Serie — fest angebaut, und was das eigentlich merkwürdige ist: die hat keine LEDs. Sieht man auch auf dem Foto. Eigentlich ideal für meine Bastelidee. Kann mir jemand sachdienliche Hinweise zu dem Ding geben?

… man kann noch so lange an einem Problem rum programmieren, einen kaputten Stecker kann man nicht wieder heil programmieren. Auch nicht wenn man da einen kompletten Samstag reinsteckt. :-(

Aber der One-Wire-Bus ist an der Stelle auch echt ein Arsch. Wer ihn nicht kennt: der Name ist etwas verwirrend. Zwei Drähte braucht man mindestens: einen für die Masse, einen für Daten. Eine Versorgungsspannung kann man wenn man möchte zusätzlich anlegen. Wenn man das nicht machen will kann man die Bausteine auf dem Bus — Temperaturfühler in meinem Fall — auch über die Datenleitung mit Saft versorgen. Eigentlich muss man dazu dann noch einen zusätzlichen FET benutzen.

Der Samstag hat mir aber gezeigt, dass es auch ohne den FET geht, wenn zum Beispiel der Pin für die Versorgungsspannung im Stecker kaputt ist. Und wenn man mehrere Sensoren auf dem Bus hat gibt es sehr merkwürdige Ergebnisse, empfehlenswert ist das also nicht. Das doofe ist: es gibt Ergebnisse. Wenn gar nichts geht kommt man schnell auf die Idee zu messen. Wenn aber der Bus die Geräte sieht, diesen aber keine Ergebnisse entlocken kann, ist das… irreführend. :-(

Naja: Gefahr erkannt, Gefahr gebannt. Heute habe ich mein aktuelles Mikrocontroller-Projekt in Betrieb genommen. Ein Gehäuse fehlt noch, dann mache ich ein paar Fotos und veröffentliche es. Vielleicht auch ohne Gehäuse, dann wird das diese Woche noch was.

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.

Wenn ich mal wieder ein Projekt habe in dem ich viele LEDs ansteuern möchte werde ich der Technik namens Charlieplexing ein paar Gedanken widmen. Nur beschaltet mit ein paar Widerständen kann ein Controller mit n Pins (n*(n-1)) LEDs schalten. Das wären (wenn man einen Quarz und Reset nicht belegen möchte) 210 mit einem ATtiny2313, 380 mit dem ATmega8 oder sogar 992 mit einem ATmega32 oder ATmega644…