Наш канал в telegram

Формирователь импульсов повышенного напряжения для расширения функционала шлюза RH-0004

  1. Введение
  2. Схема
  3. Программа для микроконтроллера
  4. Готовое устройство

Введение

Существуют микросхемы памяти с интерфейсом 1-Wire (DS1982, DS2502, AN1990 и другие), которым для выполнения некоторых процедур (запись данных, финализация) нужны импульсы повышенного напряжения (до +12 Вольт) различной длительности. Шлюз UART-to-I2C/SPI/1W (RH-0004) не имеет возможности сформировать такой импульс, поэтому в обычных условиях работать с такими микросхемами с помощью шлюза RH-0004 можно только частично. Приведённая в этой статье схема позволяет расширить функционал шлюза и обеспечивает возможность полнофункциональной работы с подобными микросхемами (при наличии внешнего источника питания).

Идея заключается в том, чтобы взять стандартный контур переключения уровней и добавить к нему формирователь импульса нужной ширины на одном из самых дешёвых микроконтроллеров ATtiny13A, а управление этим формирователем реализовать через цифровые входы/выходы шлюза (у него есть 3 I/O, управление которыми доступно в любой конфигурации).

Реализация включает в себя две части: 1) схема с печатной платой, 2) программа для микроконтроллера.

Схема

Схема дополнения для RH-0004

Как эта схема работает:

Когда контроллер ATtiny13A обесточен или его выход PB0 сконфигурирован на вход (по-умолчанию после старта) — затвор транзистора T2 подтянут к линии Supply и транзистор T2 открыт. Соответственно, затвор транзистора Т3 притянут к шине GND и этот транзистор закрыт. В результате этого затворы транзитсоров T1 и T4 оказываются через резистор 10 КОм притянуты к линии +12 Вольт, в результате чего транзистор T1 открывается, а транзистор T4 закрывается (T1 — N-канальный, а T4 — p-канальный). Таким образом, в этом случае напряжение +12 Вольт оказывается отключенным от шины 1-Wire, а открытый транзистор T1 свободно пропускает на эту шину сигналы от шлюза.

По сигналу от шлюза вывод PB0 на необходимое для подачи программирующего импульса время переключается на выход и притягивается к шине GND, в результате чего транзистор T2 закрывается, затвор транзистора T3 притягивается к линии Supply, что приводит к открытию этого транзистора. В результате затворы транзисторов T1 и T4 оказываются притянуты к GND, что приводит к закрытию транзистора T1 и к открытию транзистора T4. Таким образом, на нужное время линия 1W шлюза оказывается отключена от шины 1-Wire, а через открытый транзистор T4 на эту шину подаётся напряжение +12 Вольт.

Управляющий сигнал от шлюза формируется следующим образом: уровни на линиях I/O-1, I/O-2 кодируют выбор нужного выходного импульса, а изменение с высокого на низкий уровня на линии I/O-0 служит сигналом для начала формирования этого импульса. Всего таким образом можно закодировать до 4-х различных выходных импульсов. Приведённая в статье программа умеет формировать два различных выходных импульса: длительностью 508 мкс (при I/O-1=0, I/O-2=1) для записи микросхем типа DS2502, и длительностью 104 мс (при I/O-1=1, I/O-2=1) для финализации микросхем типа AN1990.

Что касается внешнего напряжения, то на эту схему можно подавать напряжение в пределах от Vpull-up+3 до +20 Вольт (опять же, на случай, если для других микросхем понадобится напряжение программирования, отличное от +12 Вольт). Плата разведена для подключения в качестве источника внешнего напряжения компьютерного БП (точнее говоря — разъёма питания дисковода 3,5″, при этом используются только контакты GND и +12В).

Архив с печатной платой (DipTrace).

Программа для микроконтроллера

Выводы PB2, PB3, PB4 запрограммированы на вход и на них заведены сигналы I/O-0, I/O-1, I/O-2 соответственно. Входы PB3, PB4 используются для выбора нужного выходного импульса, а вход PB2 — для запуска алгоритма формирования этого импульса. Выходной сигнал формируется на выводе PB0. Изначально PB0 запрограммирован на вход, но в защёлку записан ноль, и на нём внешней подтяжкой к шине питания формируется высокий уровень. При необходимости сформировать низкий уровень, PB0 просто переключается на выход.

Для формирования каждого импульса в программе используется отдельный таймер и счётчик циклов. Длительность импульса определяется длительностью таймера умноженной на заданное для него количество циклов. Значения, определяющие длительности таймеров и количество циклов для них прописаны в EEPROM контроллера (таким образом длительности выходных импульсов можно менять, не перезаливая программу целиком). Поскольку представленная здесь программа умеет формировать два различных импульса, то для хранения данных таймеров и счётчиков циклов используются 4 байта EEPROM.

Первые два байта EEPROM определяют количество циклов для первого таймера и его длительность, соответственно. Следующие два байта — то же самое для второго таймера. Длительность таймера в мкс можно рассчитать по следующей формуле: (256-T)*26,673, где T — соответствующее значение из EEPROM. Заданное количество циклов находится как (256-C), где C — соответствующее значение из EEPROM. Например, для второй длительности импульса в EEPROM записаны значения 0xE7(231) и 0x64(100). В этом случае длительность таймера будет равна (256-100)*26,673 = 4161 мкс, а количество циклов для этого таймера (256-231) = 25. Таким образом общая длительность импульса составит 25*4161 = 104025 мкс, то есть примерно 104 мс.

Устройство расчитано на использование внутреннего RC-генератора на 9,6 МГц, поэтому при программировании контроллера должны быть установлены фьюзы: SPIEN, SUT0 и CKSEL0 (они равны нулю, то есть в PonyProg напротив них стоят галочки).

Архив программы с исходниками и готовой прошивкой (asm / hex).

Готовое устройство

Фото готового устройства

Поскольку в доке на DS2502 довольно жесткие пределы для напряжения программирования (11,5-12 Вольт), то я решил подстраховаться на случай завышения различных напряжений и дополнительно развёл на экспериментальной плате две пары включенных встречно параллельно диодов по линиям напряжения питания и напряжения программирования (на фото обведены жёлтым), а также джамперы, позволяющие эти диоды зашунтировать (синие джамперы на фото). Диодами можно в случае необходимости уронить нужные напряжения на величину до 0,6 Вольт (в зависимости от того, какие впаять диоды). Впрочем, дальнейшие эксперименты показали, что в случае с БП моего компьютера это лишнее (хотя у него напряжение по линии +12 Вольт составляет 12,24 Вольта).

Вот так выглядит устройство, подключенное к шлюзу:

Устройство в сборе со шлюзом

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

На этом на сегодня всё. Удачи!

Добавить комментарий