|
Необычная работа 1-wire, что это может значить?, Когда подключены на общий клемник работают, а если расстояние 2м нет. |
|
|
|
Jul 20 2014, 13:32
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 30-10-07
Пользователь №: 31 879

|
Здравствуйте. Реализовал на AVR небольшую сеть(10м) из датчиков DS18B20 (все условия протокола соблюдены и тщательно проверены, схема подключения стандартная 3-х проводная с подтяжкой 4,7 кОм). Кабель витая пара FTP (даже ПВС 3х1 пробывал, но нечего не изменилось). Сеть работает, когда датчики подключены на общий клемник ( т.е в непосредственной близости друг от друга). Проблема возникает когда расстояние между датчиками более 0,5м. Причём один из датчиков работает нормально (даже если его поменять местом подключения с неработающим), а при работе с другим возникает авария контрольных сумм. Датчики все новые. Всё повторяется на других экземплярах датчиков. Место где находится сеть обычное, без серьёзных помех. Подскажите пожалуйста в чём может быть проблема?
|
|
|
|
|
 |
Ответов
|
Jul 21 2014, 09:43
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(Santy @ Jul 20 2014, 16:32)  Подскажите пожалуйста в чём может быть проблема? Проблема может быть в том, что вы прерываете тайм-слот при обмене с датчиком. Например, стандартная библиотека, поставляемая с CodeVision, так и построена - ее функции можно прерывать, в результате данные от датчика (к датчику) могут приходить с ошибками. Нужно обязательно запрещать прерывания на время работы функций библиотеки, но это далеко не всегда приемлемо. Я для себя эту проблему решил, полностью отказавшись от библиотеки и написав свою реализацию получения температуры от датчика (кому надо, могу поделиться) ...
|
|
|
|
|
Jul 21 2014, 19:06
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 30-10-07
Пользователь №: 31 879

|
Цитата(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 кабель на телефонную лапшу так даже хуже стало.
Сообщение отредактировал Santy - Jul 22 2014, 16:16
|
|
|
|
|
Jul 21 2014, 20:32
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Santy @ Jul 21 2014, 22:06)  Код ... cbi PORTE,0 ... sbi PORTE,0 ... "Садитесь, два". Открытый коллектор так не делается. С таким кодом вы можете наловить всяких чудес, если повезет не спалить датчик. Вам надо раз и навсегда записать в PORTE,0 ноль и "отпускать" его в единицу переводя ногу в режим входа регистром DDRE. Уровень единицы на шине должен обеспечиваться внешним резистром подтяжки. И еще - для публикации кода на форме ввода сообщения есть кнопка  . С вашим опытом на этом форуме стыдно этого не знать.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
Santy Необычная работа 1-wire, что это может значить? Jul 20 2014, 13:32 Myron Цитата(Santy @ Jul 20 2014, 08:32) Здравс... Jul 20 2014, 14:13 Santy В литературе и статьях 1-wire хвалят. Реализация п... Jul 20 2014, 15:18 Myron Цитата(Santy @ Jul 20 2014, 10:18) В лите... Jul 20 2014, 20:32 adnega Может, отражения от несогласованной линии? Jul 20 2014, 17:29 Santy Цитата(adnega @ Jul 20 2014, 20:29) Может... Jul 20 2014, 17:56  DmitryM Присоединяюсь к Jury093.
Внимательно изучаем AN148... Jul 21 2014, 05:24 adnega Осциллографом обязательно нужно посмотреть.
Попроб... Jul 20 2014, 20:10 Jury093 Цитата(Santy @ Jul 20 2014, 17:32) Место ... Jul 20 2014, 21:14 kolobok0 Цитата(Santy @ Jul 20 2014, 17:32) ...Под... Jul 20 2014, 22:59 _Pasha Цитата(kolobok0 @ Jul 21 2014, 01:59) при... Jul 21 2014, 05:45  kovigor Цитата(Santy @ Jul 21 2014, 22:06) Пришёл... Jul 21 2014, 19:27   Santy Цитата(kovigor @ Jul 21 2014, 22:27) Сейч... Jul 21 2014, 19:58   _Pasha Цитата(Сергей Борщ @ Jul 21 2014, 23:32) ... Jul 21 2014, 21:19 adnega Для поднятия оптимизма сообщаю: тестировал линию с... Jul 21 2014, 20:22 Павлик CODEсbi porte,0 ; pull down
; ... Jul 22 2014, 04:20 Santy Спасибо за помощь и критику. Внесу изменения и учт... Jul 22 2014, 16:04
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|