Hallo,
würd sagen, der Prescaler ist falsch gesetzt. Für 64 müßte es Tccr0 = &B00001100 heißen. Gegenwärtig ist er auf 32 und damit läuft der Timer doppelt so schnell.
Gruß
Searcher
Werbung
Hallo Forum,
ich möchte mit einem ATMega32 im CTC-Mode mit Timer0 einen 1 ms - Takt zu erzeugen.
Mit Taktfrequenz=16MHz würde ich einen Prescaler von 64 nutzen und den Vergleichswert auf 249 stellen.
f.1ms = 16MHz / (Prescaler * (OCR0+1))
der auf das wesentliche reduzierte Programm-Code:
Zum Test mit Stoppuhr wollte ich nun alle 10 Sekunden eine LED aufblitzen lassen.Code:$regfile = "M128def.dat" $crystal = 16e6 $hwstack = 128 $swstack = 128 $framesize = 128 Led Alias Portc.0 : Config Led = Output : Led = 1 '### Timer0 - Zeittakt 1ms ##################################################### Tccr0 = &B00001011 'CTC-Mode, Prescaler=64 Ocr0 = 249 'Vergleichswert Timsk.ocie0 = 1 'Output Compare Interrupt enable On Oc0 Isr_timer0 Dim Timer0_cnt As Word Dim Pulse_out As Byte '############################################################################### Enable Interrupts Do If Pulse_out = 1 Then Pulse_out = 0 Led = 0 Waitms 50 Led = 1 End If Loop End Isr_timer0: Incr Timer0_cnt If Timer0_cnt = 10000 Then Timer0_cnt = 0 Pulse_out = 1 End If Return
Tatsächlich geschieht dies aber in 5-Sekunden-Intervallen.
Warum treten die Interrupts doppelt so schnell auf wie erwartet/errechnet?
besten Dank
BoGe-Ro
Geändert von BoGe-Ro (27.06.2011 um 11:36 Uhr)
Hallo,
würd sagen, der Prescaler ist falsch gesetzt. Für 64 müßte es Tccr0 = &B00001100 heißen. Gegenwärtig ist er auf 32 und damit läuft der Timer doppelt so schnell.
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
Oh ha,
hatte Deine Erläuterung nicht genau genug gelesen und nach
$regfile = "M128def.dat"
im Mega128 Datenblatt nachgeschaut. Für Mega32 solltest Du $regfile ändern?
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
ohhh - mea culpa!
Du hast natürlich recht und trotz meiner falschen Beschreibung richtig verstanden und erklärt.
Das Projekt soll auf einem ATMega32 laufen, die Vortests unternehm ich zur Zeit auf einem ATMega128.
Somit habe ich das falsche Datenblatt offen.
Besten Dank für deine Hilfe!
Lesezeichen