Программатор из клавиатуры – Программатор микроконтроллеров семейства AVR из USB клавиатуры — DRIVE2

Программатор микроконтроллеров семейства AVR из USB клавиатуры — DRIVE2

Приветствую Вас, друзья мои!
Вот такой вот программатор для AVR контроллеров из USB клавиатуры, был мною сделан на первое время.На авторские права совершенно не претендую, ибо идею и исполнение подсмотрел у соратника Y-G, также некоторые фото и видео использовал из его записи =)
Плюс этого девайса в том что его очень легко сделать, не требуется ЛУТ и больших знаний, а также можно сказать почти бесплатно =)
Минусом является маленькая скорость прошивки, но это утверждение сам не проверял.
Чтобы в последующем сделать самостоятельно программатор AVR USBASP, Вам потребуется прошить управляющий контроллер, и для этих целей нужен COM или LPT порт, которые уже практически вымерли как динозавры.Так вот для прошивки управляющего контроллера как раз и можно использовать данный девайс =)
Немного о самом процессе изготовления:

На работе валялась глючная, в плане печатания, мультимедийная USB-клавиатура.Оппачки, в разбор её, нах =)


Самым главным параметром является наличие 3 светодиодов на клавиатуре.

Разбираем ее и достаем оттуда управляющую плату, остальное нам не понадобится.В мусорку, нах…

То что нам нужно)
Из валяющегося на работе раритета, а в частности, со старого системника, обрезал вот такие проводочки, для подключения панельки.

Теперь выпаиваем светодиоды и вместо них к катодам(то есть к минусу) припаиваем провода которые будут подключаться на МК а также припаиваем питание контроллера.Так как на моей клаве было 4 светодиода, то я задействовал все.А в первоисточнике только три светодиода и провода припаивались на MOSI, RESET, SCK.Провода на ножку MISO нет и не получится проверить правильность заливки.Но это не критично =)

Программатор готов!
На работе в куче дохлого барахла нашёлся картридер, который и стал донором для корпуса платы =)

Для подключения МК собрал по быстренькому на макетках вот такие панельки


Подключаем его к компу, подключаем МК, запускаем нужную программку, выбираем заливку и все!Пошел процесс)

Вот так подключается микроконтроллер ATtiny13 без панелек, для прошивки


Это архив с программкой для работы программатора yadi.sk/d/G_4jh4SNcHsyU
Видео работы программатора с первоисточника


✔ Всех Вам благ, и ровных дорог!Всем

пис peace =)

www.drive2.ru

7 способов прошивки бутлоадера | Амперка / Блог

Если по какой-либо причине «волшебный дым» покинул бренное кремниевое тело микроконтроллера вашей дорогой Ардуинки, это ещё не повод отчаиваться и покупать другую платформу. Достаточно обзавестись новым прошитым микроконтроллером или купить «лысый» и собственноручно вдохнуть в него жизнь, прошив бутлоадер и фьюзы.

Мы нашли целых 7 способов как это сделать:

1. Arduino + Arduino

Если у вас в ящике стола вдруг завалялась ещё одна платформа Arduino, вы можете использовать её в качестве ISP программатора.  Подробнее

2. Arduino + кварц + конденсаторы

Если второй Arduino под рукой не оказалось, посмотрите нет ли где-нибудь по близости Breadboard’а, кварцевого резонатора на 16МГц, двух керамических конденсаторов на 18-22 пФ и резистора на 10кОм. С помощью этой схемы вы тоже сможете прошить микроконтроллер. Подробнее

2.1. Без кварца и конденсаторов…

Можно обойтись и без обвязки МК, но придётся поменять порядок записи бутлоадера и фьюзов. Подробнее

3. Программатор STK500

Можно заранее обзавестись программатором STK500 для прошивки микроконтроллеров. Подробнее

4. Программатор Громова

Можно и своими руками собрать программатор для AVR микроконтроллеров. Один из самых надёжных самодельных вариантов — программатор Громова, он позволяет программировать МК через COM-порт. Для его сборки необходимо умение держать паяльник и знание ЛУТ’а. Подробнее

5. «Пять проводков»

Программировать микроконтроллеры можно и через LPT-порт, используя так называемый метод «пяти проводков». Он менее надёжен чем COM-программатор, но значительно проще в сборке. Есть совсем простой, но ненадёжный вариант на резисторах, и посложнее, на случай, если у вас вдруг завалялась микросхемка 74HC244.

6. Программатор из клавиатуры

Распотрошив обычную компьютерную клавиатуру тоже можно собрать вполне сносный программатор. Главное — наличие на ней блока из трёх светодиодов. Подробнее

7. Кнопочный программатор

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

  • Вконтакте
  • Facebook
  • Twitter

blog.amperka.ru

Музыкальный колокол USB — DRIVE2

Программатор Громова

Загорелась идея сделать вот такое тут
проблема там надо МК прошивать, а я не знаю как, какой то программатор надо, и знать как прошивать?! далее я разобрался как и чем прошивать МК ATTINY85 пробовал avr keyboard programmer, это фигня какая то очень долго прошивает аж 800 мин где то, и непонятно как прошивает ли он вообще Программатор из клавиатуры потом спаял программатор Громова Громов он лучше им хотя бы видно что определяет МК и прошивку заливает. Все это понятно, мне одно не понятно, это FUSE(предохранители) как правильно их выставить вроде как вот и они:
точнее где и на какую галочки выставлять ponyprog и uniprog фьюзы у этих программ будут инверсными это я понял.
High: 0xDD 11011101
||||||||BODLEVEL0 |
|||||||_BODLEVEL1 |Brown-out detection at VCC=2,7V
||||||__BODLEVEL2 |
|||||___EESAVE
||||____WDTON
|||_____SPIEN
||______DWEN

|_______RSTDISBL

Low: 0xE1 11100001
||||||||CKSEL0 |
|||||||_CKSEL1 |PLL Clock;
||||||__CKSEL2 |Start-up time PWRDWN/RESET:
|||||___CKSEL3 |1K CK/14CK + 64 ms
||||____SUT0 |
|||_____SUT1 |
||______CKOUT
|_______CKDIV8

прошил и выставил вот так FUSE


вот и второй МК прошил, и опять же ничего не воспроизводит, тишина.
Но COM port видит после прошивки МК, а первый МК не видит, это наверное из за RSTDISBL, то что его заблокировал.
Далее.все таки я прошил контроллер, причина скорей всего была сырая прошивка, залил другую и все заработало УРА!
прошивка — yadi.sk/d/IUcbPN6Uq5n7S

Полный размер

Нравится 2 Поделиться: Подписаться на автора

www.drive2.ru

Мои девайсы для программирования МК — DRIVE2

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

Все началось года полтора назад с купленных мною фар для Королевишны. Захотелось мне внедрить в них ДХО. И конечно же для ДХО был нужен какой то блок управления, долго его искать не пришлось. Почти сразу на ткнулся на нужный мне девайс любезно предоставленный для самостоятельной сборки всеми известным Кулибиным Драйва) Степаном Палычем CAMOKAT-BETEPAHA.
Как оказалось этот контроллер ДХО нужно еще и программировать!

Ну и ладно! Мы и паять можем научиться, и МК прошивать!)))
Купил паяльную станцию)
Нашел на Драйве как замутить программатор автором которого оказался Василий himiks

И понеслось!

Самая моя первая поделка — это программатор USBasp.
Для того чтобы его собрать, его самого надо запрограммировать, вернее его микроконтроллер ATmega8. Все нормальные люди сразу собирают для этого LPT программатор. Но сразу LPT программатор делать не стал, так как в инете нарыл как из обычной клавиатуры сделать подобный программатор, тем более у меня валялась не нужная клава. В итоге запорол МК ATmega8.)))) Ну и раз из клавы программатор не вышел, сделал все же LPT программатор.

Слева USBasp, справа LPT программатор

Но и легким путем я не пошел. Для восстановления микроконтроллера был собран FuseBit Doctor.

FuseBit Doctor

МК ATmega8 был успешно разлочен и теперь уже прошит LPT программатором. USBasp заработал)

Так же собраны вот такие адаптеры для программирования. Для микроконтроллеров в корпусах SOIC и PDIP.

Слева для SOIC, справа для PDIP

Уже позже из поднебесной был заказан более красивый и компактный программатор USBasp.

В один прекрасный день было решено из USBasp сделать STK500. В итоге убит МК.
Восстановить МК при помощи FuseBit Doctor не получилось. Новый МК ATmega48 стоит почти как сам USBasp
По этому заказал еще парочку USBasp-ов из Китая. Сломанный оставил на запчасти.

Ну а это уже полноценный STK500.

Всем Удачи)!

3 года Метки: lpt программатор, usbasp, stk500, fusebit doctor

Нравится 57 Поделиться: Подписаться на автора

www.drive2.ru

Клавиатура | Электроника для всех

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

Ну а чо, сказано сделано. Воткнул ATMega8535 — первая которая под руку подвернулась из многоногих. Вывел все что только можно наружу, присобачил небольшую клавиатурную матрицу 4х4 и LCD экранчик. Экранчик мелкий WH0802A 8х2 символа, но уж какой был. Других у нас в продаже не встречал, а под заказ везти лень. Да и, думаю, там и не надо больше.

А раз уж пошла такая пьянка, то до кучи вывел наружу пару каналов ШИМ, да пару входов АЦП. Ну и SPI заодно — гулять так гулять. Там же можно и Dallas 1-wire проткол организовать, приделать частотомер, индикатор сигнала, вольтмер и вообще можно много чего наворотить, было бы желание. Опять же, линий на вход/выход получается дофига, так что из нее можно сделать головной блок умного дома или контроллер чего нибудь.

Корпус взял халявный, PAC-TEC‘овский который намутил года два назад. Вот и пригодится коробочка 🙂 Надо сказать, PAC-TEC делает просто изумительные коробки. Не чета тому говну, что продается в наших радиомагазинах. Не скрипят, не люфтят, крепко сбиты, ладно скроены и выглядят круто. Где бы их еще продавали у нас.

Пока только плату развел, еще некоторых деталей не хватает. На днях вытравлю плату, соберу и буду программировать. Вот тогда будет вам и примеры живого кода и подробное описание SPI, i2c, UART, клавиатура и LCD . Кстати, обратите внимание как легко матрицировать обычные тактовые кнопки. А все благодаря тому, что у них четыре попарно соединенных вывода.

Пока же, раз все еще в виде чертежа, набрасывайте в комменты свои идеи по поводу фич будущего девайса.

easyelectronics.ru

Программатор Википедия

Программатор ПЗУ с ультрафиолетовым стиранием

Программа́тор — аппаратно-программное устройство, предназначенное для записи/считывания информации в постоянное запоминающее устройство (однократно записываемое, флеш-память, ПЗУ, внутреннюю память микроконтроллеров и ПЛК[1]).

Классификация программаторов

По типу микросхем

Универсальные программаторы могут поддерживать все вышеперечисленные типы.

По сложности

Если радиолюбителю нужно единожды запрограммировать микроконтроллерное устройство, существует возможность обойтись простейшим программатором, подключаемым к COM-, LPT-порту или USB. Например, самый простой программатор для микросхем AVR — это кабель из шести проводов и четырёх резисторов (так называемый программатор PonyProg)[2].

Для радиолюбителей, занимающихся разработкой микропрограмм, существуют более сложные программаторы — такие устройства часто содержат свой микроконтроллер. Подобные программаторы удобны тем, что после работы переводят свои выходы в Z-состояние, и запрограммированное устройство можно испытывать, не отключая программатора. Такие программаторы, как правило, работают с одним-двумя семействами микросхем[3]. При самостоятельном изготовлении программатора такого класса может возникнуть «проблема курицы и яйца» — если в схеме программатора присутствует микроконтроллер, то и его необходимо запрограммировать при отсутствии готового программатора[3]. Для её разрешения приходится отдавать микросхему владельцу готового программатора, либо изготавливать простейший программатор для подключения к COM- или LPT-порту компьютера.

В конструкторских бюро и лабораториях применяются универсальные программаторы. Поскольку в таких устройствах каждый из выводов разъёма (а этих выводов может быть до сотни) может подавать на микросхему напряжения от 0 до 27 В с точностью в 0,1 вольт и частотами до 40 МГц, универсальные программаторы бывают очень дороги — до нескольких тысяч долларов. Зато при появлении новой микросхемы достаточно добавить её поддержку на программном уровне[источник не указан 3093 дня].

По подключению микросхемы

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

При покупке параллельного программатора стоит обратить внимание на качество разъёма, в который устанавливается микросхема. Обычный одноразовый разъём долго не прослужит; программатор должен иметь цанговые разъёмы — а ещё лучше ZIF. В дорогих программаторах есть несколько разъёмов — под разные виды корпусов.

По подключению к компьютеру

Первые программаторы были автономными — для набора прошивки имелась клавиатура или коммутационная панель. С распространением ПК такие программаторы были полностью вытеснены подключаемыми к компьютеру — специальная программа (которая также называется программатором) передаёт прошивку с компьютера, а программатору остаётся только записать её в память микросхемы.

Для подключения программаторов могут применяться:

Стоит заметить, что в самых простых параллельных и последовательных программаторах управляющему ПО приходится напрямую управлять логическим уровнем на выводах порта (на жаргоне электронщиков «дрыгоножество» или bitbang). Такое прямое управление в Windows NT запрещено, это обходится установкой специализированного драйвера; через адаптеры USB→COM bitbang-программаторы работают крайне медленно (единицы-десятки байт в секунду). Микроконтроллерные программаторы полностью поддерживают протокол COM- или LPT-порта и поэтому свободны от этих недостатков.

Специализированные платы изредка применялись до появления USB, так как позволяли достичь максимальных скоростей обмена данными. Впрочем, одновременно они делали программатор стационарным.

Современные программаторы подключаются через USB (лишь простые дешёвые конструкции используют COM- или LPT-порты). Высокопроизводительные промышленные программаторы используют Ethernet [пример?].

По дополнительным функциям

(Здесь указаны как аппаратные, так и программные функции.)

  • Наличие программного обеспечения под распространённые платформы (обычно под Windows и Linux; остальные ОС среди разработчиков непопулярны).
  • Проверка правильности подключения ещё до попытки стереть микросхему.
  • Проверка исправности программатора.
  • JTAG-адаптеры, пригодные одновременно как для программирования, так и для отлаживания прошивок.
  • Автономные (полевые) программаторы имеют компактные размеры и содержат внутреннюю память для хранения прошивки. Такие программаторы предназначены для обслуживания техники прямо в местах её установки (подчас труднодоступных).
  • Встроенный HEX-редактор, позволяющий откорректировать записанную в микросхеме информацию.
  • Возможность самостоятельного обновления прошивки самого́ программатора.
  • Возможность одним нажатием кнопки выполнить некоторую последовательность действий — например, стереть, проверить стирание, записать, проверить правильность записи и установить конфигурационные биты (так называемое автоматическое программирование).
    • В программаторах для массового программирования может применяться скриптовый язык, на котором можно реализовать, например, автоинкремент серийных номеров — таким образом, каждая микросхема будет иметь уникальный номер.

См. также

Примечания

Ссылки

wikiredia.ru

Подключение клавиатуры к МК по трем проводам на сдвиговых регистрах

Часто возникает необходимость использования в своем проекте большого количества кнопок для различный целей. Существуют разные варианты реализации данной задачи. Сегодня я расскажу вам о решении, которое пришло мне в голову однажды вечером. Тогда мне нужно было повесить клавиатуру на контроллер с ограниченным количеством свободных ножек. Скорее всего данное решение уже описывалось и использовалось где-либо ранее, но упоминаний в интернете я не нашел.

Суть
Подключение клавиатуры осуществляется по трем сигнальным проводам. Дополнительные элементы: сдвиговые регистры sn74198n и несколько резисторов. Максимальное количество кнопок ограничивается лишь максимально допустимым временем на сканирование клавиатуры. Я использовал в своем проекте 16 кнопок, но путем добавления новых сдвиговых регистров, можно увеличить данное число до необходимого вам значения. Вас будет ограничивать лишь пропорционально возрастающее время сканирования клавиатуры.

Аппаратная часть
Сдвиговые регистры – вещь довольно удобная за счет своей дешевизны и универсальности. Их часто используют для подключения светодиодов, семисегментных индикаторов и т.п. по небольшому количеству выводов микроконтроллера. В нашем случае, будем проделывать почти все тоже самое, но в обратную сторону:будем передавать данные не «из микроконтроллера», а «в него». Для наглядности привожу блок схему работы данного устройства:

  • 1.Блок Клавиатуры
  • 2.Сдвиговый регистр
  • 3.МК

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

Параллельная и последовательная передача
Если вы не знаете различия в параллельном и последовательном способе передачи информации, то рекомендую разобраться в этом сейчас. Далее я часто буду использовать эти термины, и без понимания их, вам будет немного сложнее.
Параллельной передачей данных называют метод передачи нескольких сигналов с данными одновременно по нескольким параллельным каналам, например порт целиком, сразу все восемь бит. При последовательной передачи данных биты пересылаются по одной линии связи, друг за другом, последовательно. Например по UART или по SPI

В нашей схеме сдвиговый регистр осуществляет конвертацию параллельного входного сигнала в последовательный выходной. В процессе сканирования клавиатуры он будет хватать 8 значений из блока клавиатуры и последовательно отсылать его в микроконтроллер.
Исходя из вышеописанного, к сдвиговому регистру предъявляются следующие требования:

  • параллельный вход
  • последовательный выход

Для этого нам подойдет регистр SN74198N. В моем месте обитания такие микросхемы редкость, поэтому я использовал советские монстровидные К155ИР13. Они являются полным аналогом, и различий в их использовании от импортных собратьев нет.

МК управляет сдвиговым регистром: говорит когда ему хватать сигнал с блока клавиатуры и передавать его своему хозяину.

Теперь разберем схему нашего устройства.

Схема упрощенная, показано только подключение клавиатуры. Питание и прочая обвязка контроллера как обычно.

Описание кнопок
Одним выводом кнопки подключены к входу сдвигового регистра. Другим – к общему проводу. Так же немаловажная детать – подтягивающие резисторы R1 – R8. Они создают высокий логический уровень на входе сдвигового регистра в то время, как соответствующая ему кнопка разомкнута.
Как только кнопка замыкается, на входе сдвигового регистра образуется логический ноль, так как он оказывается напрямую подключен к общему проводу. Значение резистора в 10 кОм не дает протекать слишком большому току, пока кнопка замкнута, и достаточно хорошо создает высокий логический уровень, пока кнопка разомкнута.

Сдвиговый регистр

  • Наш сдвиговые регистр имеет входной порт (D0-D7)
  • выходной порт (Q0-Q7)
  • и сигналы управления (SR, SL, CLK, S0, S1, MR).

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

  • D0-D7 – собственно вход. Сюда мы будем подавать 8 сигналов с наших кнопок.
  • Q0-Q7 – параллельный выход. Мы будем использовать лишь одну ногу – Q7. Остальные в нашем случае нам не нужны.
  • CLK – тактовый вход. Все в сдвиговом регистре делается только по дрыгу на этой ножке. А точнее по нарастающему фронту. Если нам необходимо что-то сделать, то просто подаем высокий уровень на ножку CLK, а затем опускаем ее (подаем логический ноль). Для простоты изложения, я буду по деревенский говорить, что нам нужно кликнуть ножкой CLK.
  • S0 и S1. Эти ножки отвечают за поведение выхода регистра (Q0-Q7). По сути этот регистр может иметь как последовательный (наш случай), так и параллельный выход. Когда обе ножки подняты (высокий логический уровень), мы можем загрузить на выход те данные, которые в данный момент находятся на входе (D0-D7).

    Для этого нам нужно при поднятых S0 и S1 кликнуть ножкой CLK. Сразу же после этого, ножки на выходе примут те же значения, что и на входе.

    Если же опустить одну ножку в ноль, например S1, то стоит нам дернуть ножкой CLK, как данные на выходном порте сдвинутся в сторону старшего бита (бит с выхода Q0 перескочит на выход Q1, а бит, который раньше был на месте Q1 — перелезет на Q2 и т.д.). Кликнем еще раз, биты сдвинутся опять.

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

Так как наши биты двигаются в сторону старшего (Q7), то и ловить их следует там.

Алгоритм действий

  • 1. Ставим S0 и S1 в высокий уровень и кликаем. На выходе Q0-Q7 у нас фиксируется необходимый нам байт (8 бит).
  • 2. Опускаем S1 (S0 остается в высоком уровне всегда, поэтому его можно смело напрямую сажать на плюс и забыть про него)
  • 3. Считываем бит с ножки Q7
  • 4. Кликаем. Бит, который раньше был на ножке Q7, убегает в нибытие, а на смену ему приходит бит, который раньше стоял на ножке Q6.
  • 5. Возвращаемся на пункт 3 и проделываем эти операции еще 7 раз. Ибо у нас 8 бит, и нам важен каждый из них.

Итого, использую 3 ножки микроконтроллера, подключенных к сдвиговому регистру (CLK, S1, Q7), мы легко и непринужденно опрашиваем наши 8 кнопок.

На бумаге это все работает, но проверим это в реальном железе. Для этого я собрал демонстрационную платку и подключил ее к Pinboard. Использовал, как я уже говорил, советские аналоги сдвиговых регистров, а именно К155ИР13, поэтому плата разведена под них.

Не пугайся что на плате 16 кнопок и уже 2 сдвиговых регистра, позже я опишу и этот вариант схемы. Главное знай, что данная схема может безболезненно работать и в восьмикнопочном режиме.

16-ая кнопка у меня отсутствует по причине отсутствия ее у меня в запасах и мороза на улице. Плату я перекатал ЛУТом на текстолит, вытравил и запаял. Вся эта технология хорошо расписана на данном сайте, поэтому останавливаться на деталях не буду.

Итак, плата готова, приступаем к самому интересному – написанию прошивки.

Програмная часть
Хотя представленный вариант работы со сдвиговым регистром совместим с аппаратным SPI микроконтроллера, опрашивать кнопки будем программно. Напишем функцию, которая будет опрашивать наши кнопки, и помещать результат в регистр R17.

		.equ	BTN_PORT	=	PORTB
		.equ	BTN_DDR		=	DDRB
		.equ	BTN_PIN		=	PINB
 
		.equ	BTN_DATA_IN	=	0
		.equ	BTN_HOLD	=	1
		.equ	BTN_CLK		=	2
 
btn_start:	SBI	BTN_PORT,BTN_HOLD	; Поднимаем S1	
 
		SBI	BTN_PORT,BTN_CLK	; кликаем
		CBI	BTN_PORT,BTN_CLK
 
		CBI	BTN_PORT,BTN_HOLD	; опускаем S1
 
btn_again:	LDI	R17,0			; В этом регистре будет накапливаться наш результат.
						; неизвестно где он побывал, а нам гарантированно
						; нужен ноль.
		LDI	R16,8			; счетчик. Цикл будем проделывать 8 раз
 
btn_loop:	LSL	R17			; если мы проходим тут, первый раз, то данная команда
						; с нулем ничего не сделает, если же нет, то двигаем все биты влево
 
		SBIC	BTN_PIN,BTN_DATA_IN	; если к нам на вход пришла 1,
		INC	R17			; записываем 1 в самый младший разряд регистра R17
 
		SBI	BTN_PORT,BTN_CLK	; кликаем
		CBI	BTN_PORT,BTN_CLK
 
		DEC	R16			; уменьшаем счетчик
		BREQ	btn_exit		; если счетчик досчитал до нуля, то переходим выходим btn_exit
		Rjmp	btn_loop		; иначе повторяем цикл, где первой же командой сдвигаем все биты
						; влево. Таким образом старые старшие байты постепенно
						; сдвигаются на свое место.
 
btn_exit:		RET

.equ BTN_PORT = PORTB .equ BTN_DDR = DDRB .equ BTN_PIN = PINB .equ BTN_DATA_IN = 0 .equ BTN_HOLD = 1 .equ BTN_CLK = 2 btn_start: SBI BTN_PORT,BTN_HOLD ; Поднимаем S1 SBI BTN_PORT,BTN_CLK ; кликаем CBI BTN_PORT,BTN_CLK CBI BTN_PORT,BTN_HOLD ; опускаем S1 btn_again: LDI R17,0 ; В этом регистре будет накапливаться наш результат. ; неизвестно где он побывал, а нам гарантированно ; нужен ноль. LDI R16,8 ; счетчик. Цикл будем проделывать 8 раз btn_loop: LSL R17 ; если мы проходим тут, первый раз, то данная команда ; с нулем ничего не сделает, если же нет, то двигаем все биты влево SBIC BTN_PIN,BTN_DATA_IN ; если к нам на вход пришла 1, INC R17 ; записываем 1 в самый младший разряд регистра R17 SBI BTN_PORT,BTN_CLK ; кликаем CBI BTN_PORT,BTN_CLK DEC R16 ; уменьшаем счетчик BREQ btn_exit ; если счетчик досчитал до нуля, то переходим выходим btn_exit Rjmp btn_loop ; иначе повторяем цикл, где первой же командой сдвигаем все биты ; влево. Таким образом старые старшие байты постепенно ; сдвигаются на свое место. btn_exit: RET

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

; Сначала инициализируем ноги контроллера:
	SBI	BTN_DDR,BTN_HOLD		; выход HOLD
	SBI	BTN_DDR,BTN_CLK			; Выход CLK
	SBI	BTN_PORT,BTN_DATA_IN		; вход DATA_IN
 
	OUTI	DDRA,0xFF			; Порт D ставим на выход. К нему будут
						; подключаться светодиоды
 
;Затем создаем бесконечный цикл, в котором помещаем следующее:
 
main:	RCALL	btn_start			; вызываем функцию опроса клавиатуры
	COM	R17				; инвертируем пришедший байт
	OUT	PORTA,R17			; и записываем его в порт A
	RJMP	Main				; возвращаемся на начало

; Сначала инициализируем ноги контроллера: SBI BTN_DDR,BTN_HOLD ; выход HOLD SBI BTN_DDR,BTN_CLK ; Выход CLK SBI BTN_PORT,BTN_DATA_IN ; вход DATA_IN OUTI DDRA,0xFF ; Порт D ставим на выход. К нему будут ; подключаться светодиоды ;Затем создаем бесконечный цикл, в котором помещаем следующее: main: RCALL btn_start ; вызываем функцию опроса клавиатуры COM R17 ; инвертируем пришедший байт OUT PORTA,R17 ; и записываем его в порт A RJMP Main ; возвращаемся на начало

Инвертируем регистр R17 для нагдяности. Так как изначально бит нажатой кнопки у нас Ноль, а светодиод загорается при единице.

Компилируем и заливаем в замечательную отладочную плату PinBoard. Подключаем наш блок кнопок так, как показано на фотографии.

  • 1 пин блока кнопок — PORTB.0
  • 2 пин блока кнопок — PORTB.1
  • 3 пин блока кнопок — PORTB.2
  • 4 пин блока кнопок — +5 V
  • 5 пин блока кнопок — Общий провод (Ground)
  • PORTA (0..7) — линейка светодиодов.

Перезагружаем МК и наблюдаем следующую картину

При нажатии кнопки у нас загорается соответствующий светодиод. Причем возможен вариант одновременности нажания нескольких кнопок. А это потенциальный плюс, который, при желании, можно лихо использовать.

На этом конец первой части.

В следующей стетье я расскажу вам как увеличить число кнопок до 16 (24, 32 и т.д), как легко определять какая кнопка нажата в данный момент, и как на нажатие каждой кнопки прикрутить свою функцию.

В самом конце у нас получится примерно это

Все вопросы и пожелания оставляйте в комментариях.

Смотри также статьи

UPD
Продолжение банкета! Часть 2

easyelectronics.ru