Tema: Re: matematinis-mikroprocesorinis klausimas
Autorius: Levas
Data: 2015-02-04 23:56:20
nu gi isbandyta praktiskai. Netinka.


00000010000000000x
00000001111111111x

Kas bus? Kai keisis reiksme paskutiniam "nubrauktam" bite? Cia yra ne 
tikslumo skaiciavimo problema ir net ne apvalinimo, o rodymo "histerezes"!

Praktiskai nupjaunant bitus mazeja "skaiciu", taciau "mirgejimas" 
neisnyksta. Tik kiek sunkiau sukiojant "analogine" rankenele pagauti 
reiksme prie kurios mirga skaiciai.
Galima labai stipriai mazinti skaiciu kieki, kad praktiskai bus sunku 
nustatyti ta mirgejimo "vieta", bet prarasim tiksluma

Dabar sakysim (ten kur postinau) rodo 10 bitu +-3 skaiciu (2bitai!). Ir 
vaizdas stabilus, jei ADC blaskosi per tuos 3 skaicius.






On 2015.02.04 23:22, ejs wrote:

> nebus tokių išmatuotų reikšmių.
>
> Kadangi nežinau taviškio setup'o, priimam kad matuojam intervalą 0-10 V.
> Delta tarp gretimų reikšmių:
>   8 bitų - 10/256  = 0,039 ~=0,04;
> 10 bitų - 10/1024 = 0,0098 ~= 0,01;
> 12 bitų - 10/4096 = 0,0024 ~= 0,0025;
>
> Sakykim naudoji 10 bitų režimą, LSB bitas nereikšminis (triukšmai ir
> pan) ir jo atsikratai su '>> 1', lieki su 9 reikšminiais bitais ir 0,02
> V žingsniu. Arba, imant 12 bitų - 11 reikšminių bitų ir 0,005 V žingsnis.
>
> Tokiu atveju reikšmę keisčiau, kai abs(displayValue - currentValue) > 2.
> Ir čia viskas prieš level-shift'ą į displėjaus reikšmes.
> Galima net įvesti 'pataisą':
>
>   int displayValue = 0;
>   int currentValue = read_ADC();
>   int diff = currentValue - displayValue;
>   if (abs(diff >> 1)) {
>     displayValue = currentValue - (diff >> 1)
>    }
>
> Ant geležies netikrinau; jei '+' operacija valgo mažiau ciklų nei '-',
> žinosi ką daryti ;)
>
>> Mechaniskai tai gaunasi kaip "liuftas" dantraciuose- sukam skyva kazkiek
>> i prieki, poto sukam "laisvai" atgal, kol vel dantraciai ir sriegiai
>> susikabina.
>
> baisiai džergždami ;)

-- 
Bye, Levas

--
http://www.vabolis.lt