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