Четырёхканальный ретранслятор 1-Wire на основе 12F629. СЭ№8/21

Автор: Андрей Шабронов (shabronov@ngs.ru)

Cистемы сбора данных часто сталкиваются с проблемой длинной линии, которая может решаться разными техническими методами. 
В данной работе приведено описание схемы и программного обеспечения метода ретрансляции сигнала для линии интерфейса 1-Wire на основе микроконтроллера 12F629 на четыре независимых направления. Представлен процесс ретрансляции данных для температурных датчиков DS1820, которые удалены на расстояние, превышающее допустимую длину линии, и поэтому не имеют условий устойчивой работы из-за искажений в кабеле. Ретрансляция сигналов создаёт альтернативу замене специальных микросхем коммутации интерфейса 1-Wire DS2409, выпуск которых прекращён. Работа микроконтроллеров данной серии в качестве ретрансляторов сигналов интерфейса 1-Wire позволяет добавлять новые функции систем измерения и оставить старые элементы интерфейса. Сохраняется наработанное программное обеспечение информационных систем, устраняется монополизм производителей специализированных микросхем и расширяется функциональность систем телеметрии.

Cтатья была опубликована в журнале СОВРЕМЕННАЯ ЭЛЕКТРОНИКА 8/2021, цифровая версия на сайте

Функциональная схема ретрансляции данных интерфейса 1-Wire на МК 12F629

Согласно информационной модели связи OSI [1] существуют семь уровней взаимодействия между компьютерами, или, в нашем случае, имеется два участка: компьютер – МК, МК – датчик DS1820. Поскольку нижний физический уровень интерфейса 1-Wire двунаправленный, ретрансляция данных может существовать только на верхнем, протокольном уровне обмена или сеанса. Необходимо выполнить ретрансляцию как повторение сеанса обмена, т.е. задействовать все уровни взаимодействия. На рис. 1 показана функциональная схема одного канала и временны́е диаграммы сеанса получения данных через ретранслятор на основе МК 12F629.

Рис. 1. Функциональная схема одного канала ретрансляции

Ретранслятор на МК 12F629 имеет свой уникальный номер по стандарту 1-Wire и определяется как устройство, которого нет в существующей базе производителя. При определении программой производителя выдаётся сообщение о ретрансляторе как о метке с неизвестного устройства. На рис. 2 представлена группа устройств c указанными номерами, которые определила программа iButton Viewer.

Рис. 2. Определённые устройства на шине 1-Wire с МК 12F629

Крайний байт справа идентифицирует функцию устройства, а именно:
  • 6C3C01D6077F6F28 – цифровой датчик температуры DS1820;
  • DE00000003C47D1F – «ветвитель» линии 1-Wire DS2409;
  • 5C000003F2B39609 – адаптер 1-Wire DS9097U;
  • 90012F6290040C5F – МК 12F629, который не определяется программой, так как ретранслятора нет в базе производителя устройств.
Видно, что программа определила два датчика температуры с байтом 0x28 и два ветвителя c байтом 0x1F, но отображено в развёрнутом виде на рис. 2 только по одному найденному устройству. Таким образом, ретранслятор можно определить имеющимся и разработанным ранее программным обеспечением. Датчики также определяются этим программным обеспечением и затем переключаются в линии каналов ретрансляции. Идентификационный номер 0x5F для ретранслятора автор установил выше номеров известных на данный момент устройств. Определение подключаемых каналов и их коммутация построены по аналогии с ветвителями DS2409. Используются два байта контроля и управления: первый для определения состояния и второй для подключения к каналу. Для выбора канала задаётся байт подключения, который определяется как: 0xCC – 1-й канал MAIN, 0x33 – 2-й канал AUX, 0xCF – 3-й канал MAIN2, 0x3F – 4-й канал AUX2. 

Пакет доступа к датчику DS1820 с номером 6C3C01D6077F6F28, если он подключён к 3-му каналу ретранслятора МК 12F629 с номером 90012F6290040C5F, выглядит так:
<RST>–0x55–<90012F6290040C5F> 0xCF–0xFF–0xDF–<6C3C01D6077F6F28>, где: 
  • <RST> – последовательность байт команды сброса, которая зависит от типа адаптера;
  • 0x55 – стандартный байт «назначить устройство 1-Wire», все последующие 8 байт – это номер адресуемого устройства на шине 1-Wire. В данном примере это <90012F6290040C5F>;
  • 0xCF – байт назначает 3-й канал MAIN2 для работы в ретрансляционном режиме;
  • 0xFF – байт определения состояния. Он возвращает данные о наличии 0 В или +5 В на выходах МК для контроля возможности последующей ретрансляции. Следовательно, если определится 0 В, то этот канал неисправен, и, возможно, какой-либо датчик замкнул линию. Кроме того, всегда возвращается 7-й бит = 0, если производится запрос, ретранслятор в наличии и отвечает;
  • 0xDF – байт команды на передачу данных. Всего используется три команды для управления режимом ретрансляции, которые определяются соответствующим битом в байте. Все другие биты должны быть равны единице:
    -   1011-1111=0xBF, 6-й бит = 0 – выполняется команда сброса всех режимов МК и установка выходных уровней в +5 В;
    -   1101-1111=0xDF, 5-й бит = 0 – выполняется назначение номера температурного датчика, ретранслируемого в используемый канал;
    -   1110-1111=0xEF, 4-й бит = 0 – выполняется приём данных ранее назначенного температурного датчика.
В алгоритме работы с датчиками требуется убедиться в исправности МК ретранслятора, передав номер и получив байт ответа. Далее – передать пакет с командой и номером датчика, выждать паузу на ретрансляцию и передать пакет на получение данных температуры. Поддерживается весь протокол обмена датчика DS1820, что даёт возможность назначить и другие режимы при необходимости. Время ретрансляции и получения ответа выбрано, исходя из максимально возможной точности, и не превышает 700 мс.

Принципиальная схема 

Принципиальная схема ретрансляции на микроконтроллере (МК) 12F629 [2] для использования с интерфейсом 1-Wire фирмы Dallas Semicondutor представлена на рис. 3. 

Рис. 3. Принципиальная схема четырёхканального ретранслятора 1-Wire на 12F629

Схема ретранслирует сигналы шины 1-Wire от разъёма XP5 (IN-1W) на четыре возможных направления: XP1 (AUX2), XP2 (AUX), XP3 (MAIN2), XP4 (MAIN). Выбор направления определяется программой верхнего уровня. Стрелками показано состояние приёма и передачи данных только для однонаправленных режимов на выводах МК. Режимы работы выводов МК для четырёх выходных каналов двунаправленные и с внутренним «подтягивающим» сопротивлением, что обеспечивает постоянный режим «подтяжки» для датчиков DS1820.

Схема содержит узел управления на микросхеме U1 (12F629) и управляемый ключевой элемент на транзисторе Q1 (2N7000). 
Диоды D1…D5 (1n5817) выполняют защитные функции от возможных импульсов положительных и отрицательных напряжений, наводимых на линию интерфейса 1-Wire. Конденсатор C1 фильтрует возможные импульсные помехи по линии питания +5 В. 

Поскольку интерфейс 1-Wire двунаправленный, выходные каналы ретрансляции МК установлены на передачу и с «подтяжкой» от внутреннего источника. Приём 1-Wire осуществляется через вывод 4 (GP3), который для данного семейства МК всегда функционирует только на приём.
Таким образом, управление МК осуществляется в стандарте 1-Wire. Через вывод 4 (GP3) сигналы принимаются и через вывод 7 (GP0) передаются в линию 1-Wire. 

Передачу сигнала выполняет управляемый транзистор Q1(2N7000), который замыкает шину 1-Wire к уровню 0 В и тем самым формирует из него информационный сигнал нуля или единицы стандарта 1-Wire для приёма на компьютере. 

Временны′е интервалы замыкания формирует МК U1(12F629). При использовании внутреннего RC генератора в режиме работы 4 МГц погрешность сигналов управления составляет ±1 мкс, что не вызывает ошибок в сигналах при приёме и идентификации данных интерфейса 1-Wire.

Необходимо учесть дополнительный потребляемый ток МК в 1…3 мА по шине +5 В и возможное падение напряжения для длинной шины питания.

Конструкция 

Схема и все компоненты собраны на печатной плате и предназначены для монтажа «под винт». На рис. 4 представлена 3D-модель платы. Печатная плата разработана в среде проектирования DipTrace, проект доступен в каталоге программ [3] и находится в файле sh_12F629_reg1_v1.zip.

Предусмотрена установка транзистора в разных исполнениях ТО-92 и SOT-23. МК устанавливается через переходную колодку DIN-8, что позволяет модифицировать и изменять программное обеспечение и возможные функции использования.

Программное обеспечение 

Для работы схемы ретранслятора используется программное обеспечение, совместимое с интерфейсом 1-Wire, которое представлено в [3]. Это программа термометрии silos_v3.exe, подготовленная на языке программирования FORTH [4]. Программа содержит все компоненты для программирования и модификации режимов работы МК 12F629 [2], а также печатные платы и схемы. 

Программный код формируется в режиме «восстановление всех файлов – компиляция нового кода» [5] и доступен в [3], файл silos_v3.exe
Рассмотрим несколько поясняющих примеров функционирования программного обеспечения для схемы ретранслятора на 12F629 на языке программирования FORTH. Текст программы находится в файле silos_v3_12f629_regn_v1.f и компилируется через выполнение общей программы silos_v3.f с помощью файла 100_spf4.exe. Для уточнения, где описание и где программа, фрагменты текста программ, «вырезанные» из основного текста, размещены в цветных врезках. 

Внимание: так как компиляция занимает время, подключение библиотек для приведённых других авторских устройств в данной программе переведено в комментарий – косая черта влево. При компиляции сразу нескольких библиотек их состав «пересекается», и в этом случае будет выдаваться сообщение о дублировании форт-слов. Дублирование форт-слов создаёт избыточность кода и является источником ошибок в работе основного алгоритма программы сбора данных термометрии.
 

Пример 1. Запрос по шине ретранслятора к датчикам с использованием косвенной адресации

Данные о номере датчика передаются от главного ПК и записываются в ячейки с названием NUM_BT0...7.
0x2B equ NUM_BT0 \ нач. байт приёма данных – 9300080100D00528, итого 8 регистров
 * * * \ регистры от 0x2B до 0x32 
0x32 equ NUM_BT7 \ конечный байт 
Для обращения к данным для чтения и записи восьми байт номера датчика и побитной передачи-приёма в канал ретрансляции используются регистры косвенной адресации. 
0x04 equ FSR \ адрес косвенного регистра для работ с INDF
0x00 equ INDF \ регистр косвенной адресации
Текущий используемый номер регистра находится в FSR, а действия с ним выполняются в INDF. 
Рассмотрим подпрограмму WORKS_DAN_MAIN_SBORS_NUM_BT# передачи сигнала сброса RST в канал MAIN ретранслятора с фрагментом ретрансляции номера термодатчика DS1820 методом косвенной адресации.
\ выдан сигнал RST и код байта 0x55, назначить номер датчика. Далее выдаём этот номер
 0x2B movlw \ в акм. первый байт данных хранения номера 
 FSR movwf \ передали в косвенный регистр значение регистра первого байта 
 0x8 movlw \ количество байт в номере, т.е. 8 байт
 N_1W8 movwf \ передали в счётчик учёта байт
 ORG @ m1 ! INDF movf \ из регистра в акм. Передали байт
 1 MAIN_OUT_8BT# \ подпрограмма передачи байта в шину main из акм. 
 0x80 movlw \ значение паузы на 50 мкс между байтами
 1 PAUSE_1W# \ выполняем паузу через подпрограмму 
 0x1 movlw \ единица для увеличения номера регистра байта данных
 FSR 0xF addwf \ складываем адрес FSR+1, т.е. переходим к сл. байту.
 N_1W8 0xF decfsz \ вычитаем 1 из счётчика байт и пропускаем, когда 0. Т.е. выйти из пп. 
 m1 goto \ повторяем следующие байты, если они не закончились.
Таким образом, косвенная адресация позволяет циклически обращаться к регистрам хранения данных. В данном примере полученные данные ретранслируются далее к датчику. 

Необходимо обратить внимание на паузу между передачами байта. 
С шиной +5 В можно от паузы отказаться. В этом случае пакет идёт «плотно». Если используется двухпроводный режим с паразитным питанием, то без паузы этого питания не хватает для работы датчика DS1820, поскольку сопротивление подтяжки в МК 12F629 составляет около 10 кОм. 

Пример 2. Передача кода формата 1-Wire в шину ретранслятора

Передаётся байт из аккумулятора в шину ретранслятора в подпрограмме форт-слова MAIN_OUT_8BT#
BYAT_1W movwf \ данные в регистр из акм. Передача бита=0 
 0x8 movlw \ количество бит в байте, т.е. кол-во циклов
 N_1W movwf \ cчётчик загрузили
ORG @ m1 ! porta 0x5 bcf \ GP5 установили в 0 – это вывод ретранслятора MAIN  
 BYAT_1W 0x0 btfsc \ проверка на 0 b=0. Пропустить, если =0
 m3 goto \ пришла 1, далее передача, что это 1 сигнал \_/-----
 m5 goto \ пришло 0 
ORG @ m3 ! 0x2 movlw \ ставим значение 2 для сигнала =1= 
 1 PAUSE_1W# \ -- пп паузы 
 0x18 movlw \ cтавим значение для периода при сигнале 1 
 m4 goto \ уходим на выключение 
ORG @ m5 ! 0xC movlw \ ставим значение 0xC для сигнала =0= 
 1 PAUSE_1W# \ -- пп паузы 
 0xE movlw \ ставим значение для периода при сигнале 0 
ORG @ m4 ! porta 0x5 bsf \ GP5 установили в 1 выкл.__/-- оконч. имп. 
 1 PAUSE_1W# \ -- пп паузы по данным в акм. 
 BYAT_1W 0xF rrf \ сдвигаем вправо байт с данными для следующего бита
 0x1 movlw \ единица для декремента счётчика бит
 N_1W 0xF decfsz \ вычесть 1 из f и пропустить, когда будет 0, т.е. выйти из пп 
 m1 goto \ продолжаем передавать или выходим
В данном примере для поддержания одинакового периода передачи сигнала устанавливается разная задержка при сигнале 1 или 0, но так, чтобы общая длительность была одинаковая. То есть период одинаков и равен 0x1A. Cигнал нуля и пауза нуля – 0xC + 0xE = 0x1A, и сигнал единицы и пауза единицы – 0x2 + 0x18 = 0x1A.

Для частоты МК 4 МГц представленные в программе задержки формируют сигналы в 10…12 мкс и 45...50 мкс стандарта 1-Wire для передачи единицы и нуля.

Пример 3. При нажатии разных клавиш формируется разное звуковое подтверждение

Рассмотрим более высокий уровень программирования на FORTH. Наработано огромнейшее количество прикладных программ и библиотек в системе Windows. Покажем использование DLL-библиотеки на примере звуковой сигнализации. В системах термометрии зачастую удобно привлекать внимание персонала разными звуковыми комбинациями или мелодиями. Далее приведён пример программы, которая при нажатии на клавиши клавиатуры выдаёт звуковые сигналы с разными частотой и длительностью или проигрывает файл формата mid/kar. 
\ начало текста программы
WINAPI: mciSendStringA WINMM.DLL 
 WINAPI: Beep KERNEL32.DLL   
 WINAPI: ShellExecuteA SHELL32.DLL 
 CREATE ADR1 0x100 ALLOT  
: CONCAT-TO  >R  2SWAP SWAP OVER 
 R@ SWAP MOVE R> +   SWAP MOVE ;
: CONCAT 2OVER NIP OVER + DUP
 >R 1+   ALLOCATE THROW DUP
 >R CONCAT-TO R> R> 2DUP + 0 
 SWAP C! ;
: MID1  0 0x100 ADR1 
 S" OPEN muz.mid ALIAS MUSIC"
 DROP  mciSendStringA 
 0= IF  CR S" OK muz.mid " TYPE
 0 0x100 ADR1 S" PLAY MUSIC" DROP
 mciSendStringA  DROP  ELSE 
 S" ? muz.mid" TYPE THEN  ;
: MID2 CR S" stop muz.mid " TYPE
 0 0x100 ADR1 S" STOP MUSIC"  DROP
 mciSendStringA  DROP 0 0x100  
 ADR1  S" CLOSE MUSIC"  DROP   
 mciSendStringA  DROP ;
: DIRM ( An n -- ) DROP 5 0 0 3 
 ROLL S" OPEN" DROP 0 
 ShellExecuteA DROP ;
: DIR1 S" http://90.189.213.191:"
 S" 4422/poteha/mid/muz.mid"
  CONCAT  DIRM ;
: DIR2 S" https://disk.yandex."
 S" ru/d/duzQ8WKSeH4opA"
  CONCAT DIRM ;
: ZWUK   Beep DROP ;
: ZW1 DUP 0x10 * 0x100 SWAP 2DUP
  . .  ZWUK ; DECIMAL 
: PIK_OT_KEY CR S" Выход - ПРОБЕЛ"
 S"  продолжить - любая другая" 
 2SWAP ANSI>OEM TYPE ANSI>OEM 
 TYPE 1 BEGIN  ZW1 
 DUP [CHAR] 0 = IF MID1 THEN 
 DUP [CHAR] 9 = IF MID2 THEN 
 DUP [CHAR] 8 = IF DIR1 THEN 
 DUP [CHAR] 7 = IF DIR2 THEN 
 DROP KEY DUP 0x20 = UNTIL  ;
 0 TO SPF-INIT? 
 ' NOOP MAINX ! 
 ' PIK_OT_KEY   TO <MAIN>  
 S" test2.exe" SAVE 
 BYE 
\  окончание текста программы
Программа компилируется и сохраняется в формате приложения. Для работы программы нужно создать файл, например test.f, блокнотом, скопировать текст от комментария \ начало … до комментария \ окончание … и сохранить. Косая линия влево – это начало комментария до конца строки, и также комментарии заключены в круглые скобки внутри форт-слов. Открыть файл test.f с помощью файла 100_spf4.exe, т.е. выполнить программу. Программа выполнится и сформирует файл приложения test2.exe

Этот файл необходимо выполнить и, нажимая клавиши, проверить звуковые комбинации для контроля. Для проигрывания звуковых файлов формата mid или kar (файлы для караоке) нажмите кл. 7, чтобы открыть архив «облачного хранения». Скопируйте желаемый музыкальный файл в рабочее место программы и переименуйте вместе с расширением в имя muz.mid. Возможно воспроизведение и других типов звуковых файлов, которые поддерживает данная библиотека: avi, wav и т.д. Смотрите описание версии библиотеки. Программа показывает вариант доступа к сетевым ресурсам. В форт-словах DIR1, DIR2 можно указать любой другой адрес или сайт, который откроется. Компилятор работает в Windows/XP/7/8/10 и доступен без ограничений [4]. 

Выводы

Свойства языка FORTH создают основу дальнейшего развития систем измерений методом сохранения всех компонентов исходной программы в исполняемом файле.

Если расширение и модернизация не требуются, то исполняемый файл в работе функционирует как исполнитель. Если требуется модернизация, то из «тела» исполняемого файла извлекаем все файлы и компоненты для модернизации и расширения. После модернизации вновь формируем исполняемый файл, содержащий все созданные изменения. 

Предложенная схема и программа ретрансляции сигналов интерфейса 1-Wire на универсальном микроконтроллере позволяет увеличить расстояние измерений при сохранении исходных измерительных узлов. 

Литература

  1. Сетевая модель OSI // URL: https://info-comp.ru/sisadminst/161-modelosi.html.
  2. Описание 12F765 // URL: http://www.microchip.ru/files/d-sheets-rus/PIC12F629_675.pdf.
  3. Каталог программы, платы // URL: http://90.189.213.191:4422/doc_sh/toguchin_2020n/test/; копия в «облачном хранилище» // URL: https://disk.yandex.ru/d/aKAo_DVD1LzrUQ
  4. Черезов А. Описание языка FORTH spf4.exe // URL: http://www.forth.org.ru/.
  5. Применение интерфейса 1-Wire… // Современная Электроника. 2020. № 8. С. 42–45.



Поделиться: