Forum: Mikrocontroller und Digitale Elektronik Highspeed Datenlogger mit 1kHz Samplerate


von LC-HC (Gast)


Lesenswert?

Hi,
für den "privaten Motorsport" möchte ich einen Datenlogger entwickeln. 
Nach einigen Überlegungen zum Grundkozept frage ich mich, wie sich eine 
geeignete
Variante darstellen lässt. Als Speicher möchte ich eine MMC/SD Karte 
verwenden. Zuerst sollen (am besten auf basis eines RTOS) 8 A/D Werte in 
1 ms Intervallen gespeichert werden . Nebenbei soll die CPU noch ein 
240x128 Display steuern, das schon läuft und durch ein integriertes 
Modul per TWI /I2C angesteuert wird. Ist das ganze noch mit einem AVR zu 
realisieren ( vorrausgesetzt mit 20 Mhz ), oder sollte ich eher zum ARM 
geifen ? Kann mir jemand vielleicht ein paar Tips geben, oder 
einschlägige Literatur nennen ?

mfg,

Simon

von Rene (Gast)


Lesenswert?

SD/MMC ist machbar, benoetigt aber Resourcen. Ein Atmel Daenflash waere 
moeglicherweise einfacher und sparsamer. RTOS, Was soll das ? Zuviel 
Zeit und Strom zum Verbraten ? Display geht auch. Ein 20MHz AVR ist 
moeglicherweise schon zuviel. Er koennte auch langsamer laufen.

Rene

von Carsten P. (papa_of_t)


Lesenswert?

Wenn Du nicht soviel Geld und dafür erstmal etwas mehr Grips investieren 
willst, kannst Du ja 3 Mega8 nehmen: 2 zum Messen / Zwischenspeichern 
der Werte (dazu kannst Du den eingebauten RAM nutzen) und einen dritten, 
der dann ganz in Ruhe per SPI die Werte ausliest, auf SD speichert (wenn 
Du kein Dateisystem brauchst und nur Sektoren schreibst, reicht ein 
Mega8) und das Display bedient.

die 16kByte / Sekunde sind für eine SD-Karte kein Problem, wenn ein 
Puffer da ist (sie scheibt rasend schnell einen Sektor, aber braucht 
dann einige Milliskunden, bis man weiter schreiben kann).

Ob Dein Display damit schnell genug ist, wirst Du sehen. Schöne 
Bastelarbeit jedenfalls - viel Spaß dabei! :-)

von LC-HC (Gast)


Lesenswert?

Danke schon mal für die Antworten !
Das mit dem Puffer hatte ich auch vor. In etwa so:
Array / Zeiger mit n - Elementen (z.B 512 Byte). Nach dem 512. Byte muss 
parallel zum 1 kHz-sample auf die MMC/SD geschrieben werden, ohne den 
regulären (sample) Betrieb zu stören / verzerren. Ist das soweit machbar 
?
Die Anwendung sollte auf einer Statemachine basieren, die durch einen 
PIT im
1ms Takt aufgerufen wird. Dabei soll ein BUSY-Flag beim Aufruf und 
Verlassen der Statemachine gesetzt/gelöscht werden, um undefiniertes 
Verhalten ausschließen zu können.
Für inteligentere oder elegantere Ansätze oder Varianten bin ich sehr 
offen !

mfg,

Simon

von Carsten P. (papa_of_t)


Lesenswert?

Wie gesagt, wenn es ein AVR nicht schafft - nimm nehrere für 
verschiedene Aufgaben. "RTOS" und "Statemachine" hört sich gewaltig 
abstrakt an für so ein relativ kleines konkretes Problem - back erstmal 
kleine Brötchen und bau Dir 2 kleine Programme zum AD-lesen und zum 
Lesen / Schreiben der SD-Karte. Da bist Du erstmal eine Weile 
beschäftigt und weißt danach viel besser, was geht und was nicht ;-)

von Hauke S. (hauke)


Lesenswert?

Also ich würde statt zu einer SD Karte eher zu den ATMEL Dataflash 
Bausteinen greifen (Die gibt es auch in Kartenform).
Die ansteuerung ist erheblich einfacher als eine SD-Karte.
Die Dinger habern auch zwei RAM Buffer in die jeweils eine Flash-Page 
reinpasst. Man muß also üblicherweise Nichts im AVR RAM puffern.

Als µC denke ich sollte der ATMega16 ausreichen (wegen 8 ADC Eingängen)
Die meiste Zeit verbringt der AVR eh warscheinlich damit zu warte das 
eine ADC Messung fertig ist.
Während dessen hat man genug Zeit um zu schauen ob noch eine SPI 
Übertragung zum DF läuft und ob überhaupt noch Daten übertragen werden 
müssen.

Wenn das erledigt ist kann du dich wieder um das Display kümmern.


Man kann das ganze mit zwei Interrupts erschlagen.
1. Timerinterrupt der dir das 1ms Messintervall vorgibt.
2. ADC Conversion Complete Interrupt der dir sagt wann es wieder was zu 
speichern gibt, und danach das DF ansteuert.

3. Die Hauptroutine welche dein Userinterface abarbeitet.

bis dann
Hauke

von Marc989 (Gast)


Lesenswert?

Wie willst du die Daten auslesen? bei der Samplerate werden das recht 
viele sein. Ich denke per MMC Karte und FAT16 am besten. Dann kannst du 
die Karte einfach in den PC stecken. Oder du nimmst einen Controller mit 
USB interface, dann kannst du das ganze direkt an einen PC anschließen, 
erfordert aber die Programmierung eines USB devices, was nicht wirklich 
einfacher als FAT16 ist.

Also nicht aus den Augen lassen!! sonst überträgst du am Ende ewig lang 
per 115 kbaud und ärgerst dich.

Marc989

von Markus K. (mkrug)


Lesenswert?

Hallo Simon,

ich kenn ein bisschen das Motorsportumfeld und erlaub mir daher mal zu 
antworten.
> Als Speicher möchte ich eine MMC/SD Karte
> verwenden. Zuerst sollen (am besten auf basis eines RTOS) 8 A/D Werte in
> 1 ms Intervallen gespeichert werden .
Ich kenn die AVR Reihe nicht. Aber der µC hat ja bei vielen hier einen 
sehr guten Ruf. Somit seh ich bis hierher überhaupt kein Problem. Auch 
halt ich es für sinnvoll ein RTOS vorzusehn. Gerade wenn Du die 
grundsätzlich verschiedenen Aufgaben (messen, wegschreiben, 
Displaysteuerung, ...) durchführen willst. Da hilft es nach meiner 
Erfahrung ungemein wenn man die Aufgaben in Tasks gliedert die man dann 
bzgl Priorität und Koordination untereinander leicht steuern kann. Unter 
freertos.org findest Du eine Portierung die sicherlich alles mitbringt 
was Du brauchst.

> Nebenbei soll die CPU noch ein
> 240x128 Display steuern, das schon läuft und durch ein integriertes
> Modul per TWI /I2C angesteuert wird.
hmmm, ich kenn das Display nicht. Aber wenn ich mal von einer 
Bildwiederholrate von mindestens 50Hz ausgeh dann würde sich daraus 
ergeben das Du die 'Chance' hast ca 1500000/Sekunde einen Pixel zu 
ändern. Vermutlich reicht Dir eine Änderung von höchstens 20% aller 
Pixel von Sekunde zu Sekunde. Jetzt würde ich mal schauen ob der I2C Bus 
das überhaupt hergibt und wieviele Befehle nötig sind um eine Änderung 
über den Bus an das Display zu schicken. Jetzt musst Du aber auch noch 
bedenken das Dein µC die Änderung der Displaydarstellung aufgrund von 
irgendwelchen Ereignissen erstmal feststellen muss. Vermutlich passiert 
das über Interrupts. Da hast Du sicher schnell mal 40-100 Befehle. Daher 
bin ich der Meinung das das selbst mit einem 'idealen' 20MHz 
RISC-Mikrocontroller sehr knapp wird. Wenn Du es aktzeptieren kannst das 
das Display der realen Welt gelegentlich hinterherläuft dann wird es 
gehn - ich glaub nur nicht das Du einen Rennfahrer findest der das gut 
heissen wird :-)

Muss es aus der AVR, ARM Schiene sein ? Wer sehr schnell A/D wandelt und 
auch noch DMA hat ist die 33er Reihe der PICs von Microchip. Die 
Bausteine sind bis 40MIPS skalierbar. Das sollte für Deine Anwendung 
ganz gut reichen. Hab diese Controller in verschiedensten Projekten im 
Einsatz und bisher nur gute Erfahrungen.

Gruss
Markus

von Peter (Gast)


Lesenswert?

> Für inteligentere oder elegantere Ansätze oder Varianten bin ich sehr
> offen!

nimm einen lock-free fifo: 
http://csourcesearch.net/package/audiality/0.1.0/audiality/engine/sfifo.c
dann kannst du ans eine ende daten reinstreamen und die 'task' am 
anderen ende schreibt die daten auf die karte. ob du das ganze nun mit 
einem RTOS realisierst oder mit interrupts spielt dann fast keine rolle 
mehr.

von Rooney B. (rooney)


Lesenswert?

Also ganz spontan würd ich ARM vorschlagen. SD/MMC Treiber inkl. 
FAT16/32 Unterstützung kannst du runterladen und in etwa einer Stunde 
auf deinem System zum Laufen bekommen. AT91SAM7S hat USB onboard, also 
hast auch eine relativ schnelle Verbindung zu einem PC um die Daten hin 
und her zu schaufeln.
Für ARM kannst das FreeRTOS verwenden. Wennst du IAR Embedded Workbench 
verwendest, kannst das IAR Projekt 1:1 von FreeRTOS nehmen ohne 
irgendwelchen Code anzupassen (abgesehen von Pinbelegungen etc.).

Eine Verbindung über Ethernet wäre auch sehr interessant.

von Robert N. (metrux)


Lesenswert?

Und wie wäre es mit dem Proppeller Chip von Parallax? ein Chip der quasi 
8 CPU's enthält und 32 freie IO-Pins.

Multithreading für Microcontroller

Programmiert wird er über eine einfache serielle Schnittstelle, die 
Software frei, es gibt hunderte Objekte ( Bibliotheken), auch für 
SD-Card und diverse AD-Wandler und die eigene Programmiersprache (Spin) 
einfach.

Der Haken 15€ kostet der Spaß mindestens

von Thomas (kosmos)


Lesenswert?

ein AVR schaffz 15 kS/Sek bei 200kHz ADC Takt wobei bis zu 1 MHz möglich 
sind was dann bei einer geringeren Auflösung 75 kS/Sek entsprechen 
würde.

Compact Flash wäre auch eine interessante Speicherlösung, man könnte am 
PC eine(oder mehrere) leere Datei erstellen die den gesamten Platz 
benötigt(en), dann wäre das mit der FAT erledigt und mit dem µC schreibt 
man halt nur in die Dateien selber ohne deren Größe zu ändern, dann 
wären keine Änderungen an der FAT nötig. Vorteil man kann 16bits 
gleichzeitig schreiben und das mit sehr wenig Overhead. Und Adresszähler 
kann man ja mittels mehrerer Register nachbilden.

ein Beispiel dazu http://www.pjrc.com/tech/8051/ide/wesley.html wobei 
man statt des 8255 auch einfach ein paar Latches nimmt.

Und als Erweiterung könnte man noch nen 16:1 Multiplexer nehmen 744067 
und dann kann man gleich 16 Analoge Spannungen messen.

Die Displayansteuerung würde ich aber auch auslagern also nur die Daten 
an einen 2ten µC schicken de sich dann um das Display kümmert.

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.