www.roboternetz.de/wissen/index.php/Pwm
http://www.mikrocontroller.net/artic...itenmodulation
Ob PWM zum Melodien erzeugen das richtige ist bezweifle ich.
hallo
ich möchte mit einem mega32 melodien über einen piezo oder sowas abspielen (soll eine spielkonsole werden). das hauptprogramm soll natürlich unbehindert davon weiterlaufen. ich hab versucht die frequenz über einen pwm ausgang auszugeben aber ich check einfach nicht wie das funktioniert...
kann mir vllt mal jemand der ahnung davon hat nen beispielprogramm schreiben das an einem beliebigen pwm ausgang ne 440 Hz schwingung ausgibt oder kann mir zumindest jemand nen link schicken wo der ganze PWM kram schön einfach erklärt wird ??
grüße
martin
www.roboternetz.de/wissen/index.php/Pwm
http://www.mikrocontroller.net/artic...itenmodulation
Ob PWM zum Melodien erzeugen das richtige ist bezweifle ich.
die hab ich beide schon gelesen, ich weiß auch, das pwm eigentlich dazu da ist, ohne DA wandler leistungen zu regeln. aber dass kann man doch auch zum erzeugen von melodien verwenden, dem piezo ist das tastverhältnis natürlich (fast) egal, den interessiert eigentlich nur die frequenz.
aber wie ich das ganze praktisch realisiere, sagen mir die beiden artikel auch nicht
Hallo,
wenn dem Piezo das Tastverhältnis egal ist und es nur auf die Frequenz ankommt, möchtest du den Timer nicht im PWM sondern im CTC- Mode einsetzen. Über den Prescaler bestimmst du einen Frequenzbereich und über den Wert im Compareregister die Frequenz innerhalb des Bereiches.
Gruß
Jens
Bei der PWM bleibt die Frequenz gleich, es ändert sich nur das Tastverhältnis.
Du musst einen Timer den Prescaler einstellen das du bei Überlauf die tiefste Frequenz erreichst die du willst. Compare Match und CTC einstellen. Die Werte im CompareMatch Register ergeben dann die Tonhöhe. In der ISR dann ein Port toggeln.
mir wird einiges klar^^
ich probiers mal aus, danke schonmal
könnte man die steifen rechteckimpulse nicht noch irgendwie mitm bissl elektronik(spule und kondensator) glätten und das ganze ein wenig sinusfürmiger erscheinen zu lassen ?
Man kann sicher ein Pi-Filter nachschalten, dem Piezo-Pfeiferl wird es aber ziemlich egal sein.
ich hab mich jetzt durch irgendwelche datenblätter gekämpft und versteh trotzdem nichts... dieses programm soll nen 440Hz Ton am OC1A pin ausgeben (atmega32) . funzt aber nicht...
int main(void) {
DDRD|=1<<OC1A;
PORTD|=1<<OC1A;
TCCR1A = (1<<COM1A1); // Set OC1A when upcounting, clear when downcounting
TCCR1B = (1<<WGM13); // Phase/Freq-correct PWM, top value = ICR1
TCCR1B|= (1<<CS10);
ICR1H= 0x6a;
ICR1L= 0x88;
OCR1AH = 0x6a;//440Hz
OCR1AL = 0x88;
while(1) tuwas();
}
Sollte es nicht eher so gehen:In OCR1A kommt dann der Wert des Tons. Bei 8MHz etwa 2f für 440Hz, habe ich aber nicht genau nachgerechnet.Code:DDRD=0x20; OCR1A=0xfa; TCCR1A=(1<<COM1A0); TCCR1B=(1<<WGM12)|(1<<CS11);
Eher 2ff.
Lesezeichen