|
|
Download als ZIP Archiv (21 kB) |
Das Programm ist relativ einfach: Der Timer1 weckt den Microcontroller jede 200ms aus dem Idle Mode, der zum Stromsparen verwendet wird (auch wenn die Reduktion der Stromaufnahme nicht wirklich nötig gewesen wäre). In der Hauptschleife (also nicht im Interrupthandler) wird die Spannung gemessen. Im Interrupthandler des Timers wird die Spannung dann über mehrere Messungen gemittelt und ausgewertet. Die LEDs werden entsprechend der aktuellen Spannung gesetzt. Das Relais wird ein- bzw. ausgeschaltet, wenn die Spannung für eine gewisse Zeit oberhalb der Einschaltschwelle bzw. unterhalb der Ausschaltschwelle ist.
Bei der Softwareerstellung war vor allem die Verwendung von ADC (Analog-Digital-Konverter) und Timer-Interrupt (zum Wecken des Mikrocontrollers) etwas schwierig. Beide lösen Interrupts aus. Man muss sicherstellen, dass der ADC ausgeschaltet wird, wenn die CPU in den Schlafmodus versetzt werden soll. Ansonsten weckt sie sofort wieder auf, so dass kein Stromsparen möglich ist.
Direkt
nach dem Einschalten des Geräts wird das Relais bereits
eingeschaltet, wenn (nach der eingestellten Verzögerung) die
Spannung oberhalb der Ausschaltschwelle
ist. Ist jedoch im Betrieb die Spannung einmal unter die
Ausschaltschwelle gesunken, schaltet das Relais erst wieder ein,
wenn die Spannung über die Einschaltschwelle
steigt. Dieses Verhalten ist bewußt so gewählt, damit nach
Einschalten des Geräts bei ausgeschaltetem Motor der Verbraucher
initial eingeschaltet wird.
Zur Bestimmung der Schaltschwellen habe ich zunächst die Batteriespannung zweier Fahrzeuge mit einem Multimeter gemessen:
Wenn die Strom-Überwachung aktiviert ist, leuchtet die LED, sobald der Stromverbrauch über dem eingestellten Wert liegt. Falls der Strom für die eingestellte Zeit unter der eingestellten Stromstärke liegt, wird ein Alarm im Minutentakt ausgelöst.
Vor allem zu Testzwecken können des weiteren zwei Info-Schwellen eingestellt werden, so dass akustisch angezeigt wird, wenn der Verbraucher (die Kühlbox) ab jetzt einen anderen Stromverbrauch hat. Die eingesetzte Kühlbox läuft grundsätzlich nur in drei Stufen und verbraucht ~0 A, ~1,6 A und ~5 A, so dass ich mit dieser Funktion interessehalber mal das Verhalten der Box mitbekommen kann.
Mit folgenden Parametern können im EEPROM gesetzt werden, um
Schaltschwellen und Schaltverzögerung anzupassen.
Zudem werden zwei Testmodi unterstützt, um die (halbfertige)
Hardware auf Funktionstüchtigkeit zu prüfen.
Zum Schreiben des Testmodus ist im Downloadpaket eine passende Batchdatei und ein hex File für das EEPROM enthalten.
Der Brownout-Detector, der den Mikrocontroller im Falle von Unterspannung ausschaltet, sollte aktiviert werden, damit bei Unterspannung nicht unkontrolliert ins EEPROM geschrieben werden kann. Dies geht durch Setzen des entsprechenden Fuse-Bits "brownout detection enabled" auf 0.
| EEPROM Position (Byte) | Bedeutung |
|---|---|
| 0 |
Betriebsmodus ungleich 1 und 2, z.B. FF (EEPROM unbeschrieben) = LED Test (LEDs 1-8 werden in einer Schleife nacheinander eingeschaltet) 1 = Spannungstest (LEDs zeigen im Sekundentakt aktualisiert die Spannung entsprechend der Schaltschwellen ein. Dient zum Prüfen der Spannungsmessung.) 2 = Normalbetrieb |
| 1 |
Anzahl
Spannungsmessungen für Durchschnittsberechnung Die Spannung wird (alle 200ms) mehrfach gemessen und ein Durchschnitt gebildet, bevor sie ausgewertet wird. Auch die Spannungsanzeige wird in diesem Intervall aktualisiert. (Default = 5 = 1s) |
| 2 + 3 |
Ausschaltschwelle
in mV Unterhalb dieser Spannung wird das Relais ausgeschaltet. (Default = 1200) |
| 4 + 5 | Einschaltschwelle in mV Oberhalb dieser Spannung wird das Relais eingeschaltet. (Default = 1320) |
| 6 + 7 | Ausschalt-Delay Das Relais wird erst ausgeschaltet, wenn die Ausschaltschwelle für x Sekunden unterschritten wird. (Default = 20) |
| 8 + 9 |
Einschalt-Delay Das Relais wird erst eingeschaltet, wenn die Einschaltschwelle für x Sekunden überschritten wird. (Default = 20) |
| 10 - 25 |
Spannungsschwellen
in mV für die LED-Anzeige Byte 10 + 11 ist die niedrigste Spannungsschwelle (Default = 1170, 1200, 1230, 1260, 1290, 1310, 1340, 1370) |
| 26 | LED-Anzeige umdrehen Je nach Einbau der LEDs kann man deren Bedeutung umdrehen. 0 = aus 1 = ein |
| 27 | Strom-Überwachung |
| 28 + 29 | Alarm-Schwelle Ist der Strom unterhalb dieses Wertes in mA, wird der akustische Alarm ausgelöst. (Default = 1000) |
| 30 + 31 | Alarm Timeout |
| 32 + 33 | Strom Max (UNBENUTZT!) Dieser Wert gibt den zu erwartenden maximalen Strom in mA an. (Damit sollte ein Pulsverhältnis der Stromstärken-LED justiert werden, so dass bei maximaler Stromstärke ein Dauerleuchten erreicht wird.) (Default = 5000) |
| 34 + 35 | Strom Info-Schwelle 1 (Default = 900, aus = 0) |
| 36 + 37 | Strom Info-Schwelle 2 (Default = 2500, aus = 0) |