www.mikrocontroller.net

Forum: Codesammlung Datenrekorder auf SD-Karte mit mega88

Autor: Simon Lehmayr (Gast)
Datum: 28.04.2007 19:43

MrData - in Anlehnung an MrMidi2 und den kommenden MrWave - ist ein
SD-Karten-Datenrekorder.
Features:
- Die 6 Analogeingänge des mega88 werden mit 10 Bit aufgezeichnet.
- Die Datenrate und Anzahl Kanäle sind über eine Datei auf der SD-Karte
"settings.txt" einstellbar.
- Eine LED zeigt den Betriebszustand an.
- Ein Taster zum Starten/Stoppen.

Schaltung:
- 1 ATmega88 @ 8MHz (intern oder Quarz, je nach eigenen Ansprüchen)
- 3 100nF (für Vcc und Aref, sowie für die SD-Karte)
- 3,3V-Versorgung
- 1 SD-Karte (Slot) (an SPI-Interface MISO, MOSI, SCK und SS)
- 1 LED mit Vorwiderstand (an PORTB0)
- 1 Taster (an PIND3)
Für die Analogeingänge (PORTC) noch Eingangsfilter (RC), je nach
Belieben.

MrData unterstützt vollen FAT16-Schreibzugriff.

Bedienung:
- SD-Karte mit FAT16 formatieren.
- settings.txt erstellen (Format unbedingt einhalten, Schreibweise,
Leerzeichen, alles!):
ch=6
overflow=7812
prescaler=13
ch=Anzahl aufzuzeichnender Kanäle.
overflow kommt direkt ins OCR1A-Register und prescaler in TCCR1B. Der
Prescaler des ADC ist bei 64 festgelegt.
- Karte in MrData einlegen und anschalten. MrData sollte mit der LED
zweimal blinken. Dauerblinken heißt Fehler!
- Eingänge anschließen.
- Taste drücken zum Aufzeichnen starten. Die LED leuchtet permanent.
- Erneut drücken zum Abspeichern. MrData erstellt Dateien mit Namen
MD001.TXT. Die Zahl wird immer hochgezählt.
- Karte kann entnommen werden. Am PC auswerten (z.B. Excel). MrData
schreibt eine Tabulator-formatierte Tabelle mit Dezimalzahlen. Die erste
Zahl ist eine fortlaufende Samplenummer. Dann kommen die Kanäle 1 bis
z.B. 6 in entsprechenden Spalten.

Hinweise:
- MrData wird nie Log-Dateien überschreiben. Er zählt die Nummer immer
ab der höchsten vorhandenen aufwärts.
- Die maximale Messrate wird etwa bei 40kByte/Sekunde liegen.
- Das maximale Messintervall liegt bei etwa 7,8 Sekunden (Timer 1
maximale Overflowzeit)
- Entfernen der Karte oder Spannungsverlust während einer Aufzeichnung
sorgen für Datenverlust der aktiven Aufzeichnung, da MrData die FAT und
den Rooteintrag erst beim Abschließen der Aufzeichnung schreibt.
- MrData schont die SD-Karte. Er schreibt nur Sektoren, wenn er muss.
Auch die FAT wird nur einmal geschrieben.
Autor: Simon Lehmayr (Gast)
Datum: 28.04.2007 19:43
Dateianhang: MrData.zip (68,7 KB, 1427 Downloads)

Die Vorschaufunktion hat den Anhang ignoriert!
Autor: Marius (Gast)
Datum: 28.04.2007 19:55

was wird denn MrWave für ein Projekt? WAVE Dateien abspielen? O_o
Autor: Simon Lehmayr (Gast)
Datum: 28.04.2007 21:12

MrWave soll Wave-Dateien aufnehmen und abspielen. Das mit 16 Bit und am
besten 44100kHz und hochwertiger Audiohardware.
Muss dafür auch in Assembler arbeiten (sind ja nur ca. 180 CPU-Zyklen
pro 4 Byte Samples).
AVR Dragon besorgt - und debuggen klappt einwandfrei!
Autor: Thomas (Gast)
Datum: 28.04.2007 23:38

Cool, danke.
Das mit dem "Anzahl der Dateien" zählen ist zwar etwas grob, aber
einfach und effizient.
Ich habe mal versucht, die Dateinamen abzuchecken und danach den Namen
fürs nächste Logfile zu bestimmt, aber das wird ziemlich viel.
Autor: Simon Lehmayr (Gast)
Datum: 29.04.2007 14:10

Sooo leicht mach ichs mir dann auch wieder nicht :-)
Er zählt nicht die Anzahl, sondern die höchste vorkommende Nummer.
Beispiel: Auf der Karte sind die Dateien:
MD001.TXT
MD002.TXT
MD003.TXT
SETTINGS.TXT
-> höchste Zahl im Namen nach Schema MDxxx.TXT = 3
-> nächste Datei = MD004.TXT
Autor: Fly (Gast)
Datum: 29.04.2007 15:07

@ Simon Lehmayr
Dein Mr. Wave finde ich interessant. Bist du schon weiter? Hast du einen
AVR tauglichen Audio Codec gefunden? Ich hab auch lange gesucht, einst
den AD1845 eingsezt, dieser ist allerdings schon steinalt...
Autor: Thomas (Gast)
Datum: 30.04.2007 11:48

Aus welchem Projekt stammen denn die FAT-Funktionen?
Im Quellcode steht was von "MP3", würde mir das Projekt auch gerne mal
ansehen.
Autor: Marius S. (lupin) Benutzerseite
Datum: 30.04.2007 12:18

Wäre echt interessant, wenn du für Mr. Wave versuchen würdest einen
modernen DAC einzusetzen, wie einen von den CS Typen (CS4331 und
ähnliche).

Hier findest du eine Auflistung einer moderner DACs:
http://www.mikrocontroller.net/articles/ARM-MP3-Player

Einige davon könnten passen wenn der AVR wirklich nur abspielen soll.
Mit integrierten Verstärker wäre natürlich cool.

Den MAX9850 von maxim kann man im noninteger mode mit jeder freq
betreiben - daher gut geeignet.

Ich glaube du wirst Probleme bekommen mit 44100kHz samples von einer SD
Karte zu laden, ich hab sowas mal auf einen ARM gemacht und musste dafür
einen riesigen buffer anlegen damit der nicht immer aussetzer hatte.
Autor: Fly (Gast)
Datum: 30.04.2007 20:04

Das Hauptproblem liegt meiner Meinung nach darin, die sehr hohe,
benötigte serielle Taktfrequenz für den DAC/ADC zu erzeugen. Die wollen
oftmals 32-256 x fs. Das geht nicht mit einem AVR.
Autor: Andreas (Gast)
Datum: 02.05.2007 11:30

Hallo Simon,

vielen Dank für die Bereitstellung dieses Projektes - genau so etwas
habe ich gesucht!

Trotzdem ein paar Fragen bevor ich losziehe und einen Mega88 kaufe (bin
Anfänger):

1. Wenn ich es richtig verstehe, kann man mit dem WinAVR-Compiler die
Quelltexte compilieren?

2. Ich sehe keinen Hinweis auf die Referenzspannungsquelle, nur das mit
10 Bit Auflösung geschrieben wird. Wäre es möglich, eine externe
Referenzspannung anzulegen? Was müsste ich denn im Programm dazu ändern
und vor allem wo?

3. Kann ich die 6 Eingänge auf 8 erweitern oder wäre es ein enormer
Aufwand?

Ich bedanke mich schon mal für die Antwort und hoffe, dass meine Fargen
nicht zu dumm sind ;)

Gruß,
Andreas
Autor: Andreas (Gast)
Datum: 02.05.2007 19:04

So - den Atmega88 hab ich gerade gekauft (den letzten - hihi).
Fehlt bloß noch eine Antwort auf meine Fragen, aber das kommt noch -
oder ;)

Grüße,
Andreas
Autor: Benedikt K. (benedikt)
Datum: 02.05.2007 19:17

Fly wrote:
> Das Hauptproblem liegt meiner Meinung nach darin, die sehr hohe,
> benötigte serielle Taktfrequenz für den DAC/ADC zu erzeugen. Die wollen
> oftmals 32-256 x fs. Das geht nicht mit einem AVR.

Da gibt es 2 Lösungen:
a) Eine DAC nehmen, der eine interne PLL hat, den Takt also selber
erzeugt
b) 2 Quarzoszillatoren + Teiler verwenden, um damit 256*44,1/48kHz zu
erzeugen und dann noch deren geteilte Werte. Alle üblichen Samplerates
basieren auf diesen beiden Grundfrequenzen. So ähnlich haben es auch die
ersten Soundkarten gemacht.
Autor: Fly (Gast)
Datum: 02.05.2007 20:30

Danke Bendedikt

Kennst du einen ADC & DAC in einem (ich sag dem Codec / Soundport), der
eine interne PLL hat, respektive den man mit einem AVR und 44.1 kHz fs
betreiben  kann.
Ich habe damals (2.5 Jahre)lange gesucht und nichts brauchbares
gefunden...
Autor: Simon Lehmayr (Gast)
Datum: 02.05.2007 23:24

CoDec - mal sehn. Vorerst nehm ich einen standalone 16-Bit ADC-Chip
(habe mir als ADC-Versuchsobjekte den TI ADS8325, TI TLC4545/4541 und
den LT LTC1865 besorgt) und 16-Bit DACs (DAC Maxim MAX541 und TI
DAC8830/8831).

Die MMC/SD-Karten-Low-Level-Routinen stammen ursprünglich vom a.lp_mp3 -
Open Source Atmel AVR based MP3 Player - die FAT16 ist aber von mir.

Schreibperformance im Burst-Modus bei 4MHz SPI - im Schnitt 350kByte/sec
(1764kByte in genau 5 Sekunden - nicht mal in Assembler, das kommt
noch!) Die Leseperformance sollte noch besser sein!

@Andreas:
WinAVR nehm ich auch her. Zusammen mit dem AVR Studio 4 und AVR Dragon
zum Debuggen unschlagbar.
Referenz ist die Versorgungsspannung - zum Ändern im Code Zeile 374 in
main.c ändern (zu "ADMUX = 0;") - dann wird die Spannung am Pin 21
(AREF) verwendet.
Sorry - der mega8 hat bloß 6 ADC-Eingänge. Nimm einen anderen mega (z.B.
mega32, dann im 40 Pin PDIP), wenn du alle 8 willst.
Autor: Andreas (Gast)
Datum: 03.05.2007 09:34

Hallo Simon,

Danke für die schnelle Antwort!!

Bloß bitte noch eine Frage:
Jetzt habe ich es auch gesehen im Datenblatt des Mega88, dass die
SMD-version 8 AD-Wandler und meine Version 6 AD-Wandler hat - Ok.

Angenommen ich bin dann irganwann so weit, dass es überhaupt läuft und
kaufe mir dann einen anderen Controller mit 8 Wandlern.
Dann ist doch sicher im Programm auch wieder eine Änderung nötig, damit
die 8 Werte geschrieben werden?

Danke nochmals,
Andreas
Autor: Simon Lehmayr (Gast)
Datum: 03.05.2007 10:04

In den Zeilen 288+289 musst du den Channel-Begrenzer
else if (channels > 6)
  channels = 6;
auf 8 setzen:
else if (channels > 8)
  channels = 8;

Das wars.
Autor: Andreas (Gast)
Datum: 03.05.2007 10:10

Genial - danke!
Genau die Stelle habe ich eben gefunden und wollte nachfragen ob es
reicht :)
Ich falle Euch nicht weiter auf den Wecker, der Lötkolben dampft schon..

Schönen Tag wünscht,
Andreas
Autor: holger (Gast)
Datum: 03.05.2007 21:52

>Schreibperformance im Burst-Modus bei 4MHz SPI - im Schnitt 350kByte/sec
>(1764kByte in genau 5 Sekunden - nicht mal in Assembler, das kommt
>noch!) Die Leseperformance sollte noch besser sein!

Diesen Wert bezweifle ich hiermit offiziell.
Bei 4MHz SPI Speed kannst du maximal 500kByte/sec
schaffen. Im Idealfall. Also der Controller
braucht NULL Zeit um Daten aus dem Speicher zu holen.
Deine MMC/SD braucht scheinbar auch NULL Zeit
um die Daten zu speichern.

Gib uns doch mal nen Code für deinen ominösen
Burst Modus.
Autor: Simon Lehmayr (Gast)
Datum: 03.05.2007 22:31
Dateianhang: MrMidi2m168IR_mod.zip (138,6 KB, 280 Downloads)

@holger
Du wolltest es so :-)
Die verwendete SD-Karte war eine Medion (intern SanDisk) 128MB.
Der Code ist allerdings "dumm", er liest den Startsektor aus der FAT und
dann erstellt er eine kontinuierliche Datei, ohne die freien Cluster zu
suchen. Weiterhin verwende ich das viel effektivere Kommando 25 der
SD-Karte.
Der Code benutzt den USART des mega168 als double-buffered SPI-Master ->
Effektiv!
Gestartet wird mit der IR-Fernbedienung Taste []+ (RC5 Code 0x3c)
Stoppt automatisch nach 1760kByte - dauert genau 5 Sekunden (Stoppuhr!)
Alle Sektoren werden korrekt mit dem im Code eingetragenen konstanten
Wert geschrieben (Hex-Editor!)
Habs natürlich nochmal nachgeprüft, bevor ichs hier poste.

Interessant sind für dich die Codestellen main.c:883-900 und
mmc.c:620-671 - da passiert das Highspeed-Schreiben!
Autor: Simon Lehmayr (Gast)
Datum: 03.05.2007 22:38

Für ganz harte Zweifler kann ich mal einen Video drehen :-)
Drehbuch:
1. Dummydatei (MP3 oder was auch immer) auf Karte kopieren, damit Anfang
der Karte "Mülldaten" enthält.
2. Formatiere die Karte (Kamera-Zoom auf den Windows Formatier-Dialog).
3. Hexeditor auf Karte öffnen, Mülldaten zeigen (werden beim Format
nicht genullt).
4. Karte in Bastelaufbau stecken (Zoom auf den ATmega168) :-)
5. Anschalten.
6. Stoppuhr zücken und Fernbedienung []+ drücken (Im Hintergrund sieht
man das LCD vom Bastelaufbau).
7. Stoppuhr stoppen, wenn die 0001 (fertig) erscheint.
8. Karte in PC schieben, Datei im Hexeditor öffnen.
Autor: holger (Gast)
Datum: 04.05.2007 00:53

@holger
>Du wolltest es so :-)

Ja, genau das wollte ich ;)

Interessante Routinen, aber:
Gemessen ohne FAT Overhead, nur konstante Werte übergeben
ohne Werte aus irgendeinem Speicher zu holen.
Gemessen mit nur EINER Karte !

Da fehlt noch ein bisschen was. Wie schnell ist die Karte
bei SingleBlockWrite ? Nur zum vergleichen was deine Routinen denn
wirklich bringen. Und wie willst du CMD25 was ja Multiblock
Write bedeutet mit einem ATmega168 machen ?
Das Viech hat nur 1kB RAM. Zwei Blocks a 512 Bytes
bekommst du da einfach nicht rein. So ein klein
bisschen Stack und Variablen sind ja auch noch nötig.

Deine 350kByte/sec bei 4MHz SPI Speed sind experimentell und
bei näherem hinsehen auf Dauer nicht zu halten.

Dein härtester Kritiker
 Holger
Autor: Simon Lehmayr (Gast)
Datum: 04.05.2007 09:16

Genau. Experimenteller Versuchsaufbau. Diese Messung sollte nur die
Machbarkeit von MrWave ermitteln (Da brauch ich nämlich mindestens
176kByte/sec, besser das Doppelte, und das hab ich schon bei 8MHz
CPU-Clock).
Ich muss den mega sowieso auf 16-20 MHz fahren, damit er diese Rate mit
Daten aus einem Puffer schafft. Und Zeit hat, über SPI Analogwerte
einzulesen. Assembler muss ich evtl. auch noch nehmen (zumindest
inline-Assembler).

Zum Pufferverfahren:
Ich puffere nicht ganze Sektoren, sondern halte die Karte immer
schreibbereit. Puffer brauche ich nur, wenn die Karte gerade beschäftigt
ist. (D.h. ich schreibe Daten sofort an die Karte, benutze also den
512-Byte-Puffer in der SD-Karte!)
Ablauf:
- Karte zum Schreiben öffnen (CMD25, Sektorangabe).
- Wavedaten->Puffer->Karte (der Puffer wird sofort auf SPI geschrieben,
wenn die Karte bereit ist).
- Wenn 512 Bytes an Daten an die Karte geschrieben wurden, kommt der
CRC, Busy-Abwarten, neues Starttoken. In dieser Zeit läuft was in den
Puffer. Und der kann dann maximal 768 Bytes groß sein. Rest für globale
Vars und Stack. Hat bei mir immer gereicht.
- Wenn fertig, Sektor auffüllen und Karte abschließen (Stop Token).

Schau dir den Code von MrData an, der nimmt zwar nicht den
double-buffered USART-SPI oder das CMD25, arbeitet aber ebenfalls nach
diesem Puffer-Prinzip.
Autor: Benedikt K. (benedikt)
Datum: 04.05.2007 09:54

Interessante Idee. Allerdings funktioniert das ganze nur, wenn die Karte
nicht fragmentiert ist, bzw. immer alle Dateien auf der Karte immer auf
einmal gelöscht werden. Ansonsten gibt es Datenmüll.
Autor: holger (Gast)
Datum: 04.05.2007 17:03

> Und Zeit hat, über SPI Analogwerte
>einzulesen. Assembler muss ich evtl. auch noch nehmen (zumindest
>inline-Assembler).

SPI AD-Wandler ist doch perfekt. Statt die Werte mit dem
ATMega überhaupt zu lesen, leite doch einfach den SPI Ausgang
des AD-Wandlers direkt in den Eingang der SD Karte um wenn
du den AD-Wandler ausliest. Der ATMega gibt dann nur noch den
SPI Takt vor. Eine kleine Umschaltlogik müsste reichen um die
entsprechenden Pins im richtigen Moment zu verbinden/trennen.
Autor: Simon Lehmayr (Gast)
Datum: 04.05.2007 17:22

Das wäre gut, wenn die Karte keine Dummy-CRCs, Starttoken und
Busy-Polling hätte (selbst im Blockwrite CMD25 sind die noch da) ...
während dieser Zeit kann ich nichts aufnehmen, also muss ich puffern.
Die SD-Karte kann einen echten Streammodus ohne Overhead (mit begrenztem
Datentakt), aber nur im MMC/SD-Kartenmodus (nicht SPI) :-(
Autor: Simon Lehmayr (Gast)
Datum: 05.05.2007 18:05
Dateianhang: MrData.zip (99,1 KB, 338 Downloads)

Volle Karte sollte jetzt erkannt werden.
Autor: Claus (Gast)
Datum: 29.05.2007 17:04

2 kurze Fragen zur Formatierung der SD-Karte:

Wie klappt den die Fromatierung sicher? Unter WinXP bin ich mir nicht
sicher ob die Karte richtig formatiert wird.

Gibt es Unterschiede bei den SD-Karten? Mit welchen (Marke, Größe, etc.)
hat es bei euch funktioniert?

Gruß Claus
Autor: Simon Lehmayr (Gast)
Datum: 02.06.2007 22:13

Formatierung unter XP schreibt nur FAT und Rootdir neu. Datenbereich
bleibt erhalten.
Karten sollten eigentlich alle gehen, wenn man die Schaltung mit 3,3V
betreibt (ich habe Sandisk, Transcend, Toshiba). Ich habe Probleme, wenn
ich bei 5V Versorgung Widerstände im einstelligen kOhm-Bereich als
Spannungsteiler für die SCK, CS und MOSI-Leitung nehme...
Autor: Elektrikser (Gast)
Datum: 02.06.2007 22:44

Die Schwierigkeiten bekomme ich nur, wenn die Versorgungsspannung der
SD-Karte nicht sauber ist. Sollte schon ein 3,3V-Spannungsregler sein.
Mit den Spannungsteilern habe ich dann keine Probleme.

Gruß Elektrikser
Autor: Simon Lehmayr (Gast)
Datum: 17.06.2007 18:40
Dateianhang: MrData.zip (103,1 KB, 277 Downloads)

Update:
Es können jetzt auch serielle Daten geloggt werden:
Dazu muss man in setting.txt noch als 4. Parameter baud=9600 angeben,
wobei 9600 durch jede beliebige Baudrate ersetzt werden kann.
Die empfangenen Datenbytes werden asynchron als Hexzahlen zu den
Analogwerten aufgezeichnet, d.h. ohne Zeitstempel, jeweils in eigenen
Zeilen.
Autor: gustav (Gast)
Datum: 26.06.2007 12:54

Hallo Simon,

sehr interessanter Beitrag.

Könnte man statt dem mega88 auch den alten mega8 nehmen?
Was wäre am Code zu ändern?

Gruß, Gustav
Autor: Simon Lehmayr (Gast)
Datum: 26.06.2007 21:45
Dateianhang: gps_tools.zip (9,9 KB, 220 Downloads)

Meine GPS-Tools, um eine Sirf3-Maus (NMEA mit 4800 Baud) am RS232
auszuwerten und in Google Earth zu plotten.

Beschreibung:

nmeagen - Extrahiert aus der Logdatei MDxxx.TXT die NMEA-Strings
  Anwendung: nmeagen n <Logdatei> (n steht für NMEA, alles andere führt
zur Extraktion der Analogdaten)

speedextract - Erzeugt ein KML-File mit der Geschwindigkeit in km/h als
Höhenprofil der Route
  Anwendung: speedextract <NMEA-Datei>
Die Ausgabe landet auf dem stdout (Bildschirm).

convert.bat automatisiert den Prozess und startet auch gleich Google
Earth.
  Anwendung: convert MDxxx.TXT MeineRoute.kml

settings.txt - Die Konfiguration für MrData

src - Die Quellcodes für Visual Studio
Autor: Simon Lehmayr (Gast)
Datum: 26.06.2007 21:58
Dateianhang: MrData.zip (191,4 KB, 230 Downloads)

Neue Version für verbessertes Logging an RS232 - z.B. GPS-Mäuse!

settings.txt unterstützt jetzt neue Kommandos nach baud=xxxx:
binary=0 oder 1 (ASCII-binäres Logging der seriellen Daten in der Textdatei, z.B. GPS-NMEA-Strings; 0 bedeutet, dass alle chars in 2 Hexnibbles umgewandelt werden.)
send=<Hexstring> (Sendet den genannten Hexstring beim Anschalten über TxD)
cyclic=<Hexstring> (Sendet bei jedem Messzyklus den Hexstring über TxD)
Hexstring = 00FFAB12... (immer zwei Bytes sind eine Hexzahl). Der
Hexstring wird in ASCII-Chars konvertiert und gesendet.

Unterstützung für mega8,88,168 eingebaut. Wobei mega8 noch nicht
getestet ist.
Autor: Simon Lehmayr (Gast)
Datum: 27.06.2007 08:14

Bugreport:
Es gibt einen Bug in meiner FAT16-Implementierung:
Beim Anlegen eines Fileentries im Rootdir an einer Sektorgrenze tritt
ein Fehler auf - LED blinkt und Fileentry wird nicht geschrieben.
Workaround: Immer Karte frisch formatieren und nicht mehr als 16 Files
aufzeichnen.
Sollten die so "verlorenen" Daten wichtig sein, kann man sie mit einem
Diskeditor wie dem TinyHexer retten, indem man in der FAT die Cluster
der letzten Datei zählt und einen Fileentry kopiert, und dann
Startcluster und Dateilänge anpasst.
Autor: Simon Lehmayr (Gast)
Datum: 27.06.2007 18:29
Dateianhang: MrData.zip (191,2 KB, 937 Downloads)

Bugfix erledigt, glaube ich. Saubere Build-Targets für die verschiedenen
megas eingeführt.
Autor: Simon Lehmayr (Gast)
Datum: 27.06.2007 18:31
Dateianhang: gps_tools.zip (42,7 KB, 1012 Downloads)

Mit VC++ 6 kompilierte Tools, weil die VC++ 8 nicht laufen, wenn man
kein VC++ 8 installiert hat. Dabei hatte ich WIN32 i386 als
Targetarchitektur ausgewählt.
Autor: Simon Lehmayr (Gast)
Datum: 03.07.2007 19:00
Dateianhang: MrData.zip (191,3 KB, 523 Downloads)

Der Filesystembug wurde jetzt endgültig beseitigt!
Beschreibung: Das Anlegen der 16. Datei nach dem Anschalten schlägt
fehl, weil die Sektorvariablen für das Rootdir nach der 16. (bzw.
Vielfache) Datei nicht stimmen (Überlauf beim Zählen der Fileeinträge in
den Rootdiresektoren).
Autor: Andreas L. (simbaz123)
Datum: 22.10.2007 09:09

Ist es möglich, MrData auch auf einem Atmega32 (korrekt) laufen zu
lassen? Was müsste dafür im SourceCode umgestellt werden?
Autor: Simon Lehmayr (Gast)
Datum: 23.10.2007 21:48

Anpassung für Mega32
- Port-Pins für SD Karte (SPI)
- evtl. ein paar SF-Registernamen (für ADC, UART, Timer, Interrupts)
Autor: hannes R (Gast)
Datum: 18.02.2008 17:47

Dieser Logger währ genau das was ich gerade suche! Super Projekt !

Aber hat hier jemand, MrData schon mit einem Mega32 zum laufen bekommen?
Ich bringe das ganze mit WinAVR nicht zum compilieren.


Verzeiht meine Unwissenheit ;-) Bin erst vor kurzem auf C umgestiegen.
Autor: Marcus (Gast)
Datum: 03.03.2008 00:12

Hallo hannes R,

bin gerade dabei, einen ähnlichen Logger auf Basis von MrData
aufzubauen. Als Basis dient mir der Mega32, daher sollte das schon
gehen. Die Plattform ist heute fertig geworden, wollte morgen mit dem
Portieren anfangen. Meld mich die Tage nochmal ... .

@Simon:
Danke für das klasse Projekt!
Werd meinen Code und die Schaltung hier posten, sobald alle läuft.

Gruß Marcus
Autor: Arian (Gast)
Datum: 06.03.2008 18:10

Hallo,

hat jemand einen Schaltplan für Mr. Data?
Autor: Dominik (Gast)
Datum: 10.03.2008 18:37

Hat den keiner einen Schaltplan?
Autor: Sebastian (Gast)
Datum: 12.03.2008 18:03
Dateianhang: mrdata.png (12,7 KB, 499 Downloads)
preview image for mrdata.png

Ist das so richtig?
Autor: Simon Lehmayr (Gast)
Datum: 12.03.2008 21:23

Der Schalter S1 muss gegen GND gehen. Ansonsten würd ich mal sagen,
schaut gut aus!
Autor: Sebastian (Gast)
Datum: 15.03.2008 15:15
Dateianhang: gps.png (16,8 KB, 469 Downloads)
preview image for gps.png

Ich möchte den GPS-Tracker ins Auto bauen. Passt die Schaltung dann
soweit? Oder gibt es einfacherer  (bessere) Möglichkeiten auf die 3.3V
zu kommen?
Autor: Simon Lehmayr (Gast)
Datum: 16.03.2008 14:00

Sicherung und Diode, gut so :-)
Wo die 3.3V letztendlich herkommen, ist ja eigentlich egal. Die
Stromaufnahme liegt wohl im 2-stelligen mA-Bereich (plus GPS-Maus)...
Es gibt auch günstige Zigarettenanzünderadapter mit einstellbarer
Spannung.
Ein Regler 12V->3.3V verbrät dann halt knapp 1 Watt. Da ist einer im
TO-220 dann zu nehmen.
Für die Stromsparer gibts noch Schaltwandler mit Diode und Spule.
Autor: Jan (Gast)
Datum: 16.03.2008 14:44

Du solltest einen bidirektionalen Supressor nehmen, wenn ist nicht sogar
schon eine ist. Jedenfalls wäre dann das Schaltsymbol falsch.
Autor: Sebastian (Gast)
Datum: 16.03.2008 18:27
Dateianhang: gps.sch (251 KB, 180 Downloads)

Ich muss sowieso nochmal umbauen... Der IRU1010-33 ist niergends mehr
verfügbar....

Sonst noch vorschläge als ersatz?

Habe mal die Eagle-Datei mit hochgeladen. Vielleicht kann es noch jemand
gebrauchen.
Autor: Stefan Wimmer (wswbln)
Datum: 18.03.2008 21:17

Sebastian wrote:
> Ich muss sowieso nochmal umbauen... Der IRU1010-33 ist niergends mehr
> verfügbar....

...LP2950ACZ-3.3 (100mA, TO-92)
Autor: Sebastian (Gast)
Datum: 19.03.2008 18:19

Hi Stefan,

den LP 2950 ACZ-3.3 habe ich niergends gefunden! nur 3.0 kein 3.3. Woher
bekommst du den?
Autor: MarcS (Gast)
Datum: 02.04.2008 16:34

Hallo,

erstmal danke Simon für das Veröffentlichen!
Vor 2 Tagen gesehen und gleich nachgebaut, echt klasse!

Etwas verwundert bin ich, dass die vorletzte Version bei mir
funktioniert, die allerletzte aber nicht, da geht die LED nicht mehr aus
durch das drücken des Tasters... Wo ist der Unterschied? (verwende
Mega88 mit den vorkompilierten .hex).

Da ich Modellflieger bin, werde ich das System wohl in diesem Bereich
einsetzen :-) Sowas wie Spannung uns Strom messen bietet sich ja an, GPS
ist dann Luxus.
Muss mich mal in den Code reinlesen, würde nämlich gerne noch
Frequenzmessung (Drehzahl) und Servosignal (1-2ms Signal) einlesen und
loggen. Sollte doch möglich sein!?

Bis dann

Grüße

Marc
Autor: Stefan Wimmer (wswbln)
Datum: 08.04.2008 23:58

Sebastian wrote:
> Hi Stefan,
>
> den LP 2950 ACZ-3.3 habe ich niergends gefunden! nur 3.0 kein 3.3. Woher
> bekommst du den?


Beim freundlichen National Distributor (am liebsten verkauft er
allerdings 100er Stückzahlen - ist bei solchen Cent-Artikeln aber nicht
so das Problem...)
Autor: Simon Lehmayr (Gast)
Datum: 09.04.2008 22:45
Dateianhang: MrData2.zip (106,7 KB, 156 Downloads)

Hab ich neu kompiliert - mit dem alten WinAVR - hoffe jetzt gehts!
Autor: MarcS (Gast)
Datum: 11.04.2008 16:38

Hallo,

also das Kompilieren mit der neuesten WinAVR-Version hilft...

Bin auch schon kräftig am Erweitern.
Folgendes tut schon:
5 Servosignale einlesen
"Zeitangabe" vor jedem Datensatz
"Automatic-Mode"-Option, Logger aktiviert sich selbständig und legt
(auch optional) alle x-sekunden ein neues File an (Gedanke waren
Spannungsprobleme und Vibrationen im Modellflieger...)
Ein Pufferüberlauf am Seriellen Eingang führt nicht mehr zum Abbruch
sondern wird geloggt..
und einige Ablaufänderungen...

Noch nicht fertig:
Drehzahlmessung (max. 2 über ext Interrupts, reciht mir, mehr ginge wohl
auch)

Code hab ich gerade nicht da, kommt aber die Tage.
Eine kleine Dokumentation werd ich auch hier machen:
http://www.uni-stuttgart.de/akamodell/projekte/?p=132

Grüße

Marc
Autor: Wilhelm Hannemann (Gast)
Datum: 14.04.2008 14:29

Gibt es denn was neues vom MrWave? Der entspricht von der Beschreibung
genau dem, was ich gerade für ein Projekt brauche.
Autor: Simon Lehmayr (Gast)
Datum: 14.04.2008 21:52
Dateianhang: MrWave.zip (22,3 KB, 60 Downloads)

Hi Wilhelm,

zuerst habe ich versucht einem ATmega88 das beizubringen. Aber selbst
mit hoher Optimierung und 20MHz Takt war es zu zeitkritisch. Mehr RAM
zum Puffern wäre nötig. ADCs hatte ich auch keine geeigneten. Stereo
erfordert nämlich 2 davon (oder einen semi-automatischen 2-Channel). Und
ich habe nur eine freie SPI am Atmel.
Dann habe ich ein ARM7-Board (LCP2138@60MHz) genommen. Allerdings nie
externe ADCs angekoppelt. Der interne Wandler ist dafür sehr schnell
(aber nur 10 Bit). Dieses Projekt funktioniert auch. Im Anhang findest
du es.
Schließlich habe ich für ca. 40 Euro einen MP3-Festplatten-Rekorder mit
20GB bei ebay ergattert... damit ließ ich es dann gut sein :-)
Autor: Wilhelm Hannemann (Gast)
Datum: 16.04.2008 09:30

Ich brauche nur Mono, dafür aber mit mind. 12 bit bei 44,1 kHz. Einen
Festplattenrecorder (Archos gmini 200) habe ich, der kommt aber aus
Platzgründen und wegen Erschütterungen nicht in Frage.
Danke für die schnelle Antwort und den Hinweis auf den ARM bzw. den
Quellcode.
Wilhelm
Autor: Simon Lehmayr (Gast)
Datum: 16.04.2008 17:37
Dateianhang: MrWave.zip (28,4 KB, 71 Downloads)

Der Creative ZEN Vision V5 hat Flash und Line-In - ein kleines leichtes
Plastikgerät.
Im Anhang: meine AVR Gehversuche mit MrWave.
Autor: Simon Lehmayr (Gast)
Datum: 16.04.2008 17:40

heißt Zen V -
http://de.europe.creative.com/products/product.asp...
kostet 45 Euro neu (1GB)
Autor: Simon Lehmayr (Gast)
Datum: 16.04.2008 17:42

oder Zen V Plus
http://de.europe.creative.com/products/product.asp...
40 Euro (1GB), mit FM-Radio, da kriegt man mehr für weniger Geld?
Autor: MarcS (Gast)
Datum: 17.04.2008 15:39

So,

die Erweiterungen für Modellbau haben einen stabilen Stand erreicht.
Analog, Servos, Drehzahl. Neue Optionen, Reihenfolge in settings.txt
egal...

Hier der Bericht:
http://www.uni-stuttgart.de/akamodell/projekte/?p=132

Grüße

Marc
Autor: Wolfgang R. (r-nut)
Datum: 16.05.2008 15:04

Hallo Leute, hallo Simon,

super Projekt! Habs mal auf einen ATmega8 ausprobiert - und es läuft.
Es werden alle SD-Cards erkannt - super! Selbst jene welche die mit WIN
XP formatiert wurden. Bei anderen Projekten, muss man die Karten mit
Linux formatieren...
Irgendwie hab ich jetzt aber einen Knoten im Hirn, vielleicht könnt Ihr
mir ja helfen.. Normale Zeichen schreiben geht - auch zeichenstrings
schreiben geht.... ABER:
Zuerst mache ich eine AD-Wandlung...
ADMUX = KANAL   ;      // Kanalauswahl
ADMUX |= (1<<REFS1) | (1<<REFS0); //Interne Referenzspannung aktiv
ADCSRA |= (1<<ADSC);       //Wandlung starten...
while(ADCSRA&(1<<ADSC))      //Wandlung abwarten
{;}
Wert = ADC;              // Bei ATmega8 nur ADC
U = Wert * FAKTOR;      // Spg.Wert berechnen
ADCSRA &= ~(1<<ADEN);       //ADC ausschalten... 
Dann habe ich den gewünschten Wert in U. Wie kann ich den Wert auf die
Karte bringen? Ach ja: int16_t U;
Bei einem Display musste ich den Wert erst mit umwandeln...
              dtostrf(U_1,6,2,String);
Hier ja eigentlich nicht... aber die Fkt.
 write_number_u32(tx_buf[tx_rdp]+256*tx_buf[tx_rdp+1]);
gibt nicht das aus was ich will... ich hab dann schon probiert:
 
write_number_u32(U);
//Dann:
mmc_write_byte(ADC); //Zum Test 

Irgendwie sehe ich den Wald vor Bäumen nicht mehr... kann mir jemand
einen Tip geben?

-Danke-

-
Gruß
Wolfgang
Autor: Simon Lehmayr (Gast)
Datum: 16.05.2008 18:36

Äh, MrData wandelt doch bereits ADC und speichert den dann auf Karte...

Aber vom Quellcode her müsst es doch tun... oder schreib deine eigene
Bin->Dec Funktion. Aus deinen kurzen Codestückchen kann ich sonst auch
nichts diagnostizieren.

Woher weißt du denn, dass U korrekt gesampelt wird? Kann der Fehler auch
im AD-Wandler sein? Taktvorteiler zu klein z.B.?
Autor: Wolfgang R. (r-nut)
Datum: 16.05.2008 18:49

> Woher weißt du denn, dass U korrekt gesampelt wird? Kann der Fehler auch
> im AD-Wandler sein? Taktvorteiler zu klein z.B.?
Die Wandlung passt, ich hab die gleiche AD-Wandlung früher schon mal
verwendet und auch auf einem LCD ausgegeben, da passt U.

Ich hab noch weiterprobiert - mit einer Var. a=88;

mmc_write_byte(a); -> Ausgabe auf Karte: X  //also wird a als ASCII
interpretiert.
write_number_u32(a); -> Ausgabe: 88 hier passts.

Vielleicht liegts daran, dass ich nach der AD-Wandlung noch eine
Umrechnung mache. Ursprünglich waren es nur float Werte.

U = ADC * 0.0025;

Kann ich auch Float Werte abspeichern? Gibts da Routinen?
Ansonsten müsste ich wirklich wie beim Display die Fkt.
dtostrf(U_1,6,2,String); verwenden.

Im Ursprungscode wird ja nur der Wert von ADC abgespeichert oder?
-Also ohne Umrechnungen etc.