DS18B20 a záporná teplota
DS18B20 a záporná teplota
Malý oříšek. Nemohu nikde najít kód pro čtení záporné teploty.
Zkoušel to někdo?
Zkoušel to někdo?
Re: DS18B20 a záporná teplota
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.
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
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
sensors.requestTemperatures();
float temp = sensors.getTempByIndex(0);
a to vrací rovnou teplotu i s desetinnou čárkou
Re: DS18B20 a záporná teplota
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),
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
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
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
Vypiš tu hodnotu printem na sériový terminál.
Re: DS18B20 a záporná teplota
Pánové, jsem ale matloň... ono to opravdu ukazuje znaménko minus
díky
díky
Re: DS18B20 a záporná teplota
Hlavně, že je to vyřešeno .
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti