Timer1 ATMega16

Jan 18, 2007 3 Replies

Hallo,



ich versuche gerade mit GCC und ATmega16 eine 1ms Timer-Routine zu realisieren. Was dabei rauskommt ist aber etwa doppelt so schnell wie erwartet.



Der Quarz hat eine Frequenz von 11,0592 MHz, der Oszillator. Der Baudratengenerator läuft mit der erwarteten Geschwindigkeit


------------------- snip ----------------------------------



void init(void) { cli(); // znächst mal die INTs sperren .... OCR1A = 11059; TCCR1B = 0x09; // Set timerclock fosc / 1 TIMSK = 0x10; // Outputcomparematch A interrupt enabled.


sei(); //globale Ints aktivieren }


SIGNAL (SIG_OUTPUT_COMPARE1A) { ms1++; if (ms1++ > 9) { ms1 = 0; ms10++; if (ms10 > 99) {ms10 = 0; sec++; if (sec > 59) {sec = 0; min++; if (min > 59) { min = 0; hour++; } } } }



} // Ende der 1ms Timer Interrupt-Routine



int main( void ) { init(); // Initialisierung char c,b; for (;;) { b = sec; uart_putchar(c++); // sendet 1 Zeichen do {} while (b == sec); } // for (;;) }


Hallo,

Stefan Brr=F6ring schrieb:

Der Fehler d=FCrfte hier liegen: ms1 wird zweimal inkrementiert.

hth,

Thomas

"Gernot Fink" schrieb im Newsbeitrag news: snipped-for-privacy@mid.individual.net...

Au ja, das wirds sein, danke

Stefan

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required