Guten Morgen,
bei 4 mhz und einem prescale von 256kommst du auf eine Frequenz
15625hz jetzt musst du nur noch ausrechnen mit was du den timer laden musst. Bei jedem Timer Overflow löst der AVR einen Interrupt aus der den Port toggelt.
Einen wunderschönen guten Abend!
Eins vorweg: Habe schon die Suche benutzt, aber bei den Stichwörtern "Timer Ton" und "Timer Sound" nichts passendes gefunden, wenn ich nur nach "Timer" Suche wird es leicht unübersichtlich, nach 23seiten hab ich es aufgegeben alles durch zu gucken
Und zwar geht es darum: ich möchte mit meinem uC einen (bzw. mehrere Töne hintereinander) erzeugen. Nur habe ich absolut keine Ahnung wie ich dies per Timer anstellen soll. Mit dem Sound Befehl hab ich es schon versucht, aber der ist leider zu ungenau. Onkel Google hab ich auch schon gefragt, aber ich bin nur so weit gekommen das irgendwo mal stand es ist mit einem Timer möglich, natürlich stand da nicht bei wie man das in Bascom verwirklicht.
Wenn ich jetzt einen Ton von 2000Hz haben will, muss ich dann den Ausgang 2000x pro sek ein und aus schalten, oder wie mache ich das ? Kann mir gut vorstellen das das irgendwas mit der Taktrate des uC´s zu tun hat.
Vielen dank schonmal für eure Hilfe!
Gruß aus dem Sauerland
Daniel
Guten Morgen,
bei 4 mhz und einem prescale von 256kommst du auf eine Frequenz
15625hz jetzt musst du nur noch ausrechnen mit was du den timer laden musst. Bei jedem Timer Overflow löst der AVR einen Interrupt aus der den Port toggelt.
hmm, hast du evtl. einen kleinen beispielcode um das zu veranschaulichen? hab das jetzt nicht so ganz verstanden wie du auf die werde gekommen bist
gruß
Daniel
ich hab einfach den takt des microcontrollers durch den timer prescale(vorteiler für den timer dass er nicht mit voller taktgeschwindigkeit des controllers mit läuft) beispielcode kann ich morgen(heut mittag) machen
hey,hier der versprochene codeunten wo steht Timer1= musst du mit dem wert experimentiereen und oben wo steht prescale =64 musst du auch ausprobieren (es geht 8,64,256,1024)Code:$regfile "m8def.dat" $crystal = 4000000 Config Timer1 = Timer , Prescale = 64 On Timer1 Ton Enable Timer1 Enable Interrupts Ddrd = &B0000100 Do Loop Ton: Toggle Portd.2 Timer1 = 5666 Return
müsste so eigentlich funktionieren
vielleicht kann aber jemand mir helfen wen ich die frequenz messe komme ich auf 326hz kann das mal jemand messen kommt bei mir egal was für werte ich für prescale und timer nehme
Hallo Loosi,
sieh dir mal das Wiki zu dem Timer an, das ist eigentlich ganz simpel.
https://www.roboternetz.de/wissen/in...scom_und_Timer
ganz unten ist auch ein link zu einem Berechnungstool mit dem du ganz bequem, nach Angabe deines Taktes und der gewünschten Frequenz, die restlichen Einstellungen berechnen lassen kannst. Außerdem gibt er dir auch den benötigten Code mit aus, den du einfach in dein Programm einfügen kannst.
Bsp.:
Wenn du jetzt die LED mit einem Speaker ersetzt solltest du einen 1kHz Ton hören. So kannst du dann in gewissem Rahmen jede Frequenz erzeugen, die du magst.Code:'wenn mega 32, dann ändern in $regfile = "m32def.dat" $regfile = "m16def.dat" 'Quarzfrequenz, entsprechend ihren Angaben 'der passende Quarz muss in die Fassung gesteckt werden $crystal = 16000000 'Hier wird der Timer und der Teiler festgelegt Config Timer0 = Timer, Prescale = 64 'Der Port mit der dritten LED auf RN-Control wird als Ausgang programmiert Config Pinc.2 = Output 'Hier geben wir der Definition einen schöneren Namen Led3 Alias Portc.2 'Hier wird das Unterprogramm festgelegt, das 'in dem von ihnen eingestellten Intervall aufgerufen wird On Timer0 Timer_irq 'Diese Vorgabe wurde berechnet um die genaue Intervallfrequenz zu erreichen Const Timervorgabe = 131 'Hier werden die Timer aktiviert Enable Timer0 Enable Interrupts 'Hier ist die Programmhauptschleife Do 'Hier könnte Ihr Hauptprogramm stehen Loop 'Dies ist der Programmteil, der in dem von ihnen gewählten 'Intervall aufgerufen wird Timer_irq: Timer0 = Timervorgabe 'Hier könnte nun ihre beliebige IRQ-Routine stehen 'Dabei sollte man darauf achten das diese nicht mehr Zeit 'benötigt, als das Intervall zuläßt 'Der Zustand der LED wir umgekehrt, wodurch sich blinken in der halben Frequenz ergibt 'Hohe Frequenzen sind natürlich nicht mehr sichtbar Toggle Led3 Return
mfg milkbubi
Lesezeichen