Hallo zusammen, ich möchte gerne Sounds auf einem AVR ausgeben. Der Standard dazu ist anscheinend I2S. Natürlich können das die 8-Bitter wiedermal nicht native, deshalb muss man mal gucken.... Man könnte es via SPI machen, aber da wird das Timing anspruchsvoll. Ggf. müsste man zwei Timer synchronisieren. Tricky. Da habe ich mich gefragt, ob das nicht auch einfacher geht. Gibts sowas wie eine SPI to I2S Bridge? Würde mich auch nicht stören, wenn man da direkt WAVs oder sogar MP3s hinschicken kann. Kennt jemand was?
Christian schrieb: > Der Standard dazu ist anscheinend I2S. Die erste Frage ist eigentlich, welches Ausgabeformat brauchst Du ?
Christian schrieb: > Natürlich können das die 8-Bitter wiedermal nicht > native, deshalb muss man mal gucken.... Zum Beispiel hier: https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/max98357-was-ist-eigentlich-i2s Vielleicht hilft es dir
Christian schrieb: > ich möchte gerne Sounds auf einem AVR ausgeben. Das kommt vor. > Der Standard dazu ist > anscheinend I2S. Das ist ein Standard, nicht der Standard. Es kommt darauf an wo der Sound letztlich landen soll. Generell sind die AVR8 aber schlicht zu langsam, um den Durchsatz zu schaffen, den eine I2S-Schnittstelle erfordert. Ja, es gibt auch welche, die historische Kinkerlitzchen unterstützen, die auch ein AVR8 noch schaffen könnte. Aber dann hast du am anderen Ende der I2S-Strecke ein Problem. Was dort hängt, muß dann diese historischen Sachen auch unterstützen. Und da wird heute das Bein doch schnell dicke... > Natürlich können das die 8-Bitter wiedermal nicht > native Eben weil schon den Entwicklern klar war, dass das einigermaßen sinnlos wäre. > Da habe ich mich gefragt, ob das nicht auch einfacher geht. Geht es. Aber dazu musst du erstmal sagen, wo der Sound letztlich landen soll und welche "Qualität" dir vorschwebt. Qualität ist: Bits/Sample mal Bitrate mal Anzahl Kanäle. Nenne Zahlen, dann können wir dir sagen ob es geht und wie es geht.
Alternative: mp3 und externen Decoder wie VS1053 verwenden. https://hartmut-waller.info/arduinoblog/mp3-player-mp3-shield/
Wenn ihr Files auch extern gespeichert werden dürfen: JQ6500 z.B. https://de.aliexpress.com/item/1005005200252591.html
Christian schrieb: > Kennt jemand was? DF-Player Modul dranhängen? Oder wolltest Du die Sounds vorher noch selbst erzeugen?
Christian schrieb: > ich möchte gerne Sounds auf einem AVR ausgeben. Du kannst ja erstmal mit einem Sinus anfangen: http://www.technoblogy.com/show?22HF
Christian schrieb: > ich möchte gerne Sounds auf einem AVR ausgeben Dazu ist der ungefähr genau so gut geeignet wie ein Apple ][. Was ist fur dich Sound ? Musik, Rechtecktöne ? Wo ist der Speicher für die Daten ?
Christian schrieb: > Da habe ich mich gefragt, ob das nicht auch einfacher geht Wenn du nicht unbedingt auf den AVR festgenagelt bist, dann würde auch ein Raspberry Pi Pico funktionieren. Mit den PIOs kann man ein I2S Interface realisieren. Klar gibt noch mehr ucs, ein ESP32 hat sogar I2S native an Board. Mit AVR wird es aber wohl eher eng. Ein Teensy 3.x oder 4.x haben auch native I2S. Es gibt passend ein Audioboard dazu.
Christian schrieb: > ich möchte gerne Sounds auf einem AVR ausgeben. Der Standard dazu ist > anscheinend I2S. Natürlich können das die 8-Bitter wiedermal nicht > native, deshalb muss man mal gucken.... Wenn Du auch für andere Sachen offen bist: https://www.microchip.com/en-us/product/dsPIC33FJ128MC804 Der hat einen 14 Bit Stereo DAC. Audio Daten holst Du Dir dann aus einem SPI-Flash. Gibts auch als ...MC802 mit 28 Pins statt 44. fchk
Einem 8 Bit AVR waere wohl ein 8 Bit R/2R-DAC an z.B. einem HC595 Schieberegister angemessen. Mehr an Qualitaet lohnt da nicht. > Wenn Du auch für andere Sachen offen bist: > https://www.microchip.com/en-us/product/dsPIC33FJ128MC804 > Der hat einen 14 Bit Stereo DAC. Interessanter Tip. :)
Ich habe mal vor langer Zeit ein 8kHz WAV mit dem AT89C2051 über R2R-DAC von einem AT24C512 ausgegeben. Mit dem Komparator habe ich noch einen ADC programmiert, um die Geschwindigkeit zu variieren (Lok-Sound). Das C-Programm und den Schaltplan könnte ich noch irgendwo haben.
Für einfache Töne kann man den Sound befehl ( Bascom Basic Compiler für AVR ) benutzen. Wenn es etwas anspruchsvoller sein sollte gabs da schon mal was, siehe link: http://elm-chan.org/works/sd8p/report.html Gruß Peter
Christian schrieb: > ich möchte gerne Sounds auf einem AVR ausgeben. "Sounds"? Audio-Ausgabe ist ein weites Feld. Früher hat uns ja BEEP gereicht. Du hast anscheinend etwas mehr vor. Was? > Der Standard dazu ist anscheinend I2S. Nein. I²S ist eine Standard Schnittstelle zur Anbindung von Audio-DAC. Ansonsten brauchst du einfach eine Schnittstelle passend zum gewählten DAC. Im einfachsten Fall ist das ein 8-Bit IO-Port, an dem ein R-2R Netzwerk hängt. > Natürlich können das die 8-Bitter wiedermal nicht > native, deshalb muss man mal gucken.... Natürlich können sie das nicht (bzw. sehr selten). Genauso wenig wie die Datenmengen (192KB für 1s in CD-Qualität) oder auch nur die Datenrate. Letzteres zumindest nicht, wenn sie gleichzeitig die Daten von einem Massenspeicher lesen müssen oder gar noch was anderes tun. Du wirst also Abstriche bei der Samplingrate und Bitbreite machen müssen. Zwischen CD (44.1kHz, 16 Bit, stereo) und Telefon (8kHz, 8 Bit, mono) wirst du dir was aussuchen müssen. Natürlich gibt es Experten, die den µC voll ausreizen und es doch irgendwie schaffen. Z.B. http://elm-chan.org/works/sd8p/report.html. Das ist zugegebenermaßen beeindruckend. Aber da macht der µC nichts anderes mehr. Und ohne Assembler geht da auch nichts. > Da habe ich mich gefragt, ob das nicht auch einfacher geht. Gibts sowas > wie eine SPI to I2S Bridge? Würde mich auch nicht stören, wenn man da > direkt WAVs oder sogar MP3s hinschicken kann. Für MP3 gibt (gab?) es den VS1001. WAV ist im wesentlichen ein Container für die Samples. Wenn man sich sowieso auf eine Bitrate beschränkt, kann man den Header auch weglassen und nur die rohen Samples speichern. Ansonsten siehe ELM. Auch zum Thema MP3 hat sich ELM ausgelassen. Allerdings kann man MP3 heutzutage auch in einem größeren Cortex-M direkt decodieren. Schließlich beinhaltet "Sounds" auch synthetisch erzeugte Klänge. Du kannst also auch einen z.B. Wavetable Synthesizer auf dem AVR implementieren. Oder einen Klassiker wie den C64 SID.
:
Bearbeitet durch User
Hm ja, ich wollte es nicht zu kompliziert aufschreiben, aber habe es dann wiedermal zu einfach aufgeschrieben. Es geht um Klingeltöne in CD-Qualität, also 44.1 kHz / 16 Bit, 5-30s aber Mono. Den ganzen Kram packe ich passend formatiert via USB auf einen SPI-Flash von Winbond. Der AVR soll dann die Daten holen und auf einem kleinen 3W Speaker ausgeben. Man könnte es ggf. sogar so clever lösen, dass die Daten gar nicht durch den AVR laufen, indem man den SPI-Flash mit dem I2S-DAC verbindet und einfach die CLK laufen lässt. Bei I2S muss man dabei aber dieses LRCLK mitsynchronisieren. Tricky, aber möglich. Falls es nicht geht, muss man das ganze durch den AVR pipen, d.h. man muss zwei USARTS parallel laufen lassen. Da ich in AVR Assembler ganz fit bin, sehe ich da kein Problem. Ich habe da schon wilderes gemacht. Ich kämpfe aber noch mit dem Teil "auf einem kleinen 3W Speaker ausgeben"... Da fehlt mir einfach die Erfahrung im analogen Bereich. Ich habe mir jetzt einfach mal den TFA9879 ausgesucht. Der nimmt I2S entgegen und kümmert sich um den Rest. I2S muss dann wohl einfach irgendwie gehen. Es gab jedoch wesentlich mehr Auswahl an Class-D Verstärker mit analogen Eingängen, also wollte ich mich da schlau machen, wie ich so einen ansteuern könnte. Aber da kam ich nicht weiter. Alle Monoverstärker haben zwei Eingangspins, wollen also differentiellen Input haben. Differentielle DACs habe ich aber gar nicht gefunden (von ein paar überteuerten Ausnahmen für irgendwelche exotischen Anwendungen mal abgesehen). Teilweise werden die wohl auch single-ended angeschlossen, also der IN- einfach gegrounded. Dabei geht aber die halbe Dynamik flöten und man muss seriell mit Kerkos DC blocken. Wie man es richtig macht, ist mir immernoch nicht klar :( Bin für jede Hilfe dankbar :)
Axel S. schrieb: > Natürlich gibt es Experten, die den µC voll ausreizen und es doch > irgendwie schaffen. Z.B. http://elm-chan.org/works/sd8p/report.html. Das > ist zugegebenermaßen beeindruckend. Aber da macht der µC nichts anderes > mehr. Und ohne Assembler geht da auch nichts. Uff, das Teil ist heftig. Direkt via PWM einen Class-D Verstärker aufgebaut. Hmmmm ja wäre definitiv eine Möglichkeit. 3W sind so aber nicht drin. Ich denke für meinen Fall wäre ein 3W class-d verstärker IC schon das richtige. Ich muss nur noch wissen, wie ich die Dinger richtig differentiell ansteuern kann.
Christian schrieb: > Ich muss nur noch wissen, wie ich die Dinger richtig > differentiell ansteuern kann. Ein Stichwort wäre: "Single-Ended-to-Differential Amplifier" Christian schrieb: > 3W sind so aber nicht drin. Ich hätte ja für den Anfang einen LM386 vorgeschlagen, aber der wird nur mit 0,7 W beworben...
Christian schrieb: > Es gab jedoch wesentlich mehr Auswahl an Class-D Verstärker mit analogen > Eingängen, also wollte ich mich da schlau machen, wie ich so einen > ansteuern könnte. Aber da kam ich nicht weiter. Alle Monoverstärker > haben zwei Eingangspins, wollen also differentiellen Input haben. > Differentielle DACs habe ich aber gar nicht gefunden (von ein paar > überteuerten Ausnahmen für irgendwelche exotischen Anwendungen mal > abgesehen). Siehst Du. Unpassende Hardware halt. Die von mir vorgeschlagenen dsPIC33 haben das eingebaut. Einfach so. Nichtinvertierender Ausgang, invertierender Ausgang und Midpoint. Für den linken und den rechten Kanal. Mit FIFOs und DMA-Support. Lies das: https://ww1.microchip.com/downloads/en/DeviceDoc/70211B.pdf Ach ja, I2S haben diese Teile auch noch. Heißen dort DCI Data Conversion Interface. Lies das: https://ww1.microchip.com/downloads/en/DeviceDoc/70288C.pdf fchk
Christian schrieb: > Da ich in AVR Assembler ganz fit bin, sehe ich da kein Problem. Ich habe > da schon wilderes gemacht. Beitrag "Westminster Soundgenerator mit ATtiny85"
Wenn du eh einen Dataflash hast wäre wsl der rp2040 (aka pi pico) der beste Kandidat. Der lädt davon nämlich auch gleich seinen Programmcode. Einzig die grottigen Energiesparmodi können etwas stören, aber von Batteriebetrieb hab ich bis jetzt noch nichts hier gelesen.
>Es geht um Klingeltöne in CD-Qualität, also 44.1 kHz / 16 Bit, 5-30s >aber Mono. Den ganzen Kram packe ich passend formatiert via USB auf >einen SPI-Flash von Winbond. Der AVR soll dann die Daten holen und auf >einem kleinen 3W Speaker ausgeben. Ein AVR ist für diese Ansprüche ans Soundqualität nicht geeignet. Nimm einen ESP32 und diesen Verstärker: https://www.adafruit.com/product/3006
Christian schrieb: > Es geht um Klingeltöne in CD-Qualität, also 44.1 kHz / 16 Bit, 5-30s > aber Mono. Den ganzen Kram packe ich passend formatiert via USB auf > einen SPI-Flash von Winbond. Der AVR soll dann die Daten holen und auf > einem kleinen 3W Speaker ausgeben. http://elm-chan.org/works/sd8p/report.html
Christoph M. schrieb: > Ein AVR ist für diese Ansprüche ans Soundqualität nicht geeignet. Das würde ich unterschreiben. Es ist zwar durchaus möglich, den nötigen Durchsatz von rund 176kByte/s zu schaffen, aber es ist Sackstand. Es gibt weder was für eine effiziente Eingabe vom Speichermedium noch was für eine effiziente Ausgabe des Sounds, d.h.: nahezu alles muß die MCU erledigen. Genug Buffer-RAM, um kurze "Hänger" ausgleichen zu können, gibt's auch nicht. Machbar, aber ziemlich sinnlos, wenn man einen Pi Pico mit unendlich viel besserer Hardware für ~6€ zu kaufen bekommt. Eine Alternative wäre, sich bei den Qualitätsanforderungen zu bescheiden. Was nützt eine Soundkette in CD-Qualität, wenn am Ende der Kette ein 3W-Brüllwürfel hängt?
Georg M. schrieb: > ATtiny412 をってみた > > https://www.youtube.com/watch?v=1uYvAH7fsBA Genau sowas. https://wolles-elektronikkiste.de/dfplayer-mini-ansteuerung-mit-dem-arduino Reichelt Artikel-Nr.: ARD DFPAYER MINI Dann wird der µC zum steuern dessen verwendet.
Christian schrieb: > ich möchte gerne Sounds auf einem AVR ausgeben. Vlt erst definieren , was mit "sounds" gemeint ist? Ein Tuten geht mit einfachem Rechteck. Mit 2 Pins geht ein PSEUDO-Sinus wie wir ihn von Sinus-Generatoren kennen.
🐻 Bernie - Bär schrieb: > Vlt erst definieren , was mit "sounds" gemeint ist? Oder erst den Thread lesen, bevor man sich im Kreis dreht. Christian schrieb: > Es geht um Klingeltöne in CD-Qualität, also 44.1 kHz / 16 Bit, 5-30s > aber Mono.
Klaus schrieb: > Oder erst den Thread lesen, bevor man sich im Kreis dreht. Geht nicht. Er ist in einem anderen Thread zu sehr mit seinem Bären beschäftigt ...
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.