Forum: Mikrocontroller und Digitale Elektronik Datenlogger Temperatur


von A. R. (redegle)


Lesenswert?

Hallo,

ich würde gerne eine kleine simple Schaltung bauen, die mir über einen 
Zeitraum von ca. 8 Stunden alle paar Minuten die aktuelle Temperatur 
abspeichert. Das ganze sollte natürlich mit einem Mikrocontroller 
(Atmel) realisiert werden.

Die Signalkonditionierung und das Auswerten des Temperatursensors sollte 
kein Problem darstellen. Ich weiß jedoch noch nicht, wie ich die Daten 
am besten auf den PC bekommen soll. Währe für alle Vorschläge und Hilfe 
dankbar. Momentan habe ich mir 2 eventuelle Lösungen überlegt.

1. Speichern der Daten auf eine SD-Karte. Hierfür müsste ich 
wahrscheinlich in FAT32 schreiben und ein Textdokument für eine 
csv-Datei erstellen? Gibt es hier entsprechende Bibliothek für GCC? So 
weit ich mich im Internet informiert habe kann ein SD-Karte direkt über 
SPI angesteuert werden.

2. Speichern in den Flashspeicher und diesen später über RS232 auslesen. 
Hierfür bräuchte ich dann eine Bibliothek in C oder C++ die auf die 
RS232 Schnittstelle bzw. einen USB-RS232-Adapter zugreift.

Persönlich würde ich Variante 1 bevorzugen.

Kann mir jemand ein Display empfehlen auf dem ich die aktuelle 
Temperatur sowie die Uhrzeit darstellen kann? Müsste mich in die 
Ansteuerung noch einarbeiten. Bin also auch für Hilfestellung bezüglich 
eines Displays dankbar.

von MaWin (Gast)


Lesenswert?

Üblich wäre heute:
Per USB an den PC übertragen, dort als Speichermedium (1 Datei, 100 
Zeilen a 5 Zeichen) erscheinen.
Das kann auch ein AVR, der kein USB Interface hat (obwohl man sich dann 
mit der Software mehr Mühe machen muss).

von Cyblord -. (cyblord)


Lesenswert?

A. R. schrieb:
> 2. Speichern in den Flashspeicher und diesen später über RS232 auslesen.
> Hierfür bräuchte ich dann eine Bibliothek in C oder C++ die auf die
> RS232 Schnittstelle bzw. einen USB-RS232-Adapter zugreift.
Wieso brauchst du dafür ein Bibliothek? Das sind 10 Zeilen Code? Hast du 
dich schonmal mit RS232 usw. beschäftigt?

> Kann mir jemand ein Display empfehlen auf dem ich die aktuelle
> Temperatur sowie die Uhrzeit darstellen kann? Müsste mich in die
> Ansteuerung noch einarbeiten. Bin also auch für Hilfestellung bezüglich
> eines Displays dankbar.
Standard 16x2 LCD Display. Code dafür gibts Tonnenweise im Netz und in 
der Codesammlung.

Eventuell nimmst du dir grad etwas zuviel aufeinmal vor. Denn deine 
Vorkenntnisse scheinen recht übersichtlich zu sein.

gruß cyblord

von A. R. (redegle)


Lesenswert?

>Üblich wäre heute:
>Per USB an den PC übertragen, dort als Speichermedium (1 Datei, 100
>Zeilen a 5 Zeichen) erscheinen.
>Das kann auch ein AVR, der kein USB Interface hat (obwohl man sich dann
>mit der Software mehr Mühe machen muss).

Gerade bei USB habe ich hier im Forum mehrmals gelesen, dass dies sehr 
kompliziert sein soll. Deswegen würde ich eine einfachere Lösung 
bevorziehen. Möchte für die Schaltung privat aktuell nicht viel Zeit 
aufwenden.

>Wieso brauchst du dafür ein Bibliothek? Das sind 10 Zeilen Code? Hast du
>dich schonmal mit RS232 usw. beschäftigt?

Ich habe schon RS232 seitens eines Mikrocontrollers in Assembler 
programmiert, das war aber kein Atmel. Mir währe neu neu das ich unter 
Windows ohne Bibliothek auf eine RS232 Schnittstelle zugreifen kann. Man 
muss unter C doch schon für einfache mathematische Operationen math.h 
einbinden.

>Standard 16x2 LCD Display. Code dafür gibts Tonnenweise im Netz und in
>der Codesammlung.

Das werde ich nachher mal googlen.

>Eventuell nimmst du dir grad etwas zuviel aufeinmal vor. Denn deine
>Vorkenntnisse scheinen recht übersichtlich zu sein.

Vorkenntnisse sind schon vorhanden aber nicht speziell mit 
Mikrocontrollern. Deswegen schrieb ich ja auch, dass es eine einfache 
Lösung sein soll.

von Cyblord -. (cyblord)


Lesenswert?

A. R. schrieb:

> Ich habe schon RS232 seitens eines Mikrocontrollers in Assembler
> programmiert, das war aber kein Atmel. Mir währe neu neu das ich unter
> Windows ohne Bibliothek auf eine RS232 Schnittstelle zugreifen kann. Man
> muss unter C doch schon für einfache mathematische Operationen math.h
> einbinden.
Ja gut also wenn es bereits an der Ansteuerung der seriellen 
Schnittstelle am PC scheitert... Unter Linux braucht man doch nur die 
entsprechende Device-File des Anschlusses zu beschreiben/lesen. Unter 
Windows kann man mit OpenFile("COM1".....) auf die Schnittstelle 
zugreifen. windows.h wäre hier deine Bibliothek.

> Vorkenntnisse sind schon vorhanden aber nicht speziell mit
> Mikrocontrollern. Deswegen schrieb ich ja auch, dass es eine einfache
> Lösung sein soll.
Einfach ist halt so ne Sache wenn es an Vorkenntnissen fehlt. Und an 
PC-Programmierung.
Aber für SD-Karten gibts für AVRs ebenfalls unendlich viele Libs und 
Quellcode. Also such dir was raus, speicher den Temp da drauf und steck 
die nachher in den PC.

Ich frage mich wozu der Thread hier gut sein soll. Soll hier jemand für 
dich fertigen Code zusammensuchen? Mehr isses ja nicht. Wenn dabei 
KONKRETE Fragen auftauchen kann man diese ja dann gezielt stellen. Aber 
so isses doch irgendwie fruchtlos.

gruß cyblord

von A. R. (redegle)


Lesenswert?

>Ja gut also wenn es bereits an der Ansteuerung der seriellen
>Schnittstelle am PC scheitert... Unter Linux braucht man doch nur die
>entsprechende Device-File des Anschlusses zu beschreiben/lesen. Unter
>Windows kann man mit OpenFile("COM1".....) auf die Schnittstelle
>zugreifen. windows.h wäre hier deine Bibliothek.

Was heißt denn das er bereits an der Ansteuerung der seriellen 
Schnittstelle scheitert. Nur weil ich es noch nie gemacht habe heißt das 
nicht, dass ich das nicht hinbekommen würde. Woher soll ich denn wissen, 
mit welchen Funktionen ich auf die Schnittstelle zugreifen kann. Soetwas 
kann man sich nicht aus den Fingern saugen sondern muss man nachlesen. 
Aber danke für den Hinweis mit "OpenFile" und windows.h damit hätte ich 
schon ein paar Stichpunkte zur Suche bei google.

>Ich frage mich wozu der Thread hier gut sein soll. Soll hier jemand für
>dich fertigen Code zusammensuchen? Mehr isses ja nicht. Wenn dabei
>KONKRETE Fragen auftauchen kann man diese ja dann gezielt stellen. Aber
>so isses doch irgendwie fruchtlos.

Ich habe nie etwas geschrieben das mir jemand den Code zusammensuchen 
soll. Ich habe geschrieben was ich vor habe und 2 Wege geschrieben wie 
ich mir vorstellen könnte so etwas zu realisieren. Da ich aber keinen 
der Wege bereits gegangen bin kann ich nicht abschätzten welcher Weg wie 
viel Aufwand ist. Deswegen hatte ich mir von etwas erfahreneren 
Forenbenutzern erhofft, dass diese abwägen welcher Weg Sinnvoller ist.

Z.B. hätte der Einwand kommen können, dass Flashspeicher nur x mal 
beschrieben werden kann und man deswegen definitiv eine SD-Karte 
verwenden sollte oder das es extrem umständlich ist eine SD-Karte zu 
beschreiben und es deswegen mehr Sinn macht die Daten über RS232 zu 
übertragen.

Ich wollte vermeiden beide Wege zu gehen um dann zu erkennen das einer 
der Wege nicht zielführend ist.

Vielleicht hätten auch so Kommentare kommen können wie:"Ich habe da 
einen super Link zum Einarbeiten in Displayansteuerung".

Ich habe mich jetzt für den Weg mit der SD-Karte entschieden, konnte im 
Internet ein paar gute Erklärungen zur Ansteuerung von LCD-Display 
finden und habe eben die notwendigen Sachen bestellt.

Falls das später jemanden interessieren sollte sind hier die 
angesprochenen Links zu Displays:

http://www.sprut.de/electronic/lcd/index.htm#4x40
Beschreibt den HD44780 gut.

http://www.stefan-buchgeher.info/elektronik/lcd/lcd.html

http://www.rn-wissen.de/index.php/LCD-Modul_am_AVR
Programmbeispiel für GCC

von mike (Gast)


Lesenswert?

Meine Idee wäre: Einen Arduino uno nehmen und ein Shield mit SD-Ram, mit 
den dazugehörigen Libraries wäre das schnell realisierbar. 
Temperatursensor könnte über I2C oder ähnliches angebunden werden.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Fragen über Fragen... :-)

Wie groß darf die Schaltung sein (Abmessungen)?

Vorgaben zum Stromverbrauch?

Genaues Messintervall?

Temperaturbereich?

Genauigkeit der Temperatur?

Zeitstempel mit aufzeichnen?

Genauigkeit der Zeit?

Maximale Materialkosten?

Stückzahl?


Sorry, falls manche der Fragen schon beantwortet waren und ich sie 
übersehen habe.

Prinzipiell lässt sich eine solche Anforderung auch mit einem ATtiny13A 
realisieren, der die Daten auf eine SD-Karte schreibt - ohne 
Dateisystem, denn sowas braucht man bei diesen einfachen Daten wirklich 
nicht.

Einfacher ist aber bestimmt mit einem Adruino oder Ähnlichem - 
besonders, wenn es ein Einzelstück werden soll.

von A. R. (redegle)


Lesenswert?

>Wie groß darf die Schaltung sein (Abmessungen)?

Spielt eigendlich keine Rolle. Denke eine Lochrasterplatinengröße. Also 
ca. 160mm x 100mm. Das ganze soll simpel sein also eine Montage auf 
Lochraster reicht.

>Vorgaben zum Stromverbrauch?

Das Gerät muss nicht Batteriebetrieben sein.
Ich denke das einzige was viel Leistung verbraucht ist das Display (mit 
Beleuchtung) und dieses werde ich wahrscheinlich mit einem Transistor 
per Tastenklick einschalten bzw. nach einer bestimmten Zeit ausschalten.

Also wenige mA Stromverbrauch im Durchschnitt wäre der Wunsch. Dann 
könnte man das ganze später mit einem 9V Block für ein paar Tage 
betreiben.

>Genaues Messintervall?
Minimalvorgabe: Einmal alle 10 min für 8 Stunden.
Mehr sollte jedoch mit einer SD-Karte problemlos möglich sein. Ich denke 
da ein sekündliches Abspeichern der Temperatur.

>Temperaturbereich?
10 °C bis 40°C oder mehr.

>Genauigkeit der Temperatur?
+/- 0,5 °C oder besser.

>Zeitstempel mit aufzeichnen?
Ja

>Genauigkeit der Zeit?
besser als 1min Abweichung auf 8h

>Maximale Materialkosten?
Kleiner 100 Euro.
Ich schätze der reine Materialwert wird bei ca. 40 Euro sein. Das 
teuerste war das Display. Sachen sind schon bestellt.

>Stückzahl?
1
Vielleicht erstelle ich später mal eine Platine. Dann wäre das ein 
Prototyp auf Locherraster + eine Platine.


Da die Sachen ja schon bestellt sind möchte ich mein Konzept kurz 
vorstellen.

Mikrocontroller: ATmega644PA-20PU im DIP 40 Gehäuse
Temperatursensor:
Analog:   LM335    Genauigkeit 0,5°C
oder
Digital:  TSIC306  Genauigkeit 0,3°C

Den LM335 würde ich dann entsprechend mit einem OP an den 
Spannungsbereich des A/D-Wanlders angepasst, was natürlich die 
Genauigkeit noch weiter senkt. Also ersteinmal wird der TSIC306 
verwendet

Als Quarz wird ein 16MHz Quarz verwendet. Dieser hat eine Genauigkeit 
von 20ppm. Bei einem Temperaturbereich von 0°C bis 50°C verbessert sich 
die Genauigkeit auf 5ppm. Das ist ein Fehler von 432ms pro Tag.

Die aktuelle Zeit wird über Taster eingestellt. Das verwendete Display 
kann ich heute Abend nennen falls Interesse besteht. Die SD-Karte möchte 
ich über SPI ansteuern.

>Prinzipiell lässt sich eine solche Anforderung auch mit einem ATtiny13A
>realisieren, der die Daten auf eine SD-Karte schreibt - ohne
>Dateisystem, denn sowas braucht man bei diesen einfachen Daten wirklich
>nicht.

Kann ich die Daten ohne Dateisystem auslesen?

von Karl H. (kbuchegg)


Lesenswert?

A. R. schrieb:

>>Prinzipiell lässt sich eine solche Anforderung auch mit einem ATtiny13A
>>realisieren, der die Daten auf eine SD-Karte schreibt - ohne
>>Dateisystem, denn sowas braucht man bei diesen einfachen Daten wirklich
>>nicht.
>
> Kann ich die Daten ohne Dateisystem auslesen?

Wozu willst du den Weg gehen.

Dein Mega644 hat 64KBytes Flash und 4K SRAM.

Der Rest deines Programms (ohne den SD Teil) braucht vielleicht 0.5K 
Flash und ein paar Zig-Bytes SRAM. Was hast du mit dem Rest vom 
Flash/SRAM vor, dass du dem nicht auch noch die Verwaltung der 
Filestruktur auf der SD-Karte überantworten willst? Den µC mit Gewalt zu 
99% unausgelastet lassen?

von Rene Z. (renezimmermann)


Lesenswert?

Hi,

wenn es schnell gehen soll AT90USBKEY.

vorhanden ist:

1. USB Schnittstelle zum Datenauslesen und Einstellen der Logparameter
2. Dataflash zum Speichern der Temperaturwerte
3. Temperatursensor (NTC) oder einfach einen DS18B20 anschließen
4. Led's zur Statusanzeige
5. Quarz für die genaue Zeitbasis
6. Bootloader

6. wer es braucht den Joystick (Menuesystem mit Display an einem Port?)

Gruß Rene

von Werner (Gast)


Lesenswert?

A. R. schrieb:
> Z.B. hätte der Einwand kommen können, dass Flashspeicher nur x mal
> beschrieben werden kann und man deswegen definitiv eine SD-Karte
> verwenden sollte

Was meinst du, was in einer SD-Karte für Speicherbausteine verwendet 
werden? Das sind auch Flash-EEPROMs.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Werner schrieb:
> Was meinst du, was in einer SD-Karte für Speicherbausteine verwendet
> werden? Das sind auch Flash-EEPROMs.

Stimmt schon, aber die SD-Karte hat ein Speichermanagement, das dafür 
sorgt, dass die ganzen (z.B.) 2 GB gleichmäßig ausgelastet werden, das 
heißt, du kannst die paar kB, die du brauchst nicht nur 1000-mal, 
sondern wahrscheinlich ein paar Millionen Mal beschreiben.

A. R. schrieb:
> Kann ich die Daten ohne Dateisystem auslesen?

Ja. Wäre bei Linux ganz einfach. Mit Windows kenn ich mich nicht so gut 
aus.

Aber wenn du eh einen großen Brummer wie den ATmega644 verwendest, dann 
schließ ich mich dem Vorschlag von Karl Heinz an.

A. R. schrieb:
> Da die Sachen ja schon bestellt sind möchte ich mein Konzept kurz
> vorstellen.

Gefällt mir gut!

A. R. schrieb:
> Das teuerste war das Display.

Hier hätte ich drei 7-Segment-LED-Anzeigen verwendet, denn wenn du das 
Display eh nur auf Anforderung aktivierst, spielt der Stromverbrauch 
keine große Rolle. Außerdem hat der ATmega644 genügend Pins, um die 
Segmente sogar einzeln anzusteuern.

A. R. schrieb:
> Minimalvorgabe: Einmal alle 10 min für 8 Stunden.

In dem Fall brauchst du gar keinen externen Speicher, du kannst alles 
ins RAM schreiben. Der ATmega644 hat 4 KB SRAM, allein die Hälfte davon 
reicht schon für 4 Messwerte je Minute, du brauchst ja nur ein Byte je 
Messwert. Du könntest sogar zum billigeren ATmega324 wechseln, wenn du 
mit 30-Sekunden-Intervallen zufrieden bist.

Ein Gedanke zum Auslesen der Werte:

Warum so kompliziert? Du willst ja nur lesen und nichts reinschreiben. 
Das heißt, du könntest die Daten auch ohne große Pegelwandlung seriell 
raussenden - eventuell mit Prüfsummen. Das Raussenden entweder per 
Leitung oder per LED.

Markus

von A. R. (redegle)


Angehängte Dateien:

Lesenswert?

@Karl Heinz Buchegger,

ich möchte nicht unbedingt auf eine Filestruktur verzichten. Das war 
wohl ein Missverständnis. Mich hat es nur gewundert das ein Rechner eine 
SD-Karte ohne Filestruktur lesen kann. Ich dachte das Windows einen 
Datenträger ohne Filestruktur immer erst einmal formatieren möchte. 
Deswegen die Nachfrage wie so etwas funktioniert.

Ich habe übrigens schon ein paar Seiten bezüglich SD-Karten und dem 
filesystem gefunden. Werde mich näher damit beschäftigen sobald ich zum 
Programmieren komme. Hier ein paar Links:

http://www.mikrocontroller.net/articles/AVR_FAT32
Beitrag "MMC SD library FAT16 FAT32 read write"
http://www.ulrichradig.de/home/index.php/avr/mmc-sd/
http://www.mikrocontroller.net/articles/MMC-_und_SD-Karten
http://spurtikus.de/basteln/avr_sd_mmc.html

@Rene Zimmermann,

danke für den Vorschlag. Aber mir ist eine Eigenenticklung lieber als 
eine fertige Platine (AT90USBKEY) zu verwenden. Möchte ja selber auch 
noch etwas zu tun haben.

>Was meinst du, was in einer SD-Karte für Speicherbausteine verwendet
>werden? Das sind auch Flash-EEPROMs.

Richtig, aber der externen Flash ist wesentlich größer und ich kann Ihn 
ersetzten. Zudem kann ich die SD-Karte direkt in einen Computer 
einstecken und die Daten so auslesen. Ich denke das beide Wege 
zielführend sind. Es gibt da kein richtig oder falsch. Ich habe mich 
halt nun so Entschieden.

>Aber wenn du eh einen großen Brummer wie den ATmega644 verwendest, dann
>schließ ich mich dem Vorschlag von Karl Heinz an.

Ich auch! Hoffe ich kann auf eure Hilfe zählen falls etwas nicht klappen 
sollte.

>Gefällt mir gut!
Das freut mich!

>Hier hätte ich drei 7-Segment-LED-Anzeigen verwendet, denn wenn du das
>Display eh nur auf Anforderung aktivierst, spielt der Stromverbrauch
>keine große Rolle. Außerdem hat der ATmega644 genügend Pins, um die
>Segmente sogar einzeln anzusteuern.

Die Idee ist nicht schlecht ich hatte aber 2 Gründe für ein Display.
-Ich wollte lernen ein Display anzusteuern.
-Ich möchte ggf. 2 Temperaturen (auf Platine + externer Sensor) und die 
Uhrzeit ausgeben. Diese soll beim Messbeginn auf die aktuelle Zeit 
eingestellt werden. Später kommt eventuell ein Modul für Funkempfang 
hinzu. Mit einem Display bin ich aktuell einfach flexibler.

>Warum so kompliziert? Du willst ja nur lesen und nichts reinschreiben.
>Das heißt, du könntest die Daten auch ohne große Pegelwandlung seriell
>raussenden - eventuell mit Prüfsummen. Das Raussenden entweder per
>Leitung oder per LED.

Mit seriell meinst du USART?

Im Anhang befindet sich der aktuelle Schaltplan.
Das Display wird über 2 Steckverbinder angeschlossen.

Der Aufbau ist noch nicht fertig. Aber beim Nachmessen viel auf, dass 
der 16MHz Takt an einem der beiden XTAL Pins leicht verwaschen ist. 
Jemand eine Idee woran das liegen könnte?

von J.R. (Gast)


Lesenswert?

A. R. schrieb:
> Jemand eine Idee woran das liegen könnte?
Das war dann wohl Pin 13, i.e. der Eingang vom Oszillator

von A. R. (redegle)


Angehängte Dateien:

Lesenswert?

>Das war dann wohl Pin 13, i.e. der Eingang vom Oszillator

Kann ich dann daraus schließen, dass Pin 12 der Ausgang ist und bei 
diesem das Signal besser aussieht?

Im Anhang ein paar Bilder damit man sieht, dass sich noch etwas tut.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Einfache serielle Ausgabe:

HyperTerminal öffnen, dann Deiner CPU mitteilen, "Daten ausspucken".
Dann werden die Daten in CSV Format im HyperTerminal erscheinen (so wie 
Deine CPU die schickt).
Nur noch alles markieren und in eine Textdatei speichern.

Dann brauchst Du auch kein PC-Programm schreiben.

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
Noch kein Account? Hier anmelden.