Всё по DS18(B/S)20.

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Грызет канифоль
Аватара пользователя
Сообщения: 271
Зарегистрирован: Вт авг 09, 2011 15:01:44
Откуда: Харьков

Сообщение drakon »

Да у него площадь маленькая, так что все будет нормально. Надо бы перед каждым обращением к датчику считывать его адрес, считать CRC и сравнивать с принятым, если не сходится то включать аварийную сигналку (авария датчика).
Реклама
Мучитель микросхем
Сообщения: 436
Зарегистрирован: Сб апр 10, 2010 16:46:26

Сообщение murzila »

Ну, я бы не был столь категоричен.
Изображение
Все-таки «Absolute maximum ratings» это не совсем штатные параметры. Кроме того, при паразитном питании производитель не рекомендует измерять температуру выше 100ºC. Вот ещё интересная таблица.
Изображение
А в EEPROM кроме всего прочего хранятся калибровочные константы. Имели место случаи искажения калибровочных констант, в результате чего датчик мог давать ошибку вплоть до ±60°C.
Реклама
Родился
Сообщения: 15
Зарегистрирован: Сб авг 02, 2008 19:07:36
Откуда: Вологодская обл

Сообщение arelaw1 »

ой , тогда ну его нафиг , можно лоханутся с таким датчиком .
уж извиняюсь что уйду немного от темы ,может кто подскажет хорошую несложную схему термостата с релейным выходом ,на компараторе?
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн ноя 05, 2012 03:40:39

Сообщение 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(15);
state=1;
_delay(65);
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) {}

}
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Не знаю, по какой документации Вы это делали, но у Вас абсолютно всё неправильно.
Читайте
DS1820.pdf
(150.86 КБ) 282 скачивания
Контактная информация:
Реклама
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн ноя 05, 2012 03:40:39

Сообщение Reaper666 »

Аlex писал(а):Не знаю, по какой документации Вы это делали, но у Вас абсолютно всё неправильно.
Читайте
DS1820.pdf

Вы задержки имеете ввиду? Просто мне проект один попался в руки, так там и на таких задержках все работало и частота была 4 Мгц. Ну попробую по даташиту
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Мало ли что где было и работало...
Ну попробую по даташиту
Да ладно, не стОит... Нафиг они вообще эти даташиты нужны...
Контактная информация:
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн ноя 05, 2012 03:40:39

Сообщение Reaper666 »

Аlex писал(а):Мало ли что где было и работало...
Ну попробую по даташиту
Да ладно, не стОит... Нафиг они вообще эти даташиты нужны...

Сарказм не оценен. Вы мне лучше скажите, ошибки только в задержках или где-то еще?
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Сарказм не оценен.
Ну если у Вас и так всё должно работать, что тогда можно сказать... А одолжения Ваши никому тут не нужны.
Был один тут, пару страниц назад - понаписал отсебятины и ещё бился головой об стену, утверждая, что всё должно работать. Нахрена тогда на форум идти с вопросами, не понятно....

По поводу Вашего кода. Приведите все тайминги к рекомендованным производителем, потом уже и будет разговор. А так-же, старайтесь выкладывать код со всеми используемыми ф-иями, типа _delay(). Гадать на кофейной гуще, что это за чудо-задержки, никто не будет. Или, на крайняк, ставьте комментарии к подобным строкам, например - "Задержка 10 Us".
Контактная информация:
Мучитель микросхем
Сообщения: 436
Зарегистрирован: Сб апр 10, 2010 16:46:26

Сообщение murzila »

Добавлю только, что об этих датчиках уже столько написано, в том числе и на русском, что вопросов уже быть вообще не должно.
Родился
Сообщения: 17
Зарегистрирован: Чт фев 07, 2013 16:05:09
Откуда: Украина

Сообщение zifus »

Здраствуйте!! Я новичок и не могу понять где в коде нужно организовать высокий уровень порта для паразитного питания датчика температуры DS18B20. Ткните меня носом пажайлуста..
Вложения
Исходник.rar
(98.66 КБ) 191 скачивание
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Организовывать нужно не в коде, а подтяжкой линии данных к питанию.
Контактная информация:
Родился
Сообщения: 17
Зарегистрирован: Чт фев 07, 2013 16:05:09
Откуда: Украина

Сообщение zifus »

Аlex писал(а):Организовывать нужно не в коде, а подтяжкой линии данных к питанию.
Подтяжка к питанию есть 4,7кОм но когда я подключаю по паразит.пит. на индикаторе 85,0 градусов
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

4.7 много, повесьте, хотя бы, 1 Ком.
Контактная информация:
Родился
Сообщения: 17
Зарегистрирован: Чт фев 07, 2013 16:05:09
Откуда: Украина

Сообщение zifus »

Аlex писал(а):4.7 много, повесьте, хотя бы, 1 Ком.
Спасибо за помощь!! Было под рукой 680 Ом поставил и все заработало :idea:
Контактная информация:
Держит паяльник хвостом
Сообщения: 927
Зарегистрирован: Вт сен 07, 2010 19:27:48
Откуда: Ташкент

Сообщение borys »

При 680 Ом есть опасность спалить датчик. Да и 1 кОм тоже маловато. Сейчас то все заработало, но надолго
ли ?
Мучитель микросхем
Сообщения: 436
Зарегистрирован: Сб апр 10, 2010 16:46:26

Сообщение murzila »

Верное замечание. Если длина соединительных проводов относительно мала и с подтяжкой 4,7К датчик не работает, осмелюсь предположить, что тайминги не соответствуют рекомендациям изготовителя.
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Сейчас то все заработало, но надолго ли ?
2 года стоят часы-термометр дома, работают 2 датчика, пуллап - ~600 ОМ. Ничего до сих пор не случилось.
Да и откуда такие данные, что этого сопротивления мало ? Где это написано ? Я в даташите не нахожу подобных параметров.
Контактная информация:
Мучитель микросхем
Сообщения: 436
Зарегистрирован: Сб апр 10, 2010 16:46:26

Сообщение murzila »

Кроме даташита на сам датчик, есть еще общие рекомендации для сетей 1-Wire. Раньше рекомендовали использовать pull-up ~5K, сейчас нормой считается ~2,2...1K. Не стоит забывать, что внутри датчика отнюдь не силовой MOSFET, который мог бы притянуть к земле сколь угодно малую подтяжку. Цитата:
Tests have shown that pull-up resistors down to 1K allow operation over the maximum cable length. If the resistor is less than 1K, logic levels are degraded, and with higher values capacitive loading prevents the proper waveforms.
А термометры дома есть не только у Вас... ;)
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн ноя 05, 2012 03:40:39

Сообщение Reaper666 »

Почти добил, но я не понимаю, почему он выводит мне такие значения 11111110 в нулевом байте и 11111111 в первом байте. К тому же лог симулятора показывает какую-то не поддерживаемую команду, а лог отладчика все верно показывает. Кто может подсказать, в чем проблема? Проект привел, если что.
Вложения
Desktop.rar
(23.07 КБ) 187 скачиваний
команад.JPG
(26.87 КБ) 446 скачиваний
лог.JPG
(22.08 КБ) 381 скачивание
Ответить

Вернуться в «Периферия»