Barmaley67
Aug 25 2006, 15:56
При работе с датчиками DS1820 заметил такую странность: при стандартном (рекомендованном) подтягивающем резисторе (5,1 кОм) работает только часть датчиков (процентов 30), подключение +,-,данные. И только когда я заменил резистор на 100 кОм заработали все датчики. В чем причина? Где я допустил ошибку?
Цитата(Barmaley67 @ Aug 25 2006, 19:56)

При работе с датчиками DS1820 заметил такую странность: при стандартном (рекомендованном) подтягивающем резисторе (5,1 кОм) работает только часть датчиков (процентов 30), подключение +,-,данные. И только когда я заменил резистор на 100 кОм заработали все датчики. В чем причина? Где я допустил ошибку?
А на линии - только один датчик или несколько?
zltigo
Aug 25 2006, 16:18
Цитата(Barmaley67 @ Aug 25 2006, 18:56)

В чем причина? Где я допустил ошибку?
В устройстве к которому Вы подключаете датчик уже есть подтягивающий резистор.
При 100K датчик не способен работать в принципе.
Barmaley67
Aug 25 2006, 18:25
На линии один датчик (есть идея подключить несколько, но пока бы с одним разобраться). Датчик подключен к PIC16F84A (вывод RA4 порта А, а там вроде как нет подтягивающих резисоров). И с другой стороны когда убираю резистор, то на ЖКИ выводятся все нули (тип, CRC, заводской номер), чего при наличии подтягивающего резистора быть не должно. При установке же резистора на 30 кОм работает половина датчиков (в наличии есть 10), при 100 кОм работают все.
Я цеплял DS1820 к AVR AT8535 c длинной линии около 12метров по витой паре, количество датчиков было 6. Проблема была только с формированием времянки для самых дальних датчиков. Резисторы стояли как доке 4.7к. Я вынужден был в конце концов разделить датчики на две группы ( дальние и ближние ) и кинуть две витые пары. А какие расстояния хотите заложить Вы. И что используете для линии связи, может проблема именной в ней?
Также соединял AT89C5131 c DS1820 и проблем не каких не возникало. Подтягивающий резистор был 4,7кОм. Может допущена ошибка в схеме?!
Цитата(Barmaley67 @ Aug 25 2006, 19:56)

При работе с датчиками DS1820 заметил такую странность: при стандартном (рекомендованном) подтягивающем резисторе (5,1 кОм) работает только часть датчиков (процентов 30), подключение +,-,данные. И только когда я заменил резистор на 100 кОм заработали все датчики. В чем причина? Где я допустил ошибку?
Я как-то подключал к АТ89С51 по такой вот схемке. Правда у МК было задействовано 2 ноги на однопроводную шину, но дальность была 100 метров и порядка 30 датчиков на линии в промышленном цеху с кучей частотников (производство мороженого). Цеплял по неэкранированной витой паре 5-й категории. Датчики с внешним питанием все, на конце линии диод шоттки в обратном включении. Ошибки конечно сыпались, но если выводить сообщение об ошибке только после 4-го неудачного чтения - то они практически не появлялись.
Как показал опыт, подключать линию MicroLAN длиннее нескольких метров непосредственно на порт нежелательно. Любой микроконтроллер переключает свои порты очень быстро - единицы...десятки наносекунд, от этого удара линия банально "звенит", что портит весь обмен. Более того, работающие при комнатной температуре датчики могут перестать обмениваться на "минусе" и прочие сюрпризы.
Необходимо использовать аппаратный драйвер линии с "мягкими" фронтами. Советую посмотреть также
Application Note 108:
Нажмите для просмотра прикрепленного файла
Barmaley67
Sep 4 2006, 15:48
Спасибо всем кто ответил. Сейчас все собрано на макетке, так что расстояние соединительных проводов не больше 15-20 см. До этого работал с DS1990A (ключ), никаких проблем небыло. Ошибку в схеме, вреде бы, допустить сложно, всего-то три провода...

Попробую воспользоваться советами от OgRom и Andy-L. Буду бороться дальше
Andy Mozzhevilov
Sep 5 2006, 03:19
Попробуйте посмотреть софт и сравнить состояния пина с диагармой из даташита.
Насколько я помню, единица должна делаться подтягивающим резистором и пином, настроенным
на вход как при передаче, так и при приеме данных с 1-wire. Иногда встречается ошибка, что при передаче единицу делают пином контроллера, настроенным на режим output.
Для х51 это до лампочки, а вот для PIC, AVR - нет.
Barmaley67
Sep 5 2006, 12:53
Вся проблема в том, что софт писал я сам

по даташиту. Единица (и при вводе и при выводе) формируется за счет перевода вывода МК на вход (имитация схемы с открытым коллектором), так что здесь проблем нет. DS1990A (ключ) с таким же протоколом обмена (поддерживается только команда 33Н - чтение ПЗУ) работает прекрасно, а вот с термометрами какие-то непонятки. Может я чего не понимаю, но тот же протокол, все должно работать, но нет: ключи читаются, а термометры нет. Хотя при увеличении сопротивления резистора до 100К все Ok.
А Вы пытались посмотреть сигнал осцилографом? Может быть сигнал действительно с резкими фронтами и увеличивая резистор до 100к Вы просто датчики вводите в состояние когда им начинает нехватать питания и они сами внутри себя начинают сглаживать фронты и начинают работать. А попробуйте для эксперимента между входом процессора и линией до подтягивающего резистора 4.7к вставить резистор 100-200ом и тем самым сгладить фронты.
Barmaley67
Sep 6 2006, 14:40
Стоит резистор и как раз на 200 Ом. Как я уже писал данная схема подключения использовалась для чтения ключей DS1990A и резистор я поставил для предотвращения замыкания на землю, да и в дельнейшем собираюсь использовать несколько датчиков (подключение/отключение на рабочем устройстве), так что стоит резистор. А сам сигнал не смотрел, приду домой - посмотрю.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.