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