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

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

А в EEPROM кроме всего прочего хранятся калибровочные константы. Имели место случаи искажения калибровочных констант, в результате чего датчик мог давать ошибку вплоть до ±60°C.

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

А в EEPROM кроме всего прочего хранятся калибровочные константы. Имели место случаи искажения калибровочных констант, в результате чего датчик мог давать ошибку вплоть до ±60°C.
ой , тогда ну его нафиг , можно лоханутся с таким датчиком .
уж извиняюсь что уйду немного от темы ,может кто подскажет хорошую несложную схему термостата с релейным выходом ,на компараторе?
уж извиняюсь что уйду немного от темы ,может кто подскажет хорошую несложную схему термостата с релейным выходом ,на компараторе?
- Сообщения: 50
- Зарегистрирован: Пн ноя 05, 2012 03:40:39
Собственно, возился с этим датчиком и напоролся на ошибку, только так и не понял, где я её допустил. Я считываю два байта с датчика и каждый байт отправляю в отдельную переменную. Поскольку работаю первый раз, то попробовал вывести первый байт на портб и туда выводятся одни единицы. Какую температуру на датчике не устанавливай, все равно и в первом и во втором байте выдаются единицы. Что может быть не так? Код привожу. Контроллер 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) {}
}Не знаю, по какой документации Вы это делали, но у Вас абсолютно всё неправильно.
Читайте
Читайте
- Реклама
- Сообщения: 50
- Зарегистрирован: Пн ноя 05, 2012 03:40:39
Аlex писал(а):Не знаю, по какой документации Вы это делали, но у Вас абсолютно всё неправильно.
Читайте
Вы задержки имеете ввиду? Просто мне проект один попался в руки, так там и на таких задержках все работало и частота была 4 Мгц. Ну попробую по даташиту
Мало ли что где было и работало...
Да ладно, не стОит... Нафиг они вообще эти даташиты нужны...Ну попробую по даташиту
- Сообщения: 50
- Зарегистрирован: Пн ноя 05, 2012 03:40:39
Аlex писал(а):Мало ли что где было и работало...
Да ладно, не стОит... Нафиг они вообще эти даташиты нужны...Ну попробую по даташиту
Сарказм не оценен. Вы мне лучше скажите, ошибки только в задержках или где-то еще?
Ну если у Вас и так всё должно работать, что тогда можно сказать... А одолжения Ваши никому тут не нужны.Сарказм не оценен.
Был один тут, пару страниц назад - понаписал отсебятины и ещё бился головой об стену, утверждая, что всё должно работать. Нахрена тогда на форум идти с вопросами, не понятно....
По поводу Вашего кода. Приведите все тайминги к рекомендованным производителем, потом уже и будет разговор. А так-же, старайтесь выкладывать код со всеми используемыми ф-иями, типа _delay(). Гадать на кофейной гуще, что это за чудо-задержки, никто не будет. Или, на крайняк, ставьте комментарии к подобным строкам, например - "Задержка 10 Us".
- Сообщения: 436
- Зарегистрирован: Сб апр 10, 2010 16:46:26
Добавлю только, что об этих датчиках уже столько написано, в том числе и на русском, что вопросов уже быть вообще не должно.
Здраствуйте!! Я новичок и не могу понять где в коде нужно организовать высокий уровень порта для паразитного питания датчика температуры DS18B20. Ткните меня носом пажайлуста..
- Вложения
-
- Исходник.rar
- (98.66 КБ) 191 скачивание
Организовывать нужно не в коде, а подтяжкой линии данных к питанию.
Подтяжка к питанию есть 4,7кОм но когда я подключаю по паразит.пит. на индикаторе 85,0 градусовАlex писал(а):Организовывать нужно не в коде, а подтяжкой линии данных к питанию.
4.7 много, повесьте, хотя бы, 1 Ком.
Спасибо за помощь!! Было под рукой 680 Ом поставил и все заработалоАlex писал(а):4.7 много, повесьте, хотя бы, 1 Ком.
При 680 Ом есть опасность спалить датчик. Да и 1 кОм тоже маловато. Сейчас то все заработало, но надолго
ли ?
ли ?
- Сообщения: 436
- Зарегистрирован: Сб апр 10, 2010 16:46:26
Верное замечание. Если длина соединительных проводов относительно мала и с подтяжкой 4,7К датчик не работает, осмелюсь предположить, что тайминги не соответствуют рекомендациям изготовителя.
2 года стоят часы-термометр дома, работают 2 датчика, пуллап - ~600 ОМ. Ничего до сих пор не случилось.Сейчас то все заработало, но надолго ли ?
Да и откуда такие данные, что этого сопротивления мало ? Где это написано ? Я в даташите не нахожу подобных параметров.
- Сообщения: 436
- Зарегистрирован: Сб апр 10, 2010 16:46:26
Кроме даташита на сам датчик, есть еще общие рекомендации для сетей 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.
А термометры дома есть не только у Вас...
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
Почти добил, но я не понимаю, почему он выводит мне такие значения 11111110 в нулевом байте и 11111111 в первом байте. К тому же лог симулятора показывает какую-то не поддерживаемую команду, а лог отладчика все верно показывает. Кто может подсказать, в чем проблема? Проект привел, если что.
- Вложения
-
- Desktop.rar
- (23.07 КБ) 187 скачиваний
-
- команад.JPG
- (26.87 КБ) 446 скачиваний
-
- лог.JPG
- (22.08 КБ) 381 скачивание


