Eieruhr

Eine Eieruhr, einstellbar von 1 bis 59 Minuten – also geeignet für kleine Wachteleier bis zum ausgewachsenen Straussenei. Die Uhr ist wirklich im Einsatz, allerdings nur für Hühnereier, Tee oder sonstige Bruzzel-Zeit-Aufgaben in der Küche.
Die Platine ist direkt auf einen Batteriehalter montiert. Energie bezieht die Uhr aus zwei Akkus, die ich bis jetzt noch nicht aufladen musste (8 Monate Betrieb). Vermutlich ist die Selbstentladung der Akkus höher als der Energieverbrauch der Uhr im Standby...
Handbuch (pdf, 17kb)
Uhr "Neptun"
mit 6 Nixie-Röhren

Schon recht lange eine Baustelle:
Meine Uhr "Neptun" mit 6 Nixie-Röhren.
Elektronik und Software sind soweit fertig. Was noch fehlt, ist das Gehäuse.
Die Uhr bekommt ihre Zeit über ein DCF77-Modul. Falls kein Zeitsignal empfangen werden kann, läuft die Uhr auf Quarz.
Betrieben wird die Uhr an einem 9V Stecker-Schaltnetzteil.
Die Hochspannung für die Röhren wird intern von einem eigenen Aufwärtswandler erzeugt.
Die Glaselemente des Gehäuses und die selbstgebauten Röhrenfassungen werden durch türkisfarbene LEDs beleuchtet.
eBook
Ein elektronisches Buch

Eigentlich nur der Anlass,
einer Vakuum-Fluoreszenz-Anzeige, die für den Firmenmüll bestimmt war, wieder eine Daseinsberechtigung zu geben:
Die Bibel als elektronisches Buch. Eher gedacht als Kunst- oder Designobjekt denn zum Stöbern.
Das Buch selbst ist auf rustikalen EPROMs gespeichert, durch deren Quarzfenster man Blick auf die Silizium-Chips hat. Wer will da noch neumodisches Zeugs wie SD-Karten!
Uhr "Lumigon"
im Baumann-Design

Meine erste Uhr, schon lange fertig (aber keine Bilder und so...)
Ungewöhnlich an dieser Uhr – abgekupfert von der Baumann-Uhr im Düsseldorfer Rheinturm – sind sowohl die Art der Anzeige als auch ihre Proportionen: Meine Version ist 8cm breit und 80cm hoch. Damit findet sie Platz in jeder Zimmerecke und ist damit vom dem ganzen Raum aus optimal zu sehen.
Konzept
·
Schaltplan
·
Wecker
Uhr "Galois"
Die erste und einzige meiner Uhren, von der es mehr als ein Exemplar gibt und die ein richtiges Handbuch (pdf, 420kB) hat.
Auch diese Uhr gleicht ihre Zeit mit dem DCF77-Zeitsignal ab und läuft auf Quarz, wenn ein Zeitabgleich fehlschlägt.
Die Helligkeit der Anzeige wird der Umgebungshelligkeit nachgeführt, um in allen Beleuchtungssituationen eine sowohl gut ablesbare als auch blendfreie Anzeige zu realisieren. Die Helligkeitsmessung geschieht unauffällig, indem einige LEDs als Photodioden benutzt werden. Dies minimiert den zusätzlichen Schaltungsaufwand auf Null und misst dennoch die Helligkeit dort, wo es interessiert: an der Front.
Softwaretechnisch ist das Messen etwas knifflig, weil die Messung auch geschehen soll, während die als Photodioden auserkürten LEDs leuchten...
C-Meter
Ein Kapazitäts-Messgerät mit einem Messbereich von ca 5pF bis 12µF.
Der Kondensator wird auf eine bekannte Spannung aufgeladen und danach über einen bekannten Widerstand entladen. Dabei wird die Zeit gemessen, bis die Spannung am Kondensator einen vorgegebenen Schwellwert unterschreitet.
Zum Aufladen wird Port P+ auf HIGH gelegt und über den Widerstand R1,
welcher der Strombegrenzung dient, der Kondensator C aufgeladen. Nach Beendigung des Ladevorganges wird P+ als hochohmiger Komparator-Eingang betrieben, und der Kondensator entlädt sich über den Widerstand R2.
Weil der Eingang P+ hochohmig ist, stört der Widerstand R1 die Messung nicht.
Die Spannung an Port P- ist wegen R3 = R4 gleich VCC/2.
Für die Ladespannung am Kondensator gilt – hinreichend lange Ladezeit vorausgegetzt
Ausgehend von diesem Wert wird die fallende Spannung an P+ mit Hilfe des Komparators gegen die Spannung an Port P- verglichen.
Zum Zeitpunkt t= der Spannungsgleichheit gilt also
woraus sich die Kapazität ergibt zu
Die Konstante im Nenner der rechten Seite ist schaltungsabhängig und wird fest ins Programm eingetragen.
Die Schaltung wird gesteuert von einem mit 8 MHz getakteten AT90S2313, im Prinzip-Schaltplan rechts als Komparator angedeutet. Die Zeitmessung erfolgt über den Analog-Komparator des µ-Controllers, dessen Ausgang mit dem Eingang der Capture-Compare-Einheit von Timer1 verbunden wird. Dadurch ist eine genaue Zeitmessung mit einer Auflösung von 125 ns möglich. Mit einem Entladewiderstand von 1MΩ ergibt sich eine Auflösung von 18 Einheiten pro pF.
Anzeigeeinheit ist eine Vakuum-Fluoreszenz-Anzeige (die gleiche, die auch auf das eBook aufgesteckt werden kann). Diese wird während der eigentlichen Messung ausgeschaltet, damit sie die Messung nicht durch die von ihr verursachen Störungen verfälscht.
Um den Messbereich auf die Größe von über 6 Dekaden zu bekommen, können drei unterschiedliche Entladewiderstände zugeschaltet werden: 1MΩ, 47kΩ oder 1.5kΩ. Das Zuschalten geschieht über Reed-Relais. Tritt bei der Zeitmessung ein Überlauf auf, dann wird automatisch ein kleinerer Widerstand gewählt und nach Wiederaufladung des Kondensators ein neuer Messvorgang gestartet.
Feldeffekt-Transistoren sind wegen ihrer parasitären Kapazitäten ungeeignet als Schalter. Bipolare Transiatoren sind wegen des Spannungsabfalls auf ihrer Kollektor-Emitter-Strecke ebenfalls nicht dafür geeignet.
Hochspannungs-Netzteil
für Nixie-Röhren

Ein Netzteil, um die Röhren meiner Nixie-Uhr mit einer Hochspannung von 140V bis
180V zu versorgen. Die Spannung kann extern eingestellt werden. Das Netzteil arbeitet an einer 9V-Niederspannungs-Versorgung.
Das Hochspannungsnetzteil ist zwar Bestandteil der "Neptun", aber trotzdem ein eigenständiges Projekt.
PWM-Spannungssteller
für Ohm'sche Last

Für die Heizung der Kathode einer D7-16 wird eine Spannung von 6.3 Volt benötigt. Die verwendete Spannungsquelle ist nicht geregelt, liefert also eine Spannung, die über 6.3 Volt liegen kann. Die Röhren soll jedoch weder unter- noch überheizt werden, damit sie keinen Schaden nimmt und sie möglichst lange lebt.
Der PWM-Effektivspannungssteller ist in die Röhrenfassung integriert und erledigt die Aufgabe mit minimaler Verlustleistung. Zudem ermöglicht er ein langsames Anheizen der Röhre.
Happen von C-Code
C-Routinen, die immer wieder nützlich sind.
Die Schnippsel finden zwar Einsatz auf Mikrocontrollern der AVR-Familie, aber die wesentlichen Teile sind hardware-unabhängig formuliert und ISO-C99 oder GNU-C konform.
Die Quellen sind in mehreren meiner Projekte im Einsatz. Für die grundlegenden Aufgaben haben sich über die Zeit Quellen herauskristallisiert, die einen gewissen Grad an Allgemeingültigkeit erlangt haben und die ich nicht mehr zur konkreten Verwendung anpassen muss. Daher stelle ich sie auf diese Seite, weil vielleicht noch andere etwas damit anfangen können oder in ihnen Anregungen finden.
Lösungen der vorgestellten Aufgaben wirst du auch an anderen Stellen im Internet finden. Meine Ansätze enthalten weder revolutionär Neues oder spektakuläre Tricks. Bei der Programmierung habe ich allerdings auf ein paar Punkte geachtet, die sich teilweise anscheinend widersprechen:
- Allgemeingültigkeit
-
Auf Quellebene: Die verwendeten Verfahren sollen in unterschiedlichen Projekten und unterschiedlichen µ-Controllern einsetzbar sein. So arbeitet der Countdown-Zähler mit unveränderter Quelle in verschiedenen Projekten, obwohl die Zähl-Slots erst im Projekt selbst definiert werden, oder der Dreh-Impulsgeber codiert für wählbare I/O-Ports wo er angeschlossen werden kann.
Auf Ausführungsebene: Die Programmteile sollen die Gesamtanwendung möglichst wenig beeinflussen. Warteschleifen sind zum Beispiel Tabu, weil diese je nach Umfeld, in dem diese später zum Einsatz kommen, andere Anwendungsteile lahmlegen oder zu Fehlfunktionen führen könnten. Ein RC5-Decoder, der in nach dem Prinzip "Auf RC5-Kommando warten und dann auswerten" arbeitet, ist als Standalone vielleicht ganz nett, aber diese Implementierung würde das Abarbeiten anderer Aufgaben behindern.
- Effizienz
-
Für ein konkretes Projekt ist es egal, ob der verfügbare Speicher zu 99% belegt wird oder nur zu 10%. Für ein projektübergreifendes Teilmodul ist dies aber anders, denn zur Zeit der Implementierung weiß man noch nicht, wo es letztendlich eingesetzt werden wird und wie viel Splatz dann noch übrig ist. Bei der Programmierung sollte man also auch auf die Effizienz – das heißt Verbrauch an Programmspeicher, Datenspeicher, Laufzeit und Verwendung von Hardware – achten und resourcenschonend implementieren; insbesondere dann, wenn die Software auf einem System mit sehr begrenzten Resourcen wie einem kleinen µ-Controller zum Einsatz kommen soll.
Diese Forderung steht offenbar im Kontrast zur Allgemeingültigkeit, und daher gibt es bei letzterer auch ein paar Abstriche. So sind viele Variablen als 8-Bit-Werte angelegt, weil meine bevorzugte Zielhardware AVR eine 8-Bit-Maschine ist. Der Code wird zwar auch für einen 32-Bit'ter übersetzen und dort laufen, aber 8-Bit-Zugriffe sind dort in der Regel nicht optimal.
Module wie zum Beispiel ein RC5-Decoder brauchen eine Zeitbasis, die nur hardware- und compilerabhängig beschrieben werden kann. Diese Abhängigkeiten wurden jedoch nicht in die eigentlichen Routinen eingewoben, sondern werden ausserhalb ein einem hardwareabhängigen Teil abgehandelt. Durch Anpassen dieses hardwareabhängigen Teils kann man also einfach auf andere AVR-Derivate oder gänzlich verschiedene Controller portieren wie PIC, 8051, Z80, MSP430, XC16x, ...
- Bibliothek oder Quellarchiv?
-
Üblicherweise werden Programmteile, die in unterschiedlichem Zusammenhang wiederverwendet werden sollen, in Bibliotheken verfügbar gemacht. Diese Bibliotheken mussen dann nur noch zu der Anwendung hinzugebunden, jedoch nicht mehr übersetzt (compiliert) werden. Dadurch sind Bibliotheken einfach verwendbar. Allerdings muss eine Bibliothek für einen bestimmten Controller/Prozessor erzeugt werden, und der Programmcode der in die Bibliothen enthaltenen Funktionen und Prozeduren ist bis auf Adresszuordnungen unveränderlich.
Ein Stück Quellcode ist also wesentlich allgemeiner, weil es nicht auf einen bestimmten Prozessor zugeschnitten sein muss. Selbst wenn es Hardwareabhängigkeiten gibt, können diese aus der Quelle herausparametrisiert werden. Aus diesem Grund – und weil es sich hier immer nur um sehr kleine Prokejte handelt, die Zeit zum Compilieren der Module also nicht ins Gewicht fällt – verwende ich direkt die Quellen der Programmteile.
Dazu werden die gewünschten Code-Schnippsel zu Beginn des Build-Prozesses zu den Projekt-Quellen hinzukopiert und ganz normal übersetzt und gelinkt. Das spart nicht nur die Verwaltung von Bibliotheken für unterschiedliche Controller, sondern vereinfacht auch die Handhabung, da der Code in Quellform noch (zB durch Includes wie avr/io.h oder Defines wie F_CPU) veränderbar und parametrisierbar ist. Zudem kann ein Compiler, da er mehr Kenntnisse hat, besseren Code erzeugen.
- Taster abfragen
Einen Taster abzufragen und zu entprellen gehört zu den Standardaufgaben. Für jeden angeschlossenen Taster kann ein eigener Betriebsmodus gewählt werden: jeder Taster liefert einfach einen Tastendruck, oder kann wahlweise unterscheiden zwischen kurzem/langem Tastendruck oder eine Auto-Repeate-Funktion haben.
- RC5-Decoder
Eine RC5-Decoder-Routine, um mit einer handelsüblichen Infrarot-Fernbedienung Kommandos an einen Mikrocontroller zu schicken. Billiger und platzsparender als Taster, allerdings etwas komplizierter in der Umsetzung.
- Dreh-Impulsgeber
Auswertung eines Dreh-Impulsgebers.
- Countdown
Ein Countdown-Zähler in C. Simpel, aber universell und weitreichend. Er erlaubt es, ein Programm *ohne* Warteschleifen aufzubauen! Überleg Dir einfach, wie Du ein Programm schreiben würdest, daß eine LED im Sekundenkakt blinkt und eine zweite im Takt von 1.1 Sekunden...
Im Header werden die Countdown-Zähler, die man gerne hätte, lediglich in eine Struktur eingetragen. In der Struktur gibt es einen Bereich, dessen Einträge alle 10 Millisekunen (1/100 Sekunde) verringert werden, einen Bereich für die Sekunden und einen für Minuten. Die C-Quelle bleibt immer gleich und braucht nicht darauf angepasst zu weden.
- FIFO: Warteschlange
-
Eine FIFO-Implementierung, also eine Warteschlange für Bytes.
- DCF77-Decoder
-
Auswertung des DCF77-Zeitsignals, das Funkuhren zum Zeitabgleich verwenden.
JavaScript-Rechner

Für kleinere Rechenaufgaben bietet sich JavaScript an. Man braucht dann keine komplexe Programmierumgebung verfügbar zu haben und man kann von überall auf die Programme zugreifen. Alles was man braucht ist ein Internet-Zugang und ein Browser.
Den Code kannst du anzeigen mit "rechter Maustatze → Quelltext anzeigen", oder du kannst den Code abspeichern, deinen Erfordernissen anpassen und dann verwenden.
- AVR-UART-Rechner
-
Ein Rechner, um den Wert für das Baudraten-Register der USART-Einheit eines AVR zu berechnen. Vor allem dann praktisch, wenn die bei der Berechnung auftretenden Quotienten nicht aufgehen und die beste Rundung gefragt ist.
- Linearregler trimmen
-
Berechnet die Trimmwiderstände an einem Linearregler wie LM317, VB408, etc.
- Spannungsteiler mit E-Werten aus Normreihe
-
Berechnet die Widerstände für einen Spannungsteiler. Dabei werden die besten Werte berechnet, die mit Widerständen aus der Standard E12- bzw. E24-Normreihe möglich sind.
- Widerstandsberechnung für HV-Netzteil
-
Ein Rechner zum Bestimmen der Abgleich-Widerstände im HV-Netzteil meiner Nixie-Uhr.
- Rechnung aufdröseln
-
Teilt bei einer Rechnung die Kosten auf. Fixkosten (zB Porto, Fräskosten bei Leiterplattenherstellung) werden pro Teil umgeschlagen während die Restkosten anteilig berechnet werden (zB nach Platinenfläche, Wert, ...).
- Sonderzeichen von/nach HTML konvertieren
-
Nix großartiges, einfach Sonderzeichen, wie sie zum Beispiel in C-Quellen auftauchen, in HTML-Codes übersetzen.
- Text-Mixer
-
Wedern in eienm Txet die Butecbahsn der enizlneen Wtroe so ducrhenaendirgrwüeflet, daß die esretn und lzetten Btuaehcbsn jeeliws an iehrm Ptalz blbeien, dnan beiblt der Txet tredtozm rhcet gut lasebr.
Gnurd dfaür ist, daß wir ein Wrot nhict als Fgloe von Btuhabcsen eerenknn, sdrenon als Eieinht wie bei eienm Blid.
- Approximation durch kubische Bézierkurven und quadratische Bézierkurven.
-
Bézierkurven werden in vielem Graphikprogrammen verwendet, um gekrümmte Kuven darzustellen — so auch in SVG.
Dieses kleine Tool berechnet anhand der Funktionsgleichung eine Näherung der Funktion durch Bézierkurven.
Die kubischen Béziers sind momentan besser ausgebaut als die quadratischen.
- Der kleine Online-Rechner für SVG-Transformationen
-
Mit diesem Rechner können Transformationen für SVG-Dateien umgestellt oder in elementare Transformationen zerlegt werden.
- Newton-Verfahren
-
Newton quick and dirty:
Das Newton-Verfahren zum Annähern einer Nullstelle für eine
reellwertige, gutmütige Funktion in einer Unbekannten.
Messerhalter
im Fledermaus-Design
Messerhalter
mit superstarken Magneten im Fledermaus-Design. Die Messer hängen an der Spitze und baumeln. Platzsparend und praktisch.
Alu-Schiene ablängen, Bohrungen für spätere Montage vorsehen. In die Schiene die Magnete kleben. Ich habe flache Magnete verwendet, deren Pole an den grossen Aussenflächen sind. Durch Stapeln der Magnete kann man die Magnetkraft dem Gewicht des Messers anpassen. Für die Messer am Halter steigt die Magnetkraft von rechts (3 Magnete) nach links (5 Magnete).
Eine anfangs angedachte Markierung, wo innerhalb der Schiene die Magnete sind, wird nicht gebraucht. Beim Aufhängen findet das Messer von selbst seinen Platz.
Warnung! Superstarke Magnete sind kein Spielzeug für Kinder. Die Magnete haften mit grosser Kraft aneinander. Fliegen sie unkontrolliert aufeinander zu, gibt es schnell Quetschungen, oder die spröden Magnete zersplittern.
Komplexe Zahlen
Komplexe Zahlen: Wer immer schon mal wissen wollte, was das ist und wozu die alles
gut sind, findet bestimmt Gefallen an folgendem Dokument – ursprünglich
ein Brief an einen Freund. Mit Erklärungen, Veranschaulichungen, Skizzen, Grafiken und Bildern.
Von Algebraischen Gleichungen bis Funktionen- und Chaostheorie, von Impedanz in elektrischen Schaltkreisen bis zur Statistischen Mechanik, von Relativitätstheorie bis zur Quantentheorie: überall sind komplexe Zahlen zu finden; und wenn man einen guten Tutor hat, auch im Mathematikunterricht der gymnasialen Oberstufe...
Komplexe Zahlen (pdf, 22 Seiten, 780kB)
Von Punkt zu Punkt
Wie findet man eine möglichst ansprechende Linie, die die Punkte eines Punkt-zu-Punkt-Bildes verbindet?
Dazu wird ein Verfahren dargestellt, das die Anzahl der nicht-verschwindenden Koeffizienten der diskreten Fourier-Transformierten minimiert, ohne die approximierende Eigenschaft allzu sehr zu verschlechtern. Die Fourier-Transformierte wird erstellt für eine Interpolation der Punkte durch zyklische, kubische Splines.
Zudem gibt es ein kleines C-Projekt (zip, 192kB), mit dem solche Kurven berechnet werden können.
Von Punkt zu Punkt (pdf, 7 Seiten, 135kB)
Internet-Version des Artikels