Forum: Mikrocontroller und Digitale Elektronik Welcher Audio-IC geht?


von Hans-J. A. (modellbahner71)


Lesenswert?

Hallo Leute,
ich plage mich mit einem Problemchen wahrscheinlich aus Unwissenheit 
herum.
Und zwar wollte ich meinen Atmega328p mit 16 MHZ zu den bisherigen 
Funktionen wie Motor-Laststeuerung, per SPI SD-Card-Daten lesen und mit 
I2C-Bus mit einen anderen Atmega sich austauschen noch eine 
Audio-Ausgabe (Mono auf 8 Ohm-Lautsprecher reicht) hinzu fügen.

Was ich bisher im Netz gefunden habe wäre PWM mit einigen Bauteilen 
(habe wenig Platz) und ohne Lautstärken-Einstellungsmöglichkeit durch 
den µC.

Da ich noch was über DAC mit Amplifier und SPI/I2C in einen IC gelesen 
habe, aber kein passendes Beispiel, und auch nicht wirklich bei den 
Unterschieden bei den Audio-IC durchblicke wende ich mich an euch um 
einen Rat bezüglich des IC-Typs bzw. und für eventuelle Beispiele.

Am ende ginge es dann darum lässt sich dann dieser Audio-IC auch dann 
mit PWM oder SPI für Mono quasi bestücken ? Und vielleicht auch noch 
durch SPI oder I2C die Lautstärken-Einstellungen verändern?

MfG
Hans

von c-hater (Gast)


Lesenswert?

Hans-J. A. schrieb:

> Audio-Ausgabe (Mono auf 8 Ohm-Lautsprecher reicht) hinzu fügen.
>
> Was ich bisher im Netz gefunden habe wäre PWM mit einigen Bauteilen
> (habe wenig Platz) und ohne Lautstärken-Einstellungsmöglichkeit durch
> den µC.

PWM != PWM

Man kann PWM als Ausgabe-"Gerät" benutzen, die Ausgabe aber selbst 
kontrollieren, das ist eigentlich sogar der Sinn von PWM, das sagt das 
"M" in der Abkürzung...

Und damit hat man natürlich auch die volle Kontrolle über die 
Lautstärke. Die hängt nämlich nur vom Modulationshub der PWM-Ausgabe ab. 
Sprich: es läuft auf eine simple FP-Multiplikation der einzelnen Samples 
hinaus. Das kostet auf einem ATMega nur lächerliche 2 Takte pro Sample. 
Bei der maximal möglichen PWM-Frequenz (für 8Bit Auflösung und 20MHz 
Systemtakt 78,125kHz) macht das also gerade mal 0,8% der verfügbaren 
Rechenleistung aus...

Und das Gute ist: an diesen 0,8% ändert sich auch bei geringerem 
Systemtakt nichts. Nur kann man dann nur noch geringere Audio-Frequenzen 
mit brauchbarer Tonqualität ausgeben und die Schwierigkeiten steigen, 
mit wenigen billigen (oder sogar nur einem!) zusätzlichen Bauelement ein 
brauchbares Rekonstruktionsfilter zu schaffen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Hans-J. A. schrieb:
> ohne Lautstärken-Einstellungsmöglichkeit durch
> den µC

Das ist eine einfache Multiplikation. Der PWM Wert wird mit dem Faktor 
für die Lautstärke multipliziert, skaliert und dann aufs PWM Register 
geschickt.

von Hans-J. A. (modellbahner71)


Lesenswert?

Danke c-hater für die Info.
Die PWM war ja auch mein erster Gedanke, aber dann kam die Sache mit 
möglichst wenigen Bauteilen wie zum Lautsprecher?

von c-hater (Gast)


Lesenswert?

Hans-J. A. schrieb:

> Die PWM war ja auch mein erster Gedanke, aber dann kam die Sache mit
> möglichst wenigen Bauteilen wie zum Lautsprecher?

Naja, genau dafür ist das doch. Einfach Lautsprecher an den PWM-Ausgang 
anschließen. Naja, fast...

Wenn man nur einen PWM-Ausgang benutzt, sollte man einen großen Elko zur 
Ankopplung benutzen. Lautsprecher mögen nämlich keinen Gleichstrom und 
Atmegas keine dauerhaften quasi-Kurzschlüsse. Wenn man allerdings zwei 
PWM-Ausgänge (idealerweise desselben Timers) benutzt und diese im 
Gegentakt ansteuert, kann man auf den fetten Koppelelko verzichten und 
hat obendrein die doppelte Leistung am Lautsprecher zur Verfügung.

Und für das Rekonstruktionsfilter braucht man noch einen weiteren 
Kondensator parallel zum Lautspecher. Zusammen mit der Induktivität des 
Lautsprechers bildet der einen Tiefpass 2. Ordnung. Man braucht also 
bloß die Kapazität so zu wählen, dass die Grenzfrequenz dieses 
Tiefpasses einerseits möglichst viel vom "Audio" durchlässt, 
andererseits aber möglichst wenig von der PWM-Frequenz über läßt.

8 Ohm Lautsprecher sind übrigens ziemlich ungeeignet zum Betrieb direkt 
an AVR-Ausgängen. Besser geeignet sind welche mit 16 oder noch mehr Ohm. 
Ich habe in meiner bisher einzigen Audio-Anwendung die Lautsprecher aus 
einem defekten Netbook verwendet. Je 16 Ohm und die in Reihe geschaltet, 
so dass sich effektiv 32 Ohm ergeben. Damit hat man dann fast 
Leistungsanpassung, also fast optimalen Wirkungsgrad. Allerdings: für 
Dauerbetrieb definitiv nicht empfehlenswert, der AVR wird hier eindeutig 
schon deutlich jenseits seiner Limits betrieben. Das ist bestenfalls was 
für Audio-Effekte mit kurzer Laufzeit, aber nicht für den Dauerbetrieb 
im Sinne einer Musikwiedergabe.

Bei mir spielt der Kram jedenfalls in einer Uhr den BigBen. Den Code für 
die (DDS-) PWM-Ausgabe habe ich schonmal hier gepostet. Ist allerdings 
auf höchstmögliche Effizienz getrimmt, also natürlich: Assembler. Da 
kannst du sehr wahrscheinlich nix mit anfangen.

Sehr wahrscheinlich ist aber in deiner Anwendung diese hohe Effizienz 
auch garnicht nötig. Die Audio-Sache alleine kann man auch noch 
problemlos und ohne Klimmzüge in C umsetzen. Bei mir war sie nur mit 
einer anderen Sache kombiniert, die den AVR schon ordentlich gefordert 
hat, deswegen mußte der Audio-Kram mit den paar Takten auskommen, die 
das andere Zeug übrig ließ...

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.