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