-
-
Erfahrener Benutzer
Fleißiges Mitglied
Töne über PWM?
Hallo,
ich möchte einen Ton mit dem Atmega8 auf einem der PWM-Ports ausgeben. Nicht mit der Funktion "Sound", sondern über einen der Timer mit PWM.
Mein Problem liegt darin, dass wenn ich einen Lautsprecher an den PWM-Ausgang gegen GND lege(was ja so stimmen müsste) und eine PWM-Frequenz festlege, der Ton immer gleich ist. Egal welche PWM-Frequenz ich angebe.
Muss da noch irgendwas an der Hardware geändert werden? Momentan nur VCC/GND und der Lautsprecher an PB.0 gegen GND.
Wie muss der Code aussehen? Eigentlich reicht doch ein Programm, dass mir einen Timer als PWM-Timer definiert und dann die "Frequenz" festlegt.
Vielen Dank für eure Antworten schon mal im vorraus.
-
Erfahrener Benutzer
Robotik Visionär
Du darfst nicht die Frequenz ändern, sondern den Tastgrad (Verhältnis Puls-Pause)
-
Erfahrener Benutzer
Fleißiges Mitglied
Wie meinst du das, 021aet04? Sind die PWM-Frequenz und der Tastgrad nicht das Gleiche?
Könntest du mir bitte ein Code-Beispiel geben?
-
Erfahrener Benutzer
Robotik Visionär
Nein das ist nicht das Gleiche. Hier ist PWM beschrieben. http://www.rn-wissen.de/index.php/Pwm
1Hz =1 Periode pro Sekunde
-
Erfahrener Benutzer
Fleißiges Mitglied
OK... Aber wie lege ich nun einen Ton fest? Kann mir jemand mal einen Beispielcode schreiben? (soll wenn möglich Hardware-PWM sein).
Ich bekomme es zwar hin, eine LED über PWM zu "dimmen", aber wenn ich nen Lautsprecher hinhäng bekomm ich bei jedem angegebenen PWM-Wert den gleichen Ton bzw. einen sehr ähnlichen.
-
Erfahrener Benutzer
Roboter Genie
PWM PUlSWEITENMODULATION es regelt die pulsweiten und nicht die frequnz.
wenn du töne erzeugen willst must du das pwm sinus förmogig mach also laut (länger an als aus) und dann wieder leise (länger aus als an)
du must dier aber vorher irgendwie sinus nutzen können oder ne tabelle nutzen.
um zusehen was dein pwm macht solltest du die pwm frequens runternehem und mit deiner Sound karte und einem soudkartenoszi programm anschauen oder man hat ein oszi
-
Erfahrener Benutzer
Roboter Experte
Moment, moment, moment...
Mit "Normalem" PWM hast Du ein Rechtecksignal mit konstanter Frequenz, dessen Impuls-Pausen-Verhältnis variiert werden kann. Das macht den Ton u.U. laut und leise - aber ändert nix am Ton.
Um verschiedene Tonhöhen zu erzeugen, muss der Timer im "CTC"-Modus betrieben werden. CTC heißt "Clear Timer on Compare". Heißt also, dass er von 0 bis zum Wert im OCR-Register hochzählt, und beim Erreichen dieses Wertes auf 0 zurückgesetzt wird. Bei jedem Rücksetzen wird der OC-Pin getoggelt. Somit wird der Ton umso höher, je niedriger der OC-Wert ist.
Die Formel kann man sich überlegen, sie heißt f = Xtal/(Prescaler * OCR * 2).
Bascom (zumindest meine Version) unterstützt den CTC-Modus nicht, das musst Du direkt auf Registerebene lösen.
Klar?
-
Erfahrener Benutzer
Roboter Genie
ich meinte damit aus den Rechtreck pulsweiten ein sinus zu machen
-
Erfahrener Benutzer
Fleißiges Mitglied
Erstmal danke für deine Antwort Sauerbruch!
Habs zwar noch nicht ganz verstanden, aber ich hab mal nach Bascom und CTC gesucht und das hier gefunden: https://www.roboternetz.de/phpBB2/vi...c.php?p=359346
Das ist doch das, was du meinst?
-
Erfahrener Benutzer
Roboter Experte
Genau. Mit welchem Controller arbeitest Du denn, welchen Timer verwendest Du und in welchem Bereich sollen die Frequenzen liegen?
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen