Sinussignal erzeugen

Gast #5750463
Lesenswert?

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?
Angehängte Dateien:
Gast #5750496
Lesenswert?

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.
#5750497
Lesenswert?

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.
#5750557
Lesenswert?

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.
#5750570
Lesenswert?

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"
Gast #5750653
Lesenswert?

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.
Angehängte Dateien:
Gast #5750771
Lesenswert?

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.
#5750856
Lesenswert?

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
#5750901
Lesenswert?

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"
#5750920
Lesenswert?

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.
Gast #5750963
Lesenswert?

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 :)
Angehängte Dateien:
Gast #5751033
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren