не выводятся десятые значения температуры ds18b20 на lcd
не выводятся десятые значения температуры ds18b20 на lcd
Собираю термометр на 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, все работает без проблем). Не пойму в чем моя ошибка, или протеус виноват? В железе еще не проверял.
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
я, конечно, за CVAVR поручиться не могу, но по-моему надо формат указывать все-таки %4.1f или как-то такsanic писал(а):sprintf(lcd_buffer,"t=%.1f'C", temp );
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: не выводятся десятые значения температуры ds18b20 на lcd
0f—t=20, вывод без знака. 1f—t=20.0, с десятыми. 2f—t=20.00, с сотнями. Именно так у меня выводилось значения ацп, но почему когда вывожу значение температуры –чистый экран, не пойму.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: не выводятся десятые значения температуры ds18b20 на lcd
Полюбому в настройках нужно ковырять. Где-то поддержка float выключена.
Re: не выводятся десятые значения температуры ds18b20 на lcd
Посмотри эту тему http://radiokot.ru/forum/viewtopic.php?f=20&t=57067 там имеется подобный проект с протеусом
- Реклама
- Volgol_555
- Потрогал лапой паяльник
- Сообщения: 301
- Зарегистрирован: Пт сен 23, 2011 13:13:51
- Откуда: Минск
- Контактная информация:
Re: не выводятся десятые значения температуры ds18b20 на lcd
Не нужно выставлять в настройках 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); //показания дробно/целых значений градуса
}
Я на нем собаку съел. Потому, что делаю крайне сложное устройство. Вот этот вариант самый экономный!
Вот тебе пример:
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 писал(а):Я на нем собаку съел. Потому, что делаю крайне сложное устройство. Вот этот вариант самый экономный!
битва с дураками проиграна, победители торжествуют. слава победителям!
- Volgol_555
- Потрогал лапой паяльник
- Сообщения: 301
- Зарегистрирован: Пт сен 23, 2011 13:13:51
- Откуда: Минск
- Контактная информация:
Re: не выводятся десятые значения температуры ds18b20 на lcd
Вы правы. Код приведенный - всего лишь пример того, что я говорил - выход из данной ситуации. Можно и его упростить, но лично мне этого было бы неудобно, потому что все переменные мне в программе нужны для дальнейших вычислений!)
Самое гениальное - всегда самое простое
- Volgol_555
- Потрогал лапой паяльник
- Сообщения: 301
- Зарегистрирован: Пт сен 23, 2011 13:13:51
- Откуда: Минск
- Контактная информация:
Re: не выводятся десятые значения температуры ds18b20 на lcd
Я просто вырезал кусок программы!)
Самое гениальное - всегда самое простое
Re: не выводятся десятые значения температуры ds18b20 на lcd
Через 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, В ПРОТЕУСЕ пустой экран
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
Возможно проблема с библиотеками или настройками протоса....Попробуй установить поновее
Самое гениальное - всегда самое простое
Re: не выводятся десятые значения температуры ds18b20 на lcd
Ура получилось! Проблема в протеусе установил старую версию 7,2 и все работает, теперь буду пробовать в железе. Всем спасибо.


