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







Zitieren
Hoffentlich liegt das Ziel auch am Weg
.


Lesezeichen