Собрал измеритель температуры с использованием ATiny2313 и ds18b20.
По обращению через UART контроллер опрашивает ds18b20 и возвращает значение UARTу. Отделение целой части температуры от дробной происходит уже на сервере.
В основном, измерение происходит корректно, но где-то 1 из 10 замеров возвращает температуру "-1.9". Никак не могу понять в чем дело, насколько я понял ds18b20 или работает правильно или вообще не работает. Откуда это -1.9? Еще,очень редко, бывает -625.0
Код обращения к датчику:
Код: Выделить всё
#include <tiny2313.h>
#include <delay.h>
#include <string.h>
#include <stdlib.h>
#include <1wire.h>
#include "ds18x20_v2.h"
...
int get_temperature(){
int temperature = -1;
if (w1_init() > 0) {
temperature = ds18b20_temperature(0);
if (temperature > 1000){
temperature=(-1)*4096-temperature;
}
}
return temperature;
}
...Схема
Спойлер



