Реклама на сайте 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, 14:28  
yuta_86
Частый гость
 
Регистрация: 12.01.2011
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
yuta_86 на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

я пользуюсь функцией

float ds18b20_temperature(unsigned char *addr) из библиотеки ds18b20.h
Реклама:
yuta_86 вне форума  
Непрочитано 23.05.2011, 14:33  
yuta_86
Частый гость
 
Регистрация: 12.01.2011
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
yuta_86 на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

тип int 16 бит....
yuta_86 вне форума  
Непрочитано 23.05.2011, 15:03  
dadigor
Прописка
 
Аватар для dadigor
 
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
dadigor на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

погоди-ка, у тебя функция возвращает float, а ты ее приводишь к int ?
temper=ds18b20_temperature(0);
dadigor вне форума  
Непрочитано 23.05.2011, 15:13  
yuta_86
Частый гость
 
Регистрация: 12.01.2011
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
yuta_86 на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

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

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

это стандартный модуль ds18b20.h в CodeVisionAVR

вот его содержимое

#ifndef _DS18B20_INCLUDED_
#define _DS18B20_INCLUDED_

#include ‹1wire.h›

#define DS18B20_9BIT_RES 0 // 9 bit thermometer resolution
#define DS18B20_10BIT_RES 1 // 10 bit thermometer resolution
#define DS18B20_11BIT_RES 2 // 11 bit thermometer resolution
#define DS18B20_12BIT_RES 3 // 12 bit thermometer resolution

#define DS18B20_FAMILY_CODE 0x28
#define DS18B20_SEARCH_ROM_CMD 0xf0
#define DS18B20_ALARM_SEARCH_CMD 0xec

#pragma used+
extern struct __ds18b20_scratch_pad_struct
{
unsigned char temp_lsb,temp_msb;
signed char temp_high,temp_low;
unsigned char conf_register,
res1,
res2,
res3,
crc;
} __ds18b20_scratch_pad;

unsigned char ds18b20_select(unsigned char *addr);
unsigned char ds18b20_read_spd(unsigned char *addr);
float ds18b20_temperature(unsigned char *addr);
unsigned char ds18b20_init(unsigned char *addr,signed char temp_low,signed char temp_high,
unsigned char resolution);
#pragma used-

#pragma library ds18b20.lib

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

Вот рабочей проект на тини2313. работает уже год с двумя датчиками (один на улице, второй в комнате). Тут тебе и знак минус, и десятой разряд, и переключение датчиков, и гашение симисегментника.
Проект в CV AVR + Proteus
Для наладки готовой схемы нужно заменить delay_ms(100);
на delay_ms(7);
Задержка 100 мс для протеуса.
Вложения:
Тип файла: rar ATtini2313+DS18B20+Led-CC.rar (85.4 Кб, 500 просмотров)
sergx1300 вне форума  
Непрочитано 23.05.2011, 15:25  
yuta_86
Частый гость
 
Регистрация: 12.01.2011
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
yuta_86 на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

а вот реализация /*
CodeVisionAVR C Compiler
(C) 1998-2007 Pavel Haiduc, HP InfoTech S.R.L.

Dallas Semiconductor DS18B20 1 Wire bus temperature sensor functions
*/

#include ‹delay.h›
#include ‹ds18b20.h›

struct __ds18b20_scratch_pad_struct __ds18b20_scratch_pad;

// temp. conversion time [ms] depending on the resolution
static flash int conv_delay[4]={100,200,400,800};
// valid temp. bit mask depending on the resolution
static flash unsigned bit_mask[4]={0xFFF8,0xFFFC,0xFFFE,0xFFFF};

unsigned char ds18b20_select(unsigned char *addr)
{
unsigned char i;
if (w1_init()==0) return 0;
if (addr)
{
w1_write(0x55);
i=0;
do
w1_write(*(addr++));
while (++i‹;
}
else w1_write(0xcc);
return 1;
}

unsigned char ds18b20_read_spd(unsigned char *addr)
{
unsigned char i;
unsigned char *p;
if (ds18b20_select(addr)==0) return 0;
w1_write(0xbe);
i=0;
p=(char *) &__ds18b20_scratch_pad;
do
*(p++)=w1_read();
while (++i‹9);
return !w1_dow_crc8(&__ds18b20_scratch_pad,9);
}

float ds18b20_temperature(unsigned char *addr)
{
unsigned char resolution;
if (ds18b20_read_spd(addr)==0) return -9999;
resolution=(__ds18b20_scratch_pad.conf_register››5 ) & 3;
if (ds18b20_select(addr)==0) return -9999;
w1_write(0x44);
delay_ms(conv_delay[resolution]);
if (ds18b20_read_spd(addr)==0) return -9999;
w1_init();
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & ((int) bit_mask[resolution]))*0.0625;
}

unsigned char ds18b20_init(unsigned char *addr,signed char temp_low,signed char temp_high,
unsigned char resolution)
{
if (ds18b20_select(addr)==0) return 0;
resolution=(resolution‹‹5) | 0x1f;
w1_write(0x4e);
w1_write(temp_high);
w1_write(temp_low);
w1_write(resolution);
if (ds18b20_read_spd(addr)==0) return 0;
if ((__ds18b20_scratch_pad.temp_low!=temp_low) ||
(__ds18b20_scratch_pad.temp_high!=temp_high) ||
(__ds18b20_scratch_pad.conf_register!=resolution)) return 0;
if (ds18b20_select(addr)==0) return 0;
w1_write(0x4;
delay_ms(15);
return w1_init();
}
yuta_86 вне форума  
Непрочитано 23.05.2011, 15:35  
dadigor
Прописка
 
Аватар для dadigor
 
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
dadigor на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

попробуй для начала
temper = (int)(ds18b20_temperature(0) * 10.0);
скажешь, что изменилось
dadigor вне форума  
Непрочитано 23.05.2011, 15:43  
yuta_86
Частый гость
 
Регистрация: 12.01.2011
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
yuta_86 на пути к лучшему
По умолчанию Re: ds18b20 и atmega8 вывод температуры с десятичным знаком

if (!w1_init()){

real_digital(666,0);
while(1){}

}


while(1) //бесконечный цикл, если датчик подключен
{
temper=(int)ds18b20_temperature(0);
if(temper != -9999) // нет ошибок
{
//Анализ на отрицательную температуру
if( temper›1000 ) { temper=4096-temper; show_digital(temper, 0,4);}
real_digital(temper,0);
}
delay_ms(500);
}
}

выводит 24
yuta_86 вне форума  
 

Закладки
Опции темы

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

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


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