Hier stelle ich meinen TWI-Datenlogger vor, basierend auf
TWI-Komponenten und für den Batteriebetrieb geeignet:
- PCF8583 als Uhr und Timer für das Messintervall,
- AT24C512 als Datenspeicher mit 64KByte,
- ATMEGA88 als Controller (die meiste Zeit im Powerdown-Modus)
- (beispielhaft) DS18B20 als Temperatursensor,
(beliebige andere Sensoren können stattdessen eingesetzt werden.)
Die Daten werden im CSV-Format ausgegeben und können direkt mit dem
CSV-Viewer von Ingo Wendler visualisiert werden.
Der Logger lässt sich über die serielle Schnittstelle konfigurieren und
auslesen.
Nach der Einstellung der aktuellen Zeit und des Messintervalls kann das
Loggen beginnen.
Mit einem Taster an Pin PD.3 (INT1) wird das Loggen gestartet und
beendet.
Während der Wartephasen ziehen alle Komponenten nur sehr wenig Strom
(gemessen weniger als 50uA bei 6 angeschlossenen DS18B20).
Die Stromaufnahme während der Messung beträgt ca. 15mA für die Dauer von
1 Sekunde.
Wenn alle 300 Sekunden eine Messreihe ausgeführt wird, dann liegt die
mittlere Stromaufnahme unter 100uA.
Mit einem 1000mAh-Akku kann also eine Betriebsdauer von 10.000h erreicht
werden.
Vermutlich wird die Beschränkung des Systems somit eher in der
bescheidenen Kapazität des Speichermoduls liegen.
Bei meiner konkrete Anwendung werden 6 Temperaturwerte im
5-Minutenabstand über die Dauer von 14 Tagen aufgezeichnen.
Der PCF8583 löst nach Ablauf des Messintervalls einen Interrupt aus, der
den M88 aus dem Powerdown-Modus holt.
Nach der Ausführung der Messreihe, der (binären) Speicherung des
Zeitstempels und der Messwerte verfällt das System wieder in den
Tiefschlaf.
Im RAM des PCF8583 werden folgende Daten abgelegt (und bleiben daher
auch bei einem Reset des M88 erhalten:
- Datum und Uhrzeit - verstehend sich von selbst,
- die Adresse des nächsten Datensatzes im AT24C512,
- das Messintervall (Einheit [Minuten/Sekunden] und Dauer [1..99]),
- das Kalenderjahr (der PCF8583 kennt nur Jahre von 0...3),
- ein Korrekturwert für die Gangungenauigkeit des PCF8583.
Angehängt sind der Quellcode, eine ausführlichere readme.pdf und ein
Schaltschema.
Viel Spaß beim Loggen.
Michael S
Hallo Michael Möller,
die Schaltung habe ich auf einer Lochrasterplatine aufgebaut.
Vermutlich hast du das ja schon beim betrachten des "Schaltschemas"
geahnt:
es ist als Liniengrafik mit einem CAD-Programm gezeichnet.
Michael S.
Hallo allerseits,
zwar ist mir nicht bekannt, ob irgendjemand das Programm verwendet.
Dennoch als Anhang zwei kleine Fehlerkorrekturen (betrifft Funktionen
zum Löschen des Eeproms).
Ansonsten sind zwischenzeitlich aus der Erfahrungen im praktischen
Betrieb kleiner Verbesserungen vorgenommen:
- Korrekturzeiten für die Uhr werden in 1/100 Sekunden / Stunde
angegeben
(feiner Korrekturmöglichkeit).
- die Sensoren werden beim Programmstart und beim Start des Loggens
geprüft - werden nicht alle gefunden, dann warnen LEDs.
Wird gar kein Sensor gefunden, dann startet das Loggen nicht.
- der benutzte / freie Speicer wird im Dialog mit dem Terminal
angezeigt.
Die Datenspeicherung auf bis zu 3 Eeproms ist in Arbeit.
Leider ist inzwischen der Speicherbedarf für den Programmcode deutlich
über die 8k-Grenze gestiegen, so dass ein Mega168 benötigt wird.
Ausserdem gibt es ein Layout zum Aufbau der Schaltung auf einer
3er-Lochrasterplatine mit einem Vorschlag für das Routen mit Brücken
(zwischen benachbarten 3er-Feldern) und "fliegender" Verdrahtung (wo
Brücken nicht möglich waren).
Bei Interesse bitte melden.
Michael S.
Hallo Michael,
ich finde Deinen Logger echt gut. Ich suche genau so etwas schon länger.
Allerdings würde ich es noch besser finden, wenn statt dem EEPROM eine
SD-Karte verwendet würde. So könnte man noch mehr Daten speichern.
Wenn Du interesse hast, das umzusetzen, würde ich für Deien Logger ein
schönes Layout machen.
Viele Grüße
Frank
Hallo Frank,
SD-Karten sind für mich absolutes Neuland ...
Erst einmal wollte ich die alten AT24C512 verbauen.
Und dann habe ich auch noch von den ATDB321 einige rumliegen.
Daher werde ich mich wohl im Moment nicht an die SD-Karten ranwagen.
Trotzdem danke für die Rückmeldung.
Michael S.
Hallo Frank,
würde sich denn eine SD-Karte in eine batteriebetriebe Lösung überhaupt
einfügen lassen ?
Kennt die SD-Karte einen power-down-Modus ?
Von den USB-Sticks her ist mir bekannt, dass die zumindest eine Batterie
in Nullkommanichts leersaugen würden.
Michael S.
Hallo Michael.
Sehr schönes Projekt!
Ich habe grosses Interesse an Deinem Logger.Möchte gerne mehrere
Temperaturen über den Winter in mindestens einen Raum festhalten.
(Heizungsvorlauf,Heizkörper,Fussboden).
Leider O Ahnung in C.Ein klein bisschen in Bascom.
Nun habe ich letztendlich das Programm in den Mega 88 bekommen,
aber es kommt nur Müll raus (wie Jahr 16,Sek 82).
Auch lässt sich nur ein Sensor anmelden.
Beim Eeprom auslesen auch Schietzahlen bei Datum,Zeit,Tempwert.
Ich gehe davon aus das ich etwas falsch mache,zum Beispiel beim
Compilieren.
Daher meine Frage ob es möglich währe eine .hex Datei einzustellen.
Und ja,ich habe Interesse an der "fliegenden Verdrahtung".
MfG Rainer
Hallo Rainer,
hier hänge ich den "Schaltplan" und mein Layout auf den 3er
Lochrasterplatinen an. Kann man das Schema verstehen ??
Ein Foto des zuletzt gelöteten Loggers füge ich zur Veranschaulichung
bei (das Schema ist gegenüber dem Foto schon wieder weiterentwickelt !).
Ein hex-file für den m88 kann ich dir erst morgen liefern, da der
Programmcode zur Zeit auf 10k angewachsen ist - ich muss da erst wieder
etwas ausmisten ...
mfg
Michael S.
Hallo Rainer,
anliegend das hex-file für den m88.
Das Programm entspricht weitgehend dem in der readme beschriebenen.
Zusätzlich gibt es beim Start noch einen Hiweis aus, wenn weniger
Sensoren gefunden wurden als angemeldet sind (dabei erscheint die
Meldung "Sensor Fehler" und die LED_LOG blinkt einige Sekunden).
Wenn du nicht mehr als einen Sensor anmelden kannst, dann ahne ich,
welchen Fehler (im Sinne des Programmes) du machst:
Beim Anmelden bzw. beim Auslesen der SensorId darf nur genau EIN
EINZIGER Sensor angeschlossen sein.
Die zu verwendenden Sensoren müssen also nacheinander und einzeln am
Logger angemeldet werden, erst nach dem Anmelden dürfen sie gemeinsam
auf den "Bus" geschaltet werden.
Zur Betriebnahme schlage ich folgende Reihenfolge/Prüfungen vor:
1. Die LED_INT am PCF8583 muss blinken (dann arbeitet der PCF8583).
2. Das Programm muss sein Menü auf dem Terminal ausgeben
(wenn keine Fehlermeldungen erscheinen, dann sollten die
TWI-Teilnehmer mit ACK geantwortet haben).
3. Datum und Uhrzeit einstellen.
4. Messintervall einstellen (z.B, auf 5 Sekunden zum Testen).
5. Mindestens einen Sensor anmelden.
6. Logvorgang starten - alle 5 Sekunden muss die LED_INT kurz
aufleuchten.
7. Logvorgang nach einigen Messungen beenden.
8. Geloggte Daten ausgeben und auf Plausibilität prüfen.
Wenn alles funktioniert, dann hast du Glück.
Wenn nicht, dann hast du ein Problem, denn ohne Kenntnis des Quellcodes
wird die Eingrenzung von Fehlerquellen schwer sein.
Zur Sicherheit füge ich auch noch den zugehörigen Quellcode der
logger_main.c bei - dann kannst du vielleicht erahnen, was wo passiert.
Viel Spaß beim Loggen,
Michael S.
Hallo Michael,
Dank für die schnelle Antwort.
Ich habe gerade versucht die .hex zu flashen.myAVR Prog Tool V 1.31
meckert.(9022 Byte => 8192 Byte)
AVR Studio 4 Build 716 meckert auch (The contents of se HEX file does
not fit in the selected device).
Ist nicht weiter schlimm,möchte gerne die Version mit 3 Eeprom aufbauen.
Muss mir dafür aber noch M168 und 24C512 bestellen.
Mfg Rainer
Hallo Rainer,
sollte ich hex-files vertauscht haben ??
Das kann ich jetzt von meinem Arbeitsplatz aus nicht überprüfen.
Bevor du in neue Bauteile investierst, solltest du die Variante für 1
Eeprom auf einem breadboard aufbauen und zum Laufen bringen.
Den Programmcode für die 3 Eeproms habe ich noch gar nicht ins Netz
gestellt, das ist dir klar ?
Das Programm funktioniert zwar bereits, ist aber noch nicht ausführlich
getestet.
mfg
Michael S.
Hallo Rainer,
es war mein Fehler ....
Als Target war noch der M168 eingetragen.
Das hex-file für den M88 füge ich bei.
Es ist übrigens erstaunlich, dass der unveränderte Quellcode für den
M168 9022 Byte und für den M88 nur ca. 8190 Byte Programmcode
produziert.
mfg
Michael S.
Hallo Michael,
habe gleich geflasht,aber das gleiche wie mit meiner .hex.
Ich werde nun mal das ganze auf Steckbrett aufbauen.
Anbei zwei Fotos(OK könnten besser sein)wie es bis jetzt läuft.
MfG Rainer
Hallo Michael,
ich denke, das man die VCC von der D-Karte einfach mit einem P-Channel
Mosfet abschalten kann, dann bräuchte die keinen Strom, wenn der Logger
inaktiv ist.
Ansonsten braucht man ja nur ein SPI-Interface.
Da hat doch hier im Microcontroller.net doch jemand diesen Mini GPS
Logger gebaut. Der hatte auch kein Filesystem verwendet. Da könnte man
ja abschreiben? Oder?
Wie gesagt: Ich würds gerne Layouten. Und ne Platine wär auch für dich
drin...
Da fällt mir noch was ein:
von Sparkfun gibt es ja einen Logger, der nichts anderes macht, als
RS232 Daten auf einer SD-Karte zu speichern, das wäre vielleicht auch
ein Weg....
@ Rainer,
nach dem, was ich auf dem Bildschirmfoto sehen kann, stelle ich fest:
1.) Die Uhr und das Eeprom haben mit ACK geantwortet.
2.) Die serielle Schnittstelle funktioniert (der CPU-Takt stimmt also).
3.) Im RAM des PCF8583 sind noch zufällige Daten vorhanden, die hier
falsch interpretiert werden:
- Messintervall und Messeinheit,
- Korrekturzeit.
Das ist aber nicht tragisch.
Mit "2" bzw. "T" können die Werte geändert werden.
Funktioniert das ?
Wo liegen jetzt die weiteren Probleme ?
Gelingt es, einen einzelnen Sensor auszulesen/anzumelden ?
Kann dann das Loggen gestartet werden ?
@ Frank,
Den Gedanken, eine SD-Karte als Speichermedium zu wählen, fände ich dann
reizvoll, wenn man anschließend die SD-Karte direkt am PC lesen könnte.
Die Daten würden dann direkt im "Klartext" auf die Karte geschrieben
werden (Platz ist ja genug vorhanden), im Programm könnte die
Ausgaberoutine entfallen.
Aber es muss natürlich eine vom PC lesbare Datei geschrieben werden.
Oder wie siehst du das ?
Die TWI-Eeproms sind ohne Zweifel etwas altbacken.
Aber inzwischen kann ich damit 192kB speichern.
Und 192kB als Logdaten - da lässt sich schon einiges aufzeichnen:
Für meine Anwendung (wie bei Rainer das Aufzeichnen von Aussen-. Raum-,
Heizungsvor-/rücklauftemperaturen) kann ich über 6 Woche (im
Batteriebetrieb!) alle 5 Minuten 6 Temperaturwerte ablegen.
Weiterhin von Vorteil - gerade für den (noch) nicht Profi - ist, dass
man sich auf 2 Schnittstellen (RS232 und TWI) beschränken kann.
Wie sieht es den bei den SH-Karten mit der Kostenseite aus ?
Waren die Slots für die Karten nicht ziemlich teuer ?
Aber ich bin natürlich auch neugierig.
An welche Anwendung hattest du denn gedacht ?
mfg
Michael S.
PS:
In den vergangenen Tagen habe ich mehrere Stunden in frustrierende
Fehlersuche investiert.
Am Ende stellte sich heraus, dass die unbeschalteten WP-Pins der Eeproms
(manchmal) auf ca. 2/3 VCC lagen.
Dadurch wurde der Schreibschutz aktiviert, ohne dass am TWI-Bus Fehler
erkannt wurden.
Inzwischen habe ich die WP-Pins auf gnd gezogen - die Probleme scheinen
behoben.
Hallo Michael,
das Datum und die Uhrzeit sieht folgendermassen aus.
Eingegeben im "T" 21.10.10 10:22:0
Aktuelle Zeit: 1.1.14 22:10:101
Sensor kann ich einen auslesen und anmelden.
Messintervall lasst sich einstellen,aber bei Menuepunkt 3 bleibt er
hängen.
Danach hilft nur Reset.
Hallo Rainer,
mit "T" wird die Zeitkorrektur eingestellt ("T" wie Time):
zuerst das Vorzeichen +/- angeben,
dann den Absolutwert - hier erst einmal 0 wählen.
Dann wird die Zeit nicht korrigiert.
Mit "1" werden Datum und Uhrzeit eingestellt.
Nach der Eingabe der Werte sollte diese im Menue angezeigt werden.
Die Anzeige von 101 für Sekunden kann eigentlich nicht sein - besser
gesagt: sollte nicht sein.
Hast du eventuell die Adressen der Uhr und des Speichers vertauscht ?
Die Uhr hat die TWI-Adresse 160, das 1. Eeprom 162.
Zum Prüfen solltest du mehrfach eine ungültige Eingabe machen, das Menue
wird dann jedesmal neu aufgebaut und dabei die Zeit neu eingelesen.
Ändert sich die Angabe der Sekunden nicht, dann wird "steht" die Uhr
oder es werden konstante Werte aus dem Eeprom ausgelesen.
Blinkt denn die LED am Pin INT der Uhr ? Sie sollte !
mfg
Michael S.
Hallo allerseits,
nachdem der Logger seit einiger Zeit ohne erkennbare Fehler seinen
Dienst tut, will ich hier die überarbeitete Version zur Verfügung
stellen. Hinzugekommen sind:
- es können bis zu 3 TWI-Eeproms als Datenspeicher verwendet werden
(also bis zu 3 * 64kB).
- als Hardware wird mindestens ein ATMega 168 benötigt
(Programmgröße ca. 10.8 kB).
- die Korrekturzeit für die RTC ist nun mit bis zu +-255 * 1/100
Sekunden je Stunde möglich,
Gangabweichungen der Uhr können damit feiner austariert werden.
- Mit der Taste "Q" wird ein Software-Reset via Watchdog ausgeführt.
- Mit der Taste "W" wird geprüft, ob die TWI-Eeproms schreibgeschützt
sind.
- Es werden Meldungen über den freien/belegten Speicher über das
Terminal ausgegeben.
- Bei Programm-Start und beim Log-Start wird geprüft, ob alle
angemeldeten Sensoren ansprechbar sind.
Bei einem Fehler wird eine Meldung ausgegeben und die LED's blinken
einige Zeit.
Wenn alle Sensoren gefunden werden, dann wird nur einmal geblinkt -
danach verlöschen alle LED's.
In beiden Fällen wird der Logvorgang gestartet.
Sinn dieses Prozedere ist zu erkennen, ob die Steckverbindungen
Kontakt haben
(leider hatte ich viele Probleme mit 3.5mm Stereo-Klinken-
steckverbindungen)
Noch als genereller Hinweis:
Dieser Logger will nicht als High-End-Logger Gigabytes an Daten im
Microsekundentakt speichern.
Er will autark sein (ohne externe Stromversorgung) und in festen
Zeitintervallen auch über längere Zeiträume Daten aufzeichnen.
Er benutzt nur die gängige RS232- und TWI-Schnittstelle
(ok, für den speziellen Fall der Temperaturmessung mit dem DS18B20 kommt
noch die 1-wire-Schnittstelle hinzu).
Viel Spaß beim Loggen.
Michael S.
Visualisieren der Logdaten
Nach dem (erfolgreichen) Loggen stellt sich die Frage, wie man die Daten
präsentiert.
Begonnen habe ich damit, die Daten mit dem 'csv-viewer' auszugegeben.
Dann bin ich den zahlreichen Hinweisen auf "gnuplot" gefolgt.
Ein Programm, das offensichtlich schon seit 1986 entwickelt wird und mit
einem "kilometerlangen Manual" daherkommt, das kann ja nicht ganz
schlecht sein.
Nun - nach etwas Einarbeitungszeit bin ich nicht enttäuscht worden - es
scheint nichts zu geben, was gnuplot nicht kann.
Für Interessierte habe ich hier meine ersten Übungen zusammengestellt:
1.) data.dem
Eine Logdatei mit Datumseintrag und 6 Temperaturwerten (für die
Auswertung mit dem CSV-viewer gedacht) wird direkt mit gnuplot geöffnet
und visualisiert (einzig notwendige Änderung in der Log-Datei: die erste
Zeile mit den Feldbezeichnungen mit '#' auskommentieren).
2.) baro.dem
Eine Logdatei ohne Datumseinträge nur mit Luftdruckmesswerten in
zeitlichem Abstand von 5 Minuten wird mit gnuplot dargestellt.
3.) ntc.dem
Die Widerstandswerte eines NTC werden im Bereich von -25 bis +75°C
berechnet und grafisch dargestellt.
Für eine simulierte Reihenschaltung mit einem 10k-Widerstand wird die am
NTC abfallende Spannung
berechnet und grafisch dargestellt.
Die PDF-Ausgabe des 1.Beispiels ist als separate Datei beigefügt.
Alle 3 Beispiele mit den zugrundeliegenden Logdateien sind in der
gnuplot-dem.zip zusammengefasst.
Die Daten sollten in ein beliebiges Verzeichnis kopiert werden.
Anschließend wird aus gnuplot heraus mit "ChDir" genau dieses
Verzeichnis angewählt.
Nun können die "*.dem" Dateien über "File/Demos .." geöffnet und
ausgeführt werden.
In den *.dem Dateien kann man mit einem Editor Parameter verändern und
die Auswirkung auf die Ausgabe beobachten.
Viel Spaß beim Visualieren.
Michael S.
Hallo Michael S.,
Da Dein Projekt ganz gut zu meinem passen könnte, will ich mal schnell
einen Überblick geben:
Ich möchte Lichtstärken in einem Gewässer messen. Dazu wird ein Sensor
abgesenkt (Wassertiefe max. 50 m). In dem Sensorgehäuse ist noch ein
Drucksensor, um die Tiefe zu erhalten. Die Daten von Lichtsensor und
Drucksensor werden gemultiplext und per RS232 als ASCII-Text an die
Wasseroberfläche geschickt. Ein zweiter Sensor schwimmt auf der
Wasseroberfläche und misst die Lichtstärke ohne Wasser dazwischen. So
kann die Tiefen-Lichtstärke relativ zur Oberflächenlichtstärke ermittelt
werden. Der Sensor an der Oberfläche ist genauso aufgebaut wie der
Tiefensensor, bloß ohne Drucksensor.
Da ich von Mikrocontrollern (noch) keine Ahnung habe, ist derzeit
geplant, einen Miniatur-PC mit zwei seriellen Eingängen zu verwenden.
Man soll also im Boot sitzen können, die Messwerte auf einem 4-zeiligen
Display lesen, die Messart etc. per 10er-Tastatur einstellen können usw.
Die Daten können auf einem USB-Stick oder einer CF-Karte aufgezeichnet
werden.
Nun erscheint mir jedoch das Ganze - zwei RS232 anzeigen und loggen,
mehr ist das ja eigentlich nicht, mit Kanonen auf Spatzen geschossen.
Einen ganzen PC dafür zu verbauen kommt mir etwas überdimensioniert vor,
geschweige vom Stromverbrauch. Ich habe zwar einen 12V-Bleiakku dafür,
aber der wiegt ja auch ein bisschen.
Sekündliche Werte reichen, in 10 oder im Extremfall 20 min hat man die
Messung fertig.
Wie gesagt, da keine Ahnung von Mikrocontrollern, kann ich nicht
einschätzen, ob man Deine Schaltung/Programm daran anpassen könnte.
Schön wäre eben noch ein Display (ich habe hier ein serielles) und eine
10er-Tastatur (ich habe hier eine USB-Tastatur), da muss man vielleicht
mit ein paar Tastern auskommen (up/down/enter müsste vielleicht schon
reichen).
Würde mich über eine Meinung dazu freuen!
Richard
Hallo Richard,
wenn ich zusammenfassen darf:
Du willst im Sekundenabstand einige wenige Daten, die via serieller
Schnittstelle empfangen werden, über einen Zeitraum von ca. 20 Minuten
- zum einen direkt auf einem LCD anzeigen und
- zum anderen aufzeichnen.
Der hier vorgestellte Logger kann das zwar im Prinzip auch, aber er hat
andere Schwerpunkte.
Da sowieso das Programm nicht unerheblich verändert werden müsste, würde
ich an Deiner Stelle Lösungen für die Probleme suchen,
- wie man Daten auf einem LCD darstellt und
- wie man Daten auf einem geeigneten Datenträger loggt.
Für beide Probleme gibt es zahllose Beispiele, die man nur noch
miteinander verheiraten muss.
Ich selbst habe zur Datenspeicherung mit USB-Sticks und Eeproms
experimentiert und meine Lösungen auch in der Codesammlung
veröffentlicht.
Aber genauso gibt es in der Codesammlung auch Beisspiele für die
Speicherung auf den handelsüblichen Karten.
Du hast lediglich die Qual der Wahl, vorhanden ist alles.
mfg
Michael S.