Oder… nein, eigentlich hoffe ich dass ich sowas nicht bauen soll…
Schlagwort: elektronik
Bread-Power
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?
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
- 071018_breadpower.tar.gz – Schaltplan und Beschriftung, 65kB
Siehe auch…
- SparkFun – detaillierte Beschreibung eines ähnlichen Aufbaus
- Instructables – Schritt-für-Schritt Beschreibung eines ähnlichen Aufbaus
ISP-Adapter für das Steckbrett
Dieser Text war 2007 noch nicht im Blog, den habe ich 2015 aus dem alten CMS übernommen.
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
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
- adapter.ps.gz – Die Beschriftung zum Ausdrucken, 11.2kB
Binary DCF-77 Clock
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
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 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
- binarydcf77clock_070103.tar.gz – Schaltung, Sourcecode und Dokumentation, 671kB
USB-Servo (alias Mauszeigerzeiger)
Dieser Text war 2006 noch nicht im Blog, ich habe den 2015 aus dem alten CMS überführt.
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…
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:
1 2 3 |
usb-servo status usb-servo set <angle> usb-servo test |
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
1 |
usb-servo status |
Das gibt den Winkel aus, in dem sich das Servo gerade befindet.
1 |
Current servo angle: 42 |
Einen neuen Winkel einstellen
1 |
usb-servo set 23 |
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
1 |
usb-servo test |
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
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
- usb-servo_061028.tar.gz – Schaltung, Sourcecode und Dokumentation, 391kB