Forum: Mikrocontroller und Digitale Elektronik wav file mit AVR aus SD Karte abspielen


von Michael Lippert (Gast)


Lesenswert?

Hallo,

nachdem ich festgestellt habe, dass was als 192 kHz Soundkarte verkauft
wird einen 20 kHz Sperrfilter hat, und ich eine Soundwiedergabe bis 70
kHz brauche stelle ich mir die Frage ob es einen Weg gibt, realistisch
ein Geraet zu bauen dem ich eine wave (oder auh nur die ASCI Werte
meines Analogsignals) Datei auf eine SD Karte gebe und welches diese
Datei mit 200 kS/s (min) und 16 bit wiedergibt, wenn ich einen
Triggerpulse sende. Dabei sollte der Delay unter einer ms liegen.
Reicht ein AVR dafuer aus? Kann man mit Bascom eine SD (oder CF) Karte
ansprechen? Oder eine andere Form von Flash?
Ih habe wirklich ernsthaft vor so etwas zu bauen weil ich es beruflich
brauche und ueberlege mir nun halt was der einfachste Weg ist (klar,
selbst der mag nch schwierig sein). Kennt jemand vielleicht ein projekt
dazu? Oder sollte ich Audiocodecs verwenden?

Viele gruesse,
Micha

von Benedikt (Gast)


Lesenswert?

Bascom: Nein
Rechne mal selbst:
200kS bei 16bit sind 400kByte/s bzw. 3,2MBit/s.
Da eine SD (oder auch CF) Karte nicht kontinuierlich Daten liefern kann
(wegen verschiedenen Sektoren usw.) musst du die Daten noch
zwischenspeichern.
Für all diese Operationen bleiben dir gerade mal 40 Takte pro
Samplewert bei 16MHz, wovon etwa die Hälfte für die Wiedergabe benötigt
werden (falls du es einfach machst, und die Werte einfach fortlaufend
auf 2 Ports ausgibst.)
Wenn du also nicht gut in Assembler bist, dann sehe ich kaum eine
Chance sowas jemals zum Laufen zu bekommen.

von Werner (Gast)


Lesenswert?

Hallo Micha,

die 192kHz sind die Samplingrate, die 20kHz die analoge Grenzfrequenz.
Zwei gänzlich unterschiedliche Sachen.

Um ein transientes Signal halbwegs sauber, ohne größere Amplituden und
Phasenfehler ausgeben oder samplen zu können kann man von mindestens 10
Sample pro Periode ausgehen. (Die Nyquist/Shannon Grenze gilt nur für
unendlich lange periodische Signale. Beides ist in praktischen
Anwendungen nur selten zu erfüllen.)

Wenn Du 'nur' ein konstantes 70 kHz Sinus-Signal erzeugen willst,
dann kannst Du den Sperrfilter aus der Soundkarte auslöten und hinter
die Soundkarte ein Rekonstruktionsfilter schalten.

Wenn Du ein beliebiges transientes Signal mit f <= 70kHz erzeugen
willst, kommst Du mit den 192 kHz nicht hin. Dann brauchst Du eine
Ausgabe die 700 kSamples oder mehr schafft. Was weder mit 'nem Atmel
noch mit einer normalen Soundkarte zu schaffen ist.

Beschreib mal genauer was Du machen möchtest.

Ciao,
Werner

von Mike (Gast)


Lesenswert?

Nimm nen DSP und spar dir einen Haufen Arbeit. Die sind für so etwas
ausgelegt. Um Assembler wirst du allerdings auch dort meist nicht herum
kommen.

von Michael Lippert (Gast)


Lesenswert?

Also die Anendung die ich vorgesehen habe ist eine Soundausgabe fuer
Verhaltensversuche. Das Problem ist aber, dass Ratten, die wir als
Versuchstiere verwenden einen wesentlich hoeheren Hoerbereich haben als
wir Menschen. 50 kHz sind fuer Ratten normal.
Tja, also brauchen wir ein Soundsignal was sagen wir mal 50 kHz
liefert. Naja, und da dachte ich, koennte man ja so eine 192 kS/s
Soundkarte verwenden. Wie gesagt, geht aber nicht also brauchen wir
etwas anderes. ARM Prozessoren bringen doch 60 Mhz, oder? Waere das
vielleicht eine Idee?

Viele Gruesse,
Micha

von Hans (Gast)


Lesenswert?

wie wärs wenn ihr einfach einen verstärker hinter die soundkarte tut der
schön verzerrt... dort die gewünschte oberwelle rausgrapschen,passend
verstärken und fertig...

oder doch gleich eine billigst dds verbraten... wenn noch "einfacher"
sein soll einen billigst rc-oszillator nehmen und ein multimeter mit
frequenzmesser und den ausioamp samt lautsprecher dran...wobei ich mir
nicht sicher bin ob die letzeren 2 dinger das überhaupt noch
rausbringen...

73

von Werner (Gast)


Lesenswert?

Hallo Michael,

> Also die Anendung die ich vorgesehen habe ist eine Soundausgabe fuer
> Verhaltensversuche.

Nette Aufgabe ;-)
Reicht es wenn das Labor mäßig nutzbar ist oder soll es klein, leicht,
mobil für Versuche in der freien Wildbahn sein?

> ARM Prozessoren bringen doch 60 Mhz, oder?
auch beim 4fachen Takt wird das noch verdammt knapp, wobei ich nicht
weiß, ob die ARMs den externen Takt nicht intern nochmal teilen. In dem
Fall bringt das keine Verbesserung, da der ARM dann letzendlich nicht
schneller als der Atmel ist.

Imo solltest Du wirklich mal Richtung DSPs gucken. DSPs sind dafür
ausgelegt hohe Datenströme zu verarbeiten und das ist das Hauptproblem
in Deiner Anwendung. Erfahrungen damit fehlen mir aber gänzlich.

Wenns Labor mäßg seien kann/darf, dann würde ich mal Richtung schnelle
DA-Wandler Karten gucken. (National Instruments, Microstar, etc.) Der
Anschaffungswiderstand ist zwar nicht ganz unerhelblich. Wenn Du aber
Zeit und Entwicklungskosten für so ein Projekt auch nur teilweise
berücksichtigen mußt, dann fährst Du mit so einer Karte sehr viel
preiswerter.

Mögliche Karten wären z.B. die PCI6110E/PCI6111E von NI.
Analog out: max 4M Samples/s (1Ch), 2.5M Samples/s (2Ch)
Analog in: 4Ch a 5M Samples/s max. (2Ch a 5M bei PCI6111E)

Kosten rund 4000 Euro + MwSt inkl. Kabel und Anschlußbox.

Ggf. einfach mal Anfragen ob nicht auch noch etwas
kleineres/preiswerteres/mobiles verfügbar ist.

Ciao,
Werner

von Patrick (Gast)


Lesenswert?

Hallo Michael,

die Frage mag ja naiv klingen, aber wie willst du denn einen Ton von
50kHz in die Luft bekommen? Handelsübliche Schallwandler müssen da wohl
passen und Lautsprecher auch. Also sind wir bei dem üblichen
Ultraschall-Geraffel. Gibt es denn in diesem Umfeld nichts, was deinen
Anforderungen entspricht?

von Thomas (Gast)


Lesenswert?

@Werner
"Die Nyquist/Shannon Grenze gilt nur für unendlich lange periodische
Signale."
"Wenn Du ein beliebiges transientes Signal mit f <= 70kHz erzeugen
willst, kommst Du mit den 192 kHz nicht hin. Dann brauchst Du eine
Ausgabe die 700 kSamples oder mehr schafft."

sorry, aber wer hat dir denn den Bären aufgebunden? Lass mich raten:
zuviel in der Audioszene rumgehangen?

Net böse sein,
Thomas :)

von Kurt (Gast)


Lesenswert?

Hallo wie wärs mit nem 555  und nem AT...

Der 555  erzeugt die Frequenzen (noch in Sinus filtern)
und der AVR gibt den "Widerstandswert" aus

Gruss Kurt


Kurt

von Sven (Gast)


Lesenswert?

@Thomas

>>sorry, aber wer hat dir denn den Bären aufgebunden? Lass mich raten:
zuviel in der Audioszene rumgehangen?

Würde mich mal interessieren, wie Du dann zum Beispiel einen einzelnen
Sinuszug (Periode) 70kHz mit 192kS/s digitalisierst oder erzeugst. Du
hast eine Abtastrate von 5usec und der Sample ist 14usec lang, also
nicht mal 3 Abtastpunkte. Das kann dann alles mögliche sein...

Wenn es bei den Versuchen nicht nur um reine Sinusfrequenzen, sondern
um "Geräusche" geht, wird er um die professionellen DA-Karten nicht
rumkommen. Sonst reicht vielleicht auch schon ein Frequqnzgenerator
(VCO wäre dann steuerbar).

Sven

von Werner (Gast)


Lesenswert?

Hallo Thomas,

> sorry, aber wer hat dir denn den Bären aufgebunden? Lass mich raten:
> zuviel in der Audioszene rumgehangen?

Bei meinem Gehör lohnt es sich nicht in der Audioszene rumzuhängen.

Die Shannongrenze ist ein GRENZWERT für periodische, unendlich lange
Signale. Modulierst Du die höchste Frequenz, dann ist sie nicht mehr
die höchste Frequenz.

Ansonsten würde ich Dir empfehlen nochmal ein bisschen Literatur zum
Abtasttheorem zu lesen. Insbesondere die Vorraussetzungen und
Definitionen und was im Spektrum passiert wenn du die Amplitude einer
festen Frequenz veränderst.

> Net böse sein
nur ein bisschen angenervt, da man immer wieder Schrott zum Thema
Shannon/Nyquist liest. Die meisten schnappen irgend etwas auf, ersetzen
das ">" durch "=" und haben keinen blassen Schimmer welche
Vorraussetzungen für den Genzwert überhaupt gelten.
Spätestens wenn es dann um die Abschätzung geht, wie weit man an die
Shannongrenze herangehen kann um noch brauchbare Daten zu messen oder
halbwegs unverfäscht zu erzeugen, gehts völlig den Bach runter.

Der Faktor 2.2 mit dem eine CD arbeitet lässt sich nicht mit
'einfachen' Mitteln wie einem RC-Tiefpass im Eingang und im Ausgang
erreichen. D.h. erreichen schon, aber das gemessene/erzeugte Signal hat
dann nur noch wenig mit dem Ausgangssignal zu tun.

Die Audio puristen wiederum haben Gehöre, die Fehler weit unterhalb der
Nachweisbarkeit, noch problemlos "spüren" können und sich ansonsten
genausowenig mit dem Thema beschäftigt.

Ciao,
Werner

von Thomas (Gast)


Lesenswert?

Nyquist sagt, dass ein zu samplendes Signal keine Frequenzanteile größer
der halben Abtastfrequenz haben darf weil das Signal sonst
unwiederruflich verfälscht wird. Phase, Amplitude und Dauer spielen
dabei überhaupt keine Rolle, genausoweng wie ob es sich um ein
periodisches Signal handelt.
Eine einzelne Sinusschwingung besteht aber aus noch deutlich höheren
Frequenzen als die der Schwingung selber. Trotzdem ist Nyquist
weiterhin gültig. Zur Not muss ich mir das Signal halt vorher im
Spektrumanalysator angucken und abwägen wie schnell ich abtasten muss
um keine wichtigen Informationen zu verlieren. Wenn dann noch
nennenswerte Amplituden im höheren Frequenzbereichen als der halben
Abtastfrequenz auftreten müssen die mit einem Filter entfernt werden.
Richtig ist, dass nur ein Sinus konstanter Frequenz, Amplitude und
Phase der schon unendlich lange andauert und noch unendlich lange
andauern wird neben dem Gleichanteil (Offset) das einzige Signal ist,
was nur aus exakt einer Frequenz besteht. ALLE anderen Signale lassen
sich als Überlagerung solcher Sinusschwingungen vollständig abbilden.
Das heißt, wenn ich es schaffe die Silhouette einer schönen Frau als
Überlagerung von Sinusschwingungen <96kHz im Zeitbereich darzustellen
dann kann ich die mit einer Samplingfrquenz von 192kS/s verlustlos
digitalisieren (mal abgesehen von der Amplitudenquantisierung) und
hinterher wieder vollständig rekonstruieren.

Rock'n'Roll,
Thomas

von Thomas (Gast)


Lesenswert?

Hallo Werner,

darüer dass man in der praxis immer höher abtasten muss als Shannon
fordert will ich nicht streiten. Mir scheint, wir haben da eh ein wenig
aneinander vorbeigeredet, was die Definition der Frequenz angeht, ich
denke dabei immer direkt an die Spektralanteile eines Signals und nicht
an dessen Periodendauer^-1.
CD-Player arbeiten meines Wissens nach auch mit "padding" (hinzufügen
von bestimmten Werten, in diesem Fall Nullen) um bei der DA Umsetzung
den gespiegelten Frequenzbereich weiter auf den Zahlenstrahl nach
rechts zu verschieben, dadurch lässt sich der Rekonstruktionsfilter
einfacher aufbauen.
Ich denke in der Signalverarbeitung kenn ich mich ganz gut aus,
inklusive Shannon und Modulationsverfahren.

Gruß,
Thomas

von Werner (Gast)


Lesenswert?

Hallo Thomas,

> darüer dass man in der praxis immer höher abtasten muss als Shannon
> fordert will ich nicht streiten. Mir scheint, wir haben da eh ein
> wenig aneinander vorbeigeredet, was die Definition der Frequenz
> angeht,

Ok, beenden wir das hier.

Ciao,
Werner

von Michael Lippert (Gast)


Lesenswert?

Hmm, also die Sache mit dem Frequenzgenerator haben wir schon, leider
ist es da ziemlich kompliziert Sweeps mit Bandbreite oder auch nur hohe
Frequenzen mit Bandbreite rauszubekommen. (Jaja, ich kann Rauschen
filtern).
Aber das ganze selber zu bauen hat einen gewissen Geek Faktor, einen
hohen Lernwert und zudem ist es billiger als 4000 Eusen NI DAQ Karte.
Außerdem wär es doch so genial für das Experiment, wenn man einfach nur
einen Triggerpuls braucht. Die Karte braucht einen PC, Software,
Ansteuerung. Den Puls bekommt man vom MRT oder was immer man verwendet.
(Jaja, hach, haben die hier am NIH einen netten 11,7 T Tomographen)
Angenommen ich würde das mit einem DSP probieren (ich nehme an mein
kleiner 30 MHz DSPic reicht nicht...) hat einer ne Idee was für einen
man verwenden sollte, der:
- ein billiges (ja billig, nicht preiswert ;-)) Entwicklungskit hat
- den schon ein Haufen anderer Leute nimmt die man fragen kann
- schnell genug ist
- einen kostenlosen C-Compiler hat?

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
Noch kein Account? Hier anmelden.