Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Необычная работа 1-wire, что это может значить?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Santy
Здравствуйте.
Реализовал на AVR небольшую сеть(10м) из датчиков DS18B20 (все условия протокола соблюдены и тщательно проверены, схема подключения стандартная 3-х проводная с подтяжкой 4,7 кОм). Кабель витая пара FTP (даже ПВС 3х1 пробывал, но нечего не изменилось). Сеть работает, когда датчики подключены на общий клемник ( т.е в непосредственной близости друг от друга). Проблема возникает когда расстояние между датчиками более 0,5м. Причём один из датчиков работает нормально (даже если его поменять местом подключения с неработающим), а при работе с другим возникает авария контрольных сумм. Датчики все новые. Всё повторяется на других экземплярах датчиков.
Место где находится сеть обычное, без серьёзных помех. Подскажите пожалуйста в чём может быть проблема?
Myron
Цитата(Santy @ Jul 20 2014, 08:32) *
Здравствуйте. Реализовал на AVR небольшую сеть(10м) из датчиков DS18B20 (все условия протокола соблюдены и тщательно проверены, схема подключения стандартная 3-х проводная с подтяжкой 4,7 кОм). Кабель витая пара FTP (даже ПВС 3х1 пробывал, но нечего не изменилось). Сеть работает, когда датчики подключены на общий клемник ( т.е в непосредственной близости друг от друга). Проблема возникает когда расстояние между датчиками более 0,5м. Причём один из датчиков работает нормально (даже если его поменять местом подключения с неработающим), а при работе с другим возникает авария контрольных сумм. Датчики все новые. Всё повторяется на других экземплярах датчиков. Место где находится сеть обычное, без серьёзных помех. Подскажите пожалуйста в чём может быть проблема?


Влияет паразитная емкость соединения. Скрупулезно проверьте временную диаграмму взаимодействия с датчиками на коротком расстоянии и длинном, особенно симметричность фронтов. Начните с одного датчика. Проверьте работу на той же длине, но не с кабелем, а с отдельными прводами. На расстоянии до пары-тройки метров проблем с наводками еще нет. Прстепенно увеличивайте длину кабеля и проверяйте работу. Постраивая временную диаграмму мне удавалось обеспечить работу до 100 метров. Причем после этого те же датчики не работали на коротком расстоянии. Использовал те же DS18B20. Изделие в серии.

Я на этой же проблеме 10 лет назад чуть работу не потерял, никому ничего объяснить не удалось, пока не заставил программистов сделать как надо в соответствии с ДШ. Причем учтите, общий 1-Wire стандарт и его реализация у разных производителей (Maxim, TI, и т.д.) отличается в деталях. Мне, например, не удалось заставить работать надежно компоненты от Maxim и TI друг с другом.
Santy
В литературе и статьях 1-wire хвалят. Реализация протокола сделана у меня в соответствии с datasheet. Попробую там где можно увеличу временные задержки. Когда в сети работает 1 датчик, то проблем нет (проверял на 10м). На датчиках DS18B20, которые я применяю на корпусе написано Dallas. Производитель видимо Mахim. Есть ли DS18B20 производства TI?
adnega
Может, отражения от несогласованной линии?
Santy
Цитата(adnega @ Jul 20 2014, 20:29) *
Может, отражения от несогласованной линии?


Т.е Вы хотите сказать, что данный экранированный кабель излучает и принимает? Экран соединён с GRND (в одной точке). Один из датчиков подключен на самый конец кабеля, а другой посредине с помощью проводов длиной 1см. Как только отключаю работающий датчик, то сразу же начинает работать тот , который не работал. Несколько увеличил временные задержки, но картина не изменилась. Попробую использовать обычную телефонную лапшу. Если же не поможет придётся осциллографом импульсы смотреть.
adnega
Осциллографом обязательно нужно посмотреть.
Попробовать, на концах линии по 4.7k с DATA на +5В.
Может и в софте проблемы. Вы работу 1-wire поверх UART делаете?
Не стоит забывать, что тайминги меняются от экземпляра к экземпляру и зависят от температуры.
Myron
Цитата(Santy @ Jul 20 2014, 10:18) *
В литературе и статьях 1-wire хвалят. Реализация протокола сделана у меня в соответствии с datasheet. Попробую там где можно увеличу временные задержки. Когда в сети работает 1 датчик, то проблем нет (проверял на 10м). На датчиках DS18B20, которые я применяю на корпусе написано Dallas. Производитель видимо Mахim. Есть ли DS18B20 производства TI?


Да, задержки, длительность импульсов, фронтов и их симметрия.

Mахim купил фирму Dallas лет этак 15-20 назад и все их (Dallas) барахло идет под маркой Mахim. Это были, в основном, чипы зарядки, чипы ID с 1-wire, и другие чипы с 1-wire. Остались от Dallas только буквы в названиях, да и то в старых изделиях. Чипы ID с 1-wire до сих пор использую в новой аппаратуре когда надо, проблем не было до сих пор. Чипы зарядки и сопутсвующие для батарей всегда вызывают проблемы и вопросы, хотя и не плохи.

О DS18B20 производства TI не знаю, и, слава богу, знать не хочу (не нужно). Знаю только, что TI и Dallas трактуют 1-wire interface несколько по разному с чем и столкнулся с 10-ок лет назад.
Jury093
Цитата(Santy @ Jul 20 2014, 17:32) *
Место где находится сеть обычное, без серьёзных помех. Подскажите пожалуйста в чём может быть проблема?

почитайте статью производителя:
http://www.maximintegrated.com/en/app-notes/index.mvp/id/148
внизу страницы есть линки на аппноты..

как вариант, попробуйте вместо трехточки сделать двупроводку с паразитным питанием..
kolobok0
Цитата(Santy @ Jul 20 2014, 17:32) *
...Подскажите пожалуйста в чём может быть проблема?


при правильной схемотехнике (от производителя) - практически всегда хромает софт - тайминги.
если совсем плохие условия (пром линия, сотни метров) - то перенести резистор рядом с датчиком, можно снизить практически до сотен Ом.
Протокол как лом - работает на ура.

DmitryM
Присоединяюсь к Jury093.
Внимательно изучаем AN148. Как говорится, "все уже украдено до нас" biggrin.gif
_Pasha
Цитата(kolobok0 @ Jul 21 2014, 01:59) *
при правильной схемотехнике (от производителя) - практически всегда хромает софт - тайминги.

Вот-вот. Пусть ТС притащит в студию процедуру чтения бита. sm.gif
kovigor
Цитата(Santy @ Jul 20 2014, 16:32) *
Подскажите пожалуйста в чём может быть проблема?

Проблема может быть в том, что вы прерываете тайм-слот при обмене с датчиком. Например, стандартная библиотека, поставляемая с CodeVision, так и построена - ее функции можно прерывать, в результате данные от датчика (к датчику) могут приходить с ошибками. Нужно обязательно запрещать прерывания на время работы функций библиотеки, но это далеко не всегда приемлемо. Я для себя эту проблему решил, полностью отказавшись от библиотеки и написав свою реализацию получения температуры от датчика (кому надо, могу поделиться) ...
Santy
Цитата(kovigor @ Jul 21 2014, 12:43) *
Проблема может быть в том, что вы прерываете тайм-слот при обмене с датчиком. Например, стандартная библиотека, поставляемая с CodeVision, так и построена - ее функции можно прерывать, в результате данные от датчика (к датчику) могут приходить с ошибками. Нужно обязательно запрещать прерывания на время работы функций библиотеки, но это далеко не всегда приемлемо. Я для себя эту проблему решил, полностью отказавшись от библиотеки и написав свою реализацию получения температуры от датчика (кому надо, могу поделиться) ...


При работе с сетью у меня все прерывания запрещены. Для приёма и передачи использую 1 и тот же пин не UART (хотя возможно лучше использовать 2 пина и транзистор, один из пинов включает и выключает ключ, а другой работает на приём), причём этот пин всегда включен на выход.
Приём и передача бита в соответствии с datasheet.
Приём:
Код
PRIEM_BIT_CIKL:
     rcall ZA60MKS
         cbi PORTE,0
     rcall ZA2MKS
         sbi PORTE,0
     rcall ZA2MKS
PROV_BIT:
         sbic PINE,0;
     rjmp BIT_1;ВЫПОЛНИТЬ КОМАНДУ ПЕРЕХОДА ЕСЛИ ПРИНИМАЕМЫЙ БИТ=1
         rjmp BIT_0


Передача:
Код
UST1_BIT_CIKL:
         dec vspom_reg
         lsr bait
         cbi PORTE,0
     rcall ZA5MKS      
         sbi PORTE,0
     rcall ZA60MKS      
     rjmp PEREDACHA_BIT_CIKL
UST0_BIT_CIKL:
         dec vspom_reg
         lsr bait
         cbi PORTE,0
     rcall ZA60MKS
         sbi PORTE,0
     rcall ZA5MKS


Пришёл к выводу , что влияют паразитные ёмкости да и кабель имеет значение. Заменил FTP кабель на телефонную лапшу так даже хуже стало.
kovigor
Цитата(Santy @ Jul 21 2014, 22:06) *
Пришёл к выводу , что влияют паразитные ёмкости да и кабель имеет значение. Заменил FTP кабель на телефонную лапшу так даже хуже стало.

Сейчас нет времени вникать в ваш код. Могу на 99% утверждать, что ошибка чисто программная. Это если питание не шумит и БП не возбуждается и МК исправен.
При такой длине кабеля, думаю, совершенно все равно, что у вас за кабель. Я каких только кабелей и проводов не перепробовал. До примерно пяти метров все было в порядке, а больше мне и не требовалось ...
Santy
Цитата(kovigor @ Jul 21 2014, 22:27) *
Сейчас нет времени вникать в ваш код. Могу на 99% утверждать, что ошибка чисто программная. Это если питание не шумит и БП не возбуждается и МК исправен.
При такой длине кабеля, думаю, совершенно все равно, что у вас за кабель. Я каких только кабелей и проводов не перепробовал. До примерно пяти метров все было в порядке, а больше мне и не требовалось ...


На 100% БП исправен да и контроллер тоже. На двух устройствах одно и то же происходит. То, что я привел кодом то считать нельзя так несколько строчек. Задержки все выдержаны правильно. Длина сети 10м. Все контакты надёжно подключены, подключал подтяжку в конце сети (разные номиналы) при 200 Ом сеть работает, но изредка сбоит.
adnega
Для поднятия оптимизма сообщаю: тестировал линию с одним датчиком с активным питанием.
С 1кОм на стороне хоста работает до 100 метров кабеля КСПВГ-4х0.12 в диапазоне температур -18С..+100С.
С добавочным 1кОм на стороне датчика работает до 200 метров (больше кабеля не было и не надо).

Вполне сносно (т.е. без ошибок) работает сеть: DS - 6м - DS - 3м - Хост - 2м - DS - 1м - DS (уже второй год мониторю температуру).
Сергей Борщ
Цитата(Santy @ Jul 21 2014, 22:06) *
Код
...
         cbi PORTE,0
...
         sbi PORTE,0
...

"Садитесь, два". Открытый коллектор так не делается. С таким кодом вы можете наловить всяких чудес, если повезет не спалить датчик. Вам надо раз и навсегда записать в PORTE,0 ноль и "отпускать" его в единицу переводя ногу в режим входа регистром DDRE. Уровень единицы на шине должен обеспечиваться внешним резистром подтяжки.

И еще - для публикации кода на форме ввода сообщения есть кнопка . С вашим опытом на этом форуме стыдно этого не знать.
_Pasha
Цитата(Сергей Борщ @ Jul 21 2014, 23:32) *
"Садитесь, два". Открытый коллектор так не делается.

+ читают бит на 3/4 интервала а не через 2 мкс.
pavel-pervomaysk
CODE
сbi porte,0 ; pull down
; вешаем подтяжку внешним резистором!
sbi ddre,0 ; подаем 0
cbi ddre,0 ; включается подтяжка sm.gif


От себя порекомендую сделать типа так:

CODE
.equ dal_port = PORTE //
.equ dal_pin = PINE //
.equ dal_ddr = DDRE //
.equ ds_p = PE0 // pin DATA
Santy
Спасибо за помощь и критику. Внесу изменения и учту в дальнейшем.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.