*.wav während des Sampling auf SD ausgeben

Gast #992852
Lesenswert?

Hi,

habe da mal eine Frage nach Erfahrungen oder Wissen ob und wie ich 
folgendes realisieren kann.

Ich möchte wav-Daten die ich über den ADC am Atmega644p erzeuge, während 
des Samling auf SD-Karte schreiben. Ich nutze Bascom im Verbund mit 
AVR-DOS für die Dateisystemverwaltung.

Kann ich nun während des Sampling die Daten direkt auf die SD-Karte 
schreiben?

Ich weiss ja (durch die eine Sekunde) am Anfang schon die Dateigröße. So 
könnte ich den "Header" der wav-Datei schreiben, anangen zu samplen und 
die Bits so schreiben wie sie kommen.

öffne neue wav
schreibe den header der wav
DO solange die Sekunde noch nicht rum ist
   lese ADC1
   schreibe ADC1-Wert auf die SD
   warte 12us oder so
LOOP
schließe wav


Bei 8Bit/8Khz Sampling bekomme ich so 8kb/sec. Verlangsame ich dadurch 
den Samplingprozess? Wenn ja, kann ich berrechnen um wiviel ich ihn 
verlangsame?

Vielleicht merkt man an der Fragestellung dass ich ziemlich am Anfang 
der uControler-Entwicklung stehe^^

Gruß
Kalle
#992859
Lesenswert?

So wird das nichts, denn das Schreiben auf die SD Karte dauert zwischen 
wenigen µs und einigen 100ms je nachdem ob gerade ein neuer 
Sektor/Cluster angefangen wird.
Bau dir zwei Puffer im RAM, in die du die Sampledaten in einem Timer 
Interrupt schreibst. Ist ein Puffer voll, wird dieser auf die Karte 
geschrieben und währenddessen der andere Puffer gefüllt. Worst Case muss 
dieser Puffer aber jeweils >1kByte groß sein. Kleinere Puffer können 
(und werden warscheinlich) funktionieren, müssen aber nicht. Es wird mit 
Sicherheit SD Karten geben die ab und zu Probleme machen.
Gast #992870
Lesenswert?

Hi,

danke für diesen Denkansatz. Ich benutze einen Atnega644p, dadurch bin 
ich glücklicherweise in der Situation diese beiden Kb frei zu haben.

Du schreibst:
> µs und einigen 100ms je nachdem ob gerade ein neuer
Sektor/Cluster angefangen wird.

Was denkst Du, erfahrungsgemäß, wie schlimm die Ausreiser "einige 100ms" 
wohl höchstens sein könnten?

Wenn ich 1kb-Blöcke schreibe, so habe ich 125ms pro Puffer. Wird das 
denn auch im extremfall ausreichen?

gruß
Kalle
#992879
Lesenswert?

Kalle wrote:

> Was denkst Du, erfahrungsgemäß, wie schlimm die Ausreiser "einige 100ms"
> wohl höchstens sein könnten?

Einige 100ms können ab und zu durchaus vorkommen, wenn gerade das 
wear-leveling etwas zu tun hat, siehe auch hier:
Beitrag "Schnelle SD-Karte im SPI-Modus?"

> Wenn ich 1kb-Blöcke schreibe, so habe ich 125ms pro Puffer. Wird das
> denn auch im extremfall ausreichen?

2x 1k (1k=1024Byte=2 Sektoren) Puffer sollte für viele Fälle reichen, 
aber es wird bestimmt einige wenige SD Karten geben, bei denen das ab 
und zu nicht reicht.
Gast #992880
Lesenswert?

>Wenn ich 1kb-Blöcke schreibe, so habe ich 125ms pro Puffer. Wird das
>denn auch im extremfall ausreichen?

Nein, ich habe auch schon 300ms gemessen.
Wenn du mit 125ms auskommen musst, dann musst du
eine Karte finden die halt kein längeren Aussetzer macht.
Viel Spaß beim suchen :(
Gast #992884
Lesenswert?

okay,

nicht sehr motivierend ;)

Hat denn jemand Erfahrungen welche Speicherkarten als gut gelten und 
welche nicht? Gibt es einen besonders guten Hersteller?

Manhört ja viel, doch auch wird viel das Marketing dazu beitragen, oder 
ist eine Kingston oder SanDisk Karte wirklich besser als andere?

Gruß
Kalle
#993263
Lesenswert?

Von SanDisk gibt es ja besondere 'Ultra Highspeed SD-Karten'.
Vielleicht taugen die für sowas?

So ganz nebenbei frage ich mich natürlich schon: Warum dauert das bis zu 
mehreren 100 ms?
Das ist ja völlig unbrauchbar, zumal man ja im Voraus nicht wissen kann, 
ob demnächst der Schreibvorgang 100ms oder 100 us dauert.
#993274
Lesenswert?

Tobias Plüss wrote:

> So ganz nebenbei frage ich mich natürlich schon: Warum dauert das bis zu
> mehreren 100 ms?

Eine SD Karte hat größere Sektoren als nur 512Byte. Daher müssen in der 
Karte z.B. 2 oder 4kByte gelesen werden und wo anderst hingeschrieben 
werden (wear Leveling). Dazu kommt noch, dass die FAT Tabelle 
aktualisiert werden muss usw.
(Firma: TravelRec.) Persönliche Seite #993550
Lesenswert?

2kB Puffer werden für die meisten Karten nicht reichen. Ich habe 6kB als 
Ringpuffer ausgeführt und ab und zu noch Aussetzer, hauptsächlich in den 
vorderen Sektoren der verschiedenen Karten. Um alle Aussetzer 
wegzubekommen, muß man mindestens 300ms des aktuellen Sampleaufkommens 
puffern können. Die Geräte, für die SD-Karten eigentlich gedacht sind, 
haben meistens genug Speicher an Board, Mikrocontroller tun sich hier 
etwas schwer oder man braucht halt externe Bausteine und dementsprechend 
viele Portpins.

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