Jak jsem si nabehnul aneb double v pacalu na AVR

Pavel Kutina hw na prelude.cz
Pondělí Červenec 21 10:38:49 CEST 2014


Puvodne neapsal, ale to vcelku nevadilo, protoze C v arduinu int64 i uint64 umi, takze jsem to prepsal tam, byla to cesta nejmensiho odporu, byt na to "skoro jako IDE" nadavam.

Hratky s vypocty v 64 bitech v Pascalu si zatim schovam na dlouhe zimni vecery jako cviceni, ted to potrebuju co nejdriv dostat do vzduchu.

Kazdopadne diky vsem za rady.

Pavel Kutina



  ----- Original Message ----- 
  From: Andrej Jancura 
  To: HW-news 
  Sent: Monday, July 21, 2014 9:48 AM
  Subject: Re: Jak jsem si nabehnul aneb double v pacalu na AVR


  Dobry den,


  akurat som sa chcel spytat, ci Vam uz niekto po tych cca. 25 emailoch rozoberajucich od C vs. Pascal az po free konfiguraciu zivota niekto poradil ako to v tom C napisat pre tych 64 bitov...  Ak nepohrdnete mojou inspiraciou, tak tu je :)


  Musite si nadefinovat typ uint64 cez typedef tak, ze to budu dva uint32 bezznamienkove integery, high a low part. Jednotlive uint32 musite dalej rozpisat ako union, ktory je raz uint32 a raz ako uchar8 ci uz pole alebo strukturu necham na Vas. Potom si musite nadefinovat vlastne operacie +,-, nasobenie a delenie. Na to potrebujete pracovnu premennu uint16, aby ste videl pretecenie cez 255, teda 511, co vam undikuje, ze mate pri dalsej polozke pripocitat 1. No a potom uz idete len byte po byte... Da sa to urobit aj v C, aj ked vysledny kod asm by bol asi kratsi.


  A.





  2014-07-21 9:08 GMT+02:00 Pavel Kutina <hw na prelude.cz>:

    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





------------------------------------------------------------------------------


  _______________________________________________
  HW-list mailing list  -  sponsored by www.HW.cz
  Hw-list na list.hw.cz
  http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20140721/87e2fc5e/attachment.html>


Další informace o konferenci Hw-list