mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik *.wav während des Sampling auf SD ausgeben


Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :(

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.