Страница 19 из 59
Re: Всё по DS18(B/S)20.
Добавлено: Ср янв 09, 2013 10:51:39
drakon
Да у него площадь маленькая, так что все будет нормально. Надо бы перед каждым обращением к датчику считывать его адрес, считать CRC и сравнивать с принятым, если не сходится то включать аварийную сигналку (авария датчика).
Re: Всё по DS18(B/S)20.
Добавлено: Ср янв 09, 2013 15:18:58
murzila
Ну, я бы не был столь категоричен.

Все-таки «Absolute maximum ratings» это не совсем штатные параметры. Кроме того, при паразитном питании производитель не рекомендует измерять температуру выше 100ºC. Вот ещё интересная таблица.

А в EEPROM кроме всего прочего хранятся калибровочные константы. Имели место случаи искажения калибровочных констант, в результате чего датчик мог давать ошибку вплоть до ±60°C.
Re: Всё по DS18(B/S)20.
Добавлено: Ср янв 09, 2013 22:03:32
arelaw1
ой , тогда ну его нафиг , можно лоханутся с таким датчиком .
уж извиняюсь что уйду немного от темы ,может кто подскажет хорошую несложную схему термостата с релейным выходом ,на компараторе?
Re: Всё по DS18(B/S)20.
Добавлено: Пн фев 04, 2013 18:07:54
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) {}
}
Re: Всё по DS18(B/S)20.
Добавлено: Пн фев 04, 2013 19:11:28
Аlex
Не знаю, по какой документации Вы это делали, но у Вас абсолютно всё неправильно.
Читайте
Re: Всё по DS18(B/S)20.
Добавлено: Пн фев 04, 2013 22:24:51
Reaper666
Аlex писал(а):Не знаю, по какой документации Вы это делали, но у Вас абсолютно всё неправильно.
Читайте
DS1820.pdf
Вы задержки имеете ввиду? Просто мне проект один попался в руки, так там и на таких задержках все работало и частота была 4 Мгц. Ну попробую по даташиту
Re: Всё по DS18(B/S)20.
Добавлено: Пн фев 04, 2013 23:15:18
Аlex
Мало ли что где было и работало...
Ну попробую по даташиту
Да ладно, не стОит... Нафиг они вообще эти даташиты нужны...
Re: Всё по DS18(B/S)20.
Добавлено: Вт фев 05, 2013 00:29:59
Reaper666
Аlex писал(а):Мало ли что где было и работало...
Ну попробую по даташиту
Да ладно, не стОит... Нафиг они вообще эти даташиты нужны...
Сарказм не оценен. Вы мне лучше скажите, ошибки только в задержках или где-то еще?
Re: Всё по DS18(B/S)20.
Добавлено: Вт фев 05, 2013 07:29:29
Аlex
Сарказм не оценен.
Ну если у Вас и так всё должно работать, что тогда можно сказать... А одолжения Ваши никому тут не нужны.
Был один тут, пару страниц назад - понаписал отсебятины и ещё бился головой об стену, утверждая, что всё должно работать. Нахрена тогда на форум идти с вопросами, не понятно....
По поводу Вашего кода. Приведите все тайминги к рекомендованным производителем, потом уже и будет разговор. А так-же, старайтесь выкладывать код со всеми используемыми ф-иями, типа
_delay(). Гадать на кофейной гуще, что это за чудо-задержки, никто не будет. Или, на крайняк, ставьте комментарии к подобным строкам, например - "Задержка 10 Us".
Re: Всё по DS18(B/S)20.
Добавлено: Вт фев 05, 2013 18:27:24
murzila
Добавлю только, что об этих датчиках уже столько написано, в том числе и на русском, что вопросов уже быть вообще не должно.
Паразитное питание DS18B20
Добавлено: Сб фев 09, 2013 22:00:34
zifus
Здраствуйте!! Я новичок и не могу понять где в коде нужно организовать высокий уровень порта для паразитного питания датчика температуры DS18B20. Ткните меня носом пажайлуста..
Re: Всё по DS18(B/S)20.
Добавлено: Сб фев 09, 2013 22:56:13
Аlex
Организовывать нужно не в коде, а подтяжкой линии данных к питанию.
Re: Всё по DS18(B/S)20.
Добавлено: Сб фев 09, 2013 23:03:12
zifus
Аlex писал(а):Организовывать нужно не в коде, а подтяжкой линии данных к питанию.
Подтяжка к питанию есть 4,7кОм но когда я подключаю по паразит.пит. на индикаторе 85,0 градусов
Re: Всё по DS18(B/S)20.
Добавлено: Вс фев 10, 2013 00:57:16
Аlex
4.7 много, повесьте, хотя бы, 1 Ком.
Re: Всё по DS18(B/S)20.
Добавлено: Вс фев 10, 2013 01:21:51
zifus
Аlex писал(а):4.7 много, повесьте, хотя бы, 1 Ком.
Спасибо за помощь!! Было под рукой 680 Ом поставил и все заработало

Re: Всё по DS18(B/S)20.
Добавлено: Вс фев 10, 2013 14:01:20
borys
При 680 Ом есть опасность спалить датчик. Да и 1 кОм тоже маловато. Сейчас то все заработало, но надолго
ли ?
Re: Всё по DS18(B/S)20.
Добавлено: Вс фев 10, 2013 16:24:42
murzila
Верное замечание. Если длина соединительных проводов относительно мала и с подтяжкой 4,7К датчик не работает, осмелюсь предположить, что тайминги не соответствуют рекомендациям изготовителя.
Re: Всё по DS18(B/S)20.
Добавлено: Вс фев 10, 2013 16:35:38
Аlex
Сейчас то все заработало, но надолго ли ?
2 года стоят часы-термометр дома, работают 2 датчика, пуллап - ~600 ОМ. Ничего до сих пор не случилось.
Да и откуда такие данные, что этого сопротивления мало ? Где это написано ? Я в даташите не нахожу подобных параметров.
Re: Всё по DS18(B/S)20.
Добавлено: Вс фев 10, 2013 17:44:27
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.
А термометры дома есть не только у Вас...

Re: Всё по DS18(B/S)20.
Добавлено: Вс фев 10, 2013 17:53:00
Reaper666
Почти добил, но я не понимаю, почему он выводит мне такие значения 11111110 в нулевом байте и 11111111 в первом байте. К тому же лог симулятора показывает какую-то не поддерживаемую команду, а лог отладчика все верно показывает. Кто может подсказать, в чем проблема? Проект привел, если что.