ds18b20 и atmega8 вывод температуры с десятичным знаком

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
yuta_86
Открыл глаза
Сообщения: 78
Зарегистрирован: Пн май 23, 2011 11:23:39

ds18b20 и atmega8 вывод температуры с десятичным знаком

Сообщение 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 индикторе. но оч хочется вывод с десятичным знаком градуса.
буду очень рад помощи.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

Сообщение Аlex »

Так поставьте точку в нужном месте и всё :)
Не вижу проблемы....
yuta_86
Открыл глаза
Сообщения: 78
Зарегистрирован: Пн май 23, 2011 11:23:39

Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

Сообщение yuta_86 »

я получаю число например 24 его и вывожу. дело в том что функция опроса датчика выдаёт на выходе тип float, а я ставлю int. и вот вопрос как сделать чтобы вывести целую часть и потом знать дробную.
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

Сообщение O-LED »

123
Последний раз редактировалось O-LED Пн май 23, 2011 18:21:26, всего редактировалось 2 раза.
KIT
yuta_86
Открыл глаза
Сообщения: 78
Зарегистрирован: Пн май 23, 2011 11:23:39

Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

Сообщение yuta_86 »

ок объявил как Float и в переменной будет значение температуры, дальше надо дробную часть отделить (1 знак достаточно) как??
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

Сообщение O-LED »

вот так
int temper

temper=ds18b20_temperature(0)*10

теперь
temper /10 - целая часть
temper%10 - дробная часть
KIT
Rhime
Родился
Сообщения: 9
Зарегистрирован: Пн фев 15, 2010 21:54:49

Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

Сообщение 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-м разрядом индикатора
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

Сообщение ChipKiller »

Rhime писал(а):Датчик выдает 16 битный код...
из которого значащими в являются только 12 бит максимум. Поэтому ИМХО для уменьшения расчетов проще хранить целую и дробную часть раздельно (как два байта). Дробную часть легче и быстрее выводить с помощью табличной подстановки.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»