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


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



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). Внимательный и упорный гик может запрограммировать микроконтроллер вручную.


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


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



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



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


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


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


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



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


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



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

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


  1. tronix286
    15.12.2017 15:39

    Да фигня все это. Клавиатуры всякие… Читерство сплошное. ТУМБЛЕРЫ! Вот где будущее программирования микроконтроллеров!


    1. ilyaplot
      15.12.2017 16:19

      Провода и скрутки. И возможно же :)


    1. svitoglad
      15.12.2017 19:08

      Перфокарта наше все. :)


    1. tormozedison
      15.12.2017 20:35

      Э, не, с тумблерами возникает соблазн откопать старое параллельное ПЗУ, чтобы можно было одним махом передать сразу целый байт. Это слишком просто, вот где читерство.


      1. tormozedison
        15.12.2017 23:48

        А уж самое читерство — сделать своё ПЗУ из дешифратора адреса и матрицы диодов. Там вообще всё как на ладони видно, и ошибки в два счёта исправляются.


    1. nochkin
      15.12.2017 21:32

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


      1. golf2109
        15.12.2017 22:05

        на драгметаллы сдавали?


        1. nochkin
          16.12.2017 01:11

          К великому счастью, медь, олово и свинец не являются драгметаллами.


  1. Ocelot
    15.12.2017 15:40

    Надо ещё MISO завести на какую-нибудь из кнопок клавиатуры (shift, например). Тогда можно будет читать с контроллера тоже.

    Внимательный и упорный гик может запрограммировать микроконтроллер вручную.
    Могу =)


    1. Alex_Bogdanovich
      15.12.2017 20:20

      божественно, спасибо


  1. Akon32
    15.12.2017 15:52

    Мне кажется, SCK нужно выносить в ножную педаль, без этого решение будет неполным.


    1. vasimv
      15.12.2017 19:53

      И генератор туда. Как раз запитать всю эту конструкцию вместе с микроконтроллером хватит. :)


  1. Alexeyslav
    15.12.2017 16:27

    Читеры, да…
    Я когда-то вводил с помощью пары 155ИЕ7 и пары регистров и триггеров(автоинкрементация адреса) коды с 16-кнопочной клавиатуры в 537РУ10 в схему на основе Z80, где оная RAM была в качестве ПЗУ ибо УФ-стирателя для настоящих РФ-ок небыло.


    1. tormozedison
      15.12.2017 20:37

      Это зовётся "эмулятором ПЗУ".


  1. rexen
    15.12.2017 17:08

    Программирование клавиатурой?
    Где-то я это уже проходил… МК-61 в школе!


    1. tormozedison
      15.12.2017 20:43

      Да вы мажор. У меня в ту пору "Электроника ИМ-11" была. Это был первый предмет, который я программировал в жизни.


      1. da-nie
        15.12.2017 20:58

        Вот тут как раз всё наоборот. :) Это у мажоров был «Электроника ИМ-11». Потому как инженер покупал именно калькулятор (ибо полезен в работе), а не дорогущую игрушку.


        1. tormozedison
          15.12.2017 21:15

          Мне её родители не покупали, а подарил знакомый мажор.


          1. da-nie
            16.12.2017 07:57

            Нифига себе, как вам повезло. :) Я на этот планетоход облизывался, глядя как с ним играют в магазине «Электроника» (там вообще чуть ли не толпа смотрела, как оно ездит по прилавку).


  1. BubaVV
    15.12.2017 18:23

    Хочу плагин для Guitar Hero


  1. da-nie
    15.12.2017 20:34

    Где-то я уже такое читал давным-давно.


    1. ploop
      15.12.2017 20:57
      +1

      Старая тема. Например: wiki.steve-m.de/hidkey_gpio


      1. da-nie
        15.12.2017 20:59

        Вот-вот. :)


        1. ploop
          15.12.2017 21:55

          Ещё где-то в блоге DIHALT было, если память не изменяет.


          1. DIHALT
            16.12.2017 10:49

            dcoder это делал, насколько помню. Он любит такие приколы.




    1. VikTech Автор
      16.12.2017 14:29

      «Мопед не мой», это точно :) Я только написал почему может не работать и как это исправить.


  1. Psychosynthesis
    15.12.2017 23:52

    Кайф. А какие МК ваша софтверная реализация поддерживает?


    1. VikTech Автор
      16.12.2017 14:44

      AVR и ATmega ( проверял на 2313 и mega8 ). По ссылке в публикации есть архив с программой и документацией. Можно помигать светодиодами на клавиатуре :)


  1. Lucidus
    16.12.2017 03:19

    Месье знает толк в извращениях (=


    1. VikTech Автор
      16.12.2017 14:53

      В каждой шутке есть доля шутки. Как решение проблемы «курицы и яйца» вполне годно.
      И да, у меня есть вариант программатора через стерео выход :)


      1. ploop
        16.12.2017 20:38

        Сейчас уже проблема «курицы и яйца» давно неактуальна из-за доступности копеечных китайских программаторов, а вот в качестве обучающего материала — очень даже!