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