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

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

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

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

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

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

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 22.04.2007, 13:55  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

на елин ру за основами передачи протокола.
А если коротко - мк передает информацию на устройство, сажая на землю эту шину какое- то время (при передаче 1 -1-7 микросекунд, при передаче 0 -30 -60 микросекунд). Принимает - подает на землю 1 (пару микросекунд)и после передачи 1 смотрит, восстановился ли потенциал 1 на шине -если восстановился, то устройство передает 1, нет - (устройство зажало потенциал на земле еще на пару десятых микросекунд) - передает устройство 0.
Ну и начало обмена - импульс сброса шины (reset pulse)480-960 микросекунд, импульс (present pulse) подтвержление ответа устройства. Для примера - обмен с градусником ds1820
Код:
unsigned char t1,t2,t3;
unsigned char st;
//------------------------------------
void litl_del(unsigned char i)
{
do{
}while(--i);
} 
//------------------------------------
void big_del(unsigned int i)
{
do{
}while(--i);
} 
//-------------------------------------
void reset_()
{

out_ =1;
big_del(200);    // reset pulse
 out_=0;
 litl_del(20);
 out_=1;
 out_=0;
big_del(200);    // present pulse
}
//---------------------------------
//---------------------------------
void out_byte(unsigned char temp)
{
unsigned char st_b=8;
static bit inf;
	do
	{
    inf=temp&0x01;
	temp= temp  ›› 1;
	if (inf == 0)
		{
		out_=1;
        litl_del(20);
	out_=0;
		}
	else
		{
		out_=1;
                litl_del(1);
		out_=0;
		}
        litl_del(20);			
	}while(--st_b);
        litl_del(20);
}
//-----------------------------------
unsigned char  read_byte()
{
unsigned char temp=0;
unsigned char s_b=8;
do{
out_=1;
litl_del(1);// 5 микросекунд 
out_=0;
litl_del(1);// 5 микросекунд 
temp= temp ›› 1;
		if (in_inf == 1)
		{
		temp=temp|0x80;
		}	
		litl_del(40);
	}while(--s_b);
return temp;	  
} 
//----------------------------------
while (1)
      {

reset_(); 
out_byte(0xcc);// пропуск выдачи серийного номера 
out_byte(0x44);// команда на измерение, конвертирование выполняется за 100 милисекунд
 delay_ms(100);// это время и даем
 reset_(); 
out_byte(0xcc);// пропуск выдачи серийного номера 
out_byte(0xbe);// запрашиваем чтение  
 delay_ms(1);
t1=read_byte(); // читаем 2 байта температуры, больше при точности полградуса не нужно 
 delay_ms(1);
t2=read_byte();
// делаем один байт 
 delay_ms(1);
t1=t1››3;
t3=t1+(t2*32); //  в т3 - температура, умноженная на 2 (младший разряд - полградуса)

 delay_ms(5); 

      };
Реклама:
urry вне форума  
Непрочитано 22.04.2007, 14:50  
vmax1987
Частый гость
 
Регистрация: 25.10.2005
Сообщений: 25
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
vmax1987 на пути к лучшему
По умолчанию

urry а у вас нет случайно примера RC5 на С.
vmax1987 вне форума  
Непрочитано 22.04.2007, 15:33  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Открывайте новую тему, как-то некорректно по отношению к другим
По самому протоколу, а также прием и преобразование RC5-›RS232
прекрасная статья Ридико
http://www.telesys.ru/electronics/projects.php?do=p036
По передаче - все элементарно...
Код:
void out_byte(unsigned char temp)
{
unsigned char st_b=8;
static bit inf;
	do
	{
    inf=temp&0x01;
	temp= temp  ›› 1;
	if (inf == 0)
		{
		out_=0;
               del(570);
	       out_=1;
               del(570);
		}
	else
		{
		out_=1;
               del(570);
	       out_=0;
               del(570);
		}		
	}while(--st_b);
}
urry вне форума  
Непрочитано 22.04.2007, 16:08  
vmax1987
Частый гость
 
Регистрация: 25.10.2005
Сообщений: 25
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
vmax1987 на пути к лучшему
По умолчанию

Спасобо. Новую тему откривать помоему уже нет смысла так как в вашей ссылке все харашо описано, еще отдельное спасибо за ссылку.
vmax1987 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что я неверно делаю? Rynaldo Proteus, KiCAD и другие ECAD 1 13.05.2008 14:50
вольтметр В7-26 alex6 Измерительное оборудование 3 18.10.2007 01:51
[Решено] 24 канальный вольтметр Проходивший_мимо Измерительное оборудование 11 03.01.2006 20:11


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


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