|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
mtome Profesionalec
Pridružen/-a: Pon Jan 2004 14:29 Prispevkov: 168 Kraj: ljubljana
|
Objavljeno: Čet Okt 16, 2008 11:12 am Naslov sporočila: AVR in plavajoča vejica |
|
|
Lep pozdrav!
Zanima me, kako bi se dalo z AVR-jem računati z decimalnimi števili, vendar braz uporabe spremenljivke tipa float, saj je tako velika natančnost nepotrebna, rečunske operacije med njimi pa zasedejo zelo veliko FLASH-a. _________________ l.p. Matjaz |
|
Nazaj na vrh |
|
|
Gustav Profesionalec
Pridružen/-a: Pon Jun 2005 17:19 Prispevkov: 768
|
Objavljeno: Čet Okt 16, 2008 1:07 pm Naslov sporočila: |
|
|
Racunanje s fiksno decimalno piko gre povsem enako, kot s celimi stevili, tvoja stvar pa je potem kako interpretiars rezultat (to je odvisno tudi od tega kaj bi sploh rad izracunal).
Rutine za racunanje s fiksno decimalno piko in dolocene matematicne operacije so opisane v AppNoets za mnogo MCUjev. Meni se zdi zelo dobra razlaga v Motorolinih (za 68HC908), teorija je tako ali tako povsod ista, izvedba pa na razlicnih 8-bitnikih zelo podobna. |
|
Nazaj na vrh |
|
|
mtome Profesionalec
Pridružen/-a: Pon Jan 2004 14:29 Prispevkov: 168 Kraj: ljubljana
|
Objavljeno: Čet Okt 16, 2008 5:20 pm Naslov sporočila: |
|
|
To sem tudi jaz pomislil, vendar ne vem katera spremenljivka lahlko drzi vrednost z fiksno vejico. Ce prav razumem, fiksna vejica pomeni, da je to stevilo, ki ima v naprej doloceno stevilo decimalnih mest.
To me zanima, ker bi rad naredil termostat, ki bi prikazoval temperaturo na 0.1 stopinjo natancno. _________________ l.p. Matjaz |
|
Nazaj na vrh |
|
|
Gustav Profesionalec
Pridružen/-a: Pon Jun 2005 17:19 Prispevkov: 768
|
Objavljeno: Čet Okt 16, 2008 6:12 pm Naslov sporočila: |
|
|
Prav razumes, a si ob tem nekaj narobe predstavljas: vsaka spremenljivka dolocene dolzine lahko drzi tolikolintoliko informacije. Kaj ta informacija predstavlja, pa je stvar interpretacije.
Kaj recimo predstavlja 00000010 (binarno) ?
Lahko predstavlja vrednost 2 (decimalno; 1*2^1), ce jo tako interpretiras (torej "binarna" pika desno od zadnje nicle).
Lahko recimo predstavlja vrednost 0.125 (decimalno: 1*2^-3), ce jo interpretiras tako (pika tocno na sredini, torej desno od prvih stirih nicel).
Lahko predstavlja se sedem drugih vrednosti, odvisno od pozicije pike.
Vse skupaj je stvar interpretacije vrednosti spremenljivke in za to skrbi tvoja rutina za pretvorbo stevilka v znakovni niz, velikost spremenljivke bos pa izbral glede na zeljeni obseg izpisa podatkov; ce potrebujes desetinke in bos rezultat izracuna pri izpisu odrezal (tako jaz razumem tvoje vprasanje), potem prides skozi s stirimi biti desno od pike, kar je tudi minimalno stevilo bitov, potrebno za drzanje podatka, ki ima lahko 10 razlicnih vrednosti (0 .. 9).
Aja, pa se to: kje bos dobil podatek o temperaturi na 0.1 stopinje natancno ? |
|
Nazaj na vrh |
|
|
mtome Profesionalec
Pridružen/-a: Pon Jan 2004 14:29 Prispevkov: 168 Kraj: ljubljana
|
Objavljeno: Čet Okt 16, 2008 7:00 pm Naslov sporočila: |
|
|
Hvala za odgovor. Temperaturo pa bom meril z LM75. _________________ l.p. Matjaz |
|
Nazaj na vrh |
|
|
Gustav Profesionalec
Pridružen/-a: Pon Jun 2005 17:19 Prispevkov: 768
|
Objavljeno: Čet Okt 16, 2008 9:55 pm Naslov sporočila: |
|
|
mtome je napisal/a: | Hvala za odgovor. Temperaturo pa bom meril z LM75. |
Aha ... pa to ves, da ta cip sploh nima locljivosti 0.1 stopnije ?
Problema si se lotil na povsem napacen nacin: stran 8 datasheeta od OnSemi opisuje format podatka iz senzorja in zgornji bajt predstavlja normalno predznaceno 8-bitno vrednost (vrednost porines v spremenljivko, pa bo izpis s standardnimi turinami pravilen), zgornji bit LSBja pa predstavlja preostale pol stopnije in izpis tega najboljse uredis s pogojnim stavkom v slogu:
Koda: |
if ((0x80 & LSB) == 0)
printf(".0");
else
printf"0.5");
|
To bo zasedlo manj prostora, kot nevemkaksne rutine za preracunavanje, ki morajo vkljucevati cel kup komplicirane matematike, ti imas pa v algoritmu cisto preprosto odlocitev, kjer sta mozni samo dve stanji. |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|