Проблемы с сетью 1-wire

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Проблемы с сетью 1-wire

Сообщение Аlex »

Сколько разговоров и решений, только никто не спросил у Gerik_PP как он реализует протокол, а точнее тайм-слоты. А ведь проблема может быть программной :)
Gerik_PP, можно глянуть на места Вашей программы, где происходит обмен с датчиками ? Или, если это секрет, то поиграйтесь с временами в тайм-слотах, скорее всего там у Вас проблема.
kolobok0
Грызет канифоль
Сообщения: 296
Зарегистрирован: Ср дек 30, 2009 09:55:39

Re: Проблемы с сетью 1-wire

Сообщение kolobok0 »

Gerik_PP писал(а):...1. На одном порту МК висят 4 датчика DS18B20. 2. Раз в 5 сек....3. Обращение к конкретному......Длинна "лучей" ~70, ~6, ~10 и ~9 метров...как можно решить эту проблему....


1) если следуете рекомендациям от далласа, то присмотритесь к оригинальным даташитам включения 1Wire шины. Особенно к DS9503. Это к слову. А то у вас выходные цепи - оставляют желать лучшего.
2) тут правильно уже прозвучало одно из последних замечаний - самое первое это временные слоты. потом всё остальное.
3) что такое "порт" ? Это один пин или группа пинов, как тут уже прозвучало - один на каждый "луч" ? Если есть ножки - подключите один пин - один датчик.
4) Раз в 5 секунд - это от лукавого. Разогрев при постоянном (не _паразитном_) сканировании датчиков менее 0,2 градуса.
5) 70 метров по пром-зоне это не предел для 1-Wire. На самый худой случай, опять-же следуя рекомендациям из DS - подключите нагрузочный резистор прям возле датчика - и будет вам счастье. (можно до пару-тройку сотен ом опустить даже). Опять жешь - тут уже правильно прозвучало, проконтролируйте завалы по осцилу и станет понятней о чём речь.
6) тут в хвалебном 148 рус. написано про всякие динамические подтяжки и отражённый сигнал. дык вот это - так же траблы в реализации. если коротко - не надо бросать выход при выходе в единицу. более правильно - выдать единицу, а уже потом перейти в Z состояние. Тогда таких проблем не будете видеть на осциле вообще, на более-менее средних линиях (десятки метров).

осадок - протокол как топор. прост и "надёжен" до безобразия. 99% всех проблем (как правило) от софта.

удачи вам
(круглый)
Аватара пользователя
Gerik_PP
Открыл глаза
Сообщения: 59
Зарегистрирован: Вт ноя 07, 2006 14:14:16
Откуда: пос. Правдинский
Контактная информация:

Re: Проблемы с сетью 1-wire

Сообщение Gerik_PP »

Аlex писал(а):Сколько разговоров и решений, только никто не спросил у Gerik_PP как он реализует протокол, а точнее тайм-слоты. А ведь проблема может быть программной :)
Gerik_PP, можно глянуть на места Вашей программы, где происходит обмен с датчиками ? Или, если это секрет, то поиграйтесь с временами в тайм-слотах, скорее всего там у Вас проблема.

Никакого секрета, это же моё любимое хобби... Вот, подпрограммы и попытался выдрать фрагмент программы для обмена с одним из 4-х датчиков. Кварц для PIC - 4MHz. Сильно не пинайте кота и извиняйте если много лишнего :facepalm:

Код: Выделить всё

                       ;******************************************
            ;*                DS18B20                 *
            ;******************************************
;********основные функции для работы с DS18B20***************
;-----Reset-----------
HYL1
   CALL   WUX1      ;ВЫХОД НУЛЯ.
   MOVLW   .125      ;НУЛЕВОЙ ИМПУЛЬС
   ADDLW   -1         ;= 500 МКС.
   BTFSS   STATUS,2   ;
   GOTO   $-2         ;
   CALL   WXO1      ;ВЫХОД ЕДИНИЦЫ.
   MOVLW   .125      ;ИМПУЛЬС =
   ADDLW   -1         ;500 МКС.
   BTFSS   STATUS,2   ;
   GOTO   $-2         ;
   RETURN

;---- изменение входа на приём/передачу.----------
WUX1
   BCF      PORTC,1      ;КОРОТКИЙ ЗАПРОС.
   BSF      STATUS,5   ;ПЕРЕХОДИМ В БАНК 1.
   BCF      TRISC,1      ;НА ВЫХОД.
   BCF      STATUS,5   ;ПЕРЕХОДИМ В БАНК 0.
   RETURN
WXO1
   BSF      STATUS,5   ;ПЕРЕХОДИМ В БАНК 1.
   BSF      TRISC,1      ;НА ВХОД.
   BCF      STATUS,5   ;ПЕРЕХОДИМ В БАНК 0.
   RETURN

; ---- задержка мкс, умноженная на 4
X4
   ADDLW   -1         ;
   BTFSS   STATUS,2   ;
   GOTO   $-2         ;
   RETURN            ;

; ---------ПОСЫЛ КОМАНДЫ В DS 1----------
POSIL1
   MOVWF   TEMP3      ;ПЕРЕПИШЕМ ВО ВРЕМЕННЫЙ.
   MOVLW   .8         ;ЗАПИШЕМ ЧИСЛО БИТ.
    MOVWF   COUN      ;
POSI1
   RRF      TEMP3,1      ;ВЫТОЛКНЕМ МЛАДШИЙ БИТ.
    BTFSS   STATUS,0   ;ЕСЛИ ОН НУЛЕВОЙ,
   GOTO   W01         ;ПОШЛЕМ ИМПУЛЬС НУЛЯ.
   GOTO   W11         ;ИЛИ ЕДИНИЦЫ.
POS1
   DECFSZ   COUN,1      ;УМЕНЬШАЕМ СЧЕТЧИК.
    GOTO   POSI1      ;НА СЛЕДУЮЩИЙ БИТ.
    RETURN            ;ВОЗВРАТ.
W01
   CALL   WUX1      ;УСТАНОВИМ ВЫХОД В НОЛЬ.
   MOVLW   .15         ;УДЕРЖИВАЕМ 60 МКС.
   CALL    X4         ;
    CALL   WXO1      ;НА ВХОД = 1 НА ВЫХОДЕ.
    GOTO   POS1      ;ПОВТОРИМ.
W11
   CALL   WUX1      ;КОРОТКИЙ НУЛЕВОЙ ИМПУЛЬС.
    CALL   WXO1      ;НА ВХОД = 1 НА ВЫХОДЕ.
    MOVLW   .15         ;УДЕРЖИВАЕМ 60 МКС.
   CALL   X4         ;
    GOTO   POS1      ;ПОВТОРИМ.


;===========
PRIE1
   MOVLW   .8
   MOVWF   COUN      ;ЗАПИШЕМ ЧИСЛО БИТ.
    CLRF   LSB         ;ОБНУЛИМ РЕГИСТР ПРИЕМА.
PRI1
   CALL   WUX1      ;ВЫДАЕМ КОРОТКИЙ НОЛЬ И ЖДЕМ ОТКЛИКА.
   CALL   WXO1      ;НА ПРИЕМ.
   MOVLW   .2         ;ЗАДЕРЖКА
   CALL   X4         ;8 МКС.
    MOVFW   PORTC      ;ПЕРЕПИШЕМ
   MOVWF   TEMP1      ;ЗНАЧЕНИЕ ПОРТА.
;   BTFSC   FLAG,1      ;ЕСЛИ ЭТО 9 БИТ,
;   RETURN            ;ВЕРНЕМСЯ.
   BTFSS   TEMP1,1      ;
   BCF      STATUS,0   ;УСТАНОВИМ БИТ ПРИЕМА В НОЛЬ.
   BTFSC   TEMP1,1   ;
   BSF      STATUS,0   ;ИЛИ ЕДИНИЦУ.
    RRF      LSB,1      ;ЗАПИШЕМ В РЕГИСТР.
   MOVLW   .15         ;ПАУЗА 60 МКС.
   CALL   X4         ;
   DECFSZ   COUN,1      ;УМЕНЬШИМ СЧЕТЧИК.
   GOTO   PRI1      ;ПОВТОРИМ ПРИЕМ.
   movf   LSB,0
   RETURN            ;ВЕРНЕМСЯ.



                ;***************************************************************************
      ;* ---------- основной программы для работы с DS18B20------------ *
      ;***************************************************************************
Online_label                 
       CALL      HYL1          ;ПОСЫЛ ИМПУЛЬСА ОБНУЛЕНИЯ.
       movlw     0CCh             ;Команда "Skip ROM"
       call      POSIL1
       movlw     044h             ;Команда "Convert T" для всех датчиков на шине
       call      POSIL1
       nop                  ;temp

;---------- окончания конвертирования DSx-------------
convt   clrwdt            ; пнуть собаку ))

      CALL   WUX1      ;ВЫДАЕМ КОРОТКИЙ НОЛЬ И ЖДЕМ ОТКЛИКА.
      CALL   WXO1      ;НА ПРИЕМ.
      MOVLW   .2         ;ЗАДЕРЖКА
      CALL   X4         ;8 МКС.
       MOVFW   PORTC      ;ПЕРЕПИШЕМ
      MOVWF   TEMP1      ;ЗНАЧЕНИЕ ПОРТА.
      MOVLW   .15         ;ПАУЗА 60 МКС.
      CALL   X4         ;   
      BTFSS   TEMP1,1      ;если "0", то следующая строка... "1" - конвертирование выполнено идём далее
       goto   $-.9      ;

;----------
ntl_try
       mvi       TRY,08h       ;8 попыток чтения

Newtry_label                ;Начинаем чтение данных из DS18B20
      movlw      .8         ; отправим 8 байт
      movwf      SecL

       CALL      HYL1      ;ПОСЫЛ ИМПУЛЬСА ОБНУЛЕНИЯ.
       movlw     0x55          ;Команда "Match ROM"
       call      POSIL1

ds_mth
      movf        INDF,0            ;Младший байт температуры
      call         POSIL1
      
      decfsz         SecL,1
      goto         $+2
      goto         rd_scr
      INCF          FSR,1            ; +1 В СЧЕТЧИК АДРЕСА.
      GOTO          ds_mth            ; БЕГАЕМ ПО КРУГУ, передаём 8 байт

rd_scr    movlw     0xBE          ;Команда "Read Scratchpad"
       call      POSIL1

       clrf      CRCPIC
       call      PRIE1
       movwf     TL         ;Младший байт температуры
       call      NewCRC
       call      PRIE1
       movwf     TH           ;Старший байт температуры
       call      NewCRC
       call      PRIE1      ;Шесть ненужных байт
       call      NewCRC
       call      PRIE1
       call      NewCRC
       call      PRIE1
       call      NewCRC
       call      PRIE1
       call      NewCRC
       call      PRIE1
       call      NewCRC
       call      PRIE1
       call      NewCRC

       call      PRIE1         ; Примем CRC
       xorwf     CRCPIC,W        ;Проверка совпадения CRC
       jz        OKCRC_label     ;Совпадение - переход

Аватара пользователя
Gerik_PP
Открыл глаза
Сообщения: 59
Зарегистрирован: Вт ноя 07, 2006 14:14:16
Откуда: пос. Правдинский
Контактная информация:

Re: Проблемы с сетью 1-wire

Сообщение Gerik_PP »

kolobok0 писал(а):1) если следуете рекомендациям от далласа, то присмотритесь к оригинальным даташитам включения 1Wire шины. Особенно к DS9503. Это к слову. А то у вас выходные цепи - оставляют желать лучшего.
2) тут правильно уже прозвучало одно из последних замечаний - самое первое это временные слоты. потом всё остальное.....

В общем я подумал и родил! :idea: Решил построить коммутируемую 1-вайр микролан с активными подтяжками на отдельном МК, он же ведомый I2C, а ведущий I2C МК (он уже есть сейчас), будет освобождён от работы с датчиками. Кстати, появился прекрасный повод переписать программу для 1-wire заново с "нуля". Но сразу бежать и закупать микросхемы мне как-то сикотно, не уверен я в своих знаниях на 100%. Друзья, не сочтите за труд, посмотрите схему (вложение) всё ли нормально? Может что-то не учёл или вовсе неправильно сделал? Подбирал микросхемы сам, по этому поводу тоже сомнения закрадываются.
Вкратце о схеме: Сопряжение с линией сделал на U2 – логика с тремя состояниями на выходе. Приемник U3 - аналоговый компаратор позволяющий микроконтроллеру определить, превысило ли напряжение в сети 1-Wire пороговое значение 0.95 В (AN132). Для активной подтяжки вниз использую U2.1. При подаче на него «0» выход переходит из третьего состояния в «0». Для активной подтяжки вверх использую U2.2. При подаче на него «0» выход переходит из третьего состояния в «1». Четыре отвода моей злополучной "звезды" через DS9503 подключены к коммутаторам U9-12 и управляются тоже с МК. При опросе коммутируется всегда только 1 из 4-х датчиков, по очереди.
P.S. Даташиты на некоторые микросхемы тоже прикрепляю, на всяк случ
P.P.S. Схема на дальнем конце провода (со стороны DS18B20) во вложении
Вложения
Схема со стороны датчика (дальняя).pdf
(39.31 КБ) 503 скачивания
Datasheet.zip
(738.44 КБ) 307 скачиваний
Microlan (схема).pdf
(88.62 КБ) 451 скачивание
kolobok0
Грызет канифоль
Сообщения: 296
Зарегистрирован: Ср дек 30, 2009 09:55:39

Re: Проблемы с сетью 1-wire

Сообщение kolobok0 »

Gerik_PP писал(а):...В общем я подумал и родил!... коммутируемую 1-вайр микролан...P.P.S. Схема на дальнем конце провода (со стороны DS18B20) во вложении


Вы меня простите, но то ли лыжи не едут, то ли снег закончился...

задача какая? сделать чтоб работало или обязательно "коммутируемый 1-вайр микролан" ?

если первое то (тут немного оговорюсь, с пиками не на короткой ноге):
1) у вас 4 ноги заюзаны на усилители и 4 на переключения. а датчиков всего 4. Язык чешится спросить чего не заюзали ышо штук 20 - переключать переключатель, масштабирование и прочую, в данных рамках имхо не нужную вещь).
2) присмотритесь к схеме включения ds9503 фигура 4 если я правильно вижу из вашего аттача. Обратите внимание - там 4 резистора. и цифры ножек микросхемы посмотрите. т.е. два из нарисованных резисторов внутри милкосхемы, а два нужно подвесить внешнии. обычно это так-же 5 Ом - вполне.

я бы сделал следующее (если чисто по задаче):
1) выкинул бы всю коммутацию.
2) питание датчиков - от 5 вольт. обычно от того же самого, что и МК.
3) подключил бы датчики через схему с фигуры даташита на DS9503. Поверьте - оно рабочее (не одна тысяча продаваемых по всему миру пром. установок. в одной установке до 8 датчиков где то бывает). единственная доработка - поставте вместо разъёма для 1-ваир таблетки обычный разъём (на ваше усмотрение). у нас вошло в обиход юзанье телефонных, на 4 пина разъёмов. крепёжный инструмент прост, удобно менять датчики на лету (отдельный разъём - отдельный функционал датчика закреплённый за ним). т.е. всякую муть по поводу адресации - забудьте, глупости всё это в данном аспекте. протокол упрощается. датчик либо подключён либо нет.

всё.
профит - у вас освободяться ышо ноги.

как работать с ними. идеально повесить всё на один порт. так общение быстрее, обращение ко всем пинам в параллель сразу. сканировать можно без пауз - сразу. разогрев (чисто из практики) не более 0,2 градуса при постоянном (не паразитном питании).

при переключении вход-выход, старайтесь следовать следующей логике:
(чтение слота)
что требуется: необходимо выдать синхро импульс и далее перейти на чтение и через некий тайм аут прочитать его значение.
что нуна сделать: необходимо выдать нолик, необходимый тайм-аут, выдаём еденичку(!), переводим на приём, тайм-аут, чтение пина

т.е. в данном случае, при выдачи принудительно единички - мы делаем фронт круче.
резистор подтяжки внешний. его порядок около 4,5 кОм. внутренний резистор раз в десять больше - его юзать можно но это менее помехозащищённый вариант.

по поводу логики сканирования.
в инете уже пробегало решение:
делаете подпрограммки обработки элементарных действий. заводите таймер вызывающий эти обработчики. каждый обработчик должен иметь возможность: выставить новое время через которое сработает таймер, указать следующую команду (она может быть либо следующей, либо предыдущей - для организовывания циклов побитной записи либо чтения), и иметь доступ к некой структуре состояния (там обычно флаги синхронизаций, счётчики и прочая мелочь).
в главной программе теперь просто составляете список(очень удобно и наглядно если список команд выглядит типа: сбросить, результат сброса записать туда-то, записать байт - значение такое, прочитать байт в эту ячейку памяти и т.д.), команд которые должен ваш "шедуллер" выполнять тупо в цикле.
т.к. датчики в параллель, то сброс, запись в них, синхросигналы - можно выдавать параллельно(!), единственно где вам потребуется разрулить - это чтение с датчиков. т.е. вы читаете байт с порта(в нём есть ВСЕ пины ВСЕХ датчиков) - вам остаётся только методом выщёлкивания необходимых пин в нужные(разные) ячейки памяти(по кол-ву ваших датчиков).

идеально код получается таким - ваш код обработчика, параметры портов (настраивается от проекта к проекту), карта выполняемых команд шедуллера, параметр таймера. всё. т.е. код полностью партируемый при выше указанных условиях.

удачи вам
(круглый)
ЗЫ
Привёл реальный вариант работы с датчиками. сам код простите - дать не смогу. есть нюансы :)
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Проблемы с сетью 1-wire

Сообщение Аlex »

Код: Выделить всё

   MOVLW   .2         ;ЗАДЕРЖКА
   CALL   X4         ;8 МКС.
Поиграйтесь. Можно НОПами. ИМХО, достаточно будет даже 4 мкс.
Остальное, на первый взгляд, всё нормально.
Вот для примера, библа 1-вире на АСМе для ПИКов http://forum.chipmk.ru/index.php/topic/ ... t__p__1543
Аватара пользователя
Gerik_PP
Открыл глаза
Сообщения: 59
Зарегистрирован: Вт ноя 07, 2006 14:14:16
Откуда: пос. Правдинский
Контактная информация:

Re: Проблемы с сетью 1-wire

Сообщение Gerik_PP »

kolobok0 писал(а):при переключении вход-выход, старайтесь следовать следующей логике:
(чтение слота)
что требуется: необходимо выдать синхро импульс и далее перейти на чтение и через некий тайм аут прочитать его значение.
что нуна сделать: необходимо выдать нолик, необходимый тайм-аут, выдаём еденичку(!), переводим на приём, тайм-аут, чтение пина

Логика ясна если DS18 выдаёт "1". Только мне непонятно с передачей "0".... Неизвестно же, что будет передовать DS18. Если он будет передовать "0" зачем я буду "выдавать еденичку"??
Аватара пользователя
Gerik_PP
Открыл глаза
Сообщения: 59
Зарегистрирован: Вт ноя 07, 2006 14:14:16
Откуда: пос. Правдинский
Контактная информация:

Re: Проблемы с сетью 1-wire

Сообщение Gerik_PP »

kolobok0 писал(а):1) у вас 4 ноги заюзаны на усилители и 4 на переключения. а датчиков всего 4. Язык чешится спросить чего не заюзали ышо штук 20 - переключать переключатель, масштабирование и прочую, в данных рамках имхо не нужную вещь).

AN132, стр.8,9 (выкладывал выше):
Временной интервал чтения/записи "1" (Рис. 11 и 12; значения временных параметров см. в Табл. 4)
1)Активная подтяжка вниз APDR.
2)После достижения уровня VIAPO — активная подтяжка вверх (APU). Проверить логический уровень в момент MS (отсчет MS производится от начала временного интервала).

т.е. как я понял, чтобы определить уровень VIAPO без компаратора не обойтись. Соответственно подтяжка вниз и вверх на дополнительные пины. Получается на интерфейс 3 пина. Плюс 4 пина на переключение (мне от "звезды" обязательно надо уйти). Получается меньше, если я каждому датчику отдам по три пина... 7<12 )))
kolobok0 писал(а):я бы сделал следующее (если чисто по задаче):
1) выкинул бы всю коммутацию.
2) питание датчиков - от 5 вольт. обычно от того же самого, что и МК.

Я изначально так и сделал. Но уровень помех настолько большой, что датчик сходил с ума. При каждом конвертировании (раз в 5 сек.) значения темп. отличались в десятки градусов. Причём CRC была без ошибок. Спасли 12V с понижением до 5V непосредственно на стороне датчика.
kolobok0 писал(а):2) присмотритесь к схеме включения ds9503 фигура 4 если я правильно вижу из вашего аттача. Обратите внимание - там 4 резистора. и цифры ножек микросхемы посмотрите. т.е. два из нарисованных резисторов внутри милкосхемы, а два нужно подвесить внешнии. обычно это так-же 5 Ом - вполне..

Отдельное спасибо. Сразу не всосал, дельное замечание!!!
kolobok0 писал(а):задача какая? сделать чтоб работало или обязательно "коммутируемый 1-вайр микролан" ?

Собственно, для этого я всех тут и терзаю))) Хочу понять, что нужно сделать чтоб работало? На данный момент времени мне кажется чтоб работало, нужно делать коммутируемый 1 вире микролан.
P.S. Условия мягко говоря - оставляют желать лучшего (фото ниже). Витая пара на датчики проходит среди огромного количества других проводов, правда все слаботочные. Поэтому если нужно задействовать ишо 20 ног и микросхем для стабильной работы, я легко на это решусь. Уже год колупаюсь с этим девайсом и всё какие-то сюрпризы...
Изображение
kolobok0
Грызет канифоль
Сообщения: 296
Зарегистрирован: Ср дек 30, 2009 09:55:39

Re: Проблемы с сетью 1-wire

Сообщение kolobok0 »

Gerik_PP писал(а):....чтобы определить уровень VIAPO без компаратора не обойтись......Но уровень помех настолько большой, что датчик сходил с ума. При каждом конвертировании (раз в 5 сек.) значения темп. отличались в десятки градусов. Причём CRC была без ошибок. Спасли 12V с понижением до 5V непосредственно на стороне датчика.....P.S. Условия мягко говоря - оставляют желать лучшего (фото ниже). Витая пара на датчики проходит среди огромного количества других проводов, правда все слаботочные. ...



1) знаете, я про 600 метров не буду утверждать, но те дальности что Вы заявляете, среди слаботочки - это всё таки не тот вариант что написан в русском пэдээфе. Хотя тут Вам виднее - хочется, ктоже запретить то может!!! :)

2) а с чего Вы взяли, что помехи влияют? Вы точно уверены что выдержали весь протокол? где то проскакивала фраза - что датчики серии DS18.. сильно не любят когда к ним обращаются в момент конвертации-вычисления температуры. И я больше скажу - потому, что там нет АЦП :)
И более того - у вас то (с ваших слов) помеха вообще на сами данные не влияют(СКС приходит корректная!!!). и на канал связи с датчиком. Зачем вы пытаетесь навернуть схемотехнику нацеленную именно на канал связи??? или типа ключите ищите там где светлее - под столбом, а не где потеряли?

у вас проблема может быть:
а) с питанием (слабая, т.к. влияет и на CRC опосредовано)
б) с не правильным восприятием результата
в) с не правильным управлением датчиком.

заметьте - две проблемы которые могут быть = Вы сами ёжик в тумане... :)
причину связанную с каналом передачи данных у вас нет (ну и не могло быть на такие короткие длины) - тому корректная CRC подтверждение(с Ваших слов).

вопрос остался открытым:
Ваша задача какая? Вы говорите "понять". А факты ваших же опытов не видите!!! = НЕТ у Вас проблем с каналом... нету..
с уважением
(круглый)
ЗЫ

Я один умный вещь скажу, ты только не обижайся - твоя машина в соседнем дворе стоит, да! (из кинухи)

о баранах:
Вы как детектируете-ожидаете конец преобразования-конвертации температуры?

ЗЫ ЗЫ
Рекомендую начать с начала.
Сделайте идеальные условия, выкиньте всё кроме оригинального даташита на DS18B20 заюзайте схему подключения 1Wire устройств DS9503. Запустите всё на столе. Если не идёт - опять погружайтесь в даташит и в код. И так по кругу пока не задышит. увеличьте метраж на ваш максимальный. Положите кабель рядом со столом. Должно работать. Если нет - опять даташит-код. Можно глянуть осцилом на этой стадии, если упрётесь(что вряд-ли). Далее подключаете ваши провода из стен и опять решайте проблемы отсекая рабочую от не рабочей части. Где то по дороге косяк Ваш и всплывет к верху пузиком. :)
Аватара пользователя
Gerik_PP
Открыл глаза
Сообщения: 59
Зарегистрирован: Вт ноя 07, 2006 14:14:16
Откуда: пос. Правдинский
Контактная информация:

Re: Проблемы с сетью 1-wire

Сообщение Gerik_PP »

kolobok0 писал(а):о баранах: Вы как детектируете-ожидаете конец преобразования-конвертации температуры?

ЗЫ ЗЫ
Рекомендую начать с начала.
Сделайте идеальные условия, выкиньте всё кроме оригинального даташита на DS18B20 заюзайте схему подключения 1Wire устройств DS9503. Запустите всё на столе. Если не идёт - опять погружайтесь в даташит и в код. И так по кругу пока не задышит. увеличьте метраж на ваш максимальный. Положите кабель рядом со столом. Должно работать. Если нет - опять даташит-код. Можно глянуть осцилом на этой стадии, если упрётесь(что вряд-ли). Далее подключаете ваши провода из стен и опять решайте проблемы отсекая рабочую от не рабочей части. Где то по дороге косяк Ваш и всплывет к верху пузиком. :)


В общем, я так и сделал за исключением DS9503, осцила и внешнего подтягивающего (напомню, что свободных портов нет и все четыре DS.. висят на одном пине звездой). И получилось - на столе: всё работает хорошо. На объекте: по отдельности датчики работают без проблем. Если включить все, то CRC с ошибкой на одном из четырёх. Если на этот, который с ошибкой пробросить другой (временный провод) - все четыре работают. Если временный провод удлинить на несколько метров и опять включить все четыре - CRC с ошибкой но уже на другом датчике, провод которого я вообще не трогал. Здесь делаю вывод, нужно уходить от "звезды".
Но вот что меня настораживает больше всего - до этой проблемы сеть отлично(!) функционировала на протяжении месяца!!! Когда фаза луны сменилась начались выше упомянутые проблемы. Другими словами - ни с того ни с сего... Это убеждает меня ещё больше - НУЖНО УХОДИТЬ ОТ "ЗВЕЗДЫ". А чтобы с новой фазой луны сеть опять не "легла" хочу перестраховаться и сделать, может быть, чуть больше чем нужно... Из расчёта, как бы, на 600 метров :) Да простят меня наимудрейшие)))
P.S. Протокол - вроде всё правильно, проверял. А чтобы понять конец преобразования-конвертации температуры я его опрашиваю - если DS18B20 отвечает нулем, то конвертирование идет, если 1 – конвертирование выполнено и можно считывать температуру. (взял из Datasheet)
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Проблемы с сетью 1-wire

Сообщение Kavka »

Gerik_PP, вы писали, что у вас витой парой прокинуто. Обычной для компьютерной сети с 4 парами?
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
Gerik_PP
Открыл глаза
Сообщения: 59
Зарегистрирован: Вт ноя 07, 2006 14:14:16
Откуда: пос. Правдинский
Контактная информация:

Re: Проблемы с сетью 1-wire

Сообщение Gerik_PP »

Да. Неэкранированная витая пара 5-й кат. с четырьмя парами. Из них 3 жилы для DS..., 2 отданы на телефон (пока не подключён) и 3 свободны.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Проблемы с сетью 1-wire

Сообщение Gudd-Head »

Gerik_PP писал(а):Неэкранированная витая пара с четырьмя парами. Из них 3 жилы для DS...

Нэхарашо.
Попробуйте пустить по одной витой паре в паразитном режиме.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Проблемы с сетью 1-wire

Сообщение Kavka »

Да-да, разбивать пары не хорошо. Можно от звезды избавиться перейдя к цепочке. При паразитном питании это очень просто. А вот при отдельном питании может не получиться.
Вложения
1-wire-chain.png
(3.25 КБ) 772 скачивания
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
Gerik_PP
Открыл глаза
Сообщения: 59
Зарегистрирован: Вт ноя 07, 2006 14:14:16
Откуда: пос. Правдинский
Контактная информация:

Re: Проблемы с сетью 1-wire

Сообщение Gerik_PP »

Kavka писал(а):Можно от звезды избавиться перейдя к цепочке.

По вашему, увеличенная протяжённость сети почти до двухсот метров будет лучше, чем разбитые пары сейчас? Но согласен, что это тоже как вариант имеет место...

P.S. Понадобится дополнительный порт МК для сильной подтяжки (strong pull-up) на время конвертирования и на время записи в EEPROM
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Проблемы с сетью 1-wire

Сообщение Kavka »

Да, IMHO, такая цепочка будет намного лучше, чем разбитые пары да ещё и со звездой.
Витая пара на то и витая пара, чтобы избавляться от помех. А если пары разбить, то нейтрализации помех не будет.
Опять же IMHO, если уж разбивать, то парой должна идти 1-wire/gnd и отдельным проводом доп. питание (+12в). Земляной провод будет один. А можно доп. питание пустить по целой паре (по двум проводам), ведь нормально использовать оставшийся провод от пары уже не получиться.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Проблемы с сетью 1-wire

Сообщение Gudd-Head »

Gerik_PP писал(а):P.S. Понадобится дополнительный порт МК для сильной подтяжки (strong pull-up) на время конвертирования и на время записи в EEPROM

Ничего не понадобится, питать прямо с порта, у AVR он 40 мА тянет.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Gerik_PP
Открыл глаза
Сообщения: 59
Зарегистрирован: Вт ноя 07, 2006 14:14:16
Откуда: пос. Правдинский
Контактная информация:

Re: Проблемы с сетью 1-wire

Сообщение Gerik_PP »

Ещё как вариант рассматриваю применить DS2482 (I2C <-> 1-Wire (аппаратный)), у неё есть 2 адресных пина, можно до 4-х шт. на одной линии заюзать. Как раз получится разбить мою "звезду" и мои 4 датчика будут изолированы друг от друга.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Проблемы с сетью 1-wire

Сообщение Gudd-Head »

I²C вообще разрабатывался как межплатный (внутриблочный) интерфейс, так что сомневаюсь.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Gerik_PP
Открыл глаза
Сообщения: 59
Зарегистрирован: Вт ноя 07, 2006 14:14:16
Откуда: пос. Правдинский
Контактная информация:

Re: Проблемы с сетью 1-wire

Сообщение Gerik_PP »

Ну так и получится, в одном корпусе плата с четырьмя DS2482 соединится по I2C с главным МК, а уже к датчикам витая пара пойдёт от каждого DS2482.
Ответить

Вернуться в «Периферия»