Aufzeichnungsrate Datenlogger

OP #6377045
Lesenswert?

Hallo,

Als relativer Arduino Anfänger beschäftigt mich der Gedanke einen 
Datenlogger zu bauen. Hierzu fehlt mir die Möglichkeit einzuschätzen wie 
schnell, also mit welcher Samplerate, der Datenlogger die Daten 
wegschreiben kann, wie man das beinflussen und abschätzen kann.
Zum einen gibt es oft eine Angabe im Datenblatt wie schnell der ADC 
arbeitet z.B. AVRMega328P 50 - 200khz, bedeutet das, dass ich einfach 
mit den z.B. 50Khz den ADC auslesen kann und die Daten auf eine SD Karte 
schreiben kann?

Als Beispiel:

void loop (){
Pin auslesen
Umrechnung der Spannung in Beschleunigung
file.print(Zeitstempel)
file.print(",")
file.print(Messwert)
}

Wenn der Loop läuft hängt doch die Frequenz mit der der Pin oder ggf. 
mehrere davon ab wie umfangreich das Programm ist oder nicht? Wie kann 
man abschätzen und ob ein µC schnell genug für eine angedachte Aufgabe 
ist und das ggf. beeinflussen?

Evtl. hätte ich gerne eine feste Samplerate von z.B. 50khz bei der 
Messung, wie kann man diese einstellen?

Danke schon mal!
#6377087
Lesenswert?

Colin Z. schrieb:
> Zum einen gibt es oft eine Angabe im Datenblatt wie schnell der ADC
> arbeitet z.B. AVRMega328P 50 - 200khz, bedeutet das, dass ich einfach
> mit den z.B. 50Khz den ADC auslesen kann und die Daten auf eine SD Karte
> schreiben kann?
auslesen schon, mit Timer am besten wie schon vorgeschlagen. Der Timer 
kann direkt die Messung starten und nach der Wandlung löst der ADC einen 
Interrupt aus. In der ISR setzt du ein Flag und damit löst du in der 
Hauptschleife deine Berechnung und Speicherung aus.
Daten mit 50k und dem Ausgabeoverhead auf die Karte zu bekommen dürfte 
sportlich werden da die Karten schon mal in unbestimmten Abständen eine 
größere Pause von durchaus paar 100ms einlegen. Da du aber bis zur 
nächsten Messung nur 0.02ms hast musst du das erst mal im RAM puffern.
Du solltest dir erst mal Gedanken zur Anforderung machen:
Kontinuierliche Aufzeichnung -> benötigt keine Zeitstempel (allenfalls 
Startzeit)
Du willst Beschleunigung messen -> dann nimm Messwerte mit 50kHz und 
prüfe zunächst ob ein gewisser Schwellwert überschritten ist, nur dann 
speicherst du den Wert incl. Zeitstempel

Sascha
#6377110
Lesenswert?

Cyblord -. schrieb:
> Nicht W. schrieb:
>> Mit Arduino und SD-Karte sind da mit ein paar Tricks locker 3-5kHz drin,
>
> Mit einem Controller der 10-20 MHz macht ist das echt traurig. Der
> Arduino Overhead würde mich psychisch fertig machen. Mit solch einem
> Klotz am Bein könnte ich nicht mehr ruhig schlafen.

Das klingt sehr interessant! Wieviel geht denn mit klassischer 
Programmierung ohne SD-Puffer???
#6377135
Lesenswert?

Nicht W. schrieb:
> Cyblord -. schrieb:
>> Nicht W. schrieb:
>>> Mit Arduino und SD-Karte sind da mit ein paar Tricks locker 3-5kHz drin,
>>
>> Mit einem Controller der 10-20 MHz macht ist das echt traurig. Der
>> Arduino Overhead würde mich psychisch fertig machen. Mit solch einem
>> Klotz am Bein könnte ich nicht mehr ruhig schlafen.
>
> Das klingt sehr interessant! Wieviel geht denn mit klassischer
> Programmierung ohne SD-Puffer???

Ich würde schätzen da wäre man Faktor 5-10 schneller.
#6377258
Lesenswert?

Colin Z. schrieb:
> Als relativer Arduino Anfänger beschäftigt mich der Gedanke einen
> Datenlogger zu bauen. Hierzu fehlt mir die Möglichkeit einzuschätzen wie
> schnell, also mit welcher Samplerate, der Datenlogger die Daten
> wegschreiben kann, wie man das beinflussen und abschätzen kann.

> z.B. AVRMega328P 50 - 200khz, bedeutet das, dass ich einfach
> mit den z.B. 50Khz den ADC auslesen kann

Nein.

Der ADC im ATMega328 kann mit einer Taktfrequenz bis 200kHz arbeiten. 
Aber eine Wandlung dauert 13 Takte. Das ergibt dann maximal 15500 
Meßwerte pro Sekunde. Auch wenn du jeden Meßwert als 16 Bits 
wegschreibst (10 Bit kommen aus dem ADC), dann ist das eine Datenrate 
von gerade mal 30KB/s. Da lacht die SD-Karte nur drüber.

> Als Beispiel:
>
> void loop (){
> Pin auslesen
> Umrechnung der Spannung in Beschleunigung
> file.print(Zeitstempel)
> file.print(",")
> file.print(Messwert)
> }
>
> Wenn der Loop läuft hängt doch die Frequenz mit der der Pin oder ggf.
> mehrere davon ab wie umfangreich das Programm ist oder nicht?

Teilweise. Die Funktion, die du als "Pin auslesen" umschreibst, wird bei 
Arduino den ADC starten und dann auf das Ende der Wandlung warten. Bei 
200kHz ADC-Takt sind das 65µs. Respektive 1040 Taktzyklen des ATMega328 
(der läuft mit 16MHz).

Der Rest des "Programms" wird vermutlich sehr viel weniger Zeit 
brauchen, so daß die resultierende Abtastrate vom ADC dominiert wird. 
Noch dazu wirst du so die maximale Abtastrate des ADC gar nicht 
erreichen können, weil die darauf beruht, daß der ADC automatisch immer 
eine neue Wandlung startet, wenn er fertig ist. Keine Ahnung ob Arduino 
dafür was bietet. Vermutlich nicht. Ist halt Spielzeug.

Wenn man es richtig programmiert (also in C oder C++ oder Assembler) 
ohne dafür auf die Arduino-Legosteine zurückzugreifen, geht das 
natürlich.
Gast #6377296
Lesenswert?

Axel S. schrieb:
> Keine Ahnung ob Arduino dafür was bietet. Vermutlich nicht.
> Ist halt Spielzeug.

Wenn du keine Ahnung hast, solltest du es einfach mit Dieter Nuhr halten 
...

Arduino gibt einem Dank der dort verwendeten Programmiersprache 
jederzeit die Möglichkeit, eigene Funktionen zu schreib - jedenfalls 
wenn man aus dem Spielalter raus ist und verstanden hat, wie ein ATmega 
oder ein Cortex-M3 tickt.
#6377483
Lesenswert?

Wolfgang schrieb:
> Axel S. schrieb:
>> Keine Ahnung ob Arduino dafür was bietet. Vermutlich nicht.
>> Ist halt Spielzeug.
>
> Wenn du keine Ahnung hast, solltest du es einfach mit Dieter Nuhr halten

Schau mal in den Spiegel.

> Arduino gibt einem Dank der dort verwendeten Programmiersprache
> jederzeit die Möglichkeit, eigene Funktionen zu schreib

Aha. Und ist das dann noch Arduino?

Wenn - sagen wir mal - Rembrandt ein "Malen nach Zahlen" Set genommen 
hätte und alles außer der Leinwand weggeworfen hätte und auf die 
Rückseite eines seiner Werke gemalt hätte ... wäre das dann noch "Malen 
nach Zahlen"?

Eben.
#6377511
Lesenswert?

Eine Frage waere noch, wieviel Messwerte den geschrieben werden sollen. 
Wenn's nicht allzu viele sind waere allenfalls eine andere Speicherung 
wie einen SD Karte passend. zB NOR-Flash, oder FRAM. Dort gibt's kein 
File system, welches unpassend ist.
Und ADC wandeln lassen und schreiben koennen ueberlappend geschehen.
Gast #6377538
Lesenswert?

Axel S. schrieb:
> Aha. Und ist das dann noch Arduino?

Meinst du, dass die Libraries die eingebunden werden, vom Himmel fallen?
Nein, bei Arduino steht es jedem frei, eine Library zu schreiben, wie es 
ihm gefällt. Arduino ist einzig, dass er das Kernprogramm normalerweise 
nie zu sehen bekommt, sondern immer nur die Funktionen loop() und 
setup() in irgendeiner Weise zur Verfügung stellen muss.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren