Страница 1 из 1
ds18b20 и atmega8 вывод температуры с десятичным знаком
Добавлено: Пн май 23, 2011 11:25:13
yuta_86
добрый день, у меня такая проблемка: не знаю как вывести температуру с десятичным знаком.
код такой
devices=w1_init(); //ищем датчики
while(devices>0) //бесконечный цикл, если датчик подключен
{
temper=ds18b20_temperature(0);
if(temper != -9999) // нет ошибок
{
//Анализ на отрицательную температуру
if( temper>1000 ) { temper=4096-temper; temper=-temper; show_digital(temper, 0,4);}
real_digital(temper,0);
} else real_digital(666,0); // если датчиков нет
delay_ms(500);
}
}
real_digital(666,0); // если датчиков нет
delay_ms(500);
}
буду очень рад помощи.
всё работает и отображается на 7seg индикторе. но оч хочется вывод с десятичным знаком градуса.
буду очень рад помощи.
Re: ds18b20 и atmega8 вывод температуры с десятичным знаком
Добавлено: Пн май 23, 2011 17:08:35
Аlex
Так поставьте точку в нужном месте и всё

Не вижу проблемы....
Re: ds18b20 и atmega8 вывод температуры с десятичным знаком
Добавлено: Пн май 23, 2011 17:18:18
yuta_86
я получаю число например 24 его и вывожу. дело в том что функция опроса датчика выдаёт на выходе тип float, а я ставлю int. и вот вопрос как сделать чтобы вывести целую часть и потом знать дробную.
Re: ds18b20 и atmega8 вывод температуры с десятичным знаком
Добавлено: Пн май 23, 2011 18:15:06
O-LED
123
Re: ds18b20 и atmega8 вывод температуры с десятичным знаком
Добавлено: Пн май 23, 2011 18:17:05
yuta_86
ок объявил как Float и в переменной будет значение температуры, дальше надо дробную часть отделить (1 знак достаточно) как??
Re: ds18b20 и atmega8 вывод температуры с десятичным знаком
Добавлено: Пн май 23, 2011 18:20:07
O-LED
вот так
int temper
temper=ds18b20_temperature(0)*10
теперь
temper /10 - целая часть
temper%10 - дробная часть
Re: ds18b20 и atmega8 вывод температуры с десятичным знаком
Добавлено: Вт май 24, 2011 02:03:12
Rhime
Датчик выдает 16 битный код тоесть максимальное значение равно 65536 по этому температурная переменная будет иметь значение int
Чтобы расчитать реальную минусовую температуру необходимо от максимального значения отнять значение которое принял МК
тоесть temperature=65536-temperature;
далее создаем две переменных int temp, Temp;
вычислим целое число temp=temperature>>4; сдвигаем temperature на 4 бита вправо
узнаем десятки Temp=temperature&0x000F переменной Temp присваивается только 4 младших бита которые сдвинали в предыдущем вычислении
вычисляем десятки unsigned char temp_min = ((Temp * 10) / 16);
Остается только преобразовать tem в DEC и поставить точку перед младшим - 4-м разрядом индикатора
Re: ds18b20 и atmega8 вывод температуры с десятичным знаком
Добавлено: Вт май 24, 2011 20:20:06
ChipKiller
Rhime писал(а):Датчик выдает 16 битный код...
из которого значащими в являются только 12 бит максимум. Поэтому ИМХО для уменьшения расчетов проще хранить целую и дробную часть раздельно (как два байта). Дробную часть легче и быстрее выводить с помощью табличной подстановки.