Langzeittimer für Ladegeräte
von Hubert Freisinger, OE3FHA
Seit
langer Zeit bin ich im Besitz von sogenannten PMR-Funkmäusen. Diese
haben sich über Jahre für Arbeiten im und ums Haus bewährt, zumal diese
auch von nicht lizenzierten Personen benutzt werden dürfen und man im
Prinzip quatschen kann wie einem der Schnabel gewachsen ist. Ob
Elektro- oder sonstige Arbeiten auf Distanz, diese Dinger sind hin und
wieder recht hilfreich.
Doch diese sind allesamt richtige
Akkumörder, aber warum? Die meisten Geräte leiden heute unter der
Tatsache dass es keinen wirklichen Aus-Schalter gibt, somit zieht das
Teil weiterhin, wenn auch sehr gering Strom, die PMR immerhin 300µA an
800mAh, AAA. Das führt dazu dass nach 2-3 Monaten der Akku am Ende ist,
bei NiMh-Akkus absolut tödlich. Bei diesen Dingern sind allesamt schon
die Akkus getauscht, einfach sinnlos, gestorben wegen ewiger Entladung.
Ich habe für diese kleinen Dinger extra eine -delta peak Ladeschaltung
in die sonst mit einfallslosem Vorwiderstand betriebene Ladeschale
eingebaut. Doch ewig nach Ladeende trickeln zu lassen ist auch keine
Lösung. Meine Amateur Handsprechgeräte mit LiIo-Akku leiden ebenfalls
unter diesem Entladesyndrom.
Wieder
einmal hat BASCOM mit ATMEL die Lösung. Gleich vorweg, das Progrämmchen
ist für meine Anwendung zugeschnitten, jeder soll das für seine Zwecke
ändern so wie er will. Könnte mir vorstellen, das Ganze in einem
Tiny2313 oder Mega8 mit LCD-Display zu versenken wo auch die EIN-AUS
Zeit einstellbar ist. Ich für meinen Teil brauche nur den Timer ohne
Schnick-Schnack, kann man ja umprogrammieren wenn es wirklich nicht
passt, doch was soll daran nicht passen.
Die
Anforderung ist ganz einfach, ich will nicht mehr alle 2-3 Monate als
Manipulationsroboter für die diversen Kleinstgeräte fungieren, zumal
bei der Anzahl dieser Dinger im Prinzip 2 Tage kaputt sind, denn
etliche hand held Messgeräte mit NiMh Akku kommen noch dazu. Also muss
dies wer Anderer machen. Wer Anderer? Richtig, ein Tiny13 kommt wieder
zum Einsatz. Was soll der machen, in meinem Fall nach 10 Stunden Netz
an den diversen Ladegeräten und für 45 Tage Pause, um danach wieder für
10 Stunden alle Ladegeräte ans Netz zu bringen, usw. usw. usw. Dazu
wird eine Vielfachsteckleiste von mir mittels Relais aktiviert und
wieder vom Netz genommen, die daran angeschlossenen Laderegler, in
meinem Fall schlappe 8, können somit von Zeit zu Zeit ihrer Aufgabe
nachkommen und die Akkus dahinter nachladen. Durch diese Vorgangsweise
hält sich auch der Stromverbrauch übers Jahr in Grenzen.
Selbst
ein namhafter Autohersteller schreibt vor man solle mindestens ein mal
in der Woche mit der Karre für 1 Stunde fahren, kann sein dass dies bei
arbeitenden Menschen kein Thema ist, ist bei mir in der
Verschrottungsphase aber auch nicht mehr so selbstverständlich, oftmals
nur 1 oder 2 Mal 10kM in der Woche zum Einkauf, der Rest zu Fuß oder
mit dem Rad. Auch da verrichtet ein Tiny13 ganze Arbeit, ich "fahre"
jeden Tag eine halbe Stunde in der Garage mit dem Ladegerät, der Akku
ist 7 Jahre alt und putzmunter, den bekommt jetzt ein Freund aus dem
Nachbarort.
Jetzt
viel Spaß beim Nachbau, ich habe den Timer in eine Gehäuse eines zuvor
für andere Zwecke geschlachteten Funkschalter mit Durchgangsdose
eingebaut.
Download (Korrektur 16.4.19, s.u.): ExtremLangzeittimer.zip
'Extrem Langzeittimer für periodisches Laden mit externem Ladegerät
'
'Angedacht für Ladegeräte die eine eigenständige Ladekontrolle haben, oder
'für wiederkehrende Erhaltungsladung mit Dauerstrom auf Zeit
'
'Ein Quarz-Takt ist nicht erforderlich da
'bei 10 Stunden einige Minuten keine Rolle spielen und
'bei langer Wartezeit ggf. 1 Stunde auch nicht ins Gewicht fällt
'
'Wenn man sich spielen möchte kann man mit der internen Taktkorrektur
'eine gute Näherung erreichen
'Angaben für den Kompiler
'------------------------
'Prozessor
$regfile = "attiny13.dat"
'intern Takt 1,2 MHz
$crystal = 1200000
'STACK, WICHTIG FÜR DIE WAIT-ROUTINE!
$hwstack = 10
$swstack = 15
$framesize = 10
'conf Port's B auf Eingabe=0, Ausgabe=1
Ddrb = &B0001_1111
Stop Ac 'Switch off the power to the Analog Comparator
Reset Acsr. Acbg 'Disable Analog Comparator Bandgap Select
'Programmschleife
'----------------
Do
Portb.4 = 0 'Grüne LED aus
Portb.3 = 1 'SSR und rote Led ein
'Warte ca. 10 Stunden, Ladegerät ein
Wait 36000
Portb.3 = 0 'SSR und rote Led aus
Portb.4 = 1 'Grüne LED ein
'Warte ca. 45 Tage, Ladegerät aus
Wait 3888000
Loop
WAIT
ist eine Routine des Bascom-Kompilers, der Kompiler bindet diese ein
als geschlossene Schleife mit den eben vorgegebenen Parametern und
eröffnet im SW-Stack dafür ein BYTE, ein WORD (2Byte), oder ein DWORD
(4Byte) + einige Byte für sich selbst, daher wichtig die Reservierung.
Ob er noch mehr kann weiß ich nicht, doch ein DWORD reicht bis über 100
Jahre, ich denke weiter braucht der "normal Sterbliche" das nicht
(Atmel garantiert bei 25 Grad 100 Jahre für das Flash). WAIT kann auch
nur durch einen HW Interrupt unterbrochen werden (eben geschlossene
Unterroutine) oder eben mit RESET beendet werden. Bei einem Interruptus
verlängert sich das WAIT um die Dauer des Interrupt. WAIT verwendet
auch bei mehrmaliger Anwendung immer den gleichen RAM-Speicherplatz
daher ist eine mehrmalige Anwendung innerhalb eines Programm kein
Problem.
Korrektur: Leider ist es nicht möglich 3888000 Sekunden ein Wait zu etablieren. Die
Doku von Bascom gibt für Waitµs und für Waitms den max.Wert 65535 an,
für Wait in Sekunden schweigt sie sich aus. Ich hatte seltsame
Schalteffekte und nehme daher an, dass für Sekunden ebenfalls der Wert
65535 gilt. Daher Asche auf mein Haupt er macht es nicht. Als einfache
Lösung habe ich vielfache Zeitschleifen mit dem genäherten Wert von 1
Stunde gemacht. Die Streuungen der Chips sind erheblich und so mache ich
für jeden Chip eine genäherte Stunde, daher sind es keine 3600sek. Da
haben Assembler Programmierer mit einer gefüllten Bibliothek einen
riesen Vorteil so der Ass. Kompiler halbwegs Fehlerfrei funktioniert.
'Angedacht für Ladegeräte die eine eigenständige Ladekontrolle haben, oder
'für wiederkehrende Erhaltungsladung mit Dauerstrom auf Zeit
'
'Wichtig ist der Abgleich des Wait auf 1 Stunde da der interne Takt als Zeitbasis
'sehr ungenau ist und um etliche Minuten schwanken kann!
'Ein Quarz-Takt ist trotzdem nicht erforderlich da bei 1 Stunde einige Sekunden
'keine Rolle spielen.
'Angaben für den Kompiler
'------------------------
'Prozessor
$regfile = "attiny13.dat"
'intern Takt 1,2 MHz
$crystal = 1200000
'STACK, WICHTIG FÜR DIE WAIT-ROUTINE!
$hwstack = 10
$swstack = 15
$framesize = 10
Dim Z As Word
'conf Port's B auf Eingabe=0, Ausgabe=1
Ddrb = &B0001_1000
'Strom sparen
Stop Adc 'Switch off ADC
Stop Ac 'Switch off the power to the Analog Comparator
Reset Acsr. Acbg 'Disable Analog Comparator Bandgap Select
'Programmschleife
'----------------
Do
Portb.4 = 0 'Grüne LED aus
Portb.3 = 1 'SSR und rote Led ein
'Warte ca. 1 Stunde, Ladegerät ein
For Z = 1 To 10
Wait 3840 'Warte ca. 10x1 Stunde
Next Z
Portb.3 = 0 'SSR und rote Led aus
Portb.4 = 1 'Grüne LED ein
'Warte ca. 45 Tage, Ladegerät aus
For Z = 1 To 1080
Wait 3840 'Warte ca. 1080x1 Stunde = ca. 45 Tage
Next Z
Loop
Siehe auch: Netzsynchroner Lanzeittimer