А не пришло ли время нам сделать ещё одну радио-розетку?

Сегодня у нас на очереди знаменитый российский контроллер первого уровня локализации
К1948ВК018 aka MIK32! С одной стороны он, вроде как, сильно избыточен для такой самоделки. А с другой - объём встроенной
флешки EEPROM всего 8 кБ...сам собой располагает делать простые вещи.
Итак, получилось у нас вот что:

На этой схеме показан не сам контроллер, а плата-переходник,
которая упоминалась тут. Как было сказано, на ней также можно посадить некоторые элементы 0805 поближе к чипу. В данном случае сочетание получилось таким:

Здесь, как видно, у нас задействовано:
- один 32-битный таймер для декодирования сигналов пульта
- один 16-битный таймер для ШИМ сигнала, включающего симистор
- одно внешнее прерывание чтобы включать/выключать ШИМ синхронно с полупериодами сетевого напряжения
- аппаратный I2C чтобы сохранять коды пульта
Да, знаю, некоторые умудряются запихнуть сохранение юзерских данных на этом чипе прямо на родную EEPROM. Но мы, пожалуй, упростим задачу и повесим снаружи банальный 24LC02.
Каналы захвата 32-битного таймера здесь не такие продвинутые, как у Миландра, и за раз умеют срабатывать либо по фронту, либо по срезу. но что нам мешает задействовать пару таких каналов и пару их входов?
У 16-битного таймера каких-то специфических особенностей нет. Но мы всё же попробуем сделать кое-что новое: используем для подачи импульсов на трансформатор не простой транзисторный ключ, а специальный чип усилитель, включенный через разделительный конденсатор. У такого подхода есть плюсы в том, что высоковольтные выбросы самоиндукции здесь не могут повредить ключи, да и просто, если оставить входной сигнал в лог.1, постоянный ток через первичку транса протекать не будет. Да, чип изначально предназначен для раскачки MOSFET-ов и IGBT, но сотню мА даже на постоянном токе он спокойно тянет. А вход хорошо согласуется с 3,3В логикой. Разделительный кондёр C3 кстати взял огромный, плёночный, поскольку опасался, что керамика в таком режиме будет сильно свистеть пьезоэффектом.
Со внешними прерываниями у MIK32 всё неплохо - их можно назначить практически на любую его ногу и с разными режимами работы. Единственный выявленный нюанс - оно уж очень шустро ловит фронты/срезы, в том числе в не совсем стабильных состояниях на границе перехода 0/1, что здесь и случается, поскольку детектор перехода нуля, по сути, имеет аналоговый выход. Поэтому пришлось в обработчике прерываний добавить алгоритм дополнительной проверки, что сигнал прерывания стабилизировался. В этом нам помогает интересная фича с возможностью прямого чтения состояния линий прерывания, этакий косвенный опрос GPIO.
Что здесь не задействовано:
- Входы кварцевых резонаторов. Просто висят на земле.
- Watchdog
- Внешняя флешка
Местный RC-генератор молотит на непривычно высокой частоте 32 МГц, но PLL и прочих умножителей частоты в данный чип не завезли, что в наше время смотрится довольно странно. Здесь стабильность тактовой частоты, очевидно, не особо важна. Но из-за отсутствия основного кварца, как ни странно, мы не можем включить Watchdog,
об этом баге уже упоминалось. Не уверен, насколько велик шанс контроллеру зависнуть на такой довольно тривиальной прошивке, да так зависнуть, что Watchdog смог бы его отвесить. Но по крайней мере, у меня за время работы сего девайса глюков и зависаний не было.
Ещё одной непривычной деталью MIK32 является, как уже говорилось, неожиданно маленький объём встроенной памяти, в 2 раза меньше, чем ОЗУ! Очевидно, разработчики предполагали её использование лишь для записи базового загрузчика, а основная прошивка должна была храниться во внешней флешке с SPI-интерфейсом. Местный блок "SPIFI" довольно универсален, поддерживает программирование команд флешки и "четверной" обмен данными, что, учитывая невысокую тактовую частоту чипа, неплохо вывозит. Флешку, конечно, придётся брать заморскую (ну или вдруг достанете изделие от
GS Nanotech или того же
Миландра?!). Представители Микрона на каждой конференции не устают повторять, что "флеша у них как не было, так и нет,
и не будет в ближайшей перспективе", что также выглядит странно...
Периферийные библиотеки весьма толстые, местная версия RISC-V обилием командных расширений не балует. Так что родные 8 кБ забиваются почти мгновенно. Тем не менее, прошивку удалось упёхать в этот объём, включив в проекте
LTO-оптимизацию (опция "
-flto"). Но и её возможности не безграничны: стоит вам добавить в ваше изделие индикацию чуть осмысленнее пары светодиодов, и всё, вылет за пределы памяти обеспечен!
Что бы ещё добавить? Чип имеет множество выводов для подключения внешних кондёров для стабилизации режима встроенных LDO и прочих аналоговых блоков. (интересно, почему в 21 веке большая часть контроллеров как-то обходится без этого?) По поводу типа и ёмкости этих кондёров в даташите и других аппноутах указания весьма неоднозначные, но практика показала, что с керамикой в несколько мкФ всё работает нормально.
А тем, кто дочитал до конца: как обычно,
держите полный проект платы и прошивки. Плата снова разведена под знакомый вам кондовый советский корпус.

На фото вы можете разглядеть не самую обычную вещь: старую,
немодернизированную версию трансформатора МИТ-16 (без буквы "В") от завода «Изумруд», 1975 года выпуска!
