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.
Datum: 28.04.2007 19:43
Die Vorschaufunktion hat den Anhang ignoriert!
Datum: 28.04.2007 19:55
was wird denn MrWave für ein Projekt? WAVE Dateien abspielen? O_o
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!
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.
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
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...
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.
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.
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.
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
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
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.
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...
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.
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
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.
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
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.
Datum: 03.05.2007 22:31
@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!
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.
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
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.
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.
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.
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) :-(
Datum: 05.05.2007 18:05
Volle Karte sollte jetzt erkannt werden.
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
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...
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
Datum: 17.06.2007 18:40
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.
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
Datum: 26.06.2007 21:45
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
Datum: 26.06.2007 21:58
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.
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.
Datum: 27.06.2007 18:29
Bugfix erledigt, glaube ich. Saubere Build-Targets für die verschiedenen megas eingeführt.
Datum: 27.06.2007 18:31
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.
Datum: 03.07.2007 19:00
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).
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?
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)
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.
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
Datum: 06.03.2008 18:10
Hallo, hat jemand einen Schaltplan für Mr. Data?
Datum: 10.03.2008 18:37
Hat den keiner einen Schaltplan?
Datum: 12.03.2008 21:23
Der Schalter S1 muss gegen GND gehen. Ansonsten würd ich mal sagen, schaut gut aus!
Datum: 15.03.2008 15:15
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?
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.
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.
Datum: 16.03.2008 18:27
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.
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)
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?
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
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...)
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
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.
Datum: 14.04.2008 21:52
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 :-)
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
Datum: 16.04.2008 17:37
Der Creative ZEN Vision V5 hat Flash und Line-In - ein kleines leichtes Plastikgerät. Im Anhang: meine AVR Gehversuche mit MrWave.
Datum: 16.04.2008 17:40
heißt Zen V - http://de.europe.creative.com/products/product.asp... kostet 45 Euro neu (1GB)
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?
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
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
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.?
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.

