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
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.
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.