c: modf (xc8 microchip)

Miroslav Draxal evik na volny.cz
Středa Červenec 12 21:53:56 CEST 2023


Oprava, takhle to mělo být cele

#    define TEST_BIT(var, bit)              (*((uint8Bit_t*) & var)).bit

    if (TEST_BIT(DS18B20_teplota.Teplota_MSB, Bit7)) {//záporná teplota <
0°C
        DS18B20_teplota._MSB_LSB = ~DS18B20_teplota._MSB_LSB + 1; // bitový
doplněk 16bitů
        TeplotyCidel[CisloCidla].TeplotaZaporna = 1; // je záporná teplota
    }

    NacteneDesetiny = DS18B20_teplota.Teplota_LSB & 0x0Fu; // desetiny,
rozsah za desetinou čárkou, surová data, vynásobit 0,0625= skutečná teplota
za desetinou čárkou
    DS18B20_teplota._MSB_LSB >>= 4; // bitový posuv 4krát doprava, zbav se
desetiných míst

    TeplotyCidel[CisloCidla].Teplota = DS18B20_teplota.Teplota_LSB;
    TeplotyCidel[CisloCidla].DesetinyC = 0;
    if (TEST_BIT(NacteneDesetiny, Bit3))
        TeplotyCidel[CisloCidla].DesetinyC += 5u;
    if (TEST_BIT(NacteneDesetiny, Bit2))
        TeplotyCidel[CisloCidla].DesetinyC += 2u; // pomocí malého fígle se
s malinkou nepřesností
    if (TEST_BIT(NacteneDesetiny, Bit1))
        TeplotyCidel[CisloCidla].DesetinyC += 1u; // zaokrouhlí teplotu na 1
desetinné místo
    if (TEST_BIT(NacteneDesetiny, Bit0))
        TeplotyCidel[CisloCidla].DesetinyC += 1u; // zaokrouhlí teplotu na 1
desetinné místo

-----Original Message-----
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Miroslav
Draxal
Sent: Wednesday, July 12, 2023 9:50 PM
To: 'HW-news'
Subject: RE: c: modf (xc8 microchip)

Jj jde to
#    define TEST_BIT(var, bit)              (*((uint8Bit_t*) & var)).bit

    if (TEST_BIT(DS18B20_teplota.Teplota_MSB, Bit7)) {//záporná teplota <
0°C
        DS18B20_teplota._MSB_LSB = ~DS18B20_teplota._MSB_LSB + 1; // bitový
doplněk 16bitů
        TeplotyCidel[CisloCidla].TeplotaZaporna = 1; // je záporná teplota
    }

    TeplotyCidel[CisloCidla].Teplota = DS18B20_teplota.Teplota_LSB;
    TeplotyCidel[CisloCidla].DesetinyC = 0;
    if (TEST_BIT(NacteneDesetiny, Bit3))
        TeplotyCidel[CisloCidla].DesetinyC += 5u;
    if (TEST_BIT(NacteneDesetiny, Bit2))
        TeplotyCidel[CisloCidla].DesetinyC += 2u; // pomocí malého fígle se
s malinkou nepřesností
    if (TEST_BIT(NacteneDesetiny, Bit1))
        TeplotyCidel[CisloCidla].DesetinyC += 1u; // zaokrouhlí teplotu na 1
desetinné místo
    if (TEST_BIT(NacteneDesetiny, Bit0))
        TeplotyCidel[CisloCidla].DesetinyC += 1u; // zaokrouhlí teplotu na 1
desetinné místo


Mám napsanou knihovnu, kde mám několik druhů výpočtu.
Proč tam mám i s double. Protože když používám v projektu double, modf a
výpočet teploty provádím v době, kdy se pic fláká, tak prostě vyměním
rychlost za uspořenou Flash paměť. To je vše.
Míra

-----Original Message-----
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Jan Waclawek
Sent: Wednesday, July 12, 2023 3:29 PM
To: HW-news
Subject: Re: c: modf (xc8 microchip)

>Tak proč by se nedala teplota měřit v šestnáctinách stupně Celsia. A 
>přesně tak to ten DS1820 dělá.

A je to mozno zhovadilost, ale za ucelom vypisu by som sa ja osobne ani
nenamahal pocitat tu zlomkovu cast, ale uplne sprosto by som pouzil lookup
tabulku na znaky podla spodnych 4 bitov.

Akurat sa treba zamysliet nad jej "otocenim" pre zaporne teploty.

wek


_______________________________________________
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