Всем привет!

Недавно я опубликовал свою первую статью про восстановление легендарного компьютера: «Воскрешение „Пентагона-128“ из пепла и безвейтовый контроллер клавиатуры и джойстиков на ATmega8 своими руками». Честно скажу, то, как её встретили — лайки, добавления в закладки и первые подписки на меня — очень сильно воодушевило. По свежим следам и на этой волне вдохновения я сразу же решился опубликовать ещё одну свою разработку. На этот раз — девайс полностью самостоятельный, а все схемы, платы и файлы прошивок я отдаю в открытый доступ.

Сразу оговорюсь: к Спектруму это устройство отношения не имеет. Это универсальный контроллер климата, разработанный мной довольно давно. Он успешно и активно эксплуатируется в реальных условиях уже более 10 лет (причем не только мной), так что жесткое «альфа- и бета-тестирование» временем прибор прошел на отлично.

Внешний вид
Внешний вид
Вид сзади
Вид сзади

Устройство можно одинаково успешно применять в двух разных сценариях:

  • Для бойлеров систем отопления (где критически важно контролировать температуру жидкого теплоносителя).

  • Для электрических обогревателей и конвекторов с сухим ТЭНом (где нужно защитить прибор от перегрева).

Архитектура и аппаратная реализация

Весь проект построен на базе одного-единственного микроконтроллера ATtiny2313.

Периферия и интерфейс устройства:

  • «Мозг»: ATtiny2313.

  • Индикация: 7-сегментный светодиодный LED-дисплей на три знакоместа. Поддерживается индикация отрицательной температуры для датчика воздуха. При этом знак «минус» не привязан к левому разряду жестко, а сдвигается вплотную к числу (например, на экране отобразится -1 или -10 без отрыва знака от цифры).

  • Органы управления: инкрементальный энкодер с кнопкой на валу.

  • Сенсоры: два цифровых датчика температуры DS18B20.

  • Управление нагрузкой: симистор (выбор пал на него, так как он работает абсолютно бесшумно :), но при желании его можно заменить на обычное реле). Симистор, кстати, ни в схеме ни на плате не указан, предполагается что он стоит отдельно на радиаторе и подключается к плате проводами через разъемы, как и нагрузка.

Ну и начинаем хвастаться: фраза «всё реализовано на одной ATtiny2313» означает именно всё. Контроллер в одиночку опрашивает оба цифровых датчика, обрабатывает сигналы энкодера с кнопкой, управляет симистором и осуществляет динамическую индикацию на экран напрямую — без промежуточных сдвиговых регистров или дешифраторов.

Для начала определимся с ролями наших датчиков:

  • Датчик 1 (Д1) — контролирует температуру жидкого теплоносителя или крепится непосредственно к сухому ТЭНу обогревателя.

  • Датчик 2 (Д2) — измеряет температуру воздуха в помещении.

Главный алгоритм: Логика работы «И / ИЛИ»

Чтобы обеспечить максимальную безопасность и энергоэффективность, алгоритм завязан на логические условия И (для старта) и ИЛИ (для остановки).

  • Включение нагрева (Логическое И): Нагрузка запустится только тогда, когда температура на ОБОИХ датчиках одновременно упадет ниже их индивидуальных установок с учетом гистерезиса.

  • Выключение нагрева (Логическое ИЛИ): Нагрев полностью прекратится, как только ХОТЯ БЫ ОДИН из датчиков достигнет своей заданной уставки.

Работа
Работа

Теперь немного о безопасности. Устройство контролирует нагреватели, так что понятно, что неисправный или отвалившийся датчик может привести к тому, что в лучшем случае сгорит нагреватель - в худшем закипит теплоноситель, поэтому постоянно контролируется физическое присутствие датчиков на шине 1-Wire. Если происходит обрыв линии или сенсор перестает отвечать, устройство мгновенно обесточивает силовую нагрузку, а на 7-сегментный дисплей выводится аварийный код:

  • Er1 — обрыв или неисправность Датчика 1 (Теплоноситель / ТЭН).

  • Er2 — обрыв или неисправность Датчика 2 (Воздух).

  • Er3 — одновременный обрыв обоих датчиков.

Индикация ошибки
Индикация ошибки

Пользовательский интерфейс и меню

Теперь разберем, как устроена навигация и логика работы с экраном.

Основной режим работы

  • Старт: При включении на экране на 3 секунды загорается заданная уставка для датчика 2 (воздух). После этого дисплей переключается на отображение текущей температуры с этого же датчика.

  • Просмотр уставки: Короткое нажатие на кнопку энкодера в процессе работы снова выводит значение уставки датчика 2 на 3 секунды, а затем возвращает экран к текущей температуре.

  • Изменение уставки: Поворот энкодера в любую сторону сразу переключает экран в режим корректировки уставки датчика 2. Как только перестаём крутить ручку, устройство ждет 3 секунды и возвращается к показу текущей температуры воздуха.

  • Защита памяти: Новое значение уставки записывается в EEPROM не мгновенно, а только через 3 секунды после окончания активности. Это сделано намеренно, чтобы сберечь ограниченный ресурс циклов перезаписи ячеек EEPROM при прокрутке энкодера.

Сервисное (инженерное) меню

Для глубокой настройки системы предусмотрен сервисный режим. Чтобы войти в него, зажмите кнопку энкодера более чем на 3 секунды. На экране появятся прочерки ---, а силовая нагрузка в целях безопасности полностью отключится. Как только вы отпустите кнопку, устройство перейдет в меню настроек.

Здесь мы можем циклически переключать четыре параметра короткими нажатиями на кнопку энкодера:

  • П-1 — Верхнее ограничение для уставки датчика 2 (Воздух). (Диапазон: от 0 до 45 °C).

  • П-2 — Гистерезис датчика 2 (Воздух). (Диапазон: от 1 до 10 °C).

  • П-3 — Уставка температуры для датчика 1 (Теплоноситель / ТЭН). (Диапазон: от 10 до 127 °C).

  • П-4 — Гистерезис датчика 1 (Теплоноситель / ТЭН). (Диапазон: от 1 до 20 °C).

Сервисное меню
Сервисное меню

Как менять значения: Выбираем нужный пункт. При повороте энкодера имя параметра (П-1 – П-4) сменяется его числовым значением. Через 3 секунды бездействия дисплей вернется к имени параметра.

Выход из сервисного меню: Зажмите кнопку энкодера на 3 секунды. Прибор вернется в основной режим, а настройки зафиксируются в EEPROM.

Схемотехника и универсальность индикации

В репозитории доступна схема под дисплей с Общим Катодом (ОК), но предусмотрена легкая адаптация под Общий Анод (ОА):

  • Меняем транзисторы на p-n-p и переключаем их эмиттеры на VCC.

  • В проекте, в файле Define_Dyn_Indik.asm, комментим следующую строку:
    #define COM_CAT, и наоборот раскомментируем: #define COM_AN, и всё, больше ничего не требуется.

Кстати, заодно на плате разведен разъем IDC-10 (ISP) для прошивки (вообще то это сделано для отладки, при написании кода, но остался артефактом, его, как сами понимаете можно и не распаивать)

? Опыт отладки и адаптация под современные импульсные БП

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

Однако при переходе на компактные современные модули типа Hi-Link (HLK-PM01) (5В, 3 Вт) на живом железе внезапно проявились два плавающих бага: прибор мог "зависнуть" на стартовой заставке или уйти в циклические сбросы через случайные промежутки времени (при этом от USB-программатора всё работало идеально). (ред. автора - зависнуть не правильное слово, на самом деле ничего не висит, контроллер работает, но нагрузка всегда отключена)

На основе этого опыта я категорически не рекомендую использовать данные модули питания (Hi-Link) в их «голом» виде без дополнительной обвязки. Практическая эксплуатация показала, что они слишком «шумные» в плане высокочастотных помех на старте.

Физика процесса и доработка кода:
Импульсные обратноходовые БП вроде Hi-Link при старте и под динамической нагрузкой генерируют в линию питания жесткие наносекундные высокочастотные (ВЧ) иголки-выбросы. Обычные электролиты (даже на 1000 мкФ) из-за собственной внутренней индуктивности их не сглаживают. Эти иголки ложно взводили аппаратные флаги совпадения таймеров в регистре TIFR и внешних линий в GIFR во время паузы cli, полностью ломая стартовую фазу флагового автомата.

Для решения проблемы и возможности безопасного использования таких БП было сделано следующее:

  • Программная доработка: Перед sei добавлена принудительная очистка регистров TIFR и GIFR, устраняющая ложные срабатывания от ВЧ-помех.

  • Аппаратная доработка: В оригинальной ревизии печатной платы сглаживающий дроссель отсутствует, поэтому при сборке на базе импульсных БП крайне рекомендуется самостоятельно установить последовательный SMD-дроссель (22–47 мкГн, маркировка 220/470) в разрыв питания +5В (после электролита 1000 мкФ, но до блокировочной керамики 0.1 мкФ у ног микроконтроллера), создав полноценный LC-фильтр от высокочастотных выбросов.

⚙ Конфигурация фьюзов и отладка «холодного старта»

Для стабильной работы на частоте 8.0 МГц (внутренний RC-генератор) ставим:

  • Ext. Fuse: 0xFF

  • High Fuse: 0x99 (активен BOD 4.3V и защита EEPROM EESAVE).

  • Low Fuse: 0xE4 (задержка старта 64 мс для надежного включения).

? ВАЖНО: Прошивка EEPROM

Сильно желательно прошить файл Thermostat.eep (5 байт), так как функция автоинициализации в коде отсутствует. Без этого устройство все равно запустится, просто считает из EEPROM либо мусор, либо 0xFF. что прям сильно не рядом с возможными уставками, но тем не менее, если перейти в инженерное меню, то можно уставки все равно выставить на нужные значения, так что это не прям чтобы критично.

? Исходный код и репозиторий

Проект (автор: vic80) реализован на модульном ассемблере. Подробности, файлы прошивок (.hex, .eep), схемы и Gerber-файлы находятся в репозитории:

Ссылка на GitHub: https://github.com/vic80-designs/vic80_attiny2313-2x18b20-thermostat

⚠️ Дисклеймер и техническое примечание

Проект предоставляется по принципу «As Is» (Как есть). Автор не несет никакой ответственности за любые последствия, связанные с использованием данного устройства — вся сборка и эксплуатация осуществляются исключительно на ваш страх и риск. При распространении или модификации кода указание авторства (vic80) обязательно.

Технический нюанс: Обратите внимание, что представленная схема и печатная плата — это исключительно низковольтный блок управления («голова» устройства). Она физически не содержит на борту силовых элементов. На схеме разведена только низковольтная оптическая развязка на MOC. Подключение внешней силовой части (коммутатора нагрузки) и разводку высоковольтной сети 230V конечный пользователь выполняет самостоятельно. При этом крайне желательно предусмотреть дополнительные аппаратные меры безопасности, например, механический термопредохранитель в цепи питания нагревателя. Поскольку устройство управляет нагревательными приборами, категорически нежелательно оставлять его работающим без контроля!

Жду ваших отзывов и предложений!

 

Комментарии (21)


  1. Arhammon
    24.06.2026 09:35

    питание было собрано на классическом малогабаритном трансформаторе и понижающей микросхеме MC34063.

    230В на 5В на 34063? Или все таки с стабильного низковольтного питания перешли напрямую на 230?

    Глядя на плату прям сразу вопрос а где классическая керамика прям около МК?

    Не замечал у AVRок какой-то привередливости к питанию, в отладке на 128меге у меня например стоит широкодиапазонный сепик который гадит дай боже, единственное Aref жестко зафильтрована RC, ну и на всех микросхемах кондесаторы.


    1. vic80 Автор
      24.06.2026 09:35

      Я вот тоже сколько переделал усторйств ни разу на аврках не отмечал подобного. По питанию было так: малогабаритный трансик 230/12, мост, ну и далее MC34063 со своей обвязкой. Работало всегда на ура, мощности с лихвой хватало. В свое время возникла проблема с трансформаторами, поэтому был начат поиск готового решения. И оно нашлось. Термостат разработан уже лет как 14 назад, и в варианте с трансом никаких проблем никогда не было и до сих пор нет.


      1. Arhammon
        24.06.2026 09:35

        В свое время возникла проблема с трансформаторами, поэтому был начат поиск готового решения.

        Да вроде лежат в магазинах, помниться даже раньше дороже были, глянул ЧД 200р за 0,2А в исполнении на плату. Импульсник сравнимой с трансформатором неубиваемости, как бы не 10х стоить будет.


    1. sim2q
      24.06.2026 09:35

      где классическая керамика прям около МК?

      одинокая керамика (с подсказки автора) - на обратной стороне, обычно ставят как можно ближе к корпусу, у автора небольшая петля + ~30%, но это придирки уже.
      дросселями всегда отделяю МК и сильноточные цепи. Какое же было удивление (О, оно работает!) как-то когда бусину по ошибке поставил на землю и связь с устройством (ST-Link 400kHz) прервалась.


  1. slog2
    24.06.2026 09:35

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


  1. ruomserg
    24.06.2026 09:35

    При всем уважении к автору - в таком исполнении на устройстве должна быть надпись: "Эксплуатация допускается только под присмотром потребителя". Потому что без присмотра такое оставлять нельзя!

    • Ни одного упоминания об аппаратном WDT (причем не с прерыванием где флаг сбрасывается, а со сбросом только при нормальном состоянии устройства и датчиков). Автор уже встретился с тем, что ЭМП могут произвольно менять флаги в регистрах, а устройство - зависать, но выводов не сделал...

    • При этом, я бы не доверял и аппаратному WDT. Когда вы управляете чем-то нагревающим, да с мощностью в киловатты - наверное не трудно поставить пару транзисторов и разделительный конденсатор, чтобы работа нагревателя разрешалась не постоянным уровнем на ноге, а меандром (который генерируется не через PWM на канале таймера, а честным дерганьем PORTx в основном цикле при условии что датчики и данные с них идут нормальным потоком).

    • При этом, я бы не доверял и этому - потому что при пробитии транзистора или симмистора оно все-равно может неуправляемо разгоняться. Поэтому нужна независимо действующая система безопасности (например, одноразовый термопредохранитель прикрученный к нагревателю), которая будет рвать питание вне зависимости от того, что происходит в контроллере... Или биметаллический таймер, который не дает физически держать нагреватель включенным непрерывно больше чем определенное время (гарантированно не приводящее к пожару).

    Конечно - реализовать это все в формате Tiny2313 может не хватить ресурсов. Но положа руку на сердце - вы не серию миллионную гоните, где для вас каждый рубль экономии - путь к несметному богатству! Вы делаете единичные устройства - ну так поставьте Atmega328! Ну будет оно на сто рублей дороже, и что ?! Зато спать спокойно ночью будете...


  1. vic80 Автор
    24.06.2026 09:35

    Хотелось бы сразу ответить на первые комментарии. Критику я приветствую. И постараюсь ответить на некоторые замечания.

    В главных: в тексте статьи я направильно выразился НАМЕРТВО НИЧЕГО НЕ ЗАВИСАЕТ. Как бы правильно выразится. В общем, в коде реализовано несколько софт таймеров, на базе одного 16битного, так вот те самые "костыли" это просто обнуление всех флагов, которые могут вызываться прерываниями перед запуском прерываний (команда sei). Видимо все-таки как то это влияет. По хорошему это в любом случае надо было сделать, просто со старыми источниками проблем не было. Итак еще раз - ничего не зависает, просто получается что не начинают работать софт таймеры. И не выполняется часть основного кода из-за этого. в Частности нагрузка ВСЕГДА отключена. И вот сброс регистров как раз и решил эту проблему, причем без всяких доработок вроде дросселя - его я позже добавил.

    По поводу схемотехники и разводки плат - спорить не буду. И то и другое есть в репозитории, так что можно даже прям носом меня натыкать где там проблемы. Было бы интересно, без иронии, схема состоит из одной тиньки и всё. Кстати и керамика присутствует, практически на всех фото её очень хорошо видно. Просто находится с другой стороны платы. По поводу не оставлять без присмотра - это вообще можно в принципе к любому устройству применить, абсолютно надежных нет и не будет никогда. Никакой код не сможет предусмотреть абсолютно всё. Поверьте я за свою профессиональную карьеру уже много раз видел как сгорают дорогущие технологические установки напичканные супер модной отказоустойчивой электроникой. Ну а про свои скажу скромно - уже лет 14 работают, причем боюсь предположить сколько копий устройства сделано. И сделано на заказ.

    Насчет контроллера - да, мега328, а еще лучше ESP32, причем опять же без иронии я задумывался об этом тоже уже давно, когда всяких TYUA у нас еще не было, но руки не дошли. Да и надобности уже нет, эта разработка покрыла абсолютно все потребности. И тинька была выбрана именно ввиду достаточности ее. Напомню писалось все на ассемблере. Ну и напоследок - проект открыт - это значит, что можно брать его и "допилить" прям вот под себя. Я поделился своим видением. Уже на то время термостат был настолько избитой и облизанной со всез сторон темой, а готовых устройств уже было настолько много, что в принципе не было никакого смысла этим заниматься, только чисто из спотривного интереса, и именно потому, что надо было сделать именно "под себя" вот прям так как мне надо. Я же просто надеюсь, что возможно кому то будет интересно посмотреть код, как что реализовано. Я сам - самоучка. И учился именно на таких проектах. Образование у меня совсем по другому профилю никак не связанное ни с электроникой ни с программированием.


    1. ruomserg
      24.06.2026 09:35

      В этом, к сожалению, и проблема... Я с одной стороны никоим образом не хочу душить техническое творчество, пусть даже и не подкрепленное специальным образованием. А с другой стороны - надо понимать, что ваше устройство опасно. И что еще хуже - те кто будут у вас его повторять с сайта - понимают еще меньше вас. А дальше с увеличением количества пользователей - статистика бессердечная сука: начнутся пожары и трупы. Нет, наверное формально к вам претензий предъявить будет нельзя. В принципе, правила электрической и пожарной безопасности ясно говорят - использование кустарных нагревательных приборов в помещениях запрещено. Использование бытовых нагревательных приборов разрешается только под присмотром. Для того, чтобы термостат можно было воткнуть в розетку и уйти из дома - у него должен быть сертификат. Но вы же знаете отношение нашего человека к правилам и запретам... В общем, я бы себя чувствовал морально плохо, если бы выкладывал на сайт устройство которое часть пользователей обязательно оставит без дома (а кого-то еще и без отца/матери/детей/etc).

      Как минимум - добавили бы вы в дисклеймер, что эту штуку запрещается оставлять без присмотра! Это оставляет ей кучу применений - какие-нибудь лабораторные установки, котлы где есть дежурный круглосуточно, и т.д - но хотя бы никто не убьет себя по глупости...

      А если вы хотите спроектировать штуку, которая действительно может легально (тут без шуток - правила безопасности писаны кровью) работать автономно - то хочешь-не хочешь надо изучать правила проектирования отказоустойчивых систем. И да, абсолютно безопасных устройств не бывает, и подход к безопасности всегда риск-ориентированный. Принцип простой - по нормативу задаетесь такой вероятностью, чтобы за время использования вашего устройства вероятность погибнуть от его отказа была меньше чем под колесами автомобила или от сосульки с крыши зимой. Будет десять в минус какой-то степени на час (месяц, год) работы. Дальше по другим справочникам раскладываете это в надежность компонентов и подтверждаете что ваши схемотехнические решения действительно позволяют человеку скорее попасть в автомобильную аварию чем сгореть от отказа термостата. И в принципе все, ваше устройство получает право работать без присмотра...

      P.S. Никому и никогда не говорите что вы их делали на заказ. Случись что - попадете под уголовное дело. Оно и раньше было не то чтобы очень здорово - даже если не посадят а дадут условно... А сейчас наиболее вероятно, что до суда даже не доживете - "уговорят" подписать контракт - а дальше вы и сами знаете...


      1. vic80 Автор
        24.06.2026 09:35

        Спасибо за развернутый комментарий. Ну да, на заказ это конечно громко сказано, на продажу я их никогда не делал. Насчет опасности тоже соглашусь (несмотря на то, что, повторюсь - не бывает безопасных устройств), но ведь я и в дисклеймере это написал. Скажу так, на самом деле посыл статьи - это возможность поизучать ассемблер, если кому интересно.


  1. xSVPx
    24.06.2026 09:35

    На основе этого опыта я категорически не рекомендую использовать данные модули питания (Hi-Link) в их «голом» виде без дополнительной обвязки

    Разве в его даташите нет довольно могучей обвязки с дросселем итп ?

    Я помнится думал купить, но когда посмотрел сколько там всего не хватает не стал.


  1. mozg37
    24.06.2026 09:35

    Санкционный дорогой 8битный древний mcu. С китайским за 5..20р и выжимать не понадобится. Кондеры на питании не стоят. Я бы зачёт не поставил.


    1. ponikrf
      24.06.2026 09:35

      Когда смотришь на поделие автора - понимаешь что у некоторых людей слишком много времени на всякую парашу.


  1. enjoyneering
    24.06.2026 09:35

    Моё поделие поделие - https://github.com/enjoyneering/tthRelay


    1. Coder007
      24.06.2026 09:35

      Тоже тебе такой умный порекомендовал на пин поставить конденсатор на 220uF? При отключении (тем более на светодиоде оптопары) у тебя ещё некоторое время будет сигнал висеть активный! Экстренного отлючения не получится.

      Объясни, для чего там конденсатор?


  1. sim2q
    24.06.2026 09:35

    Хорошая статья, скучаю по гиктаймс:) Но писать на ассемблеме - это прям надо любить тему. Интересно конечно сейчас попробовать прогнать на оптимизацию - уменьшат ли сегодня размер кода "роботы"?:)
    Я как то тоже болел пытался заиспользовать все процессоры валяющиеся в коробке начиная с самых мелких. Так вот там памяти не было, только регистры и двухуровневый стек для возврата из прерывания. Но мне просто наскучило писать на asm. Встречал упоминание в сети где энтузиаст писал на Си для проца чуть выше в линейке со сходной системой команд и после компиляции заменял все обращения к памяти скриптом.


    1. vic80 Автор
      24.06.2026 09:35

      Я тогда только начинал изучать микроконтроллеры, и начал с ассемблера. Сейчас на асм я уже давным давно не пишу. Это просто как минимум очень долго да еще и муторно. Но, все-таки считаю правильным, что начал с него - как бы выразиться... асм дает полное ощущение контроля и понимание того как работает МК


      1. sim2q
        24.06.2026 09:35

        Да я тоже с asm начинал, а перед этим с ЛА3, и ИП3 (4-битное АЛУ), давно было, но опыт важный... особенно с блокировочными конденсаторами, землёй и разводкой:)


  1. Sneyfu
    24.06.2026 09:35

    "Не стреляйте в пианиста — он играет, как умеет" (c)


    1. vic80 Автор
      24.06.2026 09:35

      Спасибо за поддержку :D


  1. Coder007
    24.06.2026 09:35

    Да, как проект 14 летней давности, нормально. Сейчас конечно можно делать и проще и быстрее и на другой элементной базе.

    Комментариев много и много прям хейтовых. Я и понимаю людей и не понимаю. Вы смотрите проект как историю и автор об этом сказал сразу, ну так и отнесите ь к нему как к истории. Я в 1995 тоже начинал писать код на Ассемблере и да, сейчас его ещё помню, но сейчас пишу в основном на С, С++, С#. Изделие хорошее, а учитывая что оно показало себя с хорошей стороны и о работало более 14 лет и не в одном экземпляре, то можно сказать что проект удался, не смотря на критику и замечания.

    А ещё можно сказать, что компания Atmel делает хорошие микроконтроллеры.

    Да, устройство отчасти небезопасно, с точки зрения некоторых людей, но и оно не продаётся на прилавка магазинов.

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

    Автор, спас бо за интересную статью и экскурс к истокам микроконтроллеров (пусть и не к древним)


    1. vic80 Автор
      24.06.2026 09:35

      Спасибо за поддержку. Я тоже уже очень давно пишу только на Си, и пишу для STM32 и ESP32 понеменгу стараюсь осваивать, но все-таки уверен что правильно начал с ассемблера - уверен что только асм дает полное понимание того как работает контроллер. Хотелось бы надеятся что кто-то все-таки еще интересуется оптимизацией и просто устройством контроллера. Ну и кстати еще повторюсь - я самоучка, и все что я делаю - чистый DIY и позиционируется так же.