Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

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

 
Опции темы
Непрочитано 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.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
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, время: 05:46.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot