Необходимо с минимальной задержкой получать значение температуры. Интересует только целая часть. Значение температуры необходимо выдавать в виде unsigned char (1 байт)
Использую Atmega8L.
Инициализация шины 1wire и поиск датчиков проходят без проблем. Опрос температуры тоже работает, но только до тех пор, пока температура не становится больше 60 градусов. Как только температура должна перепрыгнуть на 61 градус, начинает валиться всякая чушь.
Подскажите, где может скрываться проблема?
Код: Выделить всё
//Запрос температуры датчика с номером s_num
unsigned char GetTemperature(unsigned char s_num)
{
long temp;
unsigned char res;
#asm("cli")
temp= ds18b20_temperature(&rom_code[s_num][0]);
#asm("sei")
memcpy(&res,(unsigned char *)&temp,1);
return res;
}
void main(void)
{
...
/ Инициализация температурных датчиков DS18B20
/* detect how many DS18B20 devices
are connected to the 1 Wire bus */
devices_count=w1_search(0xf0,rom_code);
if (devices_count>MAX_DEVICES) devices_count=MAX_DEVICES;
for (i=0;i<devices_count;i++)
if (!ds18b20_init(&rom_code[i][0],20,30,DS18B20_9BIT_RES))
{
while(1);
};
while(1)
{
unsigned char t=GetTemperature(0);
transmit(); //передача t по RS232
}
}


