я подправил просто библиотеку cvavr ds18b20.lib заменил float на unsigned int
unsigned int
ds18b20_temperature(unsigned char *addr)
{
unsigned char resolution;
if (ds18b20_read_spd(addr)==0) return -9991;
resolution=(__ds18b20_scratch_pad.conf_register››5 ) & 3;
if (ds18b20_select(addr)==0) return -9992;
w1_write(0x44);
delay_ms(conv_delay[resolution]);
if (ds18b20_read_spd(addr)==0) return -9993;
w1_init();
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & ((int) bit_mask[resolution]));
}
то есть return возвращает не тип переменой float а int 16битное число
еще надо открыть ds18b20.h и заменить float на
unsigned int ds18b20_temperature(unsigned char *addr);
в основной проге у меня следующее
temp[0]=(ds18b20_temperature(&ds18b20_rom_codes[0][0]))››4; //часть десятичная
sot[0]=((__ds18b20_scratch_pad.temp_lsb&0b00001111)*625)/1000;//сотая часть 1 датчика
temp[1]=(ds18b20_temperature(&ds18b20_rom_codes[1][0]))››4;
sot[1]=((__ds18b20_scratch_pad.temp_lsb&0b00001111)*625)/1000;
Tpr1=temp[0]*10+sot[0]; //получаем целое число с которым можно проводить операции например 125 это 12.5 градусов
Tpr2=temp[1]*10+sot[1];
Tpr_sr=(Tpr1+Tpr2)/2; среднее значение