Podivne problemy s casovanim na ATmega8
Jaroslav Buchta
jaroslav.buchta na hascomp.cz
Úterý Září 18 16:12:44 CEST 2012
Nevim, jak to probliknuti ale nemusi byt korektni test while(ms<n),
protoze jej asi provadi vic instrukci, mezi komparaci nizsich a vyssich
radumuze dojit k preruseni a v nekterych pripadech pri prenosu ke
zkresleni intervalu. Ale asi bude zadrhel jeste jinde, jestli program
obcas nezabloudi nebo nezustane viset dele v nejake ISR ???
Dne 18.9.2012 14:39, Pavel Hudecek napsal(a):
> 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
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list