Jak jsem si nabehnul aneb double v pacalu na AVR

Jan Waclawek konfera na efton.sk
Pondělí Červenec 21 10:24:44 CEST 2014


Tak nejak. 

Ja osobne by som si ako prve definoval typ ako record styroch 16-bitovych
cisiel (asi aj v tom microPascale to bude "word"), a napisal si procedury
pre scitanie/odcitanie/nasobenie, to naozaj nie je tazke.

Naviac, by som si rozlozil tie vyrazy v datasheete, nemusi sa potom riesit
znamienkovost, az v poslednom kroku je odcitanie, ale aj to ma za vysledok
kladne cislo.

wek



----- Original Message ---------------
>Dìlá se to tak, ¾e s tím èíslem pracujete po 16bitech, ale pro
>mezivýsledek vyu¾íváte 32bitù. Potom násobení 16x16bitù dá 32bitù, nic
>nepøeteèe, jen horních 16bitù pou¾ijete jako pøenos do vy¹¹ích øádù.
>
>
>Tomá¹
>
>
>> Tak to ja bych i rad uz pred puvodnim prispevkem, problem je v tom, ze i
>> v datasheetu jsou dve promenne int64, coz v okamziku, kdy mi pouzivany
>> jazyk nabizi pouze praci s int32, nepatrne komplikuje zivot.
>
>> Ale je pravda, ze konverzi int64 na int32 zvladne podle kolegy weka i 
>> programatorsky elev (coz ja tedy evidentne nejsem), tak jsem sel cestou
>> mensiho odporu. Jen se priznam, ze by mne zajimalo, jak to ten elev 
>> udela, asi je na mne prilis vedro, ale pocitat s jednim cislem jako s 
>> parem spodnich a hornich 32 bitu mi pripada kapku napinave, tim spis, 
>> kdyz se s cislem dal pracuje a neni to jen finalni vysledek.
>
>> Pavel Kutina
>
>
>> Dne 21.7.2014 8:21, Tomá¹ Hamouz napsal(a):
>>> Problém je v tom, ¾e ten example psal nìjaký trotl.
>>> Napi¹te to pøesnì podle datasheetu, tam se pou¾ívají pouze celoèiselné
>>> typy, dokonce tam máte doporuèenou i konkrétní velikost ka¾dé
>>> promìnné, aby nepøetekla.
>>> Na závìr si konverzi na float klidnì udìlejte.
>>>
>>> Tomá¹
>>>
>>>
>>>> Zdravim,
>>>
>>>> tak si musim postezovat:
>>>
>>>> Zakoupil jsem sobe ultrapresne tlakove cidlo MEAS MS5611, ze supliku
>>>> vyhrabnu Arduino Pro Mini, osazene ATmegou 328P s tim, budu merit tlak a
>>>> teplotu a na UART si posilat namerena data.
>>>
>>>> Protoze s Arduinem nejsem kamarad (ale ta mrnava desticka s 328P se mi
>>>> libi), pripajel jsem na nej ISP konektor, zrusil cely arduinovsky
>>>> bootloader a zacal psat v Mikropascalu pro AVR, hex do toho sypu pres
>>>> avrdude, dale sama pozitiva a socialni jistoty. Jako voditko jsem mel C
>>>> example.
>>>
>>>> Vcelku to slo, az do te doby, nez jsem zjistil, ze v examplu je pro pet
>>>> promennych v zaverecnych vypoctech pouzita nehezka obludnost:
>>>
>>>> double P; // compensated pressure value
>>>> double T; // compensated temperature value
>>>> double dT; // difference between actual and measured temperature
>>>> double OFF; // offset at actual temperature
>>>> double SENS; // sensitivity at actual temperature
>>>
>>>> A ja jako na potvoru ve svem oblibenem kompilatoru od MikroE mam
>>>> nejdelsi datovy typ 32 bitu... Protoze jde o presnost, nejak moc
>>>> nepripada v uvahu, ze bych to nekde zkrouhnul a spodni bity zahodil.
>>>> Nenapada vas nekoho, jak podobnou zradu ocurat? Urcite by slo promennou
>>>> rozhodit na 32bit MSB a LSB, jen nevim, jak bych s tim pak dal pocital.
>>>
>>>> Kdyby se nekdo chtel pokochat:
>>>> Datasheet MS5611:
>>>> http://www.amsys.info/sheets/amsys.en.ms5611_01ba03.pdf
>>>> Example code:
>>>> http://www.amsys.info/sheets/amsys.en.an520_e.pdf
>>>
>>>> Asi nezbyde, nez tam ten arduinovsky loader nacpat zpatky (Arduino
>>>> uint64_t umi) a napsat to v tom Wiringu, ale velkou radost z toho nemam,
>>>> pripadam si dost jako idiot.



Další informace o konferenci Hw-list