Podivne problemy s casovanim na ATmega8
Pavel Hudecek
edizon na seznam.cz
Úterý Září 18 14:39:28 CEST 2012
Dobrý den všem,
mějme následující kód:
volatile unsigned int ms=0;
volatile unsigned long sekundy=0;
volatile bit msSync=0, sekSync=0, adSync=0;
unsigned char dispJas; // jas displeje 0-3
void cekej(unsigned int n) {
ms=0;
while(ms<n) {
// #include <cekani.c>
}
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
static unsigned short ms1;
static unsigned char jasCnt;
TCNT0=256-125;
ms++; msSync=1;
if (++ms1>=1000) {ms1=0; sekundy++; sekSync=1;}
if (++jasCnt>3) jasCnt=0;
if ((jasCnt<dispJas)|dispJas==3) DISP_bl=1; else DISP_bl=0;
}
Procesor běží na interním oscilátoru 8 MHz, do časovače jde 125 kHz.
Přerušení by tak mělo nastávat každou ms. tento zpsob čekání jsem bez
problémů využíval i dříve, vlastně skoro všude. Tentokrát se ovšem dějou
divné věci. Funkce cekej někdy trvá viditelně kratší dobu, než je požadováno
(400 ms) a při té příležitosti poblikne podsvícení displeje.
Čím to může být?
PH
Další informace o konferenci Hw-list