Forum: Mikrocontroller und Digitale Elektronik Datenlogger mit SD Karte


von Sascha712 (Gast)


Lesenswert?

Hallo,

Bin grad dabei mir nen Datenlogger mit Display zu basteln.

Es werden alle 8 ADC des Atmega32 ausgelesen, umgerechnet und dann auf 
einem Display ausgegeben.
Also zb. Tmperatur, Druck etc. sind halt mehrere Sensoren.
Nun wollte ich, wenn man auf einen Taster drückt, eine aufnahme starten, 
welche ein .csv Dokument auf eine SD Karte schreibt.

Eine Samplerate von 5 Sample/sekunde wäre erwünscht, kann auch mehr 
sein, nur weniger wäre schlecht.

Ich bin bei meiner recherche auf das hier gestoßen: 
http://elm-chan.org/fsw/ff/00index_p.html

Wie stelle ich es am besten an, dass mein vorhaben klappt?

Die aufnahme soll mit dem taster gestartet und auch gestoppt werden. 
Wenn bereits eine aufnahme existiert, dann sehe ich nun zwei 
Möglichkeiten:
1. immer in einer Datei weiterschreiben.
2. eine neue Datei mit anderem Namen zu erstellen und dort zu schreiben.

Was ist leichter umzusetzen?

Brauche ich zwingend eine Systemuhr oder so? weil Uhrzeit und Datum 
werden doch auch immer bei Dateien hinterlegt?

Bin für jede Hilfe dankbar :)

Mit freundlichem Gruß Sascha

von Mike J. (linuxmint_user)


Lesenswert?

Das ist einfach, ich habe auch die Bibliothek von ElmChan genutzt.

Einfach den ADC im Freerun Modus betreiben (wenn du nicht verpflichtet 
bist Strom zu sparen) und alle 146 Timer-Interrupts einen Wert 
schreiben.

Ich gehe davon aus dass du einen 12MHz Quarz nutzt, einen 8 Bit Timer 
nimmst und den Vorteiler auf 64 gestellt hast, dann sind es ca. 732 
Interrupts pro Sekunde du du bekommst und in der ISR auswerten kannst.
Du kannst auch in der Timer-ISR einfach eine Variable hochzählen und in 
der Hauptschleife prüfen ob die Zahl erreicht wurde.

Sascha712 schrieb:
> Was ist leichter umzusetzen?
1.

Die 2. Möglichkeit ist aber schöner.
Wenn du eine 2. Datei erstellen möchtest musst du erst mal suchen ob der 
Dateiname nicht schon belegt ist.
Du probierst Log001.csv , wenn die schon belegt ist schaust du ob 
Log002.csv schon existiert usw.

von Rudolph (Gast)


Lesenswert?

Hey, sowas ähnliches habe ich auch gerade vor. :-)
Sensoren, Display, SD-Karte.

Ich habe da einen Mega644PA@3,3V/12MHz drauf, mein Display ist ein 
DogMXL.
Als dritten SPI Teilnehmer habe ich eine RV-2123-C2 Echtzeituhr.
Und zur Bedienung werde ich einen Drehimpulsgeber mit Taster einsetzen.

Wird nur eine ganze Weile dauern bis ich mich überhaupt mit dem 
Dateisystem beschäftigen werde, das Projekt läuft nur so nebenbei mit 
und erstmal sind das Display und die Uhr interessanter.

von Mike J. (linuxmint_user)


Lesenswert?

Rudolph schrieb:
> Wird nur eine ganze Weile dauern bis ich mich überhaupt mit dem
> Dateisystem beschäftigen werde
Das musst du gar nicht.

Es ist alles schon drin (incl. Initialisierung und Dateihandling), du 
musst nur den String kennen den du auf die SD-Karte schreiben möchtest 
und die SD-Karte richtig angeschlossen haben.

Ich musste das ganz schnell machen (1 Tag), die SD-Karte anzulöten und 
zu verkabeln hat länger gedauert als die Software von Elm-Chan auf einem 
ATmega644PV (12MHz, 3.3V) zum laufen zu bekommen.

Du gibst ja am Anfang nur den Dateinamen an, dann wird versucht auf die 
Datei zuzugreifen (die Datei wird gesucht usw. aber das machtst du 
nicht) und dann wird die Datei geöffnet und alle z.B. 200ms ein String 
reingeschrieben.

Vorsicht: Der Zwischenspeicher ist 512 Byte groß, das bedeutet dass die 
Daten erst dann auf der SD-Karte geschrieben werden wenn dieser voll ist 
oder die Datei wieder geschlossen wird.

Ich habe da nur einen Taster, wenn der gedrückt wird dann wird versucht 
die SD-Karte zu initialisieren (ist alles in dem Beispiel drin) und wenn 
das erfolgreich war wird die Datei geöffnet und eine Variable auf 1 
gesetzt damit ich in der Mainschleife sehe dass jetzt die Daten auf die 
SD-Karte geschrieben werden können.

Bei mir gehörte noch ein Funkmodul, ein GPS-Empfänger und ein kleines 
TFT-Display dazu.
An dem GPS-Zeug saß ich länger da ich die Daten nicht nur als String 
abgespeichert habe, sondern die Daten rausgefischt und 
verarbeitet/dargestellt werden.

von Sascha712 (Gast)


Lesenswert?

Kannst du vllt bitte einen beispiel code reinstellen?^^ das hört sich so 
einfach an.

Brauch ich umbedingt 12mhz? Hab eig intern mit 8mhz laufen.

von Mike J. (linuxmint_user)


Lesenswert?

Nein, 8 MHz gehen auch ... das ist egal.

Schau dir erst mal den Code von ElmChan an, heute Abend kann ich dir 
etwas zeigen.

von Rudolph (Gast)


Lesenswert?

Mike J. schrieb:
>> Wird nur eine ganze Weile dauern bis ich mich überhaupt mit dem
>> Dateisystem beschäftigen werde
> Das musst du gar nicht.

Oh, ganz bestimmt sogar, selbst wenn ich das FS von Elm-Chan benutzen 
möchte, muss ich das ja immer noch in meine Software integriert 
bekommen.

Ich kann zum Beispiel nichts gebrauchen was erstmal für xxx ms den 
Controller blockiert weil mit delay() auf was gewartet wird.

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.