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! Hast Du die Schaltung auf einer Lochrasterplatine aufgebaut oder gibt es ein Platinenlayout? Danke! Michael
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.
Hm, schade, aber soweit ich weiss, kann man ja auch recht einfach Daten auf einer SD-Karte speichern, ohne File-System. Vielleicht ist ja das was?
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.