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

.