Страница 1 из 1

Проблема с датчиком DS18B20.

Добавлено: Пн фев 04, 2013 14:32:44
Reaper666
Собственно, возился с этим датчиком и напоролся на ошибку, только так и не понял, где я её допустил. Я считываю два байта с датчика и каждый байт отправляю в отдельную переменную. Поскольку работаю первый раз, то попробовал вывести первый байт на портб и туда выводятся одни единицы. Какую температуру на датчике не устанавливай, все равно и в первом и во втором байте выдаются единицы. Что может быть не так? Код привожу. Контроллер PIC16F84A

Код: Выделить всё


#include <pic.h>
#include <htc.h>
__CONFIG(0x3ff2);
#define state TRISA3
#define pin RA3

void init(void)
{
state=1;
pin=0;
state=0;
_delay(50);
state=1;
_delay(65);
}

void TX(unsigned char com)// процедура записи в датчик
{
unsigned char i=0,temp=0;
temp=com;
for (i=0;i<8;i++)
{
	if (temp&0x01) 
	{
	pin=0;
	state=0;
	_delay(15);
	state=1;
	_delay(60);
	}
	else
	{
	pin=0;
	state=0;
	_delay(60);
	state=1;
	}
temp>>=1;	
}
}

int RX(void) // процедура чтения из датчика
{
unsigned char i=0,dat=0,b;
for (i=0;i<8;i++)
{
pin=0;
state=0;
_delay(5);
state=1;
_delay(50);
b=pin;
_delay(50);
dat|=(b<<i);

}
return dat;
}

void main()
{
unsigned char l,i;
int t1,t2,temperature;
char temp[10];
TRISA=0;
TRISB=0;
PORTA=0;
PORTB=0;
init();
TX(0xCC); //skip ROM
TX(0X44); //Конвертировать 
_delay(750);
init();
TX(0xCC);
TX(0xBE);
temp[0]=RX();
temp[1]=RX();
PORTB=temp[0];

while(1) {}

}

Re: Проблема с датчиком DS18B20.

Добавлено: Пн фев 04, 2013 14:52:19
korsaj
Перед чтением порта, его нужно перевести в третье состояние (на вход).
Да и передовать нужно аккуратно, ДС в ответ подтягивает линию на массу.

Re: Проблема с датчиком DS18B20.

Добавлено: Пн фев 04, 2013 15:14:08
BOB51
На все вопросы есть тема :
http://radiokot.ru/forum/viewtopic.php?f=20&t=64022
:)