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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
sanic
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Чт ноя 12, 2009 15:03:49

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

Сообщение sanic »

Собираю термометр на ds18b20, atmega8, lcd 2x16. Компилятор codevision avr 1.25.9, в настройках выставил (s)printf ... float, ...

float temp;
.........
temp=ds18b20_temperature(0);
sprintf(lcd_buffer,"t=%.1f'C", temp );
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);
delay_ms(1000);
При симуляции в протеусе (7,5) чистый экран. При изменении в настройках (s)printf ... int ...
int temp;
.........
temp=ds18b20_temperature(0);
sprintf(lcd_buffer,"t=%u'C", temp );
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);
delay_ms(1000);
В протеусе температура выводится, только без десятых.
Мне нужны десятые значения градуса именно через float (пробовал выводить значения ацп с десятыми через float, все работает без проблем). Не пойму в чем моя ошибка, или протеус виноват? В железе еще не проверял.
Реклама
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

sanic писал(а):sprintf(lcd_buffer,"t=%.1f'C", temp );
я, конечно, за CVAVR поручиться не могу, но по-моему надо формат указывать все-таки %4.1f или как-то так
битва с дураками проиграна, победители торжествуют. слава победителям!
Реклама
sanic
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Чт ноя 12, 2009 15:03:49

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

Сообщение sanic »

0f—t=20, вывод без знака. 1f—t=20.0, с десятыми. 2f—t=20.00, с сотнями. Именно так у меня выводилось значения ацп, но почему когда вывожу значение температуры –чистый экран, не пойму.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Полюбому в настройках нужно ковырять. Где-то поддержка float выключена.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
C@at
Вымогатель припоя
Сообщения: 652
Зарегистрирован: Вс ноя 13, 2011 16:42:05
Откуда: Украина

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

Сообщение C@at »

Посмотри эту тему http://radiokot.ru/forum/viewtopic.php?f=20&t=57067 там имеется подобный проект с протеусом
Реклама
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Не нужно выставлять в настройках sprintf - float (он жрет памяти много). Десятые можно выводить и имея int.
Вот тебе пример:

float temp1,temp2;
int t1,t2;
....
....
....
if (ds18b20_devices) {
temp1=ds18b20_temperature(&ds18b20_rom_codes[0][0]);
temp2=ds18b20_temperature(&ds18b20_rom_codes[1][0]);
if (temp1>1000){temp1=temp1-4096;}
if (temp2>1000){temp2=temp2-4096;}
t1=(int)(temp1*10);
t2=(int)(temp2*10);
sprintf(lcd_buffer1,"t1=%i.%u\xdfC",t1/10,t1%10); //показания дробно/целых значений градуса
sprintf(lcd_buffer2,"t2=%i.%u\xdfC-damp",t2/10,t2%10); //показания дробно/целых значений градуса
}
Я на нем собаку съел. Потому, что делаю крайне сложное устройство. Вот этот вариант самый экономный!
Самое гениальное - всегда самое простое
Реклама
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

Volgol_555 писал(а):Я на нем собаку съел. Потому, что делаю крайне сложное устройство. Вот этот вариант самый экономный!
очевидно, не всю собаку съел - хвостик ведь остался, признайтесь? ;) иначе вы бы не говорили такую ерунду: использовать функцию, возвращающую float, и говорить, что это самый экономичный вариант. да еще и кучу всяких странных и лишних действий делаете...
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Вы правы. Код приведенный - всего лишь пример того, что я говорил - выход из данной ситуации. Можно и его упростить, но лично мне этого было бы неудобно, потому что все переменные мне в программе нужны для дальнейших вычислений!)
Самое гениальное - всегда самое простое
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Я просто вырезал кусок программы!)
Самое гениальное - всегда самое простое
sanic
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Чт ноя 12, 2009 15:03:49

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

Сообщение sanic »

Через int temp; все получается. вот кусок кода:

temp=ds18b20_temperature(0)*10;
sprintf(lcd_buffer,"t=%i.%u'C", temp/10,temp%10 );
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);
delay_ms(1000);

но почему не получается через float? даже из стандартной библиотеки codevision DS18B20, В ПРОТЕУСЕ пустой экран
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

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

Сообщение Volgol_555 »

Возможно проблема с библиотеками или настройками протоса....Попробуй установить поновее
Самое гениальное - всегда самое простое
sanic
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Чт ноя 12, 2009 15:03:49

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

Сообщение sanic »

Ура получилось! Проблема в протеусе установил старую версию 7,2 и все работает, теперь буду пробовать в железе. Всем спасибо.
Закрыто

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