Das Controller-Programm hat folgende Aufgaben: regelmäßige Abfrage des
ADCs, Umwandeln des gelesenen Wertes in einen Spannungswert, Akkumulieren
der Kapazität, Ausgabe auf dem LC-Display, Ausgabe über die RS232-Schnittstelle,
Abbruch des Entladevorganges bei Unterschreiten einer bestimmten
Spannung.
Die ist wie folgt realisiert: Über einen Timerinterrupt wird 4096 mal in der
Stunde (das ist etwas schneller als einmal pro Sekunde) die ADC-Abfrage
angestoßen. Die 4096 wurde gewählt um die nachfolgende Kapazitätsberechung
zu vereinfachen. Hierdurch lassen sich Divisionen durch Shift-Operationen
ersetzen.
Die Umwandlung des vom ADC gelesenen Wertes in einen Spannungswert erfolgt
über eine Tabelle (voltage_table.a51). Diese kann mit Hilfe eines kleinen
C-Programms (Spannungstabelle generieren)
generiert werden.
Die Kapazität wird akkumuliert und auf dem LC-Display ausgegeben. Die
Routinen zur Ansteuerungs des Displays befinden sich in lcd.a51. Die
Belegung der Displayanschlüsse können in Grenzen über Pinzuweisungen im
Hauptprogramm angepasst werden. Da die Akkukapazität 8 Bit natürlich
überschreitet wird eine weitere Routine zur Umwandlung einer 16 Bit
Hex in einen BCD-Zahl benötigt. Diese befindet sich in 16hex2bcd.a51. Die
Routine stammt nicht von mir sondern wurde lediglich von mir für den
MCS51 Assembler angepasst.
Hexfile: | cap_mess.hex |
Sourcecode Hauptprogramm: | cap_meassure_tlc549.a51 |
Sourcecode LCD Routinen: | lcd.a51 |
Sourcecode Hex2BCD: | 16hex2bcd.a51 |
Sourcecode Spannungstabelle: | voltage_table.a51 |