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.
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.
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"
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
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.