DS18B20 a záporná teplota

Odpovědět
Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

DS18B20 a záporná teplota

Příspěvek od Ludek » 13 kvě 2021, 10:44

Malý oříšek. Nemohu nikde najít kód pro čtení záporné teploty.
Zkoušel to někdo?

Uživatelský avatar
Caster
Příspěvky: 380
Registrován: 11 zář 2019, 09:02
Reputation: 0

Re: DS18B20 a záporná teplota

Příspěvek od Caster » 13 kvě 2021, 12:02

Neměl by v tom být žádný problém. Změřenou teplotu vrací chip jako int hodnotu se znaménkem. Pokud je teplota záporná, je číslo předáno v dvojkovém doplňku. Např. teplota -20°C je 20dec, 10100 XOR 0xFF = 11101011 + 1 = 11101100 (0xEC) t.j. -20°C. U záporných čísel je tedy nejvyšší bit vždy "1".

Absolutní hodnotu záporného čísla zjistíš opačným postupem tj. 0xEC XOR 0xFF + 1 = 20°C (z -20°C).

Komentář výše byl obecný. Čidlo standardně vrací teplotu jako 32bit hodnotu se znaménkem, kterou je nutné podělit 16, aby jsi dostal teplotu ve °C. Např. 07D0h je 125°C a FE6Fh je -25,0625°C.

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: DS18B20 a záporná teplota

Příspěvek od Ludek » 13 kvě 2021, 12:41

Jo jo, ale to asi chce jiný příkaz. Já používám :

sensors.requestTemperatures();
float temp = sensors.getTempByIndex(0);

a to vrací rovnou teplotu i s desetinnou čárkou

Uživatelský avatar
Caster
Příspěvky: 380
Registrován: 11 zář 2019, 09:02
Reputation: 0

Re: DS18B20 a záporná teplota

Příspěvek od Caster » 13 kvě 2021, 12:58

Napiš co ti to vrací za hodnotu, takhle nechápu, v čem je problém.

P.S. Oprava, čidlo standardně vrací 16bit hodnotu, ne 32bit, jak jsem napsal výše (už mi to nešlo opravit),

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: DS18B20 a záporná teplota

Příspěvek od Ludek » 13 kvě 2021, 13:52

Mám tento kod : a výstup je teplota na dvě desetinná čísla.

Kód: Vybrat vše

// Modul Dallas       - test prevodu zaporne teploty
//                    - 12.05.2021

#include <OneWire.h>
#include <DallasTemperature.h>
#define BUS_1 5

OneWire DS_in (BUS_1);
DallasTemperature In_sensor (&DS_in);                   // teplota uvnitr nadrze

float t1, Tin;
//---------------------------------------------------------------------------------------------
void setup() {
 Serial.begin(9600);
 In_sensor.begin();
}
//---------------------------------------------------------------------------------------------
void loop() {
//.. nacteni teplot ...........................................................................
    Serial.println("Zjistuji teplotu...");                // uvodni text
    In_sensor.requestTemperatures();                      // vysle pozadavek cidlu
    Tin = (In_sensor.getTempCByIndex(0));                 // zmeri teplotu a vlozi do promenne
    Serial.print("Teplota je : "); Serial.println(Tin);   // zobrazi teplotu
    delay(2000);
  }

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: DS18B20 a záporná teplota

Příspěvek od ondraN » 13 kvě 2021, 14:24

V tom floatu by měla být teplota i se znaménkem. Co ti to vyisuje při záporné teplotě?

Uživatelský avatar
Caster
Příspěvky: 380
Registrován: 11 zář 2019, 09:02
Reputation: 0

Re: DS18B20 a záporná teplota

Příspěvek od Caster » 13 kvě 2021, 15:03

Vypiš tu hodnotu printem na sériový terminál.

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: DS18B20 a záporná teplota

Příspěvek od Ludek » 13 kvě 2021, 15:36

Pánové, jsem ale matloň... ono to opravdu ukazuje znaménko minus :-)
díky :-)

Uživatelský avatar
Caster
Příspěvky: 380
Registrován: 11 zář 2019, 09:02
Reputation: 0

Re: DS18B20 a záporná teplota

Příspěvek od Caster » 13 kvě 2021, 16:19

Hlavně, že je to vyřešeno ;) .

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů