Hi! Für ein kleines Projekt brauche ich eine Audioausgabe. Generell kann man einen µC nehmen oder mit z.B. dem Raspberry arbeiten. Nachteil hiervon ist die Tatsache, das die erst booten müssen und das passt nicht in mein Projekt. Daher bin ich mal zum Arduino übergegangen und von diesem Video [1] überzeugt worden, die TMRpcm Bibliothek zu verwenden ([2]). Die Qualität ist recht gut und genau das was ich suche. Also habe ich mal eine Demo aufgebaut, denkbar einfach: SD-Karte an den Arduino, Demo-Sketch drauf und an Pin 9 ist der PWM Output, der nach Plan [3] an die Kopfhörer (in meinem Fall ersetzen die den Lautsprecher, der noch nicht bestellt ist) angeschlossen ist (R1 = 100 Ohm). Das Ergebnis ist aber (gar)nicht gut: man kann zwar deutlich im Hintergrund den eigentlichen Sound hören aber es gibt so ein komisches Klirren. Hier: https://www.dropbox.com/s/gbr8xua5r8okme3/beispiele.zip?dl=0 habe ich mal folgende Dateien in einem ZIP-Archiv hochgeladen: * sample2.wav: Demo-Sound, 32 kHz, 8-bit unsigned PCM, Mono (einwandfreie Qualität) - den bekommt der Arduino * sample2_ausgabe.wav: Ausgegebener Sound, aufgenommen (daher etwas blechern im Klang, das komische Klirren ist aber gut zu hören). Habe Ihr da eine Idee, was ich machen kann? Mich verwirrt nur, dass bei den Meisten das einfach so klappt (z.B. im Video) und bei mir komisch verklirrt ist. Viele Grüße! [1] https://www.youtube.com/watch?v=LbqPgJe3Qd4 [2] https://github.com/TMRh20/TMRpcm/wiki [3] https://bryanduxbury.files.wordpress.com/2012/01/amplified2.png
Schau dir mal diese Module von ELV an: Mini-Wave-Player - bis 15 Audiofiles einzeln anwählbar (über I2C) http://www.elv.de/mini-wave-player-mwp1-bausatz.html Soundmodul - bis 65536 Audiofiles einzeln anwählbar (über I2C oder Uart) http://www.elv.de/mp3-soundmodul-msm3-komplettbausatz.html MfG. Mandi
Vergessen, diesen hier: http://www.ebay.de/itm/DFPlayer-Mini-MP3-Player-Module-For-Arduino-/371458304544?hash=item567ca3ea20:g:HkUAAOSwuAVW1T4h
Lass dir nicht gleich zwanzig verschiedene Ausweich-Varianten einreden. Ich finde es eine ziemlich blöde Angewohnheit mancher Forumsteinehmer, obwohl man einen bestimmten Rahmen vorgibt, einem sofort etwas völlig anderes einreden zu wollen. Probleme sind dazu da, dass man sie löst! Ich hoffe jetzt mal, du programmierst mit einem gewissen Bewusstsein und lädst nicht einfach nur fremde Sketche, ohne zu wissen, das diese eigentlich tun ... Also - zum Arduino: Stelle sicher, dass die Frequenz der PWM-Ausgabe hochgestellt ist, mindestens 30kHz oder mehr. Wie das geht, steht z.B. hier: http://playground.arduino.cc/Code/PwmFrequency Da dies Hardware-basiert geschieht, belastet das den Arduino quasi überhaupt nicht. Nun musst du nur noch die Bytes im richtigen Tempo (Samplingrate! max. halb so hoch wie PWM-Frequenz, z.B. 22kHz) nacheinander 'rausschieben. Am Besten, du erstellst dir mit einer geeigneten Software (z.B. Audacity) passende unkomprimierte (!) Mono (!) -Wave-Dateien mit 8 Bit Auflösung und passender Samplingrate. Ich habe sie seinerzeit nicht vom Datenträger gelesen, sondern per UDP zum Arduio gestreamt und der Sound war glasklar. Wenn du Stereo brauchst, versetzt du einfach zwei Pins in den PWM-Mode und schiebst je ein Byte nach Links und eines nach Rechts ...
:
Bearbeitet durch User
Frank E. schrieb: > Lass dir nicht gleich zwanzig verschiedene Ausweich-Varianten einreden. > Ich finde es eine ziemlich blöde Angewohnheit mancher Forumsteinehmer, > obwohl man einen bestimmten Rahmen vorgibt, einem sofort etwas völlig > anderes einreden zu wollen. Probleme sind dazu da, dass man sie löst! ACK - da stimme ich voll zu! > Ich hoffe jetzt mal, du programmierst mit einem gewissen Bewusstsein und > lädst nicht einfach nur fremde Sketche, ohne zu wissen, das diese > eigentlich tun ... Was ich gemacht habe, ist erstmal zu verstehen wie das in etwa geht. Dazu kann man sich z.B. diesen Artikel [1] anschauen. Im Grunde mache ich einen (für Mono) PWM Kanal auf und schreibe 1/32kHz mal pro Sekunde den unsigned 8-bit Wert auf dem PWM Kanal - wenn meine Abtastrate 32kHz ist. Leider bekomme ich [1] nicht zum laufen auf einem ATMega328p und da habe ich für den Arduino eine fertige Lib gesucht, nur um zu sehen, ob das überhaupt geht mit dem Sound. > Also - zum Arduino: Stelle sicher, dass die Frequenz der PWM-Ausgabe > hochgestellt ist, mindestens 30kHz oder mehr. Wie das geht, steht z.B. > hier: http://playground.arduino.cc/Code/PwmFrequency Aber sollte das nicht diese TMRpcm Bibliothek schon machen? Es ging mir ja darum, dass im Showcase YT Video (siehe Link oben) die Soundausgabe quasi störfrei ist und bei mir verrauscht - aber ich habe das genau das Setup wie angegeben. > Ich habe sie seinerzeit nicht vom Datenträger gelesen, sondern per UDP > zum Arduino gestreamt und der Sound war glasklar. Und wie sah die Hardwareschaltung aus? Lautsprecher direkt an den Pin? Viele Grüße! [1] http://avrpcm.blogspot.de/2010/11/playing-8-bit-pcm-using-any-avr.html
Max schrieb: > Leider bekomme ich [1] nicht zum laufen auf einem ATMega328p [1] habe ich mir nicht angesehen, da ich nicht jeden Link verfolge, zumal man auch hier Anhänge hochladen kann. Zum ATMega328P kann ich nur sagen, dass er ohne Probleme Sound ausgeben kann. Bei mir werkeln Arduino-Mini-Pro-Klons (aus China) in verschiedenen Sound-Spielereien. Dazu wird ein 8-Bit-Timer auf Hardware-PWM mit Vorteiler 1:1 gestellt und das Soundbyte in regelmäßigen Abständen in das Compare-Register des Timers geschrieben. Die PWM-Frequenz beträgt bei 16MHz-Quarz 62,5 kHz, die Ausgaberate (Samplerate, Frequenz des Beschreiben des Compare-Registers) liegt zwischen 8 kHz und 16 kHz. Ich nutze allerdings keine Arduino-Sketches, auch kein C, sondern mache das direkt in Assembler. Hier ein Beispiel mit einem (Arduino-Klon-) Mini-Pro-Modul, das neben der Sounderzeugung noch 5 Kanäle eines RC-Empfängers ausliest und 4 DC-Motore per Software-PWM ansteuert. Das Modell ist inzwischen auch karosseriemäßig (blaue Bude) fertig: https://www.youtube.com/watch?v=CJMwHpboJTs Der gelbe Kran ist übrigens auch mit dieser Steuerung ausgestattet, hat allerdings andere Sounds. ...
:
Bearbeitet durch User
PWM Frequenz deutlich höher wählen als grade so über hörbar! Class-D findet üblicherweise bei 100-150kHz statt damit das Ausgangsfilter nicht zu schmalbandig ausfallen muss. Wegen dem Klirr kann man mal systematische Fehlersuche betreiben. Bau mal nen RC Tiefpass mit fg=20kHz und das gibst du auf den ADC. Den lässt du mit ADLAR und 1MHz Takt laufen. Was aus dem ADC kommt, schiebst du in der ADC-Fertig ISR aufs OCR1A/B. Wenn du da jetzt Musik ausm MP3-Player dran anschließt, sollte das in erträglicher bis guter Qualität aus dem angeschlossenen Lautsprecher kommen. Wenn ja: Irgendwas an der PCM Software ist faul. Wenn nicht: Der ganze Rest, die Schaltung selbst zum Beispiel. Ein Oszi ist bei sowas Gold wert.
Sascha schrieb: > PWM Frequenz deutlich höher wählen als grade so über hörbar! Falls Du mich meinst, mehr als 62,5 kHz gibt der AVR bei 16 MHz Quarz aber nicht her. > Class-D > findet üblicherweise bei 100-150kHz statt damit das Ausgangsfilter nicht > zu schmalbandig ausfallen muss. Danke für diese Info. Ich habe die AVR-PWM mit 1k/100nF (nicht berechnet, nur probiert und für akzeptabel befunden) ausgefiltert und über ein Poti 10k auf den Eingang eines Class-D-Moduls mit PAM8403 geführt, von dem nur 1 Kanal benutzt wird. ...
Max schrieb: >> Ich habe sie seinerzeit nicht vom Datenträger gelesen, sondern per UDP >> zum Arduino gestreamt und der Sound war glasklar. > > Und wie sah die Hardwareschaltung aus? Lautsprecher direkt an den Pin? Nicht ganz, aber fast. Ich habe nach einem RC-Glied 1k/10nF einen LM386 nachgschaltet. Per UDP habe ich immer 1024 Bytes gesendet und den richtigen Rhytmus zum Senden des jeweils nächsten Datagrammes in einer Mac-Anwendung einfach ausprobiert ...
:
Bearbeitet durch User
Frank E. schrieb: > Lass dir nicht gleich zwanzig verschiedene Ausweich-Varianten > einreden. Ich finde es eine ziemlich blöde Angewohnheit mancher > Forumsteinehmer, obwohl man einen bestimmten Rahmen vorgibt, einem > sofort etwas völlig anderes einreden zu wollen. Probleme sind dazu da, > dass man sie löst! Hast du ein Problem damit, wenn andere User hier Vorschläge machen. Damit wir dir keiner was einreden, auch kein schlechtes Gewissen.
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.