Datenlogger mit ATmega8 oder ATmega32 Mikrocontroller

Transcription

Datenlogger mit ATmega8 oder ATmega32 Mikrocontroller
Datenlogger mit ATmega8 oder ATmega32 Mikrocontroller
© Peter Wilbert / Thomas Lipkowski
Version 1.1
Eine interessante, zeitgemäße und motivierende Art der Messwertaufnahme und -verarbeitung im
Unterricht stellt die Arbeit mit einem Datenlogger dar, zum Beispiel bei der Analyse von
Energieeinsparmaßnahmen durch Wärmedämmung. Hiermit können u. A. Temperaturwerte über
einen längeren Zeitraum in nahezu beliebig wählbaren Zeitintervallen aufgenommen werden. Der hier
vorgestellte Datenlogger ist, was die Sensorenanschaltung angeht, universell einsetzbar. Er kann
Signale von analogen Mess-Sensoren (8ADC-Eingänge beim Atmega32) und die Temperaturwerte
von maximal 8 Temperatursensoren (DS1621) speichern. Beim ATmega32 kann man bis zu 15.000
Messwerte aufzeichnen. Auch nach abgeschalteter Versorgungsspannung bleiben die Messwerte im
Messspeicher ohne zusätzliche Batteriepufferung erhalten. Der Quellcode des Programms wird für
eigene Weiterentwicklungen kostenlos zur Verfügung gestellt. Das Messprogramm erzeugt aus den
aufgenommenen Werten Messwert-Tabellen, die im PC mit EXEL weiterverarbeitet (importiert)
werden.
Solche Logger gibt es im Handel, sie sind allerdings nicht ganz billig (ca. 100Euro zur Zeit). In der
Fortbildung soll ein solches Gerät, je nach Speicherbedarf, mit einem Atmega8 oder ATmega32
Mikrocontroller mit dem MSES-System kostengünstig realisiert werden.
Inhaltsverzeichnis
Beschreibung
Seite 2
Tera Term Pro einrichten
Seite 2
Den Datenlogger parametrieren
Seite 4
Beispiel-Parametrierung
Seite 5
Messprogramm starten
Seite 5
Status-LED’s, Taster S1 und Taster S2
Seite 5
Was ist wenn ...
Seite 6
Eine Parametrierdatei erstellen
Seite 8
Wichtiger Hinweis für USC008
Seite 9
1
Beschreibung
•
•
•
•
•
•
•
•
•
•
•
Mit dem Datenlogger werden Messwerte von maximal 8 DS1621 Temperatursensoren
und maximal 4 ADC- Eingängen beim ATmega8 / 8 ADC- Eingänge beim ATmega32 in
parametrierbaren zeitlichen Intervallen aufgezeichnet.
Beim ATmega8 werden maximal 3000 Messwerte und beim ATmega32 maximal 15000
Messwerte im Flash-ROM gespeichert. Ein Messwert besteht dabei immer aus zwei Byte.
Die aufgenommenen Messwerte bleiben auch nach dem Abschalten der VersorgungsSpannung im Mikrocontroller erhalten und benötigen zur Datenerhaltung keine
zusätzliche Batterie-Pufferung!
Das Messprogramm im Mikrocontroller wird per Hand oder automatisch über eine TextDatei parametriert. Die Messparameter werden auch im Flash-ROM gespeichert.
Die ADC-Kanäle haben eine Auflösung von 10Bit (0-1023).
Der ADC kann mit drei verschiedenen Referenzspannungen arbeiten. Die Art der
verwendeten Referenzspannung ist über Kurzbefehle parametrierbar.
Der Einstellbereich für das Messintervall der Datenaufzeichnung reicht von einer Sekunde
bis 65535 Sekunden (ca. 18 Stunden).
Die Verbindung zum PC wird mit einer VT100 Terminal-Emulation auf dem PC mit dem
Programm Tera Term Pro realisiert. Mit dem Terminal-Programm wird der Datenlogger
über den COM-Port (serielle Schnittstelle) des PC’s parametriert, und das Messprogramm
im Mikrocontroller kann nach erfolgter Messwertaufnahme die Messwerte zum Terminal
senden. Die Messwerte werden dabei in einer Log-Datei (Text-Datei) abgespeichert.
Die einzelnen Messwerte in der Log-Datei werden durch ein Semikolon getrennt, jede
Messreihe wird mit einem RETURN-Zeichen (0x0d) abgeschlossen.
Diese Datentabelle der Messwerte in der Log-Datei kann man z.B. mit EXEL importieren
und weiterverarbeiten.
Leider stehen für das Messprogramm (s.g. Boot Loader) im Mikrocontroller nur maximal
2KB zur Verfügung. Die Software für den Datenlogger wurde deshalb komplett in
ASSEMBLER geschrieben (z.Z. 1,9KB) da eine Realisierung in C oder Basic wegen der
beschränkten Programmgröße nicht möglich war. Ein vergleichbares C-Programm mit
dem jetzt in ASSEMBLER realisierten Funktionsumfang wäre um ca. 50% größer und
würde das Limit von 2KB weit überschreiten.
Tera Term Pro einrichten
Nach der Installation von Tera Term Pro müssen Sie das Terminal-Programm einrichten.
Übernehmen Sie bitte folgende Einstellung für Setup/Terminal...:
2
Für Setup/Window... übernehmen Sie die folgenden Daten und wählen Sie evtl. mit Reverse
einen dunklen Bildschirm-Hintergrund:
Die Schriftart wählen Sie mit Setup/Font... mit Font: Terminal und Size: 12 aus. Im Menü
Setup/Serial Port... wählen Sie die unten abgebildete Einstellung je nach verwendetem ComPort an Ihrem PC (hier COM4):
Mit der Einstellung für Setup/General..., wie rechts
dargestellt, ist das Einrichten von Tera Term Pro
abgeschlossen. Speichern Sie Ihre Einstellungen noch
unter Setup/Save setup... in einer *.ini-Datei.
3
Den Datenlogger parametrieren
Zur Parametrierung des Datenloggers stehen Ihnen einige Kurzbefehle zur Verfügung.
Zahleneingaben nach dem Kurzbefehl wie z.B. N1000 müssen mit Return bestätigt werden
also Shift+N, gefolgt von der Zahleneingabe 1000 und dann die Bestätigung mit Return. Die
Parameter für das Messprogramm können Sie auch in eine Textdatei schreiben und diese dann
mit File/Send file… zum Mikrocontroller übertragen. Sollten Sie sich bei der Eingabe einer
Zahl vertippen, drücken Sie Return, wählen den Kurzbefehl erneut und geben die Zahl noch
einmal ein. Eine Editiermöglichkeit für falsche Zahleneingaben ist wegen der beschränkten
Programmgröße nicht vorhanden.
•
•
•
•
•
•
•
•
•
•
E (Shift+E): Löscht die Parameter-Tabelle im RAM. Das Programm meldet das mit
einem #-Zeichen. Beim Programmstart des Mikrocontrollers wird die Parameter-Tabelle
zur Verwendung im Programm aus dem Flash-Speicher in das RAM kopiert.
S(Shift+S): Speichert die Parameter-Tabelle aus dem Ram im Flash-ROM. Die
eingestellten Messparameter müssen mit diesem Befehl im Flash-ROM gespeichert
werden, bevor man den automatische Mess-Modus mit den eingegebenen Parametern
starten kann.
M(Shift+M): Schaltet das automatische Messen ein. Das Programm meldet als
Bestätigung ein M=ON.
P(Shift+P): Sendet die aufgenommenen Messwerte über den COM-Port zum PC. Jeder
Messwert wird dabei durch ein Semikolon getrennt und eine Messreihe wird durch ein
RETURN (0x0d) getrennt. Die gesendeten Daten können in einer zuvor geöffneten LogDatei gespeichert werden.
N(Shift+N): Legt die Anzahl der aufzunehmenden Messwerte fest z.B. N2000 für 2000
Messwerte.
I(Shift+I): Bestimmt das Messintervall in Sekunden z.B. mit I30 wird alle 30 Sekunden
eine Messreihe aufgenommen.
T(Shift+T): Schaltet einen Temperatursensor frei. Die maximal 8 Sensoren haben die
Bezeichnung T0-T7. Die TWI-Basisadresse beginnt bei 0x90 (A0, A1, und A2 liegen auf
L-Potential). Zur Adresseinstellung beachten Sie die Dokumentation zum MAX DS1621.
A(Shift+A): Schaltet einen ADC-Kanal frei. Die ADC-Kanäle haben die Bezeichnung
A0-A3 beim ATmega8 und A0-A7 beim ATmega32.
W(Shift+W): Aktiviert den internen Pull-Up-Widerstand am ADC-Eingang.
R(Shift+R): Selektiert die Referenzspannung für den ADC:
R1 = externe Referenzspannung am Pin AREF (default).
R2 = AREF = Vcc. Die Referenzspannung wird durch die
Spannungsversorgung Vcc des Mikrocontrollers bestimmt.
R3 = die interne Referenzspannung von 2,56V wird
verwendet.
ACHTUNG: Die zu messende analoge Spannung darf niemals
größer als die Referenz-Spannung des ADC sein!
Zur Anpassung verwenden Sie Spannungsteiler aus
Widerständen und evt. eine Zehnerdiode die den
ADC-Eingang vor Überspannung schützt (siehe
Beispiel rechts für die Einstellung R3 mit
symetrischem Spannungsteiler von 10K und SchutzDiode D1/ZD2,7V).
4
Beispiel-Parametrierung
Beispiel für eine Parametrierung: Verbinden sie den
Mikrocontroller mit dem COM-Port des PC’s. Das
Programm im Mikrocontroller meldet sich nach dem
Einschalten der Versorgungs-Spannung mit der VersionsKennung (hier DL8 = Datenlogger für ATmega8) und der
Softwareversion (hier 1.0). Mit Schift+E wurde die
Parameter-Tabelle gelöscht (Programm meldet ein #Zeichen). Dann wurden die ADC-Kanäle A0, A1 und A2
freigeschaltet. Für eine zusätzliche Temperaturmessung
wurde Temperatursensor 0 (T0) freigeschaltet. Das
Messintervall wurde auf 30 Sekunden eingestellt. Es sollen
vom Programm insgesamt 2000 Messwerte aufgenommen
werden (500 Messwerte pro Messeinheit, weil 4 Eingänge
aktiv sind). Automatisches Messen ist über Shift+M
freigeschaltet. Als Referenzspannung für den ADC soll das
Mess-Programm die interne Referenzspannung von 2,56V
verwenden (Eingabe von R3). Zu Abschluss wurden die
Messparameter mit Shift+S im Flash-Speicher abgespeichert.
Messprogramm starten
Nachdem Sie den Datenlogger parametriert haben (M=ON und SAVE), schalten Sie die
Spannungs-Versorgung aus. Positionieren Sie die Hardware (Sensoren) an die entsprechenden
Messpunkte und schalten Sie die Spannungsversorgung für den Mikrocontroller wieder ein.
Das Messprogramm wechselt jetzt automatisch in den Messbetrieb. Das Messprogramm endet
automatisch, wenn die vorgegebene Anzahl von Messwerten aufgenommen wurde. Danach
verbinden Sie den Datenlogger wieder mit dem PC, starten Tera Term Pro, öffnen eine neue
Log-Datei mit File/Log... und drücken Shift+P. Die aufgenommenen Messwerte werden jetzt
als ASCII-Daten zum PC übertragen und in der Log-Datei gespeichert. Sind alle Messwerte
übertragen, schließen Sie die Log-Datei. Jetzt können Sie die Messwerte aus der Log-Datei
z.B. in EXEL importieren. Als Trennzeichen wählen Sie beim Import der Log-Datei mit
EXEL das Semikolon.
Status-LED’s, Taster S1 und Taster S2
LED1 blinkt im Sekundentakt und signalisiert die Funktion des Timer2 im Mikrocontroller,
der mit dem Quarz Q1 als Uhr arbeitet. LED2 ist an, wenn sich das Programm im
automatischen Mess-Modus befindet. Wenn LED3 leuchtet, befindet sich das Programm im
Parametrier-Modus. Nach Beendigung des Mess-Modus wechselt das Programm automatisch
in den Parametrier-Modus. Mit dem Taster S1 kann man den automatischen Mess-Modus
abbrechen. Die bis dahin aufgenommenen Messwerte werden im Flash gespeichert. Das
Messprogramm kann danach nur wieder neu gestartet werden. Eine Fortsetzung des
abgebrochenen Mess-Modus ist nicht mehr möglich! Ist beim Einschalten der VersorgungsSpannung Taster S2 betätigt, startet das Programm automatisch im Mess-Modus und speichert
die parametrierte Anzahl der Messwerte im Flash-ROM und wechselt danach in den
Parametrier-Modus. Der Taster S2 ermöglicht den Start im Mess-Modus ohne Freischaltung
durch den Kurzbefehl M.
5
Was ist wenn ...
... ich beim Parametrieren eine falsche Angabe gemacht habe?
• In dem Beispiel rechts wurde mit N20 die Anzahl der
aufzunehmenden Messwerte falsch eingegeben. Die Anzahl
erneut eingeben (jetzt N2000) und wieder mit Shift+S
abspeichern.
... ich einen Parameter bei der Eingabe vergessen habe?
• Parameter eingeben und erneut mit Shift+S abspeichern. In
dem Beispiel rechts wurde der ADC-Eingang A2 bei der
Parametrierung vergessen. Eingabe von A2 und erneut mit
Shift+S abspeichern.
... ich einen Temperatursensor (DS1621) aktiviert habe, der nicht am
TWI-Bus angeschlossen ist (hier z.B. T2)?
• Das Programm prüft vor dem Start der Messwertaufnahme,
welche Temperatursensoren wirklich angeschlossen sind. Ein
aktivierter aber nicht vorhandener Sensor wird in der internen
Parameter-Tabelle vom Programm automatisch gelöscht und
bei der Messwertaufnahme nicht berücksichtigt.
... ich einen abgeschlossenen Messvorgang (Messwerte sind aufgenommen und das Programm
befindet sich im Parametrier-Modus oder der Mikrocontroller wurde erneut eingeschaltet)
noch einmal mit den gleichen alten Parametern starten möchte?
• Die Messparameter werden wie die Messwerte im FlashROM gespeichert und bleiben dort so lange erhalten, bis
sie durch neue Werte und Shift+S überschrieben werden.
• Mit Shift+M und anschließendem Shift+S wird der
Messvorgang mit den alten Parametern erneut aktiviert.
6
... wenn ich die aktivierten Pull-Up-Widerstände wieder abschalten
möchte?
•
In dem Beispiel rechts sind die ADC-Kanäle 0-2 und die
entsprechenden Pull-Up-Widerstände für diese ADC-Kanäle
mit dem W-Befehl aktiviert worden. Durch Löschen der
Parameter mit dem E-Befehl werden auch die Pull-UpWiderstände wieder deaktiviert!
... wenn ich das laufende Messprogramm mit dem Taster T1 unterbrochen habe?
•
Die bis zu diesem Zeitpunkt aufgenommenen Messwerte sind im Flash-ROM des
Mikrocontrollers abgespeichert und können mit dem P-Befehl zum PC gesendet
werden.
... wenn ich die Messwerte zum PC übertragen habe und keine Log-Datei geöffnet hatte?
•
Die Messwerte bleiben so lange im Flash-ROM des Mikrocontrollers gespeichert,
bis sie durch eine neue Messreihe überschrieben werden. Man kann also die
vorhandenen Messwerte mehrfach zum PC übertragen.
Leider ist ein nachträglicher Abruf der aktuellen Messparameter zur Darstellung auf dem
Monitor aus dem Flash-Rom wegen der stark begrenzten Programmgröße von 2KB beim
ATmega8 Mikrocontroller nicht möglich. Wenn Sie sich nicht mehr sicher sind, wie das
Messprogramm parametriert ist, geben sie die Messparameter erneut ein und speichern sie die
Daten mit Shift+S. Wenn Sie öfter mit der gleichen Parameter-Einstellung Messreihen
durchführen, ist es günstiger, die Parameter für den Datenlogger in einer Parameter-Textdatei
zu speichern und diese zur Parametrierung zu verwenden (siehe nächste Seite).
7
Eine Parametrierdatei erstellen
Der Datenlogger kann auch über eine Textdatei parametriert werden. Erstellen Sie dazu mit
einem Texteditor eine entsprechende Text-Datei. Mit dem Menüpunkt File/Send File... in
Tera Term Pro wird die Datei zum Mikrocontroller gesendet. Sie können die Parametrierung
auch kommentieren. Benutzen Sie dazu das Zeichen „Semikolon“; wie unten dargestellt.
; Das ist eine Parametrierdatei fuer den Datenlogger mit ATmega32
; Ein Kommentar beginnt mit einem ; und endet mit einem RETURN
;
; alte Parametrierung loeschen
E
; analoge Eingaenge aktivieren
A0
A1
A2
A3
A4
A5
; die Pull-Up-Widerstaende an den ADC-Eingaengen einschalten
W0
W1
W2
W3
W4
W5
; einen Temperatursensor freischalten
T0
; Messintervall auf 30 Sekunden einstellen
I30
; Anzahl der Messwerte ist 7000 (15000 maximal)
N7000
; automatisches Messen freigeben
M
; Parameter im Flash-ROM abspeichern
S
8
Wichtiger Hinweis für USC008
Verwenden Sie ein umgebautes USC008-Board als Datenlogger, dürfen Sie die Einstellung
für die ADC-Referenzspannung nicht verändern. Das USC008-Board ist mit einer über ein
Trimmpoti einstellbaren Referenzspannung für den ADC ausgerüstet. Wenn Sie mit der
internen Referenzspannung von 2,56V oder mit der Option AREF=AVCC arbeiten möchten,
müssen Sie das Trimmpoti auslöten, da es sonst zu einer Zerstörung des Mikrocontrollers
kommt. Für das USC008-Board mit Trimmpoti ist also nur die Option R1 = externe
Referenzspannung am Pin AREF (default) zulässig.
9