
Попало ко мне как-то сгоревшее реле напряжения Digitop 48A, в котором неисправным оказался бестрансформаторный источник питания, который потянул за собой микроконтроллер ATtiny26L-8PU.
Заменив электролитические конденсаторы новыми с подобающим рабочим напряжением, тиристор BT169 на BT131, линейный стабилизатор 78L05 на 7805 и собственно микроконтроллер — принялся за написание прошивки.
Источник питания представляет собой почти классическую «конденсаторную» схему, за исключением тиристора, который в ключевом режиме гасит части полуволн неотфильтрованного питания, таким образом уменьшая нагрев ограничивающего стабилитрона.

Первая стабильная версия ПО содержала хитрый алгоритм вычисления действующего напряжения среднеквадратическим методом, для чего в течение полупериода снималось 100 выборок. Затем выборки возводились в квадрат, суммировались и в конце полупериода из суммы, поделенной на количество выборок, извлекался квадратный корень. Алгоритм получился тяжелый (одна только операция извлечения квадратного корня на AVR чего стоит). К тому же оказалось, что форма напряжения в сети может немного меняться, в результате откалиброванный (при помощи китайского тестера, который всего лишь выпрямляет и фильтрует переменное напряжение) прибор в другом городе оказывался неточен. И разработка была заброшена на некоторое время.
Когда наступило время переделывать проводку в доме — встал вопрос о защите бытовых приборов, и тут появился повод провести аудит ПО для Digitop.
Алгоритм измерения переменного напряжения был значительно упрощен — в течение полуволны ищется максимальная выборка, которая потом умножается на калибровочный коэффициент.
Также были реализованы все функции прибора, задуманные производителем, в том числе задержка отключения при входном напряжении ниже заданного предела, но выше 120В (она оказалась реально полезна при низком сетевом напряжении в момент включения холодильника/дрели/насоса).
Реле было оттестировано при помощи ЛАТРа и в настоящее время находится на боевой обкатке.
В процессе отладки ПО пришлось много раз перепрошивать микроконтроллер, и учитывая, что питание прибора гальванически связано с сетью — сделал несложный опто-переходник для ISP программатора.

Переходник развязывает Reset, MISO, MOSI и SCK сигналы, питание для каждой из сторон свое.
Исходный код ПО Digitop прилагается.
Строка для программирования контроллера при помощи avrdude и HID-варианта stk500v2:
avrdude -p t26 -P avrdoper -c stk500v2 -B 5 -U flash:w:digitop.hex:i -U hfuse:w:0x12:m -U lfuse:w:0xe4:m