Moin Leude. Wie kann ich am AVR ein Sinussignal ausgeben? Die Idee dahinter ist, einen kleinen Lautsprecher anzusteuern (siehe Bild), z.B. einen Ton mit 440Hz. Mit einem Rechtecksignal habe ich das bereits hinbekommen (ohne PWM), aber wie ich ein Sinussignal hinbekomme kann ich mir gerade nicht vorstellen. Könnt ihr mir ein Codebeispiel geben?
Sinus? Diese schöne smoothige Kurve, mit den weichen Übergängen? Geht nicht bei dir? Und das Rechtecksignal mit seinen zwei harten Zustanden hat funktioniert?
Dirk B. schrieb: > Sinus? Diese schöne smoothige Kurve, mit den weichen Übergängen? > Geht nicht bei dir? > > Und das Rechtecksignal mit seinen zwei harten Zustanden hat > funktioniert? Genau das schrieb er. Du bist ein Blitzmerker :-)
Najoa, dem DAC einen Wert übergeben, der in Abhängigkeit der Zeit einen sinusförmigen Verlauf hat. Setzt natürlich voraus, dass man einen Controller mit DAC gewählt hat. Ansonsten kann ein Tiefpass ein Rechteck schon rundbiegen.
moin schrieb: > Moin Leude. Wie kann ich am AVR ein Sinussignal ausgeben? Mit PWM und einer Sinustabelle. Die PWM-Frequenz sollte dabei ausreichend hoch sein, so um die 8-22kHz. Beitrag "Re: H-Bridge 50Hz Sinus - LC Filter dimensionieren"
Er will aber 440 Hz, nicht 50! Nun, es kommt auf die Verzerrungen an, die du zulässt! Willst du einen ganz sauberen Ton, dann brauchst dur Rechenleistung bzw. eine sehr hohe Taktrate. Schau dich um nach Tongenerator-ICs oder machs einfach analog.
moin schrieb: > Moin Leude. Wie kann ich am AVR ein Sinussignal ausgeben? Gar nicht. Bestenfalls näherungsweise. > Die Idee dahinter ist, einen kleinen Lautsprecher anzusteuern (siehe > Bild), z.B. einen Ton mit 440Hz. Und warum muß das ein Sinus sein? > Mit einem Rechtecksignal habe ich das bereits hinbekommen (ohne PWM), > aber wie ich ein Sinussignal hinbekomme kann ich mir gerade nicht > vorstellen. Mit einer hinreichend schnellen PWM, bei der du den PWM-Wert schnell änderst (einmal pro PWM-Periode) kannst du etwas hinbekommen, das vom Lautsprecher und den Ohren zu etwas ähnlichem wie ein Sinus geformt wird. Nehmen wir mal an, du hast 11MHz Taktfrequenz und eine 8-Bit PWM. Dann dauert eine PWM-Periode 11MHz÷256 ~= 43kHz. Es kommen dann knapp 98 solche PWM-Perioden auf eine Periode deines 440Hz Tons (genau sind es 97.65625). Wenn du also eine Tabelle mit 98 Werten anlegst, die mit einer Periode eines Sinus befüllst (skaliert und verschoben auf Werte zwischen 0 und 255), und im PWM-Timer Interrupt imer den nächsten Wert ins PWM-Register schreibst, dann kannst du so einen halbwegs sinusartigen 440Hz Ton ausgeben.
moin schrieb: > Mit einem Rechtecksignal habe ich das bereits hinbekommen (ohne PWM), > aber wie ich ein Sinussignal hinbekomme kann ich mir gerade nicht > vorstellen. Wenn Du nur eine Frequenz ausgeben willst, reicht ein analoges Tiefpassfilter. Je nach Nebenbedingungen, zu denen Du nichts schreibst, gibt es unterschiedliche Lösungen zur Erzeugung von Sinussignalen.
Alsdhsihfd schrieb: > Er will aber 440 Hz, nicht 50! Nun, es kommt auf die Verzerrungen an, > die du zulässt! Willst du einen ganz sauberen Ton, dann brauchst dur > Rechenleistung bzw. eine sehr hohe Taktrate. Schau dich um nach > Tongenerator-ICs oder machs einfach analog. Jaja, unsere "Experten" und Reichsbedenkenträger mal wieder. Komisch nur, daß sich der Rest der Welt nicht verrückt macht und ziemlich entspannt und auch mit ziemlich guter Qualität auf diese Weise sogar Audiodateien abspielt. Beitrag "Re: Arduino Nano, SD Card, PCM"
Für einen sauberen Sinus brauchst du so einen IC hinter dem AVR: https://www.mikrocontroller.net/articles/DDS Für die Impedanzanpassung auf 8 Ohm lohnt sich einen Verstärker dahinter und vor den Lautsprecher zu schalten.
Ohne PWM dafür aber mit Widerstandsnetzwerk (wohl das erste Projekt von Andreas) siehe hier: https://www.mikrocontroller.net/articles/Digitaler_Funktionsgenerator Da musst du nur noch einen Verstärker dahinter schalten. Dann geht nicht nur Sinus. Gerhard
Hallo, ich habe mal einen 1750Hz PWM Sinusgenerator gebaut. Hier sind ein paar Spezifikationen: * Als Mikrocontroller kommt eine Attiny85 SOIC-8 zum Einsatz. * Er verwendet den internen RC-Oszillator, der über eine PLL den AVR CPU- Kern mit 16MHz versorgt. * Das Sinussignal wird durch den Attiny85 über eine 8Bit PWM mit 64MHZ PWM- Frequenz mit 224 Sinus-Stützstellen generiert. * ein 3-stufiges Tiefpassfilter sorgt mit einem nachgeschalteten Emitterfolger für ein sauberes und belastbares Signal. * Über einen Piezoschallwandler kann man das 1750Hz Sinussignal direkt einem Mikrofon eines Sendeempfängers zuführen. * Alternativ kann man das 1750Hz Sinussignal direkt an einen Sendeempfängers einkoppeln, wenn man einen Spannungsteiler nebst Koppelkondensator einsetzt. Das Spektrum wurde von Piezo-Lautsprecher über eine t.bone EM 800 Kondensator-Kleinmembranmikrofon abgenommen und dann über Audacity eine FFT Durchgeführt.
Klasse durch die vielen Antworten lese ich mich heut Abend durch. Es soll eine Musicbox werden, man drückt eine Taste und es wird eine Note nach der anderen abgespielt. Bis zu 4 Stimmen gleichzeitig d.h. vier verschiedene Noten auf einmal sollen dabei abgespielt werden können.
moin schrieb: > Klasse durch die vielen Antworten lese ich mich heut Abend durch. > > Es soll eine Musicbox werden, man drückt eine Taste und es wird eine > Note nach der anderen abgespielt. Bis zu 4 Stimmen gleichzeitig d.h. > vier verschiedene Noten auf einmal sollen dabei abgespielt werden > können. Dann braucht es schon etwas mehr Know How. Aber der Meister aus dem Fernen Osten macht es vor. http://elm-chan.org/works/mxb/report.html
moin schrieb: > Es soll eine Musicbox werden, man drückt eine Taste und es wird eine > Note nach der anderen abgespielt. Bis zu 4 Stimmen gleichzeitig d.h. > vier verschiedene Noten auf einmal sollen dabei abgespielt werden > können. Vielleicht wäre das hier dann besser geeignet: Beitrag "[V] Platinen aus Orgel Bj 1980"
moin schrieb: > Klasse durch die vielen Antworten lese ich mich heut Abend durch. Wenn du dem ganze Gekrampfe mit PWM aus dem Weg gehen willst, hängst du an deinen µC einen DDS-Generator mit AD9833 für keine 3€ aus der Bucht dran. z.B. https://www.ebay.de/itm/382093041897
Wolfgang schrieb: > moin schrieb: >> Klasse durch die vielen Antworten lese ich mich heut Abend durch. > > Wenn du dem ganze Gekrampfe mit PWM aus dem Weg gehen willst, hängst du > an deinen µC einen DDS-Generator mit AD9833 für keine 3€ aus der Bucht > dran. > z.B. Ebay-Artikel Nr. 382093041897 Nö. Lies mal was der OP WIRKLICH machen will. Beitrag "Re: Sinussignal erzeugen"
Falk B. schrieb: > Nö. Lies mal was der OP WIRKLICH machen will. Dann muss er eben vier "DDSe" nehmen. (Wie ist die Mehrzahl von DDS?)
Harald W. schrieb: > Dann muss er eben vier "DDSe" nehmen. Immer noch Nö. Er will Noten abspielen, das sind selten bis nie Sinussignale. > (Wie ist die Mehrzahl von DDS?) Gibt es nicht, denn DDS heißt Direct Digital Synthesis oder zufällig auf Deutsch mit den gleichen Anfangsbuchstaben Direkte Digitale Synthese. Es gibt bestenfalls die Mehrzahl von DDS-IC, DDS-ICs.
So erzeuge ich mir einen Sinus für eine Audio-Anwendung: Ist ein absolut sauberer, verzerrungsfreier Sinus: Alles float. Muss man halt für AVR nach int skalieren.
1 | // Sinus erzeugen
|
2 | fOscSin += fFrq * fOscCos; |
3 | fOscCos -= fFrq * fOscSin; |
4 | |
5 | // Amplitude berechnen und Abweichung von Amplitude 1.0 ermitteln
|
6 | fOscCorr = 1.0 +((1.0 - (fOscSin * fOscSin + fOscCos * fOscCos))*0.01); |
7 | |
8 | // Amplitude langsam nachregeln:
|
9 | fOscCos *= fOscCorr; |
10 | fOscSin *= fOscCorr; |
Im Anhang der Code als JavaScript. Dort hört man aber nix :)
Baue das Mini DDS nach. Das ist wirlich nicht schwer: Beitrag "[S] Poor man's miniDDS von Jesper" MfG
Ein paar Port Pins mit Widerständen als DA Wandler tut´s vielleicht auch. Mit 4-6 Bit ist das schon ein recht brauchbarer Sinus, wenn insgesamt noch ein Tiefpass dahinter kommt.
Was der TO vllt gerade noch hinkriegt, ist ein Wavetablemodul fuer eine Soundkarte bestellen, und mit MIDI befuettern. Da muss man sich keine Illusionen machen... Aber schon beim NT fuer so ein Modul, die gerne -12 V und +12 V brauchen, sehe ich ja dunkel bis schwarz. Mit so einem Modul, wenn es vom richtigen Hersteller ist, kann man richtig amtlich Musik machen.
Hier wurde vermutlich alles schon 10x durchgespielt: https://www.mikrocontroller.net/articles/AVR-Synthesizer
Ich nutze dafür eine Sinus-Tabelle, z.B. download Link: http://www.afug-info.de/Download/ Für mich war die immer hilfreich
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.