Tema: Re: atmega8
Autorius: saimhe
Data: 2010-03-15 16:39:46
> pats skaiciuoja kazka per 1 s laiko intervala, po default?

   Ne per 1s, o tol, kol skaitiklis įjungtas. Tą 1s reikia pasidaryti
pačiam. Be to, intervalas gali būti bet koks ir nebūtinai gražus skaičius.
Žymiai ilgesnis intervalas -- interaktyvioje sistemoje nepatogu tiek
ilgai laukti rezultato, bet kartais nėra išeities; o jei daug kartų
trumpesnis -- arba raiškos pritrūksta (nes per mažai priskaičiuoja ir
±1 paklaida darosi per didelė), arba tiesiog nėra reikalo. Taigi
visvien suskaičiuotą kiekį teks dalinti iš matavimo trukmės.
   Nedideliam tikslumui galbūt užteks vidinio taimerio. Imi vidinį
taimerį (gaila, čia antro 16 bitų taimerio nėra) su reikiamo dydžio
prescaleriu ir paruoši, kad būtų pertraukimas intervalo gale. O tenai
skaitiklis kuo greičiau išjungiamas. Labai pasistengus su asembleriu
ir suskaičiavus atitinkamų komandų trukmes, gal pavyks minimizuoti
paklaidą iki poros komandų. (dar žr. "interrupt latency")
   Mandresni dažnimačiai naudoja "gated counter". Matavimo intervalas
paduodamas iš atskiro etaloninio generatoriaus. Sukombinavus šitą
signalą su matuojamu signalu (pvz., ARBA elementas aktyvaus "0" atveju),
matuojamas signalas virsta konstanta ir skaitiklis nebeskaičiuoja.
Tas pats etaloninis signalas eina į external interrupt koją, todėl
jam pasibaigus gaunamas pertraukimas, kurio metu skaičiavimas
nebevyksta ir galima ramiai nuskaitinėti reikšmę bei valyti registrus
kitam kartui. 8051 architektūroje tokia funkcija yra jau vidiniame
skaitiklyje.

-- 
  saimhe