Так вот, возвращаясь к "экзотике"...а давайте-ка попробуем сделать радио-розетку на основе
MDR1215LGI от Миландра, который мы недавно подробнее
рассматривали в соответствующем разделе.

В самом деле, раз уж это чудо имеет из более-менее выведенной наружу периферии 32-битный таймер, почему бы не приспособить его для измерения длительности импульсов пульта? Более того, в данном применении этот таймер имеет даже некоторые преимущества, благодаря тому, что в нём один и тот же канал инпут капчи можно
одновременно настроить и на захват по фронту, и на захват по срезу импульсов, и получить результаты захвата в раздельных регистрах!

Скорее всего, форум картинку зашакалит, поэтому выложим полный проект, включая схему и разводку платы в Altium Designer, а также проект прошивки, сделанный
в этой среде. Качать всё это здесь:
https://drive.google.com/file/d/140P8cH ... sp=sharing Изготовление платы в домашних условиях под такой мелкий корпус, конечно, требует определённых скиллов по травлению дорог 0,3 мм. Но если очень захочется, можно перепроектировать схему под
готовую мини-макетку с этим чипом, делать будет проще.
Как видно, в целом схема повторяет предыдущую самоделку, но с некоторыми нюансами, о которых поговорим. Сразу нужно обратить внимание, что здесь нам приходится комбинировать "зашивочный" разъём JTAG-а с нужными в работе сигналами. Мы филигранно делаем это с помощью подтяжечных резисторов 10 кОм. Если мы на время зашивки не будем подавать сетевое напряжение, а временно подадим в точку Vh что-нибудь в районе 5...9В постоянного тока, то транзистор синхронизации с полупериодами сети останется закрытым и не будет нам мешать. Но если такой возможности нет, конечно, придётся на время зашивки либо PA7 оторвать от VT2, либо вначале не впаивать VD1. С этой же целью модуль приёмника не впаян намертво, а воткнут пинами в цанговые ответки на плате. На время зашивки его, конечно, можно вынуть, чтобы не мешал.
Трансформатор питания, как и в прошлом варианте, имеет 2 вторичные обмотки по 6В переменного напряжения каждая. С такой конфигурацией можно более удобно и чётко фиксировать переходы напряжения через 0.
Ещё обратите внимание, что все выходы контроллера мы, на всякий случай, буферизируем логическими элементами, поскольку, как уже отмечалось, выходы тут имеют непривычно слабый ток нагрузки.
Кстати, мы тут, как и в прошлый раз, используем импульсное управление симистором. Но за счёт чего формировать импульсы? Аппаратный таймер уже ушёл на приём команд пульта, а других наружу в этом контроллере не вывели! Но мы пойдём иным путём и задействуем для этого...
выход UART-а!

В самом деле, стартовый бит там уже есть. Добьём его нулевыми битами до требуемой длительности и будем посылать постоянно один и тот же байт, заполняя им буфер передачи по прерыванию. Вот вам и импульсы. А их частота будет определяться выставленной скоростью передачи битов. Буфер на логическом элементе проинвертирует нам их, чтобы была правильная полярность.
Кнопки SB1, SB2, как и ранее, служат для "привязки" кодов пульта. Эти коды мы запоминаем в особый раздел флешки контроллера, под названием "информационная память". Что это такое, мы
подробнее рассматривали ранее. Чтобы наши коды гарантировано не пересекались с бутлодыром, было принято решение сохранять их в том же секторе, где лежит "производственная информация". В
eeprom.c можно увидеть, каким образом мы в процессе перезаписи временно сохраняем, а потом восстанавливаем её с помощью функций
FLASH_ReadFactoryData() и
FLASH_ProgramFactoryData().
Код: Выделить всё
Не забываем закомменить #define USE_JTAG в MDR32VF0xI_config.h чтобы юзать ноги, занятые JTAG-ом!
А ещё закомменить #define USE_FACTORY_DATA_PROTECTION там же, чтобы сохранять настройки во флэшку!
Таким образом, мы убираем программную блокировку в функциях на выполнение критических действий. Но с этими чипами, когда требуется максимальная функциональность, приходится идти на определённый
риск!

Тем не менее, схема розетки была успешно сделана и уже вовсю работает.
Из компромиссного: к сожалению, входов внешних прерываний в данном исполнении чипа наружу не вывели, поэтому старт включения симистора синхронно с полупериодом сети приходится делать тупым опросом обычного GPIO входа.