Dieses Projekt war 2008 noch nicht im Blog, ich habe es 2015 aus dem alten CMS kopiert.

Das fertige Hackbrett -- äußerlich original, bis auf das Kabel

Das fertige Hackbrett — äußerlich original, bis auf das Kabel

Die Version, die sich in Frankreich aus dem Psalterium entwickelte, wurde auf französisch ‚doulcemér‘ genannt, dieser Name stammt vermutlich vom lateinischen ‚dulce melos‘, ’süßes Lied‘ oder ‚lieblicher Klang‘. In England heißt das Hackbrett heute noch ‚hammered dulcimer‘.

Wikipedia — ‚Hackbrett

Eine Tastatur kann eine sehr persönliche Sache sein. Insbesondere wenn es sich dabei um ein sehr gut gebautes Modell handelt, wie zum Beispiel eine IBM Model M. Das Design der Model M stammt von 1984, sie hat aber auch Heute noch eine grosse Fangemeinde. Sie hatte die üblichen Anschlüsse für alte Tastaturen: erst den 5poligen DIN-Stecker, später einen PS/2-Stecker. Zumindest meines Wissens nach wurde dieses Modell nie in einer USB-Variante herausgebracht.

Ein Bekannter wusste dass ich schon öfter Geräte mit USB-Anschluss gebastelt habe, und eines davon verhält sich sogar wie eine Tastatur (Es ist nicht wirklich eine Tastatur… aber das ist eine andere Geschichte… ;-) ). Er ist ein grosser Freund der Model M, also fragte er ob ich einer Tastatur mit kaputter Elektronik neues Leben einhauchen könnte. Dies ist das Ergebnis…

Hard- und Software

Ein erster Prototyp

Ein erster Prototyp

Der grösste Teil der Elektronik in einer Tastatur ist die Tastenmatrix. Man kann sich das so vorstellen dass die Tasten auf einem Raster aus horizontalen (Reihen) und vertikalen (Spalten) Leiterbahnen verteilt sind. Im Fall einer Model M haben wir es mit einer 8×16-Matrix zu tun. Acht Spalten in 16 Reihen, oder anders rum, je nachdem wie man sich das vorstellt. Jede Taste ist mit einer Reihe und einer Spalte verbunden. Wenn man drauf drückt wird die Verbindung an dieser Kreuzung hergestellt.

An dieser Matrix hängt ein Tastaturcontroller. Das ist ein Chip mit einer Reihe von I/O-Pins die den Zustand der Matrix überwachen. Am anderen Ende ist ein Interface mit dem der Chip dem Computer seine Befunde mitteilt. Ach ja, und nicht zu vergessen: der Chip hat auch drei Ausgänge zur Ansteuerung der LEDs für Num-, Caps- und Scroll-Lock.

In diesem Projekt habe ich den Tastaturcontroller und seine Schaltung durch einen ATmega32 und eine eigene Schaltung ersetzt. Der ATmega scannt die Matrix, steuert die LEDs und spricht mit dem Computer.

Für die angenehme Weiterentwicklung habe ich einen Boot-Loader in dem Chip untergebracht. Damit ist es möglich, der Tastatur eine neue Firmware zu verpassen ohne sie auseinander nehmen zu müssen. Und ohne einen speziellen Programmer zu brauchen.

Andere Hardware?

Original alt

Original alt

Wie geschrieben hängt der Controller in diesem Projekt nur an einer Tastaturmatrix. Diese Art von Matrix findet man in allen möglichen Tastaturen, von Tastentelefonen über klassische Computer wie den C=64 oder den Schneider CPC, Tastaturen wie die von Sun, mit Anschlüssen die nicht an PC passen, bis hin zu modernen Tastaturen die ein paar zusätzliche Features brauchen könnten.

Ein Layout habe ich zwar bislang nur für die IBM Model M gemacht, aber ich will zumindest noch eine Sun-Tastatur umbauen. Ich schätze dass ich dazu den Scan-Algorithmus umbauen muss, weil die Matrix bei Sun nicht in 16×8-Form angeordnet ist. Die Positionen der Tasten auf der Matrix werden wahrscheinlich auch anders sein, die werde ich rausfinden müssen. Und natürlich wird dann eine Platine mit anderem Layout fällig.

Features

Powered by Kicad

Powered by Kicad

Im Moment macht die Tastatur alles was man von einer Standard-Tastatur erwarten kann die man irgendwo aus dem Regal zieht. Aber da sich der ATmega32 in der Tastatur die meiste Zeit einfach nur langweilt sind einige zusätzliche Features denkbar. Man denke an ‚magische Tastendrücke‘ die einige versteckte Funktionen an- oder ausschalten können, so etwas wie:

  • komplette Sätze oder Phrasen auf einzelne Tastendrücke abschicken
  • ‚Autofeuer‘-Funktion auf Tasten die sowas normalerweise nicht haben, beispielsweise Alt+F4
  • Tastaturlayout umstellen ohne den Computer umzukonfigurieren
  • prellende Tasten ein- oder ausschalten, um Leute zu verwirren die den Computer benutzen wollen
  • zufälliges Auslösen von Caps-Lock
  • Die Pfeiltasten zu einem Mausersatz machen, ohne dafür spezielle Software zu brauchen

Mit ein paar Änderungen an der Hardware würden sogar noch deutlich mehr Möglichkeiten offen stehen:

  • die Oldtimer-Tastatur in eine supermoderne kabellose Bluetooth-Tastatur umbauen
  • Keylogger-Funktionen einbauen, zum Beispiel auf SD-Karte
  • einen USB-Hub in die Tastatur einbauen

Wer nur ein wenig so darüber denkt wie ich wird nicht lange brauchen um selbst auf nützliche — oder besser: unnütze — Ideen zu kommen. ;-)

Benutzung

Die fertige Tastatur wird einfach an USB angeschlossen. Alle LEDs blinken kurz auf um zu zeigen dass das Gerät initialisiert ist.

Dann kann die Tastatur wie immer benutzt werden. Wenn zusätzliche Features eingebaut werden wird es zusätzliche Bedienungsanleitungen geben.

Nachteile

Ich weiss nicht wie die Hersteller von Tastaturen mit dem Problem der Geister-Tasten umgehen. Ich habe keine speziellen Massnahmen zu deren Verhinderung getroffen. Ich hoffe einfach mal, dass die Ingenieure bei IBM die Tasten in einer Weise auf der Matrix verteilt haben die das Problem minimiert. Aufgetreten sind solche Probleme bei mir bislang zwar nicht, aber ich wollte darauf hinweisen dass ich keine Gegenmassnahmen getroffen habe.

Danke!

Moderner Oldtimer

Moderner Oldtimer

Ich danke wieder mal Objective Development für die Möglichkeit, den USB-Treiber in meinem Projekt benutzen zu können.

Ich habe mich sehr stark von Spaceman Spiff’s c64key inspirieren lassen. Diese Software basiert auf seinen Ideen.

Dann geht Dank an xleave, der mir die Platine geätzt hat (von den vielen blöden Elektronikfragen mal ganz abgesehen die er schon von mir vor den Latz gekriegt hat…).

Und ich danke natürlich FaUl vom Chaostreff Dortmund für die Idee zu dem Projekt.

Lizenz

Meine Arbeit, also alles außer dem USB-Treiber, fällt unter die GNU General Public License (GPL). Eine Kopie der GPL liegt dem Projekt bei. Der USB-Treiber untersteht einer gesonderten Lizenz von Objective Development. In firmware/usbdrv/License.txt befinden sich weitere Informationen dazu.

Download

Siehe auch…

  • clickykeyboards.com – eine Seite zur IBM Model M
  • RUMP – praktisch das gleiche Projekt, eine parallele Entwicklung
  • Geekhack – Lochraster-Version, basiert auf Dulcimer

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

Ich weiß auch nicht warum ich den Feed von ladyada noch nicht im Reader hatte. Dass es da interessante Projekte gibt weiß ich schon seit Jahren. Mit diesem Satz hat sie mich jetzt doch überzeugt:

I remember a few years ago I went to a party and ended up talking to Mar about how much I hated Chapter 9 of the USB standard. USB is pretty much a perfect example of what happens when committees design protocols: its bad enough that it will ruin a party.

Kein Wunder, nachdem ich wieder das ganze Wochenende mit Controllern verbracht habe. Unter anderem auch, um die USB sprechen zu lassen…

Doch, eigentlich gibt es jede Menge Kram den ich noch irgendwo auf meiner Seite unterbringen will. So viel dass ich jetzt einen ganzen Monat nicht dazu gekommen bin, das auch tatsächlich zu machen.

Im Aquarien-Teil der Schatenseite ist zum Beispiel noch nichts von meinem zweiten Aquarium zu lesen. Darin leben Krebse (CPO) und Garnelen (White Pearl), mittlerweile sogar schon mehrere Generationen… aber man kommt ja zu nix…

Mittlerweile sind die ehedem vergammelten Flanken meiner Mopete auch nicht mehr in einem ganz so desolaten Zustand. Spannende Sache: so tief habe ich mich noch nie in einen Motor reingeschraubt. Jetzt funktioniert alles wieder und wartet auf Veröffentlichung… aber man kommt ja zu nix…

Das und sonstige Tätigkeiten die so zum Leben gehören — unter anderem ein neues Projekt in der Firma, ein Festival-Kurzurlaub über Pfingsten, ein zweiter Kurzurlaub zu einem Konzert in Berlin, ein zweites Konzert der gleichen Band in Münster — halten mich sogar schon seit über einem Monat davon ab an meinem aktuellen Mikrocontroller-Projekt zu basteln. Obwohl das eigentlich gerade in einer spannenden Phase ist… aber man kommt ja zu nix…

… nicht mal zum Bloggen.

Habe ich eigentlich schonmal erzählt^Wgeschrieben wie ich zu der Mikrocontroller-Bastelei gekommen bin? Nein? Gerade bin ich beim Aufräumen auf den Link gestossen der einer der Haupt-Anlässe war: Alarm Clock of the Short Now.

Das ist zwar ein PIC und kein AVR, und das ist ein denkbar simples Projekt. Sowas wollte ich aber auch bauen. Erst. Die Idee habe ich dann aber immer weiter gesponnen, und damit bin ich bis jetzt noch nicht fertig. Irgendwann werde ich den ultimativen Wecker bauen. Erwähnt habe ich den hier schon öfter, man möge die Suche bemühen. Alle Projekte die ich bis jetzt gemacht habe — und auch einige die ich noch ‚in der Pipe‘ habe — waren praktisch nur die Vorgeschichte, um alles zu lernen was ich brauche um einen anständigen Wecker zu bauen. ;-)

Mehr werde ich aber auch Heute nicht zu dem Thema spinnen, ich bin selbst extrem gespannt wann es soweit ist… Ich habe wie gesagt gerade nur den Link gefunden und wollte dem mal anständig Tribut zollen.

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…

Dieser Text war 2007 noch nicht im Blog, den habe ich 2015 aus dem alten CMS übernommen.

Der neue Adapter

Der neue Adapter

Die üblichen Programmier-Adapter für AVR-Controller werden mit einem zehnpoligen Pfostenstecker an der Zielschaltung angeschlossen. Warum der zehn Pole haben muss ist mir nicht klar. An vieren liegt Masse, einer ist überhaupt nicht angeschlossen. Bleiben also effektiv sechs Pins die wirklich eine Funktion haben.

Das Problem

Wenn man einen Prototypen auf dem Steckbrett entwickelt, kann man den zehnpoligen Stecker nicht vernünftig darauf anschließen. Ich habe mir zu dem Zweck eine Art Adapterkabel gebastelt mit dem jeder Pin auf das Brett gebracht werden kann.

Wie man sieht ist das aber zum einen nicht gerade eine Schönheit, zum anderen auch nicht wirklich stabil. Die Plastikfassungen werden weich wenn man an den Pins lötet, daher kann man sich nicht sicher sein ob die Pins beim Einstecken wirklich Kontakt im Steckbrett finden, oder ob sie sich nach hinten rausdrücken.

Die Lösung

Der Adapter im Einsatz

Der Adapter im Einsatz

Um das etwas eleganter hinzubekommen habe ich mir dieses kleine Helferlein gebastelt. Die Beschriftung habe ich mit Eagle CAD gemacht, die Postscript-Datei zum Nachbasteln steht hier unten auf der Seite zum Download. So muss ich wenn ich was neues aufbaue nur noch in die Dokumentation des Controllers sehen, nicht mehr auch noch die Pinbelegung des Programmers heraussuchen.

Unter dem bedruckten Karton ist eine einfache Lochrasterplatine. Außerdem ein zehnpoliger Pfostenstecker zum Anschluss des Programmers und eine sechspolige Pfostenreihe die in das Steckbrett passt. Die Pins dieser Leiste habe ich nach unten durchgedrückt, so halten die besser im Brett.

Ach ja, die Drähte auf der Unterseite sind lackiert. Und nicht besonders schön verlötet, aber die Hauptsache ist: es funktioniert!

Download

Die fertige Uhr

Die fertige Uhr

Die offizielle Zeit für Deutschland wird bekanntlich von der Physikalisch-Technischen Bundesanstalt (PTB) über das DCF-77 Signal gesendet, praktisch jede Funkuhr arbeitet damit. Beschreibungen des Signals findet man an vielen Stellen im Internet.

Die Binary DCF-77 Clock ist ein einfaches Gerät mit dem die Zeit empfangen und in binärer Form dargestellt werden kann. Das Signal wird von einem einfachen Empfängermodul enpfangen, mit einem ATmega8 Mikrocontroller decodiert und auf einem Raster von LEDs dargestellt. Insgesamt gibt es 32 LEDs, die in Reihen zu jeweils acht angeordnet sind. Die Steuerung übernimmt ein SAA1064 IC, der vom Controller per I2C-Bus gefüttert wird.

Die Zeit kann in verschiedenen Formaten dargestellt werden, das Format wird einfach per Knopfdruck gewählt. Die Formate werden später beschrieben.

Das Paket enthält die Firmware für den Controller, die Schaltpläne, die Dokumentation und eine Kopie der GPL Lizenz.

Bau und Installation

Der Schaltplan ist noch überschaubar.

Der Schaltplan ist noch überschaubar.

Die Installation wird in der beiliegenden Dokumentation beschrieben.

Benutzung

Die Uhr wird an einer Gleichspannung von 9V betrieben. Solange noch keine Zeit decodiert wurde, wird auf den LEDs ein Lauflicht angezeigt. Die einzelne LED in der Schaltung sollte nach einer kurzen Anlaufzeit anfangen, regelmäßig zu blinken. Sie geht an wenn das DCF-Signal in den High-Pegel geht, und wieder aus wenn es auf Low wechselt. Idealerweise sollte es also im Sekundentakt für 100 oder 200 Millisekunden aufblinken wenn ein Signal empfangen wird.

Bei korrektem Empfang wird die Uhr nach etwa ein bis zwei Minuten die Zeit anzeigen.

Die Zeit ablesen

Die verschiedenen Modi

Die verschiedenen Modi

Die Zeit und das Datum werden in sieben verschiedenen Varianten dargestellt. Mit dem Knopf wird die gewünschte ausgewählt. Nach einem Druck zeigt ein Muster aus Lichtern an welcher Stil verwendet werden soll. Das Muster kann binär als Zahl von eins bis sieben interpretiert werden.

Modus 1: Die Zeit in Binärform

So werden einfach Stunden, Minuten und Sekunden als Bytes dargestellt, jeweils eines pro Zeile. Die letzte Zeile des Displays bleibt leer.

Modus 2: Das Datum in Binärform

Dies ist wie das vorhergehende, allerdings werden hier in den ersten drei Zeilen Tag, Monat und Jahr dargestellt. Die letzte Zeile zeigt den Wochentag, wobei Montag einer eins entspricht, Dienstag einer zwei, und so weiter.

Modus 3: Die Zeit als BCD

Hier wird die Zeit als Binary Coded Digits (BCD) angezeigt. Die erste Zeile zeigt die Stunden, wobei die linken vier LEDs die Zehnerstelle und die rechten vier LEDs die Einerstelle darstellen.

Auf die gleiche Weise zeigen die zweite und die dritte Zeile die Minuten und die Sekunden an.

Modus 4: Das Datum als BCD

Im Prinzip wie Modus 3, allerdings wird das Datum angezeigt.

Modus 5: Die Zeit als BCD, vertikal

Dies zeigt die Zeit in BCD-Form wie in Modus 3, allerdings werden die BCD-Werte hier senkrecht nebeneinander dargestellt. Die ersten beiden Spalten zeigen also die Stunden, die dritte Spalte ist leer. Dann folgen die Minuten in zwei Spalten, dann wieder eine frei und die Sekunden in den letzten beiden Spalten.

Modus 6: Das Datum als BCD, vertikal

Die ist wie Modus 5, nur daß das Datum angezeigt wird.

Modus 7: Unix Timestamp

Wahrscheinlich das am wenigsten menschenlesbare Format. Es zeigt die Anzahl der Sekunden seit dem 01.01.1970 als 32-Bit-Wert. :-)

Demo Modus

Wenn die Uhr an einem Ort mit schwachem DCF-Empfang aufgestellt wird, aber man trotzdem die Darstellung zeigen möchte kann sie in einen Demo-Modus geschaltet werden. Um diese Funktion ein- und auszuschalten muß die Taste für etwa fünf Sekunden gedrückt gehalten werden. Danach kann durch die verschiedenen Modi gewechselt werden. Die angezeigte Zeit steht still, also kann in diesem Modus das Ablesen der Zeit auch ohne Eile erklärt werden.

Der Wechsel in den Demo-Modus wird durch ein kurzes Aufflackern aller LEDs angezeigt. Beim Verlassen des Demo-Modus sieht man ein leeres Rechteck auf dem Display.

Schwachpunkte

Ich hätte nicht gedacht, daß das DCF-Signal dermaßen störanfällig ist. Ich habe beobachtet, daß kein verwertbares Signal mehr überbleibt wenn ich mein Notebook mit aktiviertem WLAN neben die Uhr lege. Wenn schon eine korrekte Zeit empfangen wurde wird diese allerdings weitergezählt bis die nächste ‚korrekte Minute‘ empfangen wurde.

Danke!

Ich danke Michael Meier, der eine wesentlich vielseitigere Uhr auf seiner Seite vorgestellt hat. Die SAA1064-Ansteuerung und die Routine zur Berechnung des Unix Timestamps basieren auf seinem Projekt. Man findet es auf seiner Seite.

Und wieder einmal danke ich Thomas Stegemann für seine Hilfe mit der Sprache C.

Lizenz

Dieses Projekt steht unter der GNU General Public License (GPL). Eine Kopie der GPL liegt dem Paket in der Datei License.txt bei.

Download

Dieser Text war 2006 noch nicht im Blog, ich habe den 2015 aus dem alten CMS überführt.

... nie wieder den Mauszeiger suchen!

… nie wieder den Mauszeiger suchen!

Das USB-Servo ist, wie der Name schon andeutet ein Servo das per USB angeschlossen und kontrolliert wird. Ein Servo ist ein Elektromotor der zum Beispiel zur Steuerung ferngesteuerter Spielzeuge eingesetzt wird. Ich habe dieses Projekt durchgeführt um eine Spielzeugfigur zu steuern. Die Puppe hat einen Knopf auf der Unterseite, sie fällt in sich zusammen wenn der Knopf gedrückt wird und steht wieder auf wenn losgelassen wird. Wenn der Computer in der Lage ist diesen Knopf zu drücken kann ich mit der Puppe Informationen anzeigen. Beispielsweise ob jemand im Jabber-Netzwerk online ist: wenn der Bekannte online geht steht die Puppe auf, wenn er sich abmeldet fällt sie in sich zusammen.

Servos werden über drei Adern angeschlossen. Über eine rote und eine schwarze Ader werden sie mit Spannung versorgt, über eine gelbe mit dem Signal. Die Versorgungsspannung sollte zwischen 4,8 und 6 Volt liegen, die 5 Volt des USB-Ports liegen also im erlaubten Bereich. Auf der Signalleitung fließen keine großen Ströme, sie kann also direkt an den Controller angeschlossen werden. Der Winkel den das Servo einstellt wird über Pulsweitenmodulation (PWM) gesteuert. Dazu wird ein Signal mit 50Hz (ein Puls alle 20ms) erzeugt, die Länge der Pulse definiert den Winkel.

Ein Problem das ich nicht wirklich gelöst habe ist die Stromaufnahme: Ich weiß nicht, welcher Strom durch den Motor des Servos fließt. Er scheint niedrig genug zu sein um keine Probleme zu verursachen, aber ich habe nicht ausprobiert wie hoch er wird wenn das Servo blockiert wird. ICH HABE ALSO HIERMIT GEWARNT, für USB-Ports die in Flammen aufgehen fühle ich mich nicht mehr verantwortlich… :-/

Die Schaltung umfaßt nur ein paar Standard-Bauteile. Darunter befindet sich kein spezieller USB-Chip.

Die Schaltung umfaßt nur ein paar Standard-Bauteile. Darunter befindet sich kein spezieller USB-Chip.

Das Paket dieses Projektes besteht aus drei Teilen: Der Firmware für einen ATmega8 Mikrocontroller, einen Kommandozeilen-Client der unter Linux läuft und den Schaltungen die für einen Nachbau benötigt werden.

Dieses Projekt basiert auf meinem USB-LED-Fader, der seinerseits auf dem PowerSwitch Beispielprojekt von Objective Development basiert. Wie in diesen beiden Projekten kommt auch hier der Firmware-USB-Treiber zum Einsatz, den Objective Development für die AVR Mikrocontroller von Atmel entwickelt haben.

Dieser Treiber ist eine reine Firmware-Implementierung des USB 1.1 Standards für langsame Geräte. Er läuft auf preiswerten Mikrocontrollern aus Atmels AVR-Serie, wie dem ATtiny2313 oder sogar den noch kleineren 8-Pin-Controllern. Er implementiert den Standard soweit, daß sich sinnvolle Applikationen damit entwickeln lassen. Die Datei „firmware/usbdrv/usbdrv.h“ enthält weitere Informationen zu Möglichkeiten und Grenzen.

Bau und Installation

Die Installation wird in der beiliegenden Dokumentation beschrieben.

Benutzung

Das Gerät wird mit dem USB-Port verbunden. Wenn das Servo noch nicht in der Ausgangsposition steht wird es sich dorthin bewegen.

Das Kommandozeilen-Tool wird wie folgt benutzt:

Parameter

  • angle: Der Winkel in den das Servo gestellt werden soll. 0 ist ganz links, 255 ist ganz rechts.

Beispiele

Den Status des Servo auslesen

Das gibt den Winkel aus, in dem sich das Servo gerade befindet.

Einen neuen Winkel einstellen

Das stellt das Servo auf den Winkel 23. 0 ist ganz links, 255 ist ganz rechts. Mit 23 wird das Servo also fast ganz nach links bewegt.

Das Gerät testen

Diese Funktion sendet eine Menge Zufallszahlen an das Gerät, das die Zahlen wieder zurück schickt. Der Client kontrolliert die gesendeten und Empfangenen Zahlen auf Gleichheit.

Demoanwendung xservopointer

Hinter den Kulissen

Hinter den Kulissen

Dies ist eine reine Spaß-Anwendung die eigentlich niemand braucht. Grund genug, sie zu schreiben…

Um sie zu benutzen wird das Servo mittig über dem Bildschirm (mit kleinen Änderungen an den Quellen sind auch andere Positionen möglich) montiert und mit einem Zeiger ausgerüstet.

Zukünftig muß man dann nie mehr nach seinem Mauszeiger suchen, der Zeiger an dem Servo zeigt einem immer in welcher Richtung er sich befindet.

Probleme

Das Hauptproblem sehe ich wie schon erwähnt in der Stromaufnahme. Ich habe das mit meinem Servo an meinem Notebook ausprobiert, ich bin mir nicht sicher ob das an anderen Systemen funktionieren würde. DIES KANN DEN COMPUTER ZERSTÖREN, und niemand außer demjenigen der es anschließt fühlt sich für eventuelle Schäden verantwortlich.

Ein anderes (kleineres) Problem ist die holperige Implementierung der Pulsweitenmodulation. Ich habe die Timing-Werte mittels Trial and Error ermittelt, die müssen nicht notwendigerweise für jedes Servo stimmen. Andererseits denke ich, daß Servos austauschbar sein sollten. Allerdings ist dies mein erstes und bislang einziges Servo, darüber kann ich also nicht viel sagen.

Danke!

Ich danke Objective Development für die Möglichkeit, den Treiber für mein Projekt zu benutzen. Ohne den Treiber würde dieses Projekt nicht existieren.

Lizenz

Meine Arbeit, also alles außer dem USB-Treiber, fällt unter die GNU General Public License (GPL). Eine Kopie der GPL liegt dem Projekt bei. Der USB-Treiber untersteht einer gesonderten Lizenz von Objective Development. In firmware/usbdrv/License.txt befinden sich weitere Informationen dazu.

Download