Nein, mit Fotoopa meine ich nicht mich. So weit ist es (noch) nicht! :-)

Damit meine ich den Belgier, der unter eben jenem Namen eine umfangreiche Seite zu den Themen Makro- und Hochgeschwindigkeitsfotografie ins Netz gestellt hat. Ganz besonders fasziniert mich die Beschreibung seines selbst konstruierten Apparates zum Fotografieren von Insekten. Im Prinzip ist das was ganz ähnliches wie mein Hochgeschwindigkeits-Fotoblitzauslöser, allerdings um Größenordnungen komplexer und vielseitiger.

Das, und die Tatsache dass ich regelmäßig Anfragen nach Bauanleitungen zu meinem Selbstbau bekomme inspiriert mich jetzt zur Planung einer zweiten Version meines Gerätes. Durch die in Zwischenzeit erworbenen Kenntnisse im Bereich der Mikrocontroller wird das Ding dann natürlich auf einem solchen basieren. Allerdings wird es wohl bei weitem nicht so komplex werden wie die Konstruktion des Fotoopas.

Schade auch, dass ich auf mechanischem Gebiet noch mehr Laie bin als auf elektronischem. Ein zusätzlicher mechanischer Verschluss an der Kamera dürfte die Aufnahme an sich deutlich vereinfachen. Sowas traue ich mir allerdings absolut nicht zu…

Binary DCF-77 ClockIch freue mich wieder einmal, mein letztes Projekt ins Netz gestellt zu haben: die Binary DCF-77 Clock (die Seite gibt es auch auf englisch).

Die Uhr empfängt die aktuelle Uhrzeit per Funk aus Braunschweig, dargestellt wird auf einem Raster von vier mal acht LEDs in binärer Form. Dabei verfügt die Uhr über sieben Anzeigemodi: Einmal ‚richtig‘ binär, zwei verschieden Varianten in BCD-Form (Binary Coded Digits). Diese drei Modi jeweils einmal für die Zeit und einmal für das Datum. Und als Sahnehäubchen wird im siebten Modus ein 32-Bit Unix Timestamp dargestellt. :-)

Der Bau und die Programmierung haben wieder mal Spaß gemacht. Ich habe auch wieder eine Menge dabei gelernt was mir für die Konstruktion des fast schon mythischen ultimativen Weckers hilfreich sein wird. Unter anderem die Benutzung eines Oszilloskopes (Dank an Lucas für die Leihgabe!) und die Kommunikation per I2C-Bus (Dank an Michael Meier für die Vorlage).

Als nächstes wird dann wohl mein Fnordlicht fernbedienbar gemacht…

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

MauszeigerzeigerMein letztes Mikrocontroller-Projekt ist gerade online gegangen: Das USB-Servo!

Im Prinzip kann man alles mögliche damit bauen, eigentlich hatte ich auch etwas anderes damit vor. Die Anwendung als Mauszeigerzeiger erschien mir aber schwachsinniger als die ursprüngliche Idee, daher habe ich das vorgezogen und als Beispielanwendung dazugepackt. :-)

Bei dem Projekt handelt es sich um eine kleine Schaltung mit der ein handelsübliches Servo wie es in ferngesteuerten Modellautos oder Flugzeugen benutzt wird am USB-Port angeschlossen und darüber gesteuert werden kann. Die Kontrolle — sowohl ueber das Servo als auch über die Kommunikation — übernimmt ähnlich wie bei meinem USB-LED-Fader ein ATmega8 mit dem USB-Treiber von Objective Development.

Das nächste Projekt ist schon in der Mache, wenn es fertig ist werde ich das natürlich auch hier veröffentlichen. Ich will noch nichts verraten, nur soviel: es ist noch sinnloser als der Mauszeigerzeiger… :-D

Bis gerade eben dachte ich, daß fliegende Teppiche nur in Geschichten aus 1001 Nacht vorkommen. Bei den Recherchen für mein nächstes Mikrocontroller-Projekt (eines habe ich schon wieder fertig, das muß nur noch etwas dokumentiert werden) bin ich aber auf eine ziemlich detaillierte Bedienungsanleitung gestoßen:

5.7 Miscellaneous Simulation Devices
Magic Carpet Simulation Device

CA — Allows a device to be generally classified as one that uses the standard control of a magic carpet. This control is a bar, grasped by both hands, that controls the Yaw, Pitch and Roll of the carpet.

The bar, at which the pilot sits, may be pushed forward or pulled back to cause the carpet to dive or rise, respectively. In the zero position, the carpet is in level flight. Pushing forward on the bar causes the carpet to nose down and generates negative values. Pulling back on the bar causes the carpet to nose up and generates positive values.

Turning the bar turns the carpet. In the zero position, the carpet travels straight ahead. Pulling back on the right side turns the carpet to the right and generates positive values. Pulling back on the left side turns the carpet to the left and generates negative values.

Rotating the bar rolls the carpet. In the zero position, the carpet travels level. Rotating the bar in a clockwise direction rolls the carpet to the right and generates positive values. Rotating the bar in the counterclockwise direction rolls the carpet to the left and generates negative values.

Nein, ich habe nicht vor einen fliegenden Teppich zu entwickeln. Aber es soll ein Eingabegerät werden, und die Spezifikation für ebensolche (HID Usage Tables) enthält sehr detaillierte Informationen über mögliche Bauformen.

Niedlich ist auch folgender Absatz:

Spaceship Simulation Device
CA — This usage definition allows a device to be generally classified as one that uses standard controls found on a spaceship.

Wer hätte gedacht, daß die Steuerung von Raumschiffen schon standardisiert ist?

Falls es tatsächlich schon sowas wie einen Teppich-Controller gibt, würde mich ein Bild interessieren… :-)

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

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

Die fertige Schaltung in Aktion.

Die fertige Schaltung in Aktion.

Der USB-LED-Fader ist ein Gerät mit dem mehrere LEDs mittels USB kontrolliert werden können. Ich habe es gebaut um den Status meiner Internet-Verbindung und den Füllstand meiner Festplatte, sowie den aktuellen Zustand meines Videorecorders (VDR) anzuzeigen. Die Anzahl der Einsatzmöglichkeiten ist praktisch unbegrenzt.

Die LEDs werden mittels Pulsweitenmodulation (PWM) gesteuert. So sind sie nicht einfach an oder aus, sondern die Helligkeit kann gesteuert werden. Und genau das ist die Hauptaufgabe des Mikrocontrollers: die Firmware verfügt über mehrere ‚Wellenformen‘, die auf den LEDs wiedergegeben werden können. So kann jede LED eine Art Sinus- oder Dreieckswelle darstellen, ohne daß der Host-Computer eingreifen muß.

Jede der LEDs kann separat eingestellt werden, jede kann ein eigenes Muster zugewiesen kriegen.

Es ist möglich, für jede LED drei ‚Wellen‘ zu definieren: zwei ‚unendliche‘ Wellen (0 & 1), und eine einmalige Welle (2). Die unendlichen Wellen wechseln sich ewig ab, wenn eine komplett angezeigt wurde wird die andere aktiv. Die einmalige Welle wird dagegen nur einmal angezeigt, nach ihrem Ablauf springt die Firmware wieder zu den unendlichen Wellen, falls diese definiert wurden.

Jede Welle wird mit drei Parametern definiert: Die Wellenform, die Dauer einer Wiederholung und die Anzahl der Wiederholungen bevor zur nächsten Welle gewechselt wird.

Die hier gezeigte Version unterstützt vier LEDs, es sollte aber nicht allzu schwer sein diese Zahl zwischen eins und acht zu variieren. Ich habe keine Tests mit mehr als vier LEDs gemacht, aber ich könnte mir vorstellen daß es dabei zu Problemen mit der Last auf dem Controller kommen könnte, das könnte die Kommunikation via USB beeinträchtigen.

Die Distribution besteht aus drei Teilen: Der Firmware für einen ATmega8 Mikrocontroller, einem Kommandozeilen­Tool das unter Linux läuft und den Plänen für die Schaltung.

Dieses Projekt basiert auf dem PowerSwitch Beispielprojekt von Objective Development. Wie dort wird auch hier der Firmware-USB-Treiber verwendet, den Objective Development für Atmels AVR-Mikrocontroller entwickelt hat.

Dieser Treiber ist eine reine Firmware-Implementierung des USB 1.1 (low speed device) Standards für den Einsatz auf billigen Ein-Chip-Systemen wie der AVR-Serie von Atmel. Er kann zum Beispiel auf einem ATtiny2313 oder sogar auf einigen noch kleineren 8-Pin-Devices eingesetzt werden. Er implementiert den Standard, soweit es für einen sinnvollen Einsatz notwendig ist. In der Datei „firmware/usbdrv/usbdrv.h“ der Distribution werden Features und Grenzen beschrieben.

Bau und Installation

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.

Die Installation wird in der beiliegenden Dokumentation beschrieben.

Benutzung

Nachdem das fertige Gerät an USB angeschlossen wurde, sollten alle LEDs kurz aufleuchten, um zu bestätigen daß alles funktioniert.

Dann kann der Kommandozeilen-Client wie folgt zum Einsatz kommen:

Mit der Set-Funktion können mehrere Wellen gleichzeitig definiert werden, indem einfach alle benötigten Parameter angegeben werden. Siehe Beispiele weiter unten.

Parameter

  • ledId: Nummer der LED (0-n, je nachdem wie viele LEDs das Gerät hat)
  • waveId: ID der Welle (0-1: ewige Wellen, 2: einmalige Welle).
  • waveformId: ID der Wellenform (0-31: konstante Helligkeit, 32-37: Muster). Die Form der Welle kann mit der show-Funktion angezeigt werden.
  • periodDuration: Zeit in zehntel Sekunden, die eine Anzeige der Wellenform dauern soll. Mit einem Wert von 0 wird die Welle gelöscht.
  • repetitionCount: Anzahl der Wiederholungen für diese Welle mit einer 0 an dieser Stelle wird die Welle für immer wiederholt.

Beispiele

Den Status aller LEDs anzeigen

Die Ausgabe sieht wie folgt aus:

Die Werte curvalue, curpos, nextupd und updtime dienen zum Debuggen. Sie sollten nur nach einem Blick in den Code von Interesse sein. Die Bedeutung der anderen Werte dürfte klar sein.

Die erste LED auf eine mittlere Helligkeit schalten

So wird die Welle 0 der LED 0 auf die Wellenform 15 (eine mittlere Helligkeit) gesetzt. Sie wird für eine Sekunde angezeigt und nach einmal wiederholt bevor zur nächsten Welle gewechselt wird. Noch ist keine zweite Welle definiert, also bleibt dieser Zustand bis auf weiteres.

Jetzt eine zweite Welle für die erste LED definieren, etwas heller als die erste

Dies ist Welle 1 auf LED 0, die Form 25 ist ebenfalls eine konstante Helligkeit. Nachdem die zweite Welle gesetzt wurde wechselt sie sich mit der ersten im Sekundentakt ab, weil beide Wellen die gleiche Länge und die gleiche Anzahl an Wiederholungen haben.

Eine dritte Welle auf die erste LED legen

Dies setzt die dritte Welle (Nummer 2) auf der ersten LED. Wellenform 36 ist eine schicke Sinus-ähnliche Form, also beginnt die LED zu faden. Eine Wiederholung dauert dabei zwei Sekunden, die Welle wird fünf mal wiederholt. Da dies die dritte Welle ist, kehrt die Schaltung nach diesen Wiederholungen wieder in die Abwechslung zwischen den beiden Helligkeiten zurück, diese Welle wird somit gelöscht.

Mehrere Wellen gleichzeitig definieren

Damit werden alle oben angegebenen Wellen gleichzeitig definiert. Die LED wird also erst fünf mal sinus-artig faden, und danach anfangen im Sekundentakt zwischen den beiden Helligkeitszuständen zu blinken.

Die erste LED löschen

Damit werden alle Wellen auf der ersten LED gelöscht.

Das Gerät zurücksetzen

Alle LEDs leuchten dabei einmal auf, um zu signalisieren daß alles funktioniert.

Eine Wellenform auf dem Bildschirm anzeigen

Die Ausgabe sieht wie folgt aus:

Dabei ist zu beachten, daß die angezeigte Breite der Länge der Wellenform entspricht. Eine einfache konstante Helligkeit (0-31) hat eine Länge von 1. Die Anzeige umfaßt also nur eine Spalte.

Das Gerät testen

Diese Funktion sendet viele zufällige Zahlen an das Gerät. Die Datenpakete werden wieder zurückgegeben und mit den Originalen verglichen, um Unterschiede zwischen den gesendeten und den empfangenen Daten festzustellen.

Schwachpunkte

Ich weiß, man kann das auch schöner anordnen... ;-)

Ich weiß, man kann das auch schöner anordnen… ;-)

Wie schon erwähnt ist die Kontrolle der Pulsweitenmodulation für mehrere LEDs eine Menge Arbeit für den kleinen Controller. Das gleiche gilt für das Sprechen des USB-Protokolls. Beides zusammen ergibt eine hohe Last auf dem Gerät, dadurch ist die Kommunikation mit dem Gerät nicht zu 100% verläßlich. Tests haben aber gezeigt, daß mehr als 99% aller Kommandos ankommen.

ACHTUNG: Man sollte diese Schaltung deshalb nicht benutzen um zum Beispiel den Zustand eines Kernreaktors zu überwachen. Solltest Du das trotz dieser Warnung vorhaben, bitte ich um kleine Nachricht… ;-)

Danke!

Ich möchte der Firma Objective Development für die Möglichkeit danken, ihren Treiber benutzen zu können. Ohne den gäbe es dieses Projekt nicht.

Und ganz besonderer Dank geht an Thomas Stegemann. Er hat das Modul für die PWM-Steuerung geschrieben, und für mich selbst wäre es nahezu unmöglich gewesen, den Rest des Projektes ohne seine Hilfe zu schreiben. C ist halt nicht meine Muttersprache… ;-)

Lizenz

Unsere 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-LED-FaderSo, es ist vollbracht! Ich habe gerade die angekündigte Seite mit dem Elektronikprojekt hochgeladen: Mein USB-LED-Fader.

Das Teil besteht aus einem Mikrocontroller (ATmega8), vier LEDs und ein paar Kleinteilen. Der Controller ist praktisch direkt an USB angeschlossen, darüber bezieht er auch seinen Saft. Auf dem Hostrechner kann unter Linux ein Kommandozeilenprogramm benutzt werden, um die LEDs zu steuern. Dabei werden die nicht nur an- oder ausgeschaltet, sondern mittels Pulsweitenmodulation zum Faden gebracht. Das Faden an sich wird, einmal aktiv, allein von dem Mikrocontroller gesteuert. Somit wird die CPU des Linux-Rechners nicht weiter strapaziert.

Ich habe das Teil gebaut um den Zustand meines Videorecorders (VDR) und meiner Internetverbindung (ISDN ohne Flatrate… :-( ) anzuzeigen. Denkbar sind alle möglichen Anwendungen, und wenn es nur als Moodlight irgendwo rumliegt.

Ich habe das Projekt ziemlich umfangreich — geradezu geschwätzig — dokumentiert und zum Download freigegeben. Somit stellt das meine erste Veröffentlichung unter der GPL dar!

An dieser Stelle nochmal Dank an Objective Development, die den USB-Treiber für AVR zur Verfügung gestellt haben. Und an Thomas Stegemann für die Pulsweitenmodulation und allgemeine Unterstützung in Bezug auf kranke Programmiersprachen (C in diesem Fall). :-)

Das war das eine Projekt, das mich die letzten Wochen in Anspruch genommen hat. Das zweite — der Neuaufbau des erwähnten Videorecorders — ist auch schon abgeschlossen, muss aber noch etwas aufbereitet werden. Kommt dann auch ins Netz. Wann ich dazu komme steht aber noch in den Sternen… ich habe schon die nächste Schaltung auf dem Steckbrett aufgebaut… ;-)