Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

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

Непрочитано 23.05.2011, 12:13  
yuta_86
Частый гость
 
Регистрация: 12.01.2011
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
yuta_86 на пути к лучшему
По умолчанию ds18b20 и atmega8 вывод температуры с десятичным знаком

добрый день, у меня такая проблемка: не знаю как вывести температуру с десятичным знаком.

код такой

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 индикторе. но оч хочется вывод с десятичным знаком градуса.
буду очень рад помощи.
Реклама:
yuta_86 вне форума  
Сказали "Спасибо" yuta_86
warel (28.06.2019)
Непрочитано 23.05.2011, 12:42  
dadigor
Прописка
 
Аватар для dadigor
 
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
dadigor на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

Можно сделать табличку соответствия четырех младших бит измеренного значения десятичной цифре, с округлением по вашему вкусу. Выводить запятую и правее эту цифру на дисплей. Это будет не очень затратно - просто символьный массив из 16 байт с индексацией этими четырьмя младшими битами.
dadigor вне форума  
Сказали "Спасибо" dadigor
warel (28.06.2019)
Непрочитано 23.05.2011, 12:43  
yuta_86
Частый гость
 
Регистрация: 12.01.2011
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
yuta_86 на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

не совсем понятно. можете показать не примере?
yuta_86 вне форума  
Сказали "Спасибо" yuta_86
warel (28.06.2019)
Непрочитано 23.05.2011, 13:30  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

Это нужно для понтов? У 18В20 погрешность пара градусов... Если нужна точность - есть микросхемы с погрешностью 0,1 градус при комнатных температурах и пол-градуса во всем диапазоне
niXto вне форума  
Сказали "Спасибо" niXto
warel (28.06.2019)
Непрочитано 23.05.2011, 13:31  
yuta_86
Частый гость
 
Регистрация: 12.01.2011
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
yuta_86 на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

Сообщение от niXto Посмотреть сообщение
Это нужно для понтов? У 18В20 погрешность пара градусов...
погрешность 0.5 градуса.

а что это так трудно реализовать? если очень тогда молчу....
yuta_86 вне форума  
Сказали "Спасибо" yuta_86
warel (28.06.2019)
Непрочитано 23.05.2011, 13:37  
qwerky
Вид на жительство
 
Регистрация: 21.11.2009
Сообщений: 342
Сказал спасибо: 4
Сказали Спасибо 149 раз(а) в 66 сообщении(ях)
qwerky на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

Функция - конвертирует 12-битное число, считанное из 18В20 в температуру с точностью 0.1град. Нужно сконвертировать результат в ВСD, вывести на индикатор и поставить точку в нужном месте.
Код:
// convert 12-bit temperature data of ds18b20 to signed celsius fixed-point (with tenth)
S16 ds1w_12bit2tenth(U16 value) {
    U8 value_sign = (value ›› 8) & 0x80; // remember sign of value
    if (value_sign) value = 0 - value;   // convert to absolute value
    value = (value ›› 1) + (value ›› 3); // convert from 12-bit to fixed point
    if (value_sign) value = 0 - value;   // restore sign of result
    return value;
}
qwerky вне форума  
Сказали "Спасибо" qwerky
warel (28.06.2019)
Непрочитано 23.05.2011, 13:39  
dadigor
Прописка
 
Аватар для dadigor
 
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
dadigor на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

Младший бит 12-разрядного кода температуры, а я так понимаю, что Вы снимаете 12 бит с Далласа, равен 0,0625 градуса Цельсия. Соответственно
0000b = 0,0000 = 0,0 цифра 0
0001b = 0,0625 ~ 0,1 цифра 1
0010b = 0,1250 ~ 0,1 цифра 1
0011b = 0,1875 ~ 0,2 цифра 2
0100b = 0,2500 ~ 0,3 цифра 3
0101b = 0,3125 ~ 0,3 цифра 3
0110b = 0,3750 ~ 0,4 цифра 4
0110b = 0,4375 ~ 0,4 цифра 4
....
и так далее до 1111b, также округляя значение этих бит до первой цифры после запятой.
В соответствии с этим, надо объявить что-то типа:

unsigned int Desyat_Zifra[16] = { 0, 1, 1, 2, 3, 3, 4, 4, ...};

или так, в зависимости от Вашего способа вывода на ЖКИ

unsigned char Desyat_Zifra[16] = { '0', '1', '1', '2', '3', '3', '4', '4', ...};

Искомая цифра для 12-разрядного значения temper:

Desyat_Zifra[temper & 0xF]

А далее - мне пока не очень ясно, что именно делают

show_digital(temper, 0,4); и real_digital(temper,0);
dadigor вне форума  
Сказали "Спасибо" dadigor
warel (28.06.2019)
Непрочитано 23.05.2011, 13:46  
yuta_86
Частый гость
 
Регистрация: 12.01.2011
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
yuta_86 на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

show_digital (целое число, ставить ли точку, с какого разряда выводить)

real_digital(целое число, где ставить точку);

хотелось бы получить число вещественное с датчика, а там уже вывести на 7-сег индикатор так как мне хочется.
yuta_86 вне форума  
Сказали "Спасибо" yuta_86
warel (28.06.2019)
Непрочитано 23.05.2011, 14:19  
dadigor
Прописка
 
Аватар для dadigor
 
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
dadigor на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

temper=ds18b20_temperature(0);

Здесь temper - 12тибитное? Тогда преобразовав его в положительное 12битное, надо из его целой части, откинув дробную, сделать число, в 10 раз большее и прибавить к нему десятичную цифру - округленное значение дробной части

temper = (temper ›› 4) * 10 + Desyat_Zifra[temper & 0xF]

и выводить, как число в диапазоне от 0 до 1250, не забыв про знак и запятую
dadigor вне форума  
Сказали "Спасибо" dadigor
warel (28.06.2019)
Непрочитано 23.05.2011, 14:21  
yuta_86
Частый гость
 
Регистрация: 12.01.2011
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
yuta_86 на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

здесь temper int
yuta_86 вне форума  
Сказали "Спасибо" yuta_86
warel (28.06.2019)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключение DS18B20 к ATMega8 rocky7 Микроконтроллеры, АЦП, память и т.д 1 28.06.2010 20:30
ATmega8 + DS18B20: включаешь - не работает ilyasivkov Микроконтроллеры, АЦП, память и т.д 11 05.06.2009 12:27
ATmega8 и DS18B20, не определяется датчик butman Микроконтроллеры, АЦП, память и т.д 21 09.06.2007 22:05


Часовой пояс GMT +4, время: 23:18.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.