Stránka 1 z 1

DS18B20 a záporná teplota

Napsal: 13 kvě 2021, 10:44
od Ludek
Malý oříšek. Nemohu nikde najít kód pro čtení záporné teploty.
Zkoušel to někdo?

Re: DS18B20 a záporná teplota

Napsal: 13 kvě 2021, 12:02
od Caster
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.

Re: DS18B20 a záporná teplota

Napsal: 13 kvě 2021, 12:41
od Ludek
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

Re: DS18B20 a záporná teplota

Napsal: 13 kvě 2021, 12:58
od Caster
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),

Re: DS18B20 a záporná teplota

Napsal: 13 kvě 2021, 13:52
od Ludek
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);
  }

Re: DS18B20 a záporná teplota

Napsal: 13 kvě 2021, 14:24
od ondraN
V tom floatu by měla být teplota i se znaménkem. Co ti to vyisuje při záporné teplotě?

Re: DS18B20 a záporná teplota

Napsal: 13 kvě 2021, 15:03
od Caster
Vypiš tu hodnotu printem na sériový terminál.

Re: DS18B20 a záporná teplota

Napsal: 13 kvě 2021, 15:36
od Ludek
Pánové, jsem ale matloň... ono to opravdu ukazuje znaménko minus :-)
díky :-)

Re: DS18B20 a záporná teplota

Napsal: 13 kvě 2021, 16:19
od Caster
Hlavně, že je to vyřešeno ;) .