реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Вывести на 7ми сегментный индикатор температуру с ds18b20 с десятыми
DmitriyT
сообщение Mar 22 2016, 15:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 31-10-15
Пользователь №: 89 110



Здравствуйте уважаемые разработчики.

Все не могу вывести темперетуру с десятичными на 7ми сегментный индикатор с драйвером max7219.

Целые числа получилось вывести, а десятичные не получается.

Код
void show_temper()
{

unsigned int temps, drob_tmp;
unsigned char celie,drob,j;
for(j=0;j<devices;)
{
temps = (signed int) ds18b20_temperature(&ds18b20_rom_codes[j][0]);
//Присвоим переменной temp значение переменной temperature с явным указанием типа данных
if (temps >= 0){temps = ~temps+1;buf5=10;}
else{buf5=0xF;} // если число отрицательное перевести его в норм.вид // целая часть числа
                // целая часть числа
    drob_tmp  = temps & 0x000F;          // дробная часть числа с точностью 1/16 градуса

    drob=(unsigned char)((drob_tmp * 10) / 16);  // преобразование дробной части в формате "1/16 градуса" в десятичный формат с точностью 0,1 градуса
/*Переменные разрядов индикатора*/
buf0=15;      
buf1=drob;
buf2=temps%10;
buf3=temps/10;
buf4=0xF;
j++;          
}
delay_ms(750);
}
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 23 2016, 20:49
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



А зачем ее считать , дробная часть DS18 прекрасно ложится на таблицу , куда заносятся числа соответствующие выбранной точности DS. Так например : 1 для точности 0.5 будет равна -0.5 , для 0,25 = 0,2 для 0,125 = 0.1 , для 0,0625 = 0 . Если после запятой 0 то он и в Африке 0
Кстати , именно поэтому у Вас и не получается посчитать дробную часть т.к. вы забыли про точность


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 24 2016, 11:22
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (ILYAUL @ Mar 23 2016, 22:49) *
дробная часть DS18 прекрасно ложится на таблицу

От обеих "решений" я плакалъ sad.gif. Арифметика начальной школы sad.gif
CODE
#define DS18X20_FRACCONV        625    // Constant to convert the fraction bits to cel*(10^-4)

    dcel = *((signed short *)&spad[0]);        // LSB and MSB to short

    if( dcel < 0 )            // Subzero
        dcel = ((dcel*DS18X20_FRACCONV)-500)/1000;
    else
        dcel = ((dcel*DS18X20_FRACCONV)+500)/1000;


А тут КРЕПКО думать, а что-же оказалось в этом signed int. "Подсказка" выше дана.
QUOTE
temps = (signed int) ds18b20_temperature(&ds18b20_rom_codes[j][0]);


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 24 2016, 19:06
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата
От обеих "решений" я плакалъ
Мне очень жаль , но ничем помочь не могу laughing.gif


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Эдди
сообщение Mar 24 2016, 22:05
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Учитывая то, что у этих недотермометров разброс в полтора-два градуса — привычное дело, никакого смысла десятичные выводить нет!
А вообще, если уж очень хочется, то все элементарно!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 24 2016, 22:46
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (ILYAUL @ Mar 24 2016, 21:06) *
Мне очень жаль , но ничем помочь не могу laughing.gif

О чем и речь, что не можете, но взялись sad.gif



QUOTE (Эдди @ Mar 25 2016, 00:05) *
А вообще, если уж очень хочется, то все элементарно!

Количесво "решений" через анус не ограничено ничем, что Вы и подтвердили очередной раз. Зачем? Вопрос, впрочем, риторический sad.gif.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 25 2016, 05:54
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата
О чем и речь, что не можете, но взялись
Я вроде ясно написал , что ВАМ помочь не могу т.к. это бесполезно


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 14:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01402 секунд с 7
ELECTRONIX ©2004-2016