Проблемы получения температуры болше 60 градусов от DS18B20
Добавлено: Чт июн 26, 2008 15:34:02
Товарищи, пожалуйста, помогите решить проблему с получением температуры от ds18b20.
Необходимо с минимальной задержкой получать значение температуры. Интересует только целая часть. Значение температуры необходимо выдавать в виде unsigned char (1 байт)
Использую Atmega8L.
Инициализация шины 1wire и поиск датчиков проходят без проблем. Опрос температуры тоже работает, но только до тех пор, пока температура не становится больше 60 градусов. Как только температура должна перепрыгнуть на 61 градус, начинает валиться всякая чушь.
Подскажите, где может скрываться проблема?
Необходимо с минимальной задержкой получать значение температуры. Интересует только целая часть. Значение температуры необходимо выдавать в виде 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
}
}