Das Modul

Das Modul

Ja, der Name klingt viel zu großspurig für eine kleine Bastelei wie diese. Aber was besseres fiel mir nicht ein.

Es handelt sich um eine kleine Schaltung für den Einsatz auf einem Steckbrett. Mikrocontroller-Schaltungen laufen meistens mit 5V, billige Steckernetzteile weigern sich aber diese Spannung zu liefern. Also beginnt der Aufbau einer Schaltung auf einem Steckbrett in der Regel mit dem Zusammenstecken der Spannungsversorgung.

Spätestens nach dem dritten Mal ist das langweilig, deshalb habe ich mir das so zusammengebaut dass es ‚en bloc‘ zu verwenden ist. Im Nachhinein denke ich, dass eine Diode zum Verpolungsschutz nicht schlecht gewesen wäre. Die Herausforderung für den ambitionierten Nachbauer besteht also darin, die passende Stelle dafür zu finden… ;-)

Die Beschriftung habe ich übrigens mit Eagle zusammengebastelt, obwohl die eigentlich absolut unabhängig von der Schaltung ist. Wer sie haben möchte: ich stelle sie hier mit zum Download.

Plagiarismus?

Der Schaltplan

Der Schaltplan

Ich wollte das eigentlich nicht veröffentlichen. Nachdem ich aber im Make-Magazin einen Link auf ein ähnliches Projekt bei Instructables gesehen habe, und einen Link auf die Bauanleitung bei SparkFun, habe ich es doch gemacht.

Ich kann nur sagen: mein Aufbau ist zumindest älter als der Instructables-Beitrag. :-)

Wahrscheinlich ist die Idee einfach nur so naheliegend dass da jeder von alleine drauf kommt.

Download

Siehe auch…

  • SparkFun – detaillierte Beschreibung eines ähnlichen Aufbaus
  • Instructables – Schritt-für-Schritt Beschreibung eines ähnlichen Aufbaus

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