[Из песочницы] Особенности программирования микроконтроллеров посредством клавиатуры

00efde7007e64a77acd757aaa6f5a09f.jpg

Основное назначение клавиатуры — набор текста. Но её можно применить и для записи кода в микроконтроллер. Метод нетрадиционный, но может пригодиться, когда под рукой ничего другого нет. Или как развлечение с уже не годной для обычной работы клавиатурой. Ниже о том как это делать.

Примерная схема программатора:


e7edef79242441fd979d82b4a480b1c6.jpg

ScrollLock задаёт уровень на входе RESET, CapsLock — на входе SCK, NumLock — на входе MOSI. Светодиод (VD4) на выходе MISO используется для контроля входа в режим программирования. Детали отмеченные звездочкой (*) не обязательны.

Алгоритм программирования (для микроконтроллеров AT90 или ATmega):

1) Установить 0 на SCK и MOSI (включить CapsLock и NumLock). SCK должен быть в 0 до перехода RESET в 0.
2) Установить 0 на RESET (включить ScrollLock).
3) Сформировать, изменяя состояние SCK и MOSI (ScrollLock и NumLock), последовательность перевода контроллера в режим программирования.
4) Если светодиод на выходе MISO не светится — необходимо сформировать одиночный импульс на линии SCK и повторить последовательность (пункт 3).

Если за 32 попытки переход в режим программирования не произошел — кажется, что-то пошло не так. В случае успеха дальнейшее программирование происходит через ScrollLock и NumLock (SCK и MOSI). Внимательный и упорный гик может запрограммировать микроконтроллер вручную.

Почему это не работает?

Основная проблема при реализации такого программатора — собственная логика работы клавиатуры. Установка состояния светодиодов внешней программой соответствует результату в клавиатуре, но переходной процесс включения/выключения светодиодов — её личное дело. Ниже приведены осциллограммы реальных переключений:


3589a69129cd4b81a3efaa84a93ff9d1.png

Включение NumLock (CapsLock и ScrollLock включены).


bea7211cc86a47a0971d3bd2ddcc1e14.png

Выключение ScrollLock (CapsLock и NumLock включены).

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

Что делать, если так не повезло с клавиатурой?

Все «переходные процессы» укладываются по времени в несколько микросекунд, а установка определенного уровня на SCK, MOSI и RESET происходит с задержкой более 1 мс. В таком случае сигналы для программирования могут быть выделены с помощью фильтра низких частот. Вот пример фильтра:


3201e24968c0492191220a5a74f4667b.jpg

74HC14 — триггер Шмитта, он предназначен для формирования выходных уровней. Может быть заменен на аналоговый компаратор (например LM2901). В микроконтроллерах AVR входы имеют встроенный триггер Шмитта, что позволяет обойтись RC цепочкой, если выходные уровни 1 и 0 соответствуют необходимым.

В качестве примера. Клавиатура, ставшая программатором:


e62504805a414cfeb97fa39db3bf722b.jpg

→ Софтовая реализация программатора

© Geektimes