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
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
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! :-)
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
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 ;-)
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
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
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
> 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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.