Start
Experimente
Grundlagen
Produkte
- ES-M32
-- Erster Test
-- USB
-- Bascom
-- RAM
-- ADC
-- Ports
-- Relais -- Morsen -- Datenlogger -- SIOS -- ASCII -- mV-Logger -- I/O12/24 V -- Bootloader
Neues
Impressum
|
ES-M32
Achtkanal-Millivolt-Datenlogger
Für
geologische Untersuchungen wurde ein Datenlogger benötigt, der
Messungen an mehreren Kanälen ausführen und speichern kann.
Wichtig war auch der potentialfreie Betrieb, sodass es nötig
wurde, alle Messergebnisse zuerst zu speichern und
dann nachträglich an einen PC zu übertragen. Gefordert
war außerdem eine Auflösung von einem Millivolt.
Der
AD-Wandler des Mega32 wird hier mit seiner internen Referenz von 2,5 V
verwendet. Dabei ergibt sich eine Auflösung in 2,5-mV-Schritte,
also noch etwas zu grob. Durch eine Mittelung über viele Messungen
kann die Auflösung jedoch deutlich erhöht werden. In
Endeffekt erreicht man einen Messbereich von 1 mV bis 2500 mV. Im
LC-Display des ES-M32 werden laufend die Spannungen der acht
Eingangskanäle angezeigt. Mit einem Tastendruck auf S1 werden alle
acht Kanale gemeinsam im EEPROM abgespeichert. Im Display sieht
man für eine Sekunde die Nummer der laufenden Messung. Die so
gesammelten Daten können später mit einem Terminalprogramm
ausgelesen und dann z.B. mit Excel weiter verarbeitet werden. Man
sendet ein Zeichen "A" und erhält alle Messungen, wobei jeweils
acht Messwerte in einer Zeile stehen und durch Leerzeichen getrennt
sind.
Download: ESM32Logger2.zip (17 KB)
|
Config Timer0 = Timer , Prescale = 1024 '10800 Hz On Ovf0 Tim0_isr Enable Timer0 Enable Interrupts Tim0_isr: Ticks = Ticks + 1 If Ticks < 25 Then 'Mittelung über 25 Messungen Summe(1) = Summe(1) + Getadc(0) Summe(2) = Summe(2) + Getadc(1) Summe(3) = Summe(3) + Getadc(2) Summe(4) = Summe(4) + Getadc(3) Summe(5) = Summe(5) + Getadc(4) Summe(6) = Summe(6) + Getadc(5) Summe(7) = Summe(7) + Getadc(6) Summe(8) = Summe(8) + Getadc(7) End If If Ticks = 26 Then Ticks = 0 Kanal(1) = Summe(1) / 10 'Auflösung 1 mV Summe(1) = 0 Kanal(2) = Summe(2) / 10 Summe(2) = 0 Kanal(3) = Summe(3) / 10 Summe(3) = 0 Kanal(4) = Summe(4) / 10 Summe(4) = 0 Kanal(5) = Summe(5) / 10 Summe(5) = 0 Kanal(6) = Summe(6) / 10 Summe(6) = 0 Kanal(7) = Summe(7) / 10 Summe(7) = 0 Kanal(8) = Summe(8) / 10 Summe(8) = 0 End If Return
Die
Messwerterfassung und Mittelung wird in einer Timer-Interruptroutine
durchgeführt. Dabei werden für jeden Kanal 25 Messwerte
aufsummiert und die Summen dann durch 10 geteilt. Damit ergibt sich ein
Messergebnis in Millivolt, wobei eine eventuelle Kalibrierung
extern durchgeführt werden muss. Die Dauer der Messserie
für alle acht Kanäle und jeweils 25 Messungen beträgt 1
/ 11059200 Hz * 1024 * 256 * 25 = 0,6 s.
Das Hauptprogramm
unterbricht jeweils periodisch die Messwerterfassung um die Daten am
Display darzustellen. Außerdem wird hier jeweils der Taster S1
abgefragt. Man muss ihn etwa eine Sekunde lang gedrückt halten, um
die aktuellen Daten zu speichern. Der Mega32 besitzt 1 KB EEPROM. Da
jeder Messwert zwei Bytes benötigt, kann man 512 Messwerte bzw. 64
Datensätze mit je acht Kanälen zwischenspeichern. Danach
müssen die Messwerte an den PC übertragen werden. Um dann
wieder bei der ersten Messung zu beginnen muss man die Reset-Taste des
Systems drücken.
|
Cls Messung = 0 Adressen = 0
Do Waitms 1000 Disable Interrupts If S1 = 0 Then For N = 0 To 7 Adresse = 2 * N Adresse = Adresse + Adressen Writeeeprom Kanal(n + 1) , Adresse Next N Adressen = Adressen + 16 Messung = Messung + 1 Cls Lcd "Messung Nr, " Lcd Messung Waitms 1000 End If Do Loop Until S1 = 1
Kommando = Inkey() If Kommando = 65 Then If Adressen > 0 Then Adresse = 0 Do For N = 0 To 6 Readeeprom Daten , Adresse Print Daten; Print " " ; Adresse = Adresse + 2 Next N Readeeprom Daten , Adresse Print Daten Adresse = Adresse + 2 Loop Until Adresse >= Adressen End If End If
Locate 1 , 1 Lcd Kanal(1) Lcd " " Locate 1 , 5 Lcd Kanal(2) Lcd " " Locate 1 , 9 Lcd Kanal(3) Lcd " " Locate 1 , 13 Lcd Kanal(4) Lcd " " Locate 2 , 1 Lcd Kanal(5) Lcd " " Locate 2 , 5 Lcd Kanal(6) Lcd " " Locate 2 , 9 Lcd Kanal(7) Lcd " " Locate 2 , 13 Lcd Kanal(8) Lcd " " Enable Interrupts Loop
|