Gast
#401827
Hallo Ich bin dabei mit dem einem AT Mega8-16PU (3,6864 MHz Quartz) einen Ton mit 1745 Hz zu erzeugen. Soweit nicht das große Problem. Um meine Frequenz zu berechnen habe ich RnAVR genommen. Jedoch komme ich mit RnAVR nicht auf 1750 HZ, sondern 873HZ Wer kann mir das erklären, und macht es Sinn auf diesem Wege eine Frequenz zu erzeugen? Beispiel RnAVR '############################################################## ' Timer Beispiel für das universelle Controllerboard ' rn-control mit mega 16 oder mega 32 ' Ausführliche Infos zum Controller Board findet man ' unter www.robotikhardware.de als auch im ' www.roboternetz.de ' ' Dieses Demo läßtz eine LED in dem von ihnen gewählten ' Timer-Rhytmus blinken ' Der generierte Code kann direkt in den Bascom-Compiler kopiert ' und kompiliert werden. Natürlich läßt sich der Code auch in ' bestehende Programme integrieren ' Autor: Frank ' Weitere Beispiele und Beschreibung der Hardware ' unter http://www.Roboternetz.de oder robotikhardware.de ' Eigene Programmbeispiele sind im Roboternetz gerne willkommen! '############################################################## '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 = 3686400 'nur notwendig wenn rs232 benutzt werden soll $baud = 9600 '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 = 223 '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 ergibt 'Hohe Frequenzen sind natürlich nicht mehr sichtbar Toggle Led3 Return Eigender Code mit 1745HZ #################################### $regfile = "m8def.dat" $crystal = 3686400 $baud = 57600 '----------------------------------------------------------------------- Config Pind.5 = Output ' Lautsprecher Speaker Alias Portd.5 '---------------------------------------------------------- ' Timer0 8 Bit (1745 Hz) Timer Preload = 132 ' ############################################## On Timer0 Ontimer0 Config Timer0 = Timer , Prescale = 8 Enable Timer0 '------------------------------------------------------------- 'Start Timer0 'Stop Timer0 Enable Interrupts Do 'Hauptschleife Loop End Ontimer0: Toggle Speaker Timer0 = 132 Return
