AVR und Wavefiles?

Gast #342023
Lesenswert?

Hallo Freunde,

ich bin echt erstaunt, dass ich zum Thema Wav-Soundausgabe über AVR
sogut wie nichts brauchbares finde.

Ich denke, da wav eh unkomprimiert ist, dürfte es nicht allzu schwer
sein, den Sound auszugeben.

Was mich nun also interessiert ist, gibt es ein 4 oder 8bit Modul, das
ich mit meinem AVR ansprechen kann - zwecks Sendung der wave-Signale.
(perfekt wäre natürlich eine Ansteuerung wie für LCDs)

Wäre echt supi, wenn ihr ein paar Informationen für mich hättet, da ich
keine Ahnung, wie wave ansich funktioniert.

Gruß
Manu ;)
Gast #342024
Lesenswert?

Ich meine, dass man die Werte aus dem Wavefile einfach an einen DAC
senden muss.
Irgendwo hat jemand das auch ohne richtigen DAC gemacht, glaube ich. Er
hat den Digital Analogconverter einfach durch das an und Ausschalten
eines Pins grob nachgeahmt und die Spannung mit einem Kondensator
geglättet...
Gast #342026
Lesenswert?

An und ausschalten eines pins ... um damit unterschiedliche spannungen
zu erzeugen braucht man unterschiedliche an/aus verhältnisse --> PWM.

Es gibt von atmel ein appnote wo gezeigt wird, wie man mit nem AVR nen
Sinussignal erzeugt  (gibt auch codesamples hier im forum)
Dazu brauchst du einen tiefpassfilter (um die hohe pwm frequenz aus
deinem signal zu filtern).

Und so musst du halt die wav daten entweder im speicher vom controller
speichern oder über ein externes medium einlesen (muss halt schnell
genug sein)

Und du musst halt drauf achten, dass du die sound daten mit der
richtigen geschwindigkeit ausgegeben bekommst (sampling rate)
Gast #342030
Lesenswert?

22 KHZ Mono Signal bedeutet (bei 8 Bit Quali) schonmal 22050 Bytes
Speicher pro Sekunde. Und 22kb sind bei den AVRs wirklich schon ´ne
ganze Menge Speicher.Wird also nötig sein die Sache aus ´nem externen
Speicher zu lesen,wenns nich nur ´n kurzer Piep werden soll.
#342031
Lesenswert?

Wie bereits erwähnt, hat man hier im wesentlichen zwei Probleme:
a) Der D/A-Wandler
b) Die Sounddaten speichern.

Zum D/A-Wandler:
Du könntest PWM nehmen. Wenn die Frequenz hoch genug ist, dann muss man
das Signal wegen der Trägheit des Lautsprechers nicht mehr filtern. Wenn
Du Filtern wills kann Du z.B. ein Filter aus OpAmps nehmen. Die
angesprochen AppNote von Atmel findet sich hier:
http://www.atmel.com/dyn/resources/prod_documents/doc1456.pdf

Eine andere einfach Möglichkeit wäre ein einfacher R2R-DAC. Der besteht
nur aus ein paar Widerständen.

Du könntest natürlich auch einfach einen fertigen D/A-Wandler nehmen,
z.B. TDA1543 (Reichelt 0,75Euro).

Zum Speichern:
Wenn Du die Dateien einfach so roh speicherst, dann brauchst Du bei
8kHz/8Bit eben 8KByte/sec. Mit Kompression bzw. bei 4Bit entsprechend
weniger. Du kannst dafür den internen Speicher den MCs verwenden (wenn
er genug Speicher hat) oder z.B. ein externes EEPROM anschließen. Die
größten seriellen leicht erhältlichen sind die 24C512 mit 64KByte
Speicher. Alternativ auch z.B. ATMELs Dataflash (wir in der AppNote
verwendet, gibts aber nur in SMD) oder eine externe SD-Karte.

Außerdem gibts noch reine Sound-Speicherchips, die ohne MC die Sounds
abspielen können. Such mal im Forum nach ISD.
Gast #342032
Lesenswert?

Was ich auch mal gelesen habe ist, dass jemand mit einem EEPRom ein
soundfile abgespielt hat. Er hat einfach die ganzen werte ins EEPRom
geladen und dann mit nem controller die adressleitungen in der
Samplerate hochgezählt. An den Datenausgängen hing ein R2R-DAC. Eine
simpmle und doch gute methode zum sound abspielen :)
#342035
Lesenswert?

also...

wenn du das ganze mit 8bit machen willst dann besteht die WAV datei aus
Zahlen ohne vorzeichen und unverschlüsselt.

Wenn du das ganze aber mit mehr als 8bit machen willst dann besteht die
WAV datei aus Zahlen MIT vorzeichen, die mit dem zweierkomplement
verschlüsslt sind!!!!!

Also wenn du mehr als 8bit arbeitest, dann musst du die daten enteder
an einen chip senden, der die daten gleich entschlüsselt (z.B. TDA1543
= entschlüsseln und DAC in einem) oder du musst sie zuerst am PC
entschlüsseln und dann an den DAC schicken.

Viel glück, bin auch grad dabei zuwas zu machen ;-)
#342036
Lesenswert?

@Ludwig:
Das 2er-Komplement ist doch nicht verschlüsselt. Um die in ein
vorzeichenloses Format zu überführen zählt man einfach was dazu. Wenn
die Zahl z.B. 16Bit hat, dann betrachtet man sie einfach als
vorzeichenlose Zahl und zählt 32768 dazu. Damit wird aus
-32768...+32767 eben 0...65535.

Das 2er-Komplement mag am Anfang etwas verdreht aussehen, aber es ist
dafür gemacht, dass man positive und negative Zahlen einfach so
zusammenzählen kann, man braucht dabei das Vorzeichen nicht beachten.

Markus

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