Вы находитесь на странице: 1из 10

5/1.

“Въезд” в принцип работы однопроводного, последовательного интерфейса


1-Wire, на примере работы с датчиком температуры DS1820 (DS18S20).

Сразу обращаю Ваше внимание на то, что слово “однопроводный” не следует


понимать буквально.
Речь идет не об одной “проволочине”, а как минимум, о двух (сигнальный провод и
корпус) или о трех (сигнальный провод, корпус, плюс источника питания).
Что это за “зверь” такой с названием “1-Wire”?
Если рассуждать “глобально”, то это “младший брат” интерфейса I2C, так как
устройства, работающие по этим интерфейсам, являются устройствами одного и того
же, последовательного типа.
А вот далее имеется специфика, связанная с тем, что для работы по интерфейсу
1-Wire не нужна линия такта (вспомните про SCL).
С одной стороны, по понятным причинам, это есть “зер гут”, а с другой стороны,
вроде как, не очень (выигрыш в одном за счет проигрыша в другом).
И в самом деле, “мастер”, кроме того, что он должен обеспечить “циркуляцию”, по
одной разъединственной линии, байтов данных, должен еще и тактировать “помощника”
(командовать им), причем, по той же самой линии.
Далее, я буду называть эту линию “сигнальной линией” или просто “линией”.
Следствием наличия такого “гибрида” является то, что, по сравнению с интерфейсом
I2C, интерфейс 1-Wire является более медленным.
Это, конечно же, несколько ограничивает область его применения, но существует
множество различных устройств, для которых не нужны высокие скорости работы.
А вот здесь-то, интерфейс 1-Wire становится просто выгодным, и особенно в тех
случаях, когда речь идет о нескольких датчиках, подключенных параллельно, к одной
длинной, физической линии, и показания которых последовательно считываются неким
“материнским” устройством, подключенным к другому концу этой линии (вынос датчиков
на большое расстояние).
В этом случае, “шкурный” интерес очевиден, так как задействуется минимальное
количество “проволочин”.
При таком раскладе, можно последовательно считывать результаты замеров с
нескольких датчиков, обеспечив тем самым не только постоянное и точное слежение
за контролируемыми параметрами (в данном случае, температуры) некоего процесса,
но и вмешательство в него (при помощи “мастера”), с целью автоматического
“запихивания” этих параметров в “границы дозволенного” (в случаях их выхода за эти
“границы”).
Таким образом, речь идет об эффективных, регулирующих устройствах с обратными
связями.
А вот это уже очень серьезно и может принести конструктору не только моральное, но
и материальное удовлетворение. Плюс, немалая польза для дела.
Возможна ли реализация такой функциональности?
Возможна, и не только этой, но и других функциональностей.
“Яйцеголовые” “наплодили” достаточно большое количество 1-Wire-устройств различной
функциональности, с помощью которых можно решать совсем не слабые технические
задачи.
Вот эту “конфетку” я и предлагаю Вашему вниманию.
Пока она подвешена высоко на ниточке, и имеющаяся в наличии “прыгучесть”, пока, не
позволяет “вкусить ее прелестей”, но это только раззадоривает.
Все, дорогуша, глаз на тебя положен и дни твои сочтены. К тому же, запретный плод
сладок.
После такого рода “настройки внутренних функций”, можно приступать к делу.
“Окидываю оценивающим взором поле будущей битвы”.
Мать честная …, сколько тут всяких “прибамбасов”!
“Кавалерийским наскоком” не обойдешься.
Вражина ощетинился как испуганный ежик.
Вывод: нужно брать измором, травить химией и применять коварные замыслы.
Для начала, нужно “взять языка”, а то ведь совершенно не понятно, с какого бока
влезть в этот “черный ящик”.

1
После того, как с “языком” поработают “особисты”, можно будет “вычислить дыры и
щели”, через которые можно “просочиться”.
А вот и он, легок на помине.
Кто таков? Откуда родом?
“Микросхема цифрового термометра DS1820. Мать - интерфейс 1-Wire. Отец - фирма
Dallas”.
Опять буржуй. Опять перевоспитывать (русифицировать)…
У тебя с мозгами-то как? Амнезия (что за напасть такая …) имеет место быть?
“Так точно, имеет. Страдаю врожденным скудоумием, но в труде я неукротим как
торнадо. Только покажите место и задайте размеры – моментом траншею вырою”.
Ты, случайно, не ехидный?
“Что это такое? Не понимаю”.
Зато мне понятно: и в самом деле, у курицы мозгов больше.
А ну-ка открой черепную коробку, я гляну.
Да … 9 байтов оперативной памяти, 8 байтов ПЗУ и 2 байта EEPROM памяти это
далеко не гроссмейстер.
Ну ничего, доцента из тебя не получится, но на работягу (гегемона) вполне потянешь.
Дай мышцу пощупать.
Фантастишь!
Такие кадры нам очень нужны, а то шибко умных развелось выше нормы.
Так и норовят в белые воротнички залезть.
А кочегарить, траншеи рыть, двор мести, у горна стоять и т.д. кто будет?
Короче, хоть с мозгами у тебя и проблемы, но мускулатура и природная
“стахановость” уважение внушают.
С учетом рабоче – крестьянского происхождения, бормашину и выкручивание
конечностей применять не буду, но, на всякий случай, выпорю.
Это, по-любому, не помешает.
Баста. Партполитработа закончена и пора браться за настоящую работу.
Знакомлю широкую общественность с предметом детективного расследования.

DS1820 и DS18S20 принципиально ничем не отличаются друг от друга, просто


DS18S20 это более поздняя версия DS1820.
Паспортный диапазон работы датчика от -55 до +125 градусов Цельсия.
Шаг замера температуры - 0,5 градуса Цельсия.
Можно сделать и 0,1, но зачем раньше времени “пупок надрывать”?
Так что, “привязываюсь” к цифре 0,5.
DS1820 является м/схемой цифрового термометра с достаточно “навороченным”
принципом формирования результата замера.
Лезть в этот принцип нет никакой практической необходимости.
Пусть этим забивают себе головы разработчики (небось хлеб с икоркой кушают).
Для практика, главное - конечный результат.
А он внушает уважение: погрешность измерения достаточно низка (см. график).
Эта “штуковина”, размером с транзистор КТ503, заменяет достаточно солидный
измерительный прибор.
Есть только одна сложность: DS1820 “своего мнения не имеет”, и для того чтобы
заиметь указанное выше “счастье”, им нужно управлять.
DS1820 это “подчиненное” устройство (“раб”), которое не формирует внешнего такта
(так же, как и 24Схх).
2
Таким образом, речь идет о стандартной “связке” типа “мастер – помощник”, но только
работающей не по двум линиям (вспоминаем SDA и SCL), а по одной.
По названию сигнального вывода датчика, буду называть ее линией DQ.
Так сколько же всего “проволочин” нужно тянуть от “мастера” к DS1820?
По питанию, DS1820 имеет 2 режима работы:
1. Питание (+5в) подается по отдельной “проволочине”.
В этом случае речь идет о 3-проводной физической линии (+5в, корпус, линия DQ).
2. DS1820 получает питание с линии.
В этом случае, речь идет о 2-проводной физической линии.
На первичной стадии “въезда”, забивать себе голову пунктом 2 преждевременно,
поэтому, далее, работаю по 1-му пункту.
Аппаратная часть интерфейса 1-Wire “ваяется” по образу и подобию аппаратной части
интерфейса I2C (в части касающейся линии SDA).

Электрические цепи питания не обозначены.


Синим цветом я выделил цепи прохождения сигнала при передаче, а зеленым - при
приеме (относительно “мастера”).
При этом, интерфейс 1-Wire, в части касающейся подтяжки, ориентирован на
концепцию интерфейса I2C.
Генератор тока обеспечивает, на выводе DQ, низкий логический уровень, когда линия не
подключена.
В простейшем случае, это высокоомный резистор.
Номинал внешнего, подтягивающего резистора Rп 4,7 – 5,1 Ком.
Как видите, ничего принципиально нового в этой картинке нет.
А вот далее, имеет место быть специфика.
Сразу обращаю Ваше внимание на то, что, при управлении устройствами,
работающими по протоколу 1-Wire, имеют место быть “правила игры”, жестко заданные
разработчиками.
Заменять их на “самопальные” правила нельзя, иначе датчик, с тупостью “железяки”,
“покажет Вам кукиш”.
Формулирую самое “проматеринское” правило (начало всех начал):
полный цикл работы с датчиком DS1820 всегда должен начинаться с процедуры
инициализации.
Процедура инициализации это:
- процедура подготовки датчика к началу цикла замера температуры.
Это, как говорится, само собой разумеющееся.
Кроме того, в ходе дальнейшего исполнения этого цикла:
- процедура инициализации всегда должна предшествовать началу вывода “мастером”,
на сигнальную линию DQ, любой команды, обращающейся к содержимому ПЗУ
(постоянное запоминающее устройство).
Последнее имеет место быть как при работе с одним датчиком, так и при работе с
несколькими датчиками.
Что такое команды и как работать с ПЗУ, будет объяснено позднее.
А пока, для начала, нужно, в общем, уяснить, для чего нужна инициализация.
3
Примечание: здесь и далее, значения временных параметров взяты из фирменной,
технической документации.
До начала процедуры инициализации, на линии DQ, “мастером” должна быть
установлена единица, иначе не возможно будет сформировать активный перепад.
Можно провести аналогию с ждущим режимом, в случае работы по интерфейсу I2C.
Да так оно и есть: в рассматриваемом случае, также имеет место быть ждущий
режим, только в приложении не к двум, а к одной линии.
Процедуру инициализации всегда начинает “мастер”.
Далее следует уяснить “глобальное” правило: все спады импульсов (переход от 1 к 0),
формируемые “мастером” на линии DQ, являются активными, то есть, запускающими, в
DS1820, рабочие действия.
Особо обращаю Ваше внимание на то, что речь идет именно о спадах импульсов,
формируемых, на линии DQ, “мастером”, а не о спадах импульсов, формируемых, на
линии DQ, “помощником”.
Это связано с простым умозаключением: “помощник” не может сам собой управлять.
Посмотрите на нижнюю эпюру рис. 3.
На ней это хорошо видно: активны только спады, сформированные “мастером”.
Далее возникает законный вопрос: “Если активные перепады запускают действия
различной функциональности, то как разграничить эти функции”?
Иными словами, как “помощник узнает”, что “мастер” от него “требует” именно
инициализации, а не чего-то другого?
“А ларчик просто открывается”: разграничение функций осуществляется по временному
принципу.
В DS1820 есть “контролер” времени нулевого уровня на линии DQ.
В качестве этого “контролера” применяется одновибратор с перезапуском (принцип
работы такой же, как и у WDT).
Если время прохождения нулевых уровней скоротечно, то этот одновибратор никогда
не закончит формирование своего импульса (будет постоянно перезапускаться).
Если же нулевой уровень “заторчал” на линии DQ (то есть, импульса перезапуска нет
в течение продолжительного времени), то одновибратор закончит формирование своего
импульса, и факт “рождения” его заднего фронта будет свидетельствовать о том, что
“помощником” получена “указивка”.
Это эквивалентно разрешению на совершение следующего действия.
Обращаю Ваше внимание на то, что речь идет именно о разрешении (подготовке), а
не о самом действии.
Само действие запустится позднее, а именно, в момент окончания формирования
“мастером” нулевого уровня на линии DQ (отпуск линии).
Какова должна быть продолжительность импульса сброса?
Разработчики “тявкнули” так: не менее 480 мкс. Меньше - ни-ни. Больше - “зер гут”.
Ну ладно, через, например, 600 мкс. “мастер” отпустил линию DQ, и на ней, за счет
подтягивающего резистора, установилась единица.
При условии, что одновибратор с перезапуском завершил формирование своего
импульса и, тем самым, выдал предварительное разрешение на совершение
следующего действия, момент отпуска линии DQ “мастером” (переход от 0 к 1) будет
“воспринят помощником” как сигнал к началу практического осуществления этого действия.
4
Что это за действие?
“Помощник” должен отрапортовать “мастеру”: “Шеф, ваше приказание выполнено (или
не выполнено. Просьба повторить.). Под вашим мудрым руководством, готов к
дальнейшему труду и обороне”.
Что сие, по жизни означает?
А означает это то, что “помощник” выдает (все ОК) или не выдает (авария!), в линию
DQ, нулевой уровень, что является ответом на успешно принятый “помощником”
импульс сброса.
“Помощник” выдает в линию DQ этот нулевой уровень (ответ) с задержкой в 15 … 60
мкс. относительно момента окончания формирования “мастером” нулевого уровня.
То есть, имеет место быть некий “обмен любезностями” (двунаправленная работа).
Нулевой уровень ответа “помощника” будет “стоять на линии” в течение 60 … 240 мкс.
За это время “мастер” должен “подсуетиться” и считать с линии установившийся на
нем уровень.
Если это ноль, то программа исполняется далее, а если единица, то “назад и с
песней”, пока “тормоз коммунизма” не будет устранен.
Вопрос: “Обязательно-ли “мастер” должен “подсуетиться” или можно обойтись без этого”?
Ответ: при определенных условиях, можно.
И в самом деле, если имеет место быть короткая линия, с минимальными,
“паразитными” наводками (помехоустойчивая линия) или датчик находится в корпусе
“материнского” устройства, то анализ ответа на импульс сброса “мастер” может не
производить.
В этом случае, “мастер” просто “пережидает” (игнорирует) ответ “помощника”
(задержка), не предпринимая активных действий.
Это эквивалентно принятию “мастером” “на веру” факта безошибочной работы.
В случаях же, когда имеет место быть длинная линия или повышенный уровень
наводок, то, с целью минимизации количества ошибочных замеров температуры,
процедуру анализа ответа “помощника” на импульс сброса (с “оргвыводами”), нужно
обязательно включить в состав программы.
Следующий “постулат”: в основе правил работы по 1-Wire протоколу, лежат не
фазовые сдвиги (в наличии только одна линия), а задержки той или иной величины,
относительно перепадов, формируемых, на линии DQ, “мастером”.
Это “проходит красной линией” (специфика) по всему, что связано с подчиненными
устройствами, реализующими 1-Wire протокол (а не только в отношении
рассматриваемого случая).
Упомянутые выше паспортные интервалы времени, имеют разбросы.
Их наличие обусловлено тем, что, в DS1820, в качестве времязадающих, применяются
RC цепи, да к тому же еще и работающие в широком температурном диапазоне.
Даже с учетом термокомпенсации, в этом случае, технически, весьма проблематично
обеспечить минимальные разбросы.
Короче, что есть, то есть. Это нужно принять как данность.
При конструировании соответствующих устройств, нужно ориентироваться на величины
задержек несколько большие (ударение на “о”), чем соответствующие максимальные
величины временных интервалов, указанные в тех. документации, за исключением
процедуры считывания “мастером” уровней битов, устанавливаемых, на линии DQ,
датчиком DS1820.
В последнем случае, все наоборот (об этом - ниже).
Так как, в конечном итоге, суммарный объем “набора” этих задержек получается
достаточно “массивным”, то это, естественно, увеличивает время цикла замера, но, при
замерах температуры, это вполне приемлемо.
С учетом этого, получается очень даже “зер гут”.
Ну хорошо, процедуру инициализации “забацал” (начал полный цикл измерения), а
дальше-то что?
Что-то мерить нужно, но до этого, нужно адресоваться к выбранному датчику, дать
команду на осуществление замера, подождать, пока этот замер произойдет и считать,
после этого, показания термометра.
То что Вы прочитали есть простейшая (есть и “круче”) последовательность действий,
которую, по-любому, нужно реализовать.

5
Для начала, я буду ориентироваться именно на эту, простейшую последовательность
действий, причем, в случае применения всего одного датчика, соединенного с ПИКом
короткой (помехоустойчивой) линией.
Итак, “упираюсь” в систему команд.
Кстати, процедуру инициализации можно рассматривать как результат исполнения
“помощником” некой “технологической” команды, сформированной “мастером”.
Первым пунктом идет адресация к датчику (выбор датчика).
Для того чтобы стало понятным, какого именно рода должна быть первая, после
инициализации, команда, нужно “сходить на экскурсию” в “начинку” DS1820 и кое-что
прояснить.
К одной линии DQ может быть подключено до нескольких десятков датчиков DS1820.
Возникает вопрос: “Как активировать тот или иной датчик (адресоваться к тому или
иному датчику), ведь активным может быть только один”?
И в самом деле, если активными будут несколько датчиков, то ничего хорошего из
этого не выйдет.
Вопрос очень принципиальный, и его нужно решать в первую очередь (после
завершения процедуры инициализации).
Вывод: после завершения процедуры инициализации, должна начаться процедура
выбора конкретного датчика (какого именно, определяет конструктор).
Процедура выбора конкретного датчика достаточно “хитрая”, и в ее основе лежит
принцип (пока, в общем виде) сравнения результата соответствующих вычислений, с
контрольной суммой.
Если результат вычисления и контрольная сумма совпадают, то считается, что “связка
мастер-помощник” готова к дальнейшей работе, и ее можно продолжить.
Если имеет место быть несовпадение, то цикл сравнения либо повторяется до
получения совпадения, либо происходит блокировка устройства, либо выдается сигнал
тревоги, либо … (понапридумать можно много всякого).
Далее, в случае совпадения, “мастер”, после использования специальной команды,
передает в линию адрес устройства (код), после чего, до следующего импульса
сброса, на команды “мастера” будет “откликаться” только тот датчик, который имеет
такой адрес.
Так вот, в каждый DS1820, на заводе изготовителе, “намертво зашивается” байт кода
семейства (10h), 6 байтов серийного номера и байт контрольной суммы, причем, все
это “добро”, для каждого DS1820, строго “индивидуально” (повторений нет).
Куда зашивается?
В ПЗУ (постоянное запоминающее устройство).
После заводской прошивки ПЗУ, перепрограммировать его уже нельзя, и поэтому
указанные выше байты, как бы, “клеймят на веки вечные” конкретный DS1820,
вследствие чего он приобретает свой признак, по которому “мастер” сможет его
идентифицировать (выбрать из кучи).
Такой способ идентификации, хотя и достаточно хлопотен, но позволяет адресно
обратиться к любому датчику из числа подключенных к сигнальной линии DQ.
А если датчик один?
В этом случае, нужно применить специальную команду пропуска процедуры адресации
Skip ROM (см. ниже), но, фактически, речь идет не о пропуске процедуры адресации,
а о запуске простейшей процедуры адресации. Имейте это ввиду.
Обращаю Ваше внимание на то, что, в части касающейся ПЗУ, я не стал углубляться
в детали. Это произойдет позднее, по принципу “от простого к сложному”.
На данном этапе “въезда”, достаточно и общего представления.
Предположим, что процедура адресации благополучно завершилась.
Что дальше?
А дальше, “мастер” должен выдать команду на запуск процесса преобразования
температуры, подождать некоторое время, чтобы этот процесс завершился и (без учета
некоторых “формальностей”) считать этот результат из оперативной памяти DS1820.
Таким образом, DS1820, кроме ПЗУ, имеет в своем составе еще и некую область
оперативной памяти (по аналогии с ПИКами), в 8-битные регистры которой (9 штук)
либо записываются, либо из них считываются некие байты различной функциональности.

6
Кроме того, имеется “слабосильная” область EEPROM памяти (2 ячейки), в ячейки
которой можно либо записать байты из соответствующих регистров области оперативной
памяти, либо считать байты из ячеек в эти регистры (на рис. 4 показано стрелками).

Изначально, эта картинка может навести на грустные мысли, но спешу снова Вам
напомнить, а заодно и обрадовать: на первых порах, я буду работать только с одним
датчиком, подключенным к ПИКу при помощи короткой линии.
На практике, это означает то, что процедуру адресации можно упростить до уровня
примитива.
Для обеспечения этого, имеется специальная команда, о которой я упоминал выше.
Кроме того, я не буду задавать пределов температуры и не буду вычислять значение
температуры с точностью до 0,1 градуса Цельсия.
А раз это так, то речь идет о задействовании в программе всего 2-х регистров,
названия которых на рис. 4 выделены синим цветом.
С остальной памятью буду разбираться позже.
Что из себя представляют регистры старшего и младшего байтов температуры?
Это обычные 8-битные регистры оперативной памяти, в которые, после окончания
процедуры замера температуры, записываются байты (результаты) этого замера, и из
которых, впоследствии, их можно считать, например, с целью их дальнейшей
обработки и вывода на индикацию.

7
Старший байт температуры содержит в себе знак температуры (“+” или “-“).
Для того чтобы “извлечь” из младшего байта температуры число, отражающее
значение температуры, нужно:
1. Проанализировать состояние младшего бита байта.
Если бит №0=0, то этому соответствует ноль после запятой (… ,0), а если бит №0=1,
то этому соответствует пятерка после запятой (… ,5).
2. Разделить число, “лежащее” в регистре младшего байта температуры, на 2.
Например, для самой верхней строки таблицы: FAh = .250 : 2 = 125.
В конечном итоге, получается 125,0 градусов Цельсия.
Итак, первый “вираж” закончен.
Конечно, не густо, но “контуры” обозначились.
Захожу на второй, причем, с поправкой на упрощенный вариант разрабатываемого
устройства.
Теперь нужно, в общем виде, разобраться с командами.
Их достаточно много (11 штук), но, в соответствии с техническим заданием на
разработку, требуются не все, а только три.
Отдельная команда представляет собой один байт со строго заданным числовым
значением.
Приняв такого рода байт, DS1820 “конфигурирует” свою электронную “начинку” под
выполнение того действия, которое определяется числовым значением команды.
Итак, требуются следующие команды:
***********************************************************************************************************************************************************
Skip ROM (CCh). Эта команда позволяет пропустить процедуру адресации и тем самым
сэкономить время, в случае наличия только одного датчика.
***********************************************************************************************************************************************************
Convert T (44h). Эта команда запускает процесс преобразования температуры.
***********************************************************************************************************************************************************
Read Scratchpad (BEh). Эта команда позволяет считать, из области оперативной памяти,
результат замера температуры .
***********************************************************************************************************************************************************
Темно – красным цветом выделены общепринятые (стандартные) названия команд, а
синим цветом – их числовые значения (они “фигурируют” в тексте программы).
Ну и ладненько. Уже легче (и еще как! 3 это не 11).
С остальными командами целесообразно разобраться по мере приобретения
“матерости”.
Что дальше?
Дальше нужно разобраться, как передается бит и как принимается бит, причем, без
“привязки” к какой-то функциональности передаваемых или принимаемых байтов, в
состав которых они входят (в данном случае, биту не присуща функциональность).

При передаче “мастером” битов, состояние линии DQ полностью им определяется


(нижняя эпюра повторяет верхнюю).
8
Передача байта (а также и прием байта) начинается с младшего его бита.
Передача бита начинается импульсом низкого уровня, длительность которого лежит в
пределах 1…15 мкс.
Для синхронизации DS1820 (а также и других 1-Wire-устройств) с “мастером”,
используется переход от 1 к 0 (показано синим цветом).
После прохождения строба, в DS1820 запускается схема временной задержки, которая
определяет момент считывания датчиком данных с линии DQ.
Номинальное значение этой задержки составляет 30 мкс., однако, оно может
колебаться в пределах 15…60 мкс. (отмеряется от строба).
За импульсом низкого уровня следует передаваемый бит.
Он должен удерживаться “мастером”, на линии DQ, в течение 60…120 мкс. (отсчет от
строба).
Процедура передачи бита завершается переводом шины в состояние высокого уровня
на время не менее 1 мкс., причем, этот высокий уровень, “мастер” может выставлять на
линии DQ не ограниченное (сверху) время.
Этот интервал времени практически всегда больше 1 мкс., так как, прежде чем вывести
на передачу следующий бит, “мастер” должен исполнить несколько команд, что есть
задержка, автоматически обеспечивающая выполнение данного условия.

При чтении “мастером” битов, вырабатываемых DS1820, циклы чтения битов формирует
“мастер”.
Цикл чтения бита “мастер” начинает импульсом низкого уровня длительностью
1…15 мкс.
Затем “мастер” должен освободить (отпустить) линию, чтобы уровень бита,
передаваемого DS1820, установился на линии.
По переходу из 1 в 0, DS1820 выдает на линию бит и запускает схему временной
задержки, которая определяет, как долго этот бит будет присутствовать на линии.
Это время находится в пределах 15…60 мкс.
Здесь кое-что нужно пояснить.
Если вывод бита (со стороны DS1820) происходит по стробу (переход от 1 к 0), то
при выводе, на линию DQ, бита с уровнем 1, уровень этого бита сможет установиться
на линии DQ только после прохождения импульса низкого уровня, вырабатываемого
“мастером” (низкий уровень “шунтирует” высокий).
Есть ли в этом признаки электрического конфликта (объединение выходов “мастера” и
“помощника”)?
Формально, есть, но фактически, нет, так как транзистор каскада с открытым стоком
(на рисунке обозначено как ОС) DS1820 закрыт, да и подтягивающий резистор
достаточно высокоомен.

9
Так что, этот так называемый “конфликт”, по факту, конфликтом не является (это как
слону дробинка).
И еще одно пояснение.
В части касающейся цикла приема “мастером” бита с нулевым уровнем, на рис. 7
разрисован случай наличия максимального интервала времени установки “помощником”
уровня нулевого бита на линии DQ (60 мкс.).
Реально же, этот интервал времени меньше.
Соответственно, интервал времени отпуска линии (1 за счет подтягивающего резистора)
будет больше того, который Вы видите в правой части нижней эпюры.
И последнее.
Для того чтобы на линии, которая всегда обладает некоторой емкостью,
гарантированно установился уровень бита, требуется некоторое время.
Поэтому, момент считывания уровня бита “мастером” должен отстоять как можно
дальше, но не более чем на 15 мкс., от строба (имеет место быть ориентировка на
минимальную продолжительность интервала времени установки уровня бита на линии).
Особенно это актуально для длинных линий, обладающих значительной емкостью.

В следующем подразделе, изложенная выше информация будет применена на


практике.
В “железе”, устройство я уже сделал и теперь нужно только объяснить его работу
(“живописи” много).
Заодно, на конкретном примере, детально разберемся с базовыми процедурами
1-Wire протокола.
Выражаю искреннюю признательность Альберто за предоставленную им техническую
информацию.
Программу под упомянутое выше устройство, в части касающейся работы по протоколу
1-Wire, я также “сваял” на основе подпрограммы, которую он мне предоставил.

"Практикум по конструированию устройств на PIC контроллерах"      http://ikarab.narod.ru       E-mail: karabea@lipetsk.ru

10