реклама на сайте
подробности

 
 
> 1-Wire, Ну что я не так делаю ?
Letis
сообщение Sep 16 2010, 21:37
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 124
Регистрация: 10-07-07
Пользователь №: 29 027



Подключил библиотеку 1wire. Не использовал из CodeVision, так как нужно менять пины порта.
Но функция инициализации не работает, помогите. Что я делаю не так.
Все файлы CodeVision и Протеуса выкладываю ниже.

#define OW_DDR DDRD
#define OW_PIN PIND
#define OW_BUS 0
char count;


//------------------------------------------------------------------------------
// Инициализация
//------------------------------------------------------------------------------
char OW_Initialization(void)
{
char nalichie_ustroystva = 0;
OW_DDR |= (1<<OW_BUS);
delay_us(100);
delay_us(100);
delay_us(100);
delay_us(100);
delay_us(100);
OW_DDR &= ~(1<<OW_BUS);
delay_us(90);
if((OW_PIN&0x01)== 0)
{
nalichie_ustroystva = 1;
}
delay_us(100);
delay_us(100);
return nalichie_ustroystva;
}
//------------------------------------------------------------------------------



Сообщение отредактировал Letis - Sep 17 2010, 00:44
Прикрепленные файлы
Прикрепленный файл  Temp.zip ( 71.31 килобайт ) Кол-во скачиваний: 31
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Леонид Иванович
сообщение Sep 17 2010, 17:50
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 318
Регистрация: 21-07-06
Из: Минск
Пользователь №: 18 986



У меня код такой:

CODE
//----------------------------------------------------------------------------

//Модуль обслуживания термометра DS18B20

//----------------- Используемые модулем аппаратные ресурсы: -----------------

//1-проводной интерфейс использует порт OWP.
//Порт должен быть настроен на ввод,
//внутренний подтягивающий резистор должен быть отключен,
//используется внешний подтягивающий резистор 4.7 кОм.
//Должны быть определены следующие макросы:
//#define OWP (1 << Pxn)
//#define Port_OWP_OUT (DDRx |= OWP)
//#define Port_OWP_IN (DDRx &= ~OWP)
//#define Pin_OWP (PINx & OWP)
//Термометр должен быть запрограммирован в 12-разрядный режим
//(биты R0, R1 в регистре конфигурации равны единице).
//Считываются только 2 байта темпертуры без проверки CRC.

//----------------------------- Константы: -----------------------------------

#define TCONV 1000 //время преобразования температуры, мс

//---------------------------- Переменные: -----------------------------------

bool Presence; //флаг присутствия термометра
int Temperature; //текущая температура
int TTimer; //таймер термометра

//----------------------------- Функции: -------------------------------------

bool TReset(void); //формирование импульса сброса
char TByte(char dat); //запись/чтение байта
bool TBit(bool cool.gif; //запись/чтение бита
bool Start(void); //запуск преобразования
int Read_T(void); //чтение температуры

//--------------------- Генерация импульса сброса: ---------------------------

bool TReset(void)
{
char si;
Port_OWP_0;
Port_OWP_OUT; //OWP <- 0
Delay_us(500); //delay 500 uS
si = __save_interrupt();
__disable_interrupt(); //запрещение прерываний
Port_OWP_IN; //OWP <- 1
Delay_us(14); //delay 14 uS
if(Pin_OWP) //если OWP = 0, то ошибка
{
Delay_us(52); //delay 52 uS
if(!Pin_OWP) //если OWP = 1, то ошибка
{
__restore_interrupt(si); //восстанавление прерываний
Delay_us(250); //delay 250 uS
if(Pin_OWP) //если OWP = 0, то ошибка
{
return(1); //если ошибок нет, термометр присутствует
}
}
}
__restore_interrupt(si); //восстанавление прерываний в случае ошибки
return(0);
}

//-------------- Запись/чтение байта по однопроводной шине: ------------------

char TByte(char dat)
{
char res;
for(char i = 0; i < 8; i++)
{
res = res >> 1;
if(TBit(dat & 1)) res |= 0x80;
else res &= ~0x80;
dat = dat >> 1;
}
return(res);
}

//--------------- Запись/чтение бита по однопроводной шине: ------------------

bool TBit(bool cool.gif
{
char si;
si = __save_interrupt();
__disable_interrupt(); //запрещение прерываний
Port_OWP_0;
Port_OWP_OUT; //OWP <- 0
Delay_us(2); //delay 2 uS
if(cool.gif Port_OWP_IN; //bit = 1, OWP <- 1
Delay_us(13); //delay 13 uS
bool owp = Pin_OWP; //чтение порта
Delay_us(45); //delay 45 uS
Port_OWP_1; //force pullup
Port_OWP_OUT;
__restore_interrupt(si); //восстанавление прерываний
Delay_us(2); //delay 2 uS
return(owp);
}

//----------------------- Запуск преобразования: -----------------------------

bool Start(void)
{
if(TReset())
{
TByte(0xCC); //skip ROM
TByte(0x44); //start conversion
return(1);
}
return(0);
}

//-------------------------- Чтение термометра: ------------------------------

int Read_T(void)
{
if(TReset())
{
TByte(0xCC); //skip ROM
TByte(0xBE); //read scratchpad
char l = TByte(0xFF); //чтение младшего байта
char h = TByte(0xFF); //чтение старшего байта
return(WORD(h, l));
}
return(0); //ошибка
}

//--------------------- Инициализация термометра: ----------------------------

void DS18B20_Init(void)
{
Presence = Start();
TTimer = ms2sys(TCONV);
}

//----------------------- Измерение температуры: -----------------------------

void DS18B20_Exe(bool t)
{
if(t)
{
if(TTimer) TTimer--;
if(!TTimer)
{
if(Presence) Temperature = Read_T();
Presence = Start();
TTimer = ms2sys(TCONV);
}
}
}

//------------------------- Чтение температуры: ------------------------------

int DS18B20_GetT(void)
{
return(Temperature);
}

//----------------------------------------------------------------------------


--------------------
Go to the top of the page
 
+Quote Post
ARV
сообщение Sep 17 2010, 18:12
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(Леонид Иванович @ Sep 17 2010, 21:50) *
У меня код такой
а у меня такой http://electronix.ru/forum/index.php?showt...st&p=811157 smile.gif


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Letis   1-Wire   Sep 16 2010, 21:37
- - kolobok0   Цитата(Letis @ Sep 17 2010, 01:37) ...Что...   Sep 17 2010, 08:46
- - GDI   Цитатапредположим нолик. если это вход - отключени...   Sep 17 2010, 11:10
|- - Палыч   Цитата(GDI @ Sep 17 2010, 15:10) Именно т...   Sep 17 2010, 12:41
|- - kolobok0   Цитата(GDI @ Sep 17 2010, 15:10) Именно т...   Sep 17 2010, 17:03
- - GDI   Ну, если топик стартер не знает что для 1-wire нуж...   Sep 17 2010, 13:12
|- - kolobok0   Цитата(Леонид Иванович @ Sep 17 2010, 21...   Sep 17 2010, 18:13
|- - ARV   Цитата(kolobok0 @ Sep 17 2010, 22:13) вы ...   Sep 17 2010, 19:09
|- - kolobok0   Цитата(ARV @ Sep 17 2010, 23:09) ...в каж...   Sep 17 2010, 20:30
|- - SasaVitebsk   Цитата(ARV @ Sep 17 2010, 22:09) ваши рек...   Sep 18 2010, 07:27
|- - kolobok0   Цитата(SasaVitebsk @ Sep 18 2010, 11:27) ...   Sep 19 2010, 17:28
- - ARV   топикстартеру было паразитное питание до фени - фа...   Sep 19 2010, 17:52
|- - kolobok0   Цитата(ARV @ Sep 19 2010, 21:52) ...предл...   Sep 20 2010, 06:19
|- - xemul   Цитата(ARV @ Sep 19 2010, 21:52) ds1821 -...   Sep 20 2010, 07:42
- - ARV   1. мои "боевые" условия ограничивались п...   Sep 20 2010, 06:32
- - MBR   Цитата(Letis @ Sep 17 2010, 01:37) delay_...   Sep 27 2010, 08:24
|- - GDI   Цитата(MBR @ Sep 27 2010, 12:24) По даташ...   Sep 27 2010, 09:57
|- - xemul   Цитата(GDI @ Sep 27 2010, 13:57) То что в...   Sep 27 2010, 10:44
|- - MBR   Цитата(GDI @ Sep 27 2010, 13:57) То что в...   Sep 27 2010, 11:08
- - GDI   Да, точно... давно не брал я в руки шашку...   Sep 27 2010, 12:57


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 09:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016