Jak jsem si nabehnul aneb double v pacalu na AVR

Tomáš Hamouz hamouz na divesoft.cz
Pondělí Červenec 21 09:56:42 CEST 2014


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.
>>
>>> Pavel Kutina
>>> _______________________________________________
>>> HW-list mailing list  -  sponsored by www.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>>
> _______________________________________________
> 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