Wow, ich hätte nicht gedacht dass ein einfacher ATmega168 mit 19,6608MHz dazu in der Lage ist. Ich bin beeindruckt!
Mein Fazit aus dem Wochenende…
… 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.
Der grosse Postraub
Durch Zufall habe ich mitbekommen, dass der sogenannte ‚große Postraub‚ Heute genau 45 Jahre her ist. Komischerweise habe ich mich Gestern noch mit einem Kollegen darüber unterhalten. Es ging um Vornamen, und nach wem man so benannt wurde. 
Liegt das an mir?
Ich bin im Moment dazu verdammt, mit Windows zu arbeiten. XP am Arbeitsplatz, und unter anderem Windows 2003 Server irgendwo im RZ. Das heißt: ich versuche, damit zu arbeiten. Geht aber viel zu oft nicht, weil das ein großer Haufen Scheiße ist. Stinkend. Irgendwie.
Ich habe mir Heute Nachmittag vorgenommen, das zu schreiben. Während ein Kollege (der im Gegensatz zu mir auch sonst freiwillig mit Windows hantiert) versucht, einen Windows-Server zu rebooten. Weil der Speicher voll gelaufen ist. Oder so. Geht nicht. Muss wohl jemand den Server samt Reset-Knopf suchen gehen…
Naja, mein Problem findet aber auf einem anderen Server statt, und auch lokal auf dem XP kann ich das reproduzieren:
Ich bin mit dem Explorer in einem Verzeichnis mit etwa 20 Textdateien (plain ASCII, Quelltexte). Ich öffne eine der Dateien, suche da nach einem String, finde den auch. Ich will wissen in welchen anderen Dateien der String noch vorkommt. Also Rechtsklick auf den Ordner, ‚Suchen…‘. Auf XP öffnet sich ein neues Fenster mit einem aufwändig animierten Hund. Auf dem Server sieht das anders aus, macht aber das gleiche. Über dem Hund habe ich mehrere Eingabefelder. Über einem steht ‚Ein Wort oder ein Begriff innerhalb der Datei‘. Klingt sympathisch, nehme ich. Bringt aber nix. Der Hund wird aktiv, findet aber keine Dateien mit dem Begriff. Obwohl ich die vorher im Editor offen hatte. Noch mal rein gesehen, steht immer noch drin.
Ich versuche, zwei Kollegen zu fragen was ich falsch mache. Die haben sich aber beide nicht angesehen was ich wirklich getan habe, sondern schon bei der groben Schilderung des Problems wissend gegrinst, und Kommentare wie ‚Hab ich auch schon versucht, klappt nicht.‘ abgegeben.
Ich habe dann in einer DOS-Box mit ‚findstr‘ gesucht. Das ging. Ist dann allerdings auch ohne Hund. Und nicht rekursiv.
Liegt das an mir? An meiner Aura? Habe ich was falsch gemacht?
Ach ja, der Kollege hat den Server dann auch noch rebooten lassen können. Da musste nicht mal jemand einen Reset-Button suchen. Die Kiste ist keine Kiste sondern nur eine virtuelle Kiste. Und VMware hat quasi einen Fernsteuerungsresetbutton. Schöne neue Welt, der Serverbetrieb ist auf die Weise selbst mit Windows ganz angenehm. Zumindest die Abnutzung von Turnschuhen war hat deutlich nachgelassen…
Aus gegebenem Anlass…
grep
Um die Mikrocontroller-Einöde der letzten Tage mal etwas aufzulockern: ich habe mich fast gewundert als ich gelesen habe wofür ‚grep‚ steht. Also nicht was man damit macht, sondern dass das Wort tatsächlich eine Bedeutung hat, beziehungsweise eine Abkürzung ist.
Das steht für Global Regular Expression Printer. Auch wenn man es fast täglich nutzt, ich behaupte mal dass das kaum jemand weiß. 
Neues Projekt online: I2C LED Matrix
Schlag 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ß?
USB-Tastaturen überall!
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…
Dulcimer: kleine Korrekturen
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.
LEDs Charlieplexen
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…