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

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

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

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

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

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

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

 
Опции темы

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

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

sergx1300,
если в конце программы записать
devices=w1_search(0xf0,rom_code); //0xF0 можно заменить на DS18B20_SEARCH_ROM_CMD

for (i=0;i‹devices
if (!ds18b20_init(&rom_code[i++][0],20,30,DS18B20_11BIT_RES))
{
while (1); /* stop here if init error */
real_digital(666,0);
};

while (1)
{
temp=(ds18b20_temperature(&rom_code[0][0]))*10;
if (temp›=0) {real_digital(temp,0);}
delay_ms(500);
} то выводит 1082 и всё
Реклама:
yuta_86 вне форума  
Непрочитано 24.05.2011, 13:12  
sergx1300
Прописка
 
Аватар для sergx1300
 
Регистрация: 18.03.2010
Адрес: Украина, Тернополь
Сообщений: 225
Сказал спасибо: 14
Сказали Спасибо 44 раз(а) в 34 сообщении(ях)
sergx1300 на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

Закинь на форум архив проекта + Протеус. Посмотрю.
sergx1300 вне форума  
Непрочитано 24.05.2011, 13:23  
dadigor
Прописка
 
Аватар для dadigor
 
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
dadigor на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

Попробуй в коде из сообщения 27 добавить промежуточный вывод, сначала должно вывестись целочисленное измеренное значение, через 1 секунду оно же, умноженное на 10, потом пауза 2 секунды:

while (1)
{
temp_f = ds18b20_temperature(0);
temper = (int)temp_f;
real_digital(temper,0);
delay_ms(1000);
temp_f *= 10.0;
temper = (int)temp_f;
real_digital(temper,0);
delay_ms(2000);
}
dadigor вне форума  
Непрочитано 24.05.2011, 13:26  
yuta_86
Частый гость
 
Регистрация: 12.01.2011
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
yuta_86 на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

буду очень признателен sergx1300, если подскажете, что не так. к сожалению в протеусе я не делал проект.
Миниатюры:
Нажмите на изображение для увеличения
Название: 123.JPG
Просмотров: 56
Размер:	33.2 Кб
ID:	21971  
Вложения:
Тип файла: rar Копия тем.rar (54.9 Кб, 45 просмотров)
yuta_86 вне форума  
Непрочитано 24.05.2011, 13:31  
yuta_86
Частый гость
 
Регистрация: 12.01.2011
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
yuta_86 на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

я похоже буду первым кто сошёл с ума от датчика температуры (((

выводит 1082 затем пауза затем 27 затем пауза и 275 и причём иногда появляются на экране такие числа типа 1111 или 8888 или 9999
yuta_86 вне форума  
Непрочитано 24.05.2011, 13:35  
dadigor
Прописка
 
Аватар для dadigor
 
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
dadigor на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

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

майл агент [email protected]
yuta_86 вне форума  
Непрочитано 25.05.2011, 19:12  
sergx1300
Прописка
 
Аватар для sergx1300
 
Регистрация: 18.03.2010
Адрес: Украина, Тернополь
Сообщений: 225
Сказал спасибо: 14
Сказали Спасибо 44 раз(а) в 34 сообщении(ях)
sergx1300 на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

Когда идет считывание температуры прерываний не должно бить. До считывания запрещаем, после - разрешаем.
Код вроде работает, только с точкой посмотри, в протеусе не выводится.
Выложил архив проекта.
Миниатюры:
Нажмите на изображение для увеличения
Название: 001.JPG
Просмотров: 100
Размер:	220.6 Кб
ID:	21999  
Вложения:
Тип файла: rar DS18B20.rar (71.2 Кб, 91 просмотров)
sergx1300 вне форума  
Непрочитано 02.01.2013, 18:05  
Freerider
Частый гость
 
Аватар для Freerider
 
Регистрация: 01.12.2007
Сообщений: 29
Сказал спасибо: 0
Сказали Спасибо 34 раз(а) в 10 сообщении(ях)
Freerider на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

я подправил просто библиотеку cvavr ds18b20.lib заменил float на unsigned int
unsigned int ds18b20_temperature(unsigned char *addr)
{
unsigned char resolution;
if (ds18b20_read_spd(addr)==0) return -9991;
resolution=(__ds18b20_scratch_pad.conf_register››5 ) & 3;
if (ds18b20_select(addr)==0) return -9992;
w1_write(0x44);
delay_ms(conv_delay[resolution]);
if (ds18b20_read_spd(addr)==0) return -9993;
w1_init();
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & ((int) bit_mask[resolution]));
}
то есть return возвращает не тип переменой float а int 16битное число

еще надо открыть ds18b20.h и заменить float на
unsigned int ds18b20_temperature(unsigned char *addr);

в основной проге у меня следующее

temp[0]=(ds18b20_temperature(&ds18b20_rom_codes[0][0]))››4; //часть десятичная
sot[0]=((__ds18b20_scratch_pad.temp_lsb&0b00001111)*625)/1000;//сотая часть 1 датчика
temp[1]=(ds18b20_temperature(&ds18b20_rom_codes[1][0]))››4;
sot[1]=((__ds18b20_scratch_pad.temp_lsb&0b00001111)*625)/1000;

Tpr1=temp[0]*10+sot[0]; //получаем целое число с которым можно проводить операции например 125 это 12.5 градусов
Tpr2=temp[1]*10+sot[1];

Tpr_sr=(Tpr1+Tpr2)/2; среднее значение
Freerider вне форума  
 
Опции темы

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

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, время: 13:12.


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