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 ;)
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...
Ja. das kannste mitm pwm port machen. und nachher mit nem rc glied die spannung aufn mittelwert ziehen. muss man halt rumexperimentieren
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)
zu meinem vorposter: rc glied ist halt meistens relativ langsam und verzerrt so das signal
ich würde einfach nen externen DAC verwenden, muss dann nur nacheinander ein Byte an einem Port ausgeben und am DAC kommts hinten richtig raus.
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.
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.
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 :)
@Lupin: Man braucht dann aber noch eine Möglichkeit das (E)EPROM zu beschreiben. Ein Beispiel für EPROM+AVR gibts hier: http://s-huehn.de/elektronik/bbgong/bbgong.htm
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 ;-)
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.