| Weitere Artikel aus dem Elo-Magazin |
Der ELO-Flasher - Ein LM3909-Ersatz
von Burkhard Kainka
Der ELO-Flasher ist ein LED-Blitzlicht mit nur einer 1,5-V-Zelle und einer Laufzeit von mehreren Jahren ohne Batteriewechsel. Diese Aufgabe wird mit einem Mikrocontroller ATtiny13 gelöst, der noch bis herunter zu einer Batteriespannung von 1 V arbeitet. Es gab mal ein Spezial-IC für diese Aufgabe: Der LM3909 war ein beliebtes IC für den Bau eines einfachen LED-Blitzers. Eine LED konnte damit etwa ein Jahr lang aus einer 1,5-V-Batterie betrieben werden. Das IC wurde für kleine Werbetafeln verwendet. Eine andere Lösung war der Ewige Blinker, eine Schaltung mit Transistoren, die inzwischen auch beim Geocachen sehr beliebt ist (siehe Labortagebuch 10/09).
Ganzen Artikel lesen...

Auf der Suche nach einem Ersatz kam die Idee auf, einen Mikrocontroller ATtiny13 zu verwenden. Das Lernpaket Mikrocontroller verspricht, dass man damit sein eigenes Spezial-IC herstellen kann. Ob das wohl für diesen Fall zutrifft? Versuche zeigen, dass der Tiny13 im Lowpower-Bertrieb bis herunter auf 1,0 V betrieben werden kann. Die Leerlauf-Stromaufnahme beträgt mit seinem internen 125-kHz-Oszillator als Watchdog im Power-Down-Modus ca. 2,5 µA. Das verspricht eine extrem lange Betriebsdauer mit nur einer Batteriezelle.
Die Schaltung kommt mit drei Anschlüssen des Controllers aus. VCC und GND liegen an der Betriebsspannung. Jeder der Portausgänge B.0 bis B.4 liefert das Ausgangssignal in Form kurzer High-Impulse mit einer Wiederholfrequenz von ca. 1 Hz. Der Reset-Eingang muss übrigens frei bleiben.
Eine rote LED benötigt eine Spannung von ca. 1,8 V, also wesentlich mehr als eine Batteriezelle liefert. Die Schaltung realisiert auf einfache Art eine Spannungsverdopplung. Im Low-Zustand der Ausgangsports wird der 100-µF-Elo auf die Batteriespannung aufgeladen. Im wenige Millisekunden kurzen High-Zustand liegt der Ausgangsport etwa auf 1,5 V, der Elko liegt wie eine zweite Batterie in Reihe, sodass eine Leerlaufspannung von 3 V entsteht. Wenn die Batteriespannung bis auf 1 V entladen ist erhält man immer noch 2-V-Impulse an der LED. Wie hell die LED leuchtet und wie lange die Batterie hält kann der Anwender in weiten Grenzen selbst festlegen. Wer Wert auf besonders lange Laufzeit legt kann den Ladewiderstand von 10 kΩ bis auf 100 kΩ erhöhen. Dann reicht auch ein kleinerer Elko von nur 10 µF.
Die internen FETs an den Ausgangsports besitzen einen Bahnwiderstand in der Größenordnung von 200 Ω bei einer Betriebsspannung von 1,5 V. Dieser Widerstand liegt praktisch in Reihe zur LED und begrenzt den LED-Strom. Wenn die Spannung weiter absinkt steigt der ON-Widerstand der FETs auf ca. 500 Ω. Wenn man einen hohen Impulsstrom erzielen will können zwei oder bis zu fünf Ports parallel geschaltet werden. Sie liefern dann einen entsprechend größeren Strom. Denkbar ist auch eine Anwendung mit mehreren LEDs unterschiedlicher Farbe, wobei jede LED einen eigenen Elko und einen eigenen Ladewiderstand erhält.
Zum Test des Stromverbrauchs wurde die Schaltung nicht über eine Batterie sondern aus einem 1000-µF-Elko betrieben, der mit einem externen Netzteil auf 1,5 V aufgeladen wurde. Der Blitzelko hatte 47 µF, der Ladewiderstand 27 kΩ. Es ergab sich eine Betriebsdauer von 20 Sekunden, bis die Spannung auf 1 V abgesunken war. Aus der Entladegeschwindigskeit kann ein mittlerer Strombedarf von 25 µA bestimmt werden, wobei der LED-Impulsstrom über 2 mA liegt. Eine Alkalizelle mit einer Kapazität von 2000 mAh wird durch den ELD-Blitzer theoretisch in neun Jahren entladen. Praktisch entspricht der Strombedarf etwa der Selbstentladung der Batterie
Vergleich mit dem LM3909
Der LM3909 war eine integrierte Schaltung mit bipolaren Transistoren. Der mittlere Strombedarf wurde für die Standard-Beschaltung mit einem 300-µF-Elko mit 0,5 mA angegeben.
Der Tiny13 dagegen ist ein kompletter Mikrocontroller in CMOS-Technik und mit unendlich vielen Transistoren, sodass man nur noch ein Blockschaltbild darstellen kann.
Man könnte meinen, dass hier mit Kanonen auf Spatzen geschossen wird. Eingebaut sind auch ein AD-Wandler, ein Zähler, ein EEPROM und vieles mehr. Der Mikrocontroller kann ja viel mehr als eine LED antreiben! Aber letzten Endes enthält der Tiny13 auch nur ein Stück Silizium, vermutlich in ähnlicher Größe wie im LM3909. Was man zusätzlich kauft ist das geballte Know-How des Herstellers, das wiederum auf die gesamte Auflage umgerechnet wird. Weil ein Mikrocontroller für so viele unterschiedliche Aufgaben eingesetzt werden kann verkauft Atmel sehr viele davon und kann einen geringen Preis festlegen. Deshalb geht die Tendenz immer weiter in diese Richtung: Man setzt einen universellen Mikrocontroller auch für eine sehr einfache Aufgabe ein und spart dabei eigene Entwicklungszeit.
Der Tiny13 ist laut Datenblatt ab 1,8 V einsetzbar. Es gibt die V-Version, die speziell für kleine Spannung getestet ist. Tatsächlich kommen die V-Typen und die anderen Controller vom gleichen Waver und werden nur unterschiedlich getestet, der eine auf kleine Spannung, der andere auf höchste Taktfrequenz. Mit hoher Wahrscheinlichkeit können aber alle Versionen beides, unabhängig davon ob ein V drauf gedruckt ist oder nicht. Atmel führt die Tests einfach nach der aktuellen Bedarfssituaton aus. Und dabei wird alles bis ins kleinste geprüft, z.B. auch ob der AD-Wandler bei 1,8 V noch seine spezifizierte Genauigkeit erreicht. Hier wird der Controller deutlich unterhalb der spezifizierten Spannung eingesetzt. Dann kann man natürlich nicht mehr garantieren dass auch das EEPROM und der AD-Wandler noch richtig arbeiten. Aber die benötigten einfachen Funktionen wie Taktgenerator und Ports arbeiten einwandfrei. Tests mit vielen Controllern haben gezeigt, dass alle bis etwa 1 V noch arbeiten.
Programmierung
Die Firmware des ELO-Flasher wurde mit Bascom entwickelt. Die wesentlichen Grundlagen der Low-Power-Anwendung unter Verwendung des Watchdog wurde bereits in ELO vorgestellt.
'ELO-Flasher 9,6 MHz / 8
$regfile = "attiny13.dat"
$crystal = 1200000
'Watchdog Reset nach ca. 1 s
Config Watchdog = 1024
Start Watchdog
Ddrb = 255
Portb = 255
Waitms 10
Portb = 0
Powerdown
End
Download: Quelltext und HEX-File
Das Hexfile kann z.B. mit dem STK500 in den Tiny13 gebrannt werden. Aber auch jeder Besitzer eines Lernpakets Mikrocontroller kann seinen eigenen ELO-Flasher brennen. Verwenden Sie dazu das Programm LPmikroISP.exe und flashen Sie das Programm EloFlasher2.hex in den fabrikneuen Controller. Vermeiden Sie auf jeden Fall die Fuses zu verändern! Das Problem ist die vorgegebene Verwendung des Brownout-Detektors bei 2,7 V. Der Chip kann dann nicht mehr mit kleiner Spannung arbeiten. In der Werkseinstellung ist der Watchdog dagegen deaktiviert.
ELO-Flasher 2 - noch sparamer
Wenn es auf höchste Sparsamkeit ankommt, lässt sich noch etwas optimieren. Dafür benötigt man allerdings einen universellen Programmer wie z.B. das STK500. Die Default-Einstellungen der Fuses nach dem Kauf eines fabrikneuen Tiny13 lauten: Kein Brown-Out (gut!), 9,8 MHz Takt mit Vorteiler durch 8 (geht so) und eine Startup-Time von 14 Ck + 64 ms (nicht so gut). Der Controller arbeitet mit unnötig hohem Takt und verschwendet 64 ms Rechenzeit, während der Controller eigentlich nur während der Impulszeit für wenige Millisekunden aktiv arbeiten müsste. Für diese Anwendung müssen die Fuses passend eingestellt werden:
Das Programm ELOflasher2 verwendet andere Einstellungen der Fuses mit einer effektiven Taktrate von nur 600 kHz, die kleinste Startup-Time, die halbe Blitzfrequenz von ca. 0,5 Hz und zusätzlich verkürzte Blitzimpulse von nur 5 ms Länge. In dieser Form wird der Chip programmiert und im ELO-Shop angeboten.
'ELO-Flasher-2, 4,8 MHz / 8
$regfile = "attiny13.dat"
$crystal = 600000
'Watchdog Reset nach ca. 2 s
Config Watchdog = 2048
Start Watchdog
Ddrb = 255
Portb = 255
Waitms 5
Portb = 0
Powerdown
End
Download: ELO-Flasher 2
In dieser Version läuft der ELO-Flasher unter gleichen Testbedingungen an einem 1000-µF-Elko länger als eine Minute, also dreimal länger als in der Version 1. Ohne Selbstentladung könnte er also ca. 30 Jahre mit nur einer Batterie arbeiten! Damit bietet sich auch ein sinnvoller Einsatz mit kleineren Batterien wie z.B. Knopfzellen.
ELO-Flasher 3 - noch näher am Original, von Martin Müller
Die bisher veröffentlichten Flasher bilden den alten Bekannten LM3909 ja bereits sehr gut und auch sehr stromsparend nach. Allerdings wird bei Ihnen die Blinkfrequenz durch die Software vorgegeben und nicht wie beim Original durch die Dimensionierung des RC-Gliedes. Unter Verwendung des im Tiny vorhandenen Analog-Digital-Wandlers kann man dies realisieren.
$regfile = "attiny13.dat"
$crystal = 128000 'Reale Frequenz des internen 128kHz-Oszillators
$hwstack = 10 ' default use 32 for the hardware stack
$swstack = 10 'default use 10 for the SW stack
$framesize = 10 'default use 40 for the frame
Stop Ac
Config Portb = &B11111011 'Portb.2 auf 'Eingang' schalten
Portb = &B00000000 'keine Pullups zuschalten
Wdtcr = &B11010100 'Watchdog auf 250ms einstellen
Enable Interrupts
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim Wert1 As Word
Do
Reset Watchdog
Powerdown
sbi adcsra,7
Wert1 = Getadc(1)
cbi adcsra,7
If Wert1 > 1000 Then
Gosub Blitz
End If
Loop
Blitz:
Portb.1 = 1
Reset Watchdog
Powerdown
Portb.1 = 0
Return
End
Die Fusebits sind so gesetzt, dass der interne 128-kHz-Oszillator verwendet wird. Der Analog-Digital-Wandler an PB2 schaut Watchdoc-gesteuert alle 250 ms, ob sich die Ladespannung des Kondensators schon der Betriebsspannung nähert. Da es sich um einen 10-Bit AD-Wandler handelt ist der größtmögliche Wert 1023. Wird ein Wert größer 1000 erfasst, so wird der negative Pol des Elkos für wiederum 250 ms auf + 1,5 V gelegt und die gespeicherte Ladung kann sich über die LED entladen. Da der im AD-Wandler ein echter „Stomfresser" ist, wird er mit „sbi adcsra,7" nur kurzzeitig zur Messung aktiviert und dann mit „cbi adcsra,7" sofort wieder abgeschaltet. Die Stromaufnahme des Tinys liegt bei 1,5 V im einstelligen µA-Bereich, wobei hier der Ladestrom für den Elko nicht berücksichtigt wird.



















