Zur Druckansicht wechseln Visit the English version of this page

www.jb-electronics.de » Elektronik » Digitaltechnik » Elektronische Kerze

Elektronische Kerze

Überall sind sie zu sehen, diese elektronischen Kerzen, aber nur sehr wenige arbeiten zufriedenstellend. Denn bei den elektronischen Kerzen gibt es tendenziell zwei Probleme:

Gerade beim zweiten Punkt schwächeln viele kommerziell erhältliche Kerzen, da sie einfach nur ein festes Programm abspulen. Das sollte hier anders gelöst werden. Aber wie? Durch einen Zufallsgenerator.

Echter Zufall im Mikrocontroller?

Zu diesem Thema gibt es ganze Bücher, daher werde ich hier die grundsätzliche Problematik auch nur anreißen können.

Mikrocontroller sind deterministische Bauteile, das bedeutet, dass es zu jeder Zeit möglich ist, den kompletten Zustand des Systems zu kennen. Das bedeutet aber auch, dass ein echter Zufall niemals intern im Controller erzeugt werden kann.

Eine Möglichkeit ist es, ein fertiges Array von vorher extern und echt erzeugten Zufallszahlen abzuspeichern, und dieses dann durchzugehen. Eine etwas elegantere Methode dieser Art (mit einer Periodendauer von mehreren Millionen) kann durch einen linear kongruenten Generator (englisch: LCG) realisiert werden.

Doch diesen Weg wollte ich hier nicht gehen, da es nicht immer sehr leicht ist, die entsprechenden Parameter des linear kongruenten Generators so zu wählen, dass wirklich gute Zufallszahlen herauskommen (also Zahlen mit einer hohen Periodendauer, d.h. sie wiederholen sich erst sehr spät).

Wo wir gerade dabei sind: Der elektronische Würfel oder der Lottozahlengenerator erzeugen ja auch quasi-zufällige Zahlen. Warum funktioniert das dort? Ganz einfach: es gibt einen externen Parameter, nämlich das Drücken einer Taste durch den Anwender. Wenn die Schaltung sehr sehr schnell durchzählt, weiß sie selber ja, wo sie gerade steht, aber nicht der Anwender. Wenn nun die Taste gedrückt wird, hört die Schaltung einfach auf, weiterzuzählen. Somit sind die Zahlen für die Schaltung natürlich nicht zufällig, wohl aber für den unwissenden weil zu langsamen Anwender.

Doch das funktioniert bei einer Schaltung, die automatisch in regelmäßigen Abständen Zufallszahlen erzeugen soll, natürlich nicht, denn Mikrocontroller arbeiten auf den Takt genau. Was also tun?

Echter Zufall aus dem ADC-Signalrauschen

Die Lösung ist die folgende: Viele Mikrocontroller haben Analog-Digital-Wandler (ADCs) eingebaut. Wenn deren Eingänge an nichts angeschlossen sind - sozusagen in der Luft hängen - rauschen die niederwertigen Bits (die Least Significant Bits, LSBs) recht stark. Das können wir nun nutzen, um echten Zufall zu erhalten, indem wir einfach n-mal ein solches LSB auslesen und auf die Bits unserer Zufallszahl verteilen.

Dieses Rauschen ist in den allermeisten Fällen wirklich rein stochastisch und somit ein echter Glücksgriff, was den Zufall angeht. Aufpassen sollte mensch aber bei Schaltungen, die ihrerseits Störsignale erzeugen, wie sie etwa bei Schaltnetzteilen auftreten. In diesem Falle wäre das Rauschen mit dem Status Quo der Schaltung korreliert, und somit wäre auch unser schöner echter Zufall dahin. Zudem ist diese Art von Zufallszahlenerzeugung alles andere als störsicher, da sich das Verhalten der Zufallswerte stark durch Störfelder manipulieren lässt.

In unserem Fall (wir benutzen für unsere LED-Kerze ja nur Gleichspannung aus Batterien) ist das aber vollkommen unkritisch. Wenn wir also eine Zufallszahl zwischen 0 und 255 erzeugen wollten, nähmen wir also acht mal hintereinander das LSB vom ADC und setzten das entsprechende Bit.

Software

Der hier verwendete PIC ist der PIC16F716, weil er vier ADCs besitzt. Somit werden hintereinander alle vier ADC-Kanäle ausgelesen und deren LSB verwendet, um eine 4-Bit-Zufallszahl zu erzeugen, was uns hier an Auflösung durchaus reicht. Es wird alle x Takte eine neue solche Zufallszahl generiert (beziehungsweise werden mehrere überlagert und davon der Mittelwert gebildet, um wenn gewünscht schwächere Helligkeitsschwankungen zu erzeugen), und dann der Helligkeitswert der LEDs mit variabler Geschwindigkeit v angepasst.

Durch Variation dieser Parameter lassen sich verschiedene Kerzen-Stile erzeugen; im Quellcode sind zehn solcher Stile einprogrammiert, die über einen Codierschalter ausgewählt werden können. Auf PORTB sind wieder die internen Pullups eingeschaltet, sodass der Codierschalter direkt gegen GND schalten kann.

Für alle Interessierten gibt es hier den C-Quellcode und das fertig kompilierte HEX-File: Elektronische_Kerze.zip (3 KB)

Schaltplan

Hier ist nun der Schaltplan der elektronischen Kerze zu sehen:

Der Schaltplan der Kerze

Hier ist der Schaltplan in höherer Auflösung zu finden.

Betrieben wird sie mit drei AAA-Batterien; es können auch problemlos AA-Batterien verwendet werden, Hauptsache, die Versorgungsspannung liegt im Bereich von 3...5V.

Bilder

Zum Schluss noch ein paar Bilder des Aufbaus; ich verwendete eine orange und eine gelbe LED, um das Flammenbild etwas realistischer zu gestalten.

Die fertige elektronische Kerze

Der Sockel stammt übrigens vom Ständer einer preiswerten Klobürste, das sieht mensch ihm so gar nicht an. Hier ist das Innenleben zu sehen:

Die fertige elektronische Kerze

Die Batterien und auch die Platine wurden mit Spiegelband am Metall befestigt.

Die Schaltung ist wirklich sehr kompakt aufgebaut:

Die fertige elektronische Kerze

Nun wird einfach eine ausgehöhlte echte Kerze auf den Sockel gestellt:

Die fertige elektronische Kerze

Im Dunkeln sieht die Kerze so aus:

Die fertige elektronische Kerze

Die LEDs arbeiten die Kontur des Wachses sehr schön heraus, nur mit der Leuchtkraft einer echten Kerze kann diese elektronische Variante leider nicht mithalten.

Fazit

Und wieder gibt es eine elektronische Kerze mehr auf der Welt - ob sie nun wirklich besser ist, als kommerziell erhältliche, kann ich so genau nicht sagen, da das ja ein sehr subjektiver Eindruck ist. So oder so stellt sie jedoch einen interessanten alternativen Ansatz dar.

Nach oben

show print layout Die deutsche Version der Seite besuchen

www.jb-electronics.de » Electronics » Digital Technology » Electronic Candle

Electronic Candle

My apologies...

There is no English translation of this page available yet. It will take some more time for me to translate the whole website.

If you have a particular interest in this page getting translated as fast as possible, please contact me; I will see what I can do. Please click here for the German version.

To the top