Ein Timer zählt bei jedem Takt des Controllers einen Zähler um eins hoch.Wenn mir noch mal einer erklären könnte wie ich den besten Prescale-Faktor ermittle
Bei einer Taktung von 16MHz wird der Zähler also 16 Mio mal pro Sekunde hochgezählt.
Bei einem 8Bit Timer ist der Zähler aber nur eine 8 Bit Variable, geht also nur bis 2^8 = 255. Bei 256 läuft der Zähler (Timer) über, wird auf 0 zurückgesetzt und es wird ein Interrupt ausgelöst.
Der Prescale ist ein zusätzlicher Faktor um die Intervalle bei denen der Timerinterrupt ausgelöst wird zu verlängern.
Bei einem Prescale von 1 löst der Timer 16Mio/256 mal pro Sekunde aus.
Bei einem Prescale von 8 sind es 16Mio/(256*8 ) oder allgemein:
Taktung/(256*Prescale)
Bei einem 16 Bit Timer fünktioniert es analog, der läuft halt erst bei 2^16 statt bei 256 über.
Timer0 ist ein 8 Bit Timer, läuft wie gesagt bei 256 über, löst einen Interrupt aus, wird auf = zurückgesetzt und das Spiel geht von vorne los.und auf was ich Timer1 = XXXX setzte
Wenn du in der Interruptroutine den Wert von Timer0 änderst, z.B.
Timer0 = 100, zählt der Timer0 nicht mehr von 0-255, sondern von 100-255. Damit machst du den Timerintervall also kürzer.
Mit der Kombination von Prescale und Wert für Timer0 kannst du dir den Timerintervall auf die Frequenz legen die du benötigst.
Beim 16 Bit Timer (Timer1) funktioniert das genauso, nur halt mit 2^16.
Im Downloadbereich gibt es ein Programm, das die Berechnung automatisch ausführt und den passenden Quellcode erstellt. Da brauchst du nur deine Quarzfrequenz und die Gewünschte Frequenz für den Timerinterrupt eingeben.
Lesezeichen