Forum: Mikrocontroller und Digitale Elektronik PWM am AVR um Tönhöhen eines Lautsprechers zu varrieren


von AVR (Gast)


Lesenswert?

Hi,
Ich möchte einen Lautsprecher (vom Pc so einen kleinen) in Betrieb 
nehmen. Nun habe ich mir gedacht, dass ich mit PWM die Töne varriere. 
Ich möchte einen Pin des Controllers nehmen und einen Transistor damit 
schalten. Somit kann ich einen Lautsprechen entsprechend schalten.

Nun meine Frage:

Gibt es für die PWM einen besonderen Pin, oder ist es egal am welchem?

Arbeite mit dem ATMega 16 und schreibe das Programm in C.

von Rahul D. (rahul)


Lesenswert?

>Gibt es für die PWM einen besonderen Pin, oder ist es egal am welchem?

Ja.
Der heisst irgendwas mit "OC" und ist als eine der "Alternate 
pinfunctions" beschreiben.

von Magnus Müller (Gast)


Lesenswert?

AVR wrote:
> Hi,
> Ich möchte einen Lautsprecher (vom Pc so einen kleinen) in Betrieb
> nehmen. Nun habe ich mir gedacht, dass ich mit PWM die Töne varriere.
> Ich möchte einen Pin des Controllers nehmen und einen Transistor damit
> schalten. Somit kann ich einen Lautsprechen entsprechend schalten.
>
> Nun meine Frage:
>
> Gibt es für die PWM einen besonderen Pin, oder ist es egal am welchem?
>
> Arbeite mit dem ATMega 16 und schreibe das Programm in C.

PWM hat nichts mit der Tonhöhe zu tun. PWM ist nichts anderes als eine 
feste Frequenz mit variablem Tastverhältnis.

Was du brauchst, ist ein festes Tastverhältnis mit variabler Frequenz.

Gruß,
Magnetus


Edit:

Mit der PWM könntest du quasi die Lautstärke der Töne beeinflussen.

Tastverhältnis 50:50   ->   laut

Je mehr das Tastverhältnis von 50:50 abweicht, desto leiser ist der 
erzeugte Ton.

von Roland P. (pram)


Lesenswert?

Wenn man die PWM entsprechend langsam macht und auf 50% stellt, dann 
kann man durch verschiedene PWM-Frequenzen auch verschiedene Tonhöhen 
erzeugen.
(Allerdings nur Rechteckschwingung)

Allerdings würde ich das dann nicht mehr als PWM bezeichnen, da die 
Pulsweite ja konstant bleibt.
Du kannst dafür jeden PWM-Pin zweckentfremden, am Besten den eines 16Bit 
Timers, dann kan man die Frequenz feiner einstellen

Gruß
Roland

von Hannes L. (hannes)


Lesenswert?

Und wenn man die PWM (bei fester Frequenz) entsprechend schnell macht, 
dann kann man ihr einen Sinuston mit veränderbarer Frequenz 
aufmodulieren. Einige Spielereien damit sind hier beschrieben:
http://www.hanneslux.de/avr/divers/melody/index.html
Der Mega16 sollte dazu aber nicht optimal sein, da er keine PLL für den 
PWM-tauglichen Timer hat, der Timer also maximal mit Taktfrequenz 
klappert.

...

von Frank S. (Firma: HSCS) (linuxerr)


Lesenswert?

also wenn du verschiedene tonhöhen erzeugen willst, gibt es zwei 
möglichkeiten.
1. den timer im ctc modus betreiben, sodass durch die einstellungen von 
vorteiler und teiler die resultierende frequenz festgelegt ist. wenn OCn 
auf toggled eingestellt wird, kannst du dort ein rechtecksignal 
entsprechender frequenz abnehmen.
2. den timer im pwm-modus betreiben. die pwm frequenz wird fest gewählt 
(muss nicht variabel sein), sodass sie möglichst über der hörgrenze 
liegt (10..20khz reichen, kommen aus den piepslautsprechern sowieso 
nicht mehr raus). die eigentliche tonschwingung muss nun durch änderung 
der werte im output compare register erzeugt werden, also die einzelnen 
amplitudenwerte der tonschwingung. damit kann man die tonhöhe in 
amplitude und frequenz modulieren. das einschreiben der amplitudenwerte 
sollte interruptgesteuert durch einen zweiten timer erfolgen. das alles 
ist aber wesentlich aufwändiger als die erste methode.

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.