Фильтр по тематике

Замена DS2409 на 12F629

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

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

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

Схема выполняет «ветвление» или «разделение» шины 1-Wire на участки, поэтому используется термин «схема ветвителя» или «ветвитель». Стрелками показано состояние приёма или передачи данных для соответствующего вывода МК.

Схема содержит узел управления на микросхеме U1 (12F629) и управляемые ключевые элементы на транзисторах Q1…Q5 (2N7000).

Диоды D1…D3 (1n5817) выполняют защитные функции от возможных импульсов положительных и отрицательных напряжений, наводимых на линию интерфейса 1-Wire. Конденсатор C1 фильтрует возможные импульсные помехи по линии питания +5 В.

Поскольку интерфейс 1-Wire двунаправленный, для коммутации сигналов используется последовательное включение двух транзисторов от одного сигнала управления. Транзисторы Q 1, 2 управляются от вывода 6 (GP1) МК U1 (12F629), транзисторы Q 3, 4 управляются от вывода 3 (GP4) МК U1 (12F629).

Резисторы R1…R4 выполняют функцию «подтягивания» линии 1-Wire к положительному уровню +5 В. При установке МК на выводах управления высокого логического уровня +5 В управляемые транзисторы открываются, и линия разъёма XP3 (1w) соединяется с разъёмами XP1 (aux-1w) или XP2 (main-1w). Суммарное сопротивление соединения не превышает одного Ома.

И наоборот, при установке МК на выводах управления низкого логического уровня 0 В транзисторы закрываются, и суммарное сопротивление устанавливается максимально большим. Выходная линия отключается, и при этом выполняется «подтяжка» к уровню +5 В через резисторы R2, R3.

Контроль выходных шин MAIN-1W и AUX-1W на возможное короткое замыкание выполняется МК через вывод 2 (GP5) и вывод 5 (GP2). Таким образом, передавая сигнал запроса, можно определить исправность коммутируемых линий.

Управление МК осуществляется в стандарте 1-Wire. Через вывод 4 (GP3) сигналы принимаются от шины 1-Wire и через вывод 7 (GP0) передаются в линию 1-Wire.

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

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

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

Конструкция

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

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

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

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

Программный код формируется в режиме «восстановление всех файлов – компиляция нового кода». Для получения кода и дальнейшей прошивки его через программатор требуется выполнить следующую последовательность действий с программой silos_v3.exe [3]:

  • скачать архив по адресу [3] и распаковать исполняемый файл silos_v3.exe в отдельной папке;
  • выполнить программу и в предлагаемом меню выбрать режим «восстановление всех исходных файлов» (нажать цифровую клавишу 3);
  • программа выполнит восстановление всех исходных файлов и остановится;
  • перейти в созданный каталог test_monsys_exe и выполнить командный файл start_new_versii.cmd;
  • программа выполнит компиляцию нового кода, а также создаст каталог hex_12f629_2409_v1, в котором созданы файлы для МК. Данные файлы имеют номера, которые привязаны к номерам устройств идентификации протокола 1-Wire. Например, файл hex_12f629_2409_v1_D2012F6290040B1F.hex предназначен для схемы ветвителя с номером D2012F6290040B1F. Для работы программы термометрии этот номер записывается в файле инициализации к соответствующим датчикам DS1820, чтобы обращаться именно к данному ветвителю c установленными для него датчиками.

Полученные файлы нужно записать в МК любым программатором для данного типа МК. Если не требуется модернизация программы, например, изменение кодов для обращения к ветвителям, то сформированный каталог можно удалить. Если изменили коды обращения, то оставляете сформированный файл silos_v3.exe и удаляете все предыдущие файлы. После компиляции сформированный файл silos_v3.exe содержит все новые изменения для работы с новыми номерами идентификации ветвителя. В новом файле изменится контрольная сумма и дата создания, размер файла останется прежним.

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

Пример 1. Изменение идентификационного кода

В стандарте интерфейса 1-Wire доступ к «ведомым» элементам осуществляется по их идентификационному коду, который состоит из 8 байт [1].
Первый байт определяет функцию или тип устройства, далее 6 байт каких-либо номеров, а последний байт – контрольная сумма первых 7 байт.

Таким образом, формируется стандартизация интерфейса 1-Wire и его устройств. Например, первый байт 0x28 определяет датчики температур DS18B20, первый байт 0x1F определяет ветвители DS2409 и так далее.

Требуется выполнять стандартизацию обращения к устройствам интерфейса 1-Wire, поскольку в этом случае программное обеспечение производителя будет работать нормально со схемой ветвителя на МК.

Следовательно, можно изменять со 2-го по 7-й байт и оставлять 1-й байт с кодом 0x1F. Последний байт формируется по первым 7 байтам.

Для формирования последовательности номеров задействованы 2-й и 3-й байт. Остальные 4, 5, 6, 7-й байты не меняются, и допустимо записывать любую информацию.

Рассмотрим распределение байт идентификационного номера:

D2012F6290040B1F – код идентификации, где:

  • 1F – тип устройства 1-Wire, ветвитель DS2409, и он заменён на 12F629;
  • 040B – номер, формируемый программой в количестве 10 штук, начиная с 0403 до 040С;
  • 012F6290 – постоянные байты, где записан тип используемого микроконтроллера;
  • D2 – контрольная сумма первых 7 байт.

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

Представление кодов идентификации с разным видом дано в табл. 1.

  • В файле программы silos_v3_2409_v1.f текстовым редактором находим строки, определяющие начальный номер идентификации:

CREATE ZAPROS_ACP_OUT_RGN1 0x3 C, \ мл. байт

CREATE ZAPROS_ACP_OUT_RGN2 0x4 C, \ ст. байт и меняем, например, старший байт на 0x1

Таким образом, будет формироваться последовательность 0103, 0104, … 010С, всего 10 кодов.

Далее находим строку, определяющую количество файлов с идентификационными кодами:

CREATE KOLVO_PIC_UI 0xA, \ и изменяем на другое требуемое количество файлов, отличное от 10. Следует обращать внимание на различные способы записи чисел с разными форматами счисления. 0xA – это число 10 в шестнадцатеричной системе счисления. Запись и отображение значения чисел контролируется через переменную BASE.

В файле программы находим форт-слово NAME_PIC_HEX_RG1 и изменяем значение постоянных байтов.

Например, после ks на месте 12F629 пишем простой ряд чисел от 0…7:

: NAME_PIC_HEX_RG1 S» hex_12f629_2409_v1_ks012F629000001F.hex»; – был текст форт-слова,

: NAME_PIC_HEX_RG1 S» hex_12f629_2409_v1_ks0123456700001F.hex»; – стал текст форт-слова,

Необходимо отметить, что имя формируемого файла содержит уточнение функции работы. Это все байты до ks. При необходимости данные по названию тоже можно поменять. Например:

: NAME_PIC_HEX_RG1 S» hex_12f629_2409_v1_ks012F629000001F.hex»; – был текст форт-слова.

: NAME_PIC_HEX_RG1 S» Novosibirsk_SibGUTIS_ks012F629000001F.hex»; – стал текст форт-слова.

Чтобы не нарушать структуру имени файловой системы, размер текста не должен превышать 255 байт.

  • Выполняем компиляцию программы через командный файл start_new_versii.cmd и получаем файлы для программирования МК. В процессе выполнения программа посчитает контрольную сумму ks и подставит её в нужное место. В байтах 2-м и 3-м формируются номера с увеличением на +1 для младшего байта. Все данные записываются в HEX-формате в шестнадцатеричной системе счисления.

Для понимания отличия значения числа и его отображения в различных системах счисления (сс) приведём пример отображения натуральных чисел в интервале 0…16 в сс от 16 до 2 на языке FORTH.

\ начало текста программы
: PKZ_DEMO BASE @ DUP
DECIMAL CR
S" Ncc=" TYPE . CR    BASE !
2DUP DO I . LOOP ;
: FORMAT_CH_DEMO HEX 0x10 0
2 0x10 DO I BASE ! PKZ_DEMO
-1 +LOOP HEX 2DROP ;
FORMAT_CH_DEMO
\ окончание текста программы.

Для работы программы нужно создать файл, например, test.f блокнотом, скопировать текст от комментария \ начало … до комментария \ окончание … и сохранить. Косая линия влево – это начало комментария до конца строки, и также комментарии заключены в круглые скобки внутри форт-слов. Открыть файл test.f с помощью файла 100_spf4.exe, т.е. выполнить программу. Программа выполнится, и в окне консоли отобразится одинаковый ряд натуральных чисел в системе счисления 16…2. Компилятор работает в Windows/XP/7/8/10 и доступен без ограничений [4]. 

Пример 2. Формирование низкоуровневых команд в конфигурации микроконтроллера

В форт-слове START_BLOK определяются используемые подпрограммы и настройки МК.

Например, две следующие строки определяют режим установки порта МК:

status 5 bcf (выбор банка 0 бит 5=0)
porta clrf (установка и сброс порта, выполняется инициализация режима фиксации сигналов)

Поясним определение первой строки:

status – специальный регистр определён как 0x03 equ status, согласно тех. описанию на МК;

5 – цифра, определяющая, какой бит установить в 0 для регистра status;

bcf – команда выполнения установки бита в указанном регистре.

Поясним определение bcf:

: bcf (status Ni – компилируем в область памяти команду по org уст. бита в 0)
|| status NI || (локальные переменные)
-> NI -> status (сохранили в локальных переменных)
0x1000 NI 0x80 * + status + (Kkm – получили код команды)
WRITE_ORG (Kkm – запись и сдвиг на +1 и проверка на превышение);

В определяемом слове bcf слово status – это локальная переменная, а не специальный регистр. И значение локальной переменной приходит из входного стека, в нашем случае это 3 и 5.

Далее выполнется обработка для получения кода команды. Форт-слово WRITE_ORG записывает этот код в область памяти.

Поясним определение WRITE_ORG:

: WRITE_ORG (Kkm – запись и сдвиг на +1 и проверка на превышение)
0x100 /MOD SWAP 0x100 * + (перевернули мл. и ст. байты)
ORG 4+ @ ORG @ 2* + W! (записали словом в 2 байта)
ORG 1+! (переход к след. ячейке записи)
TEST_ORG_COMP (тестирование на превышение кол-ва компиляции ячеек);

В определяемом слове WRITE_ORG арифметические операции подготовки кода и сдвиг на +1 байт счетчика кода в переменной ORG.

Поясним определение TEST_ORG_COMP:

: TEST_ORG_COMP (тестирование на превышение кол-ва компиляции ячеек)
ORG @ ORG 2 4* + @ = IF UST_ATR_LIM_CMD (установка атрибутов цветности знаков для тревоги)
CR ." превышен код компиляции 0x3FF FORTH-ACEMBLERA pic12f629 " (текст для тревоги)
5 0 BEGIN BEEP2 0x100 PAUSE exBEEP4 1+ 2DUP = UNTIL 2DROP (цикл 5 звуковых сигналов тревоги)
BYE (прекращение работы программы) THEN ;

Используемая переменная ORG содержит значения текущей компиляции и возможное максимальное значение. Если они сравняются, то выполнится IF-THEN – условие превышения, и на экране сформируется сообщение о превышении размера программы. Дополнительно прозвучит звуковой тревожный сигнал, и программа прекратит работу.

Все слова форт-ассемблерных команд МК доступны для модификации, что удобно при переходе к другим типам МК. Вторая строка данного примера определяется аналогично по тому же цепочному принципу поиска.

Описание цепочной структуры, т.е. определения форт-слов, показано в порядке последовательности работы.

В тексте программы определения расположены в обратном порядке, т.е. 2 строки примера завершают определения. Первым определяется переменная ORG, затем TEST_ORG_COMP и так далее. Завершает определение в нашем примере bcf.

На данном примере показано, что форт-слова допускают любую функцию или действие:

  • исполняемое действие;
  • компиляция в область памяти;
  • указатель на переменную и значение.

Все форт-слова имеют цепочную связь, которая позволяет определить назначение, состав форт-слова, условия и возможности в работе. 

Пример 3. При отсутствии сигналов по шине 1-Wire более 2 секунд выполняется сброс ключей шины MAIN и AUX

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

Используются три общих регистра, которые определены так:

0x26 equ time_n0 \ счетчик 0r времени паузы,
0x27 equ time_n1 \ счетчик 1r времени паузы,
0x28 equ time_n2 \ счетчик 2r времени паузы; итого 3 байта 2r1r0r

Интервал отсутствия сигнала на шине 1-Wire задаётся в форт-слове UST_TIME_IZM_PAUSE_1W# и оформлен подпрограммой.

\ задаём значения подсчета в переменные регистры, начиная с младшего байта
0x40 movlw \ тут можно и FF или 0
time_n0 movwf \ счётчик 0r времени паузы
0x4B movlw \
time_n1 movwf \ счётчик 1r времени паузы
0x04 movlw \
time_n2 movwf \ счётчик 2r времени паузы 04 4b 40 = 2 cек; если сигнала нет, выдается уст. 0 main aux

В форт-слове ST_RST_1W находится участок, который отвечает за фиксацию начала сигнала RST. Там и расположен учёт отсутствия сигнала.

(ждём перепада до --\__ и если очень долго ждём, то выдаём сигнал уст. aux=main=0, т.е. выкл.)
ORG @ m1 ! porta 0x3 btfss \ проверка на 0 gp3 выв.4 in-out-1w пропустить, если =1
m1 goto \ нет 1 далее, есть 0 возврат m1
1 UST_TIME_IZM_PAUSE_1W# (подпрограмма уст. значения для паузы)
ORG @ m2 ! 1 IZM_TIME_PAUSE_1W# (подсчёт по отниманию 1 и, если =0, то выкл. aux-main)
porta 0x3 btfsc \ проверка на 0 gp3 выв.4 in-out-1w; пропустить, если =0
m2 goto \ нет 0 далее, есть 1 возврат m2

Если программа ждёт сигнала 0, то она «циклится», и выполняется подпрограмма IZM_TIME_PAUSE_1W#.

Поясним определение подпрограммы:

\ отнимаем 1 и смотрим, пока не будет всё 0, тогда выдаём сигнал выключения main aux
0x1 movlw \ значение 1 для вычитания в общий регистр
time_n0 0xF decfsz \ декремент вычесть 1 из f и пропустить, когда будет 0, т.е. к след. разряду
m10 goto \ уходим
time_n1 0xF decfsz \ декремент вычесть 1 из f и пропустить, когда будет 0, т.е. к след. разряду
m10 goto \ уходим
time_n2 0xF decfsz \ декремент вычесть 1 из f и пропустить, когда будет 0, т.е. выполним выкл.
m10 goto \ уходим
\ или выключаем main aux в случае всех 0 в time_n0 n1 n2
porta 0x1 bcf (b'001м-x1аw' м/4/= а/1/= w/0/= - выбор bsf=1 bcf=0 нет aux)      
porta 0x4 bcf (b'001м-x1аw' м/4/= а/1/= w/0/= - выбор bsf=1 bcf=0 нет main)   
1 UST_TIME_IZM_PAUSE_1W# (подпрограмма уст. значения для паузы)
ORG @ m10 ! (выход)

Таким образом, при «зависании» или ожидании сигнала RST сброса от ведущего шины 1-Wire периодически выдаётся сигнал 0 на управляемые транзисторы для их закрытия.

Необходимо обратить внимание, что большая точность данного интервала не требуется, и можно значения для регистров time_n0 time_n1 не устанавливать. Время определяет регистр time_n2, и примерное значение 1 равно задержке в 0,5 секунды. Более подробное изучение Форт-ассемблера выходит за рамки данной темы. Необходимо отметить, что в тексте программы имеются комментарии и пояснения по функционированию. 

Выводы

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

Универсальный микроконтроллер создаёт возможность формирования новых функций к работающим системам измерений без их существенной модификации.

Использование языка программирования FORTH и подготовленного на этом языке FORTH-ASSEMBLER позволяет легко переходить на другие типы микроконтроллеров и также создавать программы с хорошей оптимизацией кодов для микроконтроллеров с малым объёмом памяти.

Язык программирования FORTH, кроме Windows, работает на всех основных типах операционных систем (Linux, Unix, Android и т.д.), существующих в настоящее время, что позволяет использовать данную программу на любых компьютерах. 

Литература

  1. Описание DS2409 шины 1-Wire // URL: http://www.gaw.ru/html.cgi/txt/ic/Maxim/1-Wire/start.htm.
  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. Описание языка Форт spf4.exe, автор версии А. Черезов // URL: http://www.forth.org.ru/.

Комментарии
Рекомендуем
Электронные датчики и радары  в системе беспроводной связи ОТА, LOP и E-peas электроника

Электронные датчики и радары в системе беспроводной связи ОТА, LOP и E-peas

В будущем разработчиков РЭА ожидает эра «одноразовых» устройств: «установил и забыл» – надёжные, устойчивые к внешним воздействиям среды, но не предназначенные для ремонта. Одна из важных решаемых задач – сочетание сбора энергии из среды, её преобразование в электрическую и применение датчиков и микроконтроллеров с крайне низким энергопотреблением. В сочетании с технологиями E-peas (Electronic portable energy autonomous systems – автономные портативные электронные системы), LOP (с низким энергопотреблением) и решениями NXP возникают перспективы датчиков положения, давления и измерения сопутствующих величин от OEM-производителей. С аппаратными настройками и масштабируемостью производительности РЭА в формате процессоров S32R с исключением ошибок в передаче данных аналогового и смешанного сигнала беспроводным способом на небольшие расстояния. В статье представлены примеры системных решений для организации и управления питания датчиков РЭА, задействованных в беспроводной передаче данных, сетевых технологиях и транспортной технике с беспроводной сетью ОТА (Over-the-air – по воздуху).
15.04.2024 СЭ №4/2024 473 0

ООО «ПРОСОФТ» 7724020910 2SDnjdbfYK3
ООО «ПРОСОФТ» 7724020910 2SDnjdbfYK3