В предыдущей статье мы реализовали программный UART в ATtiny13. Чтобы показать целесообразность применения программного UART в ATtiny13 пришло время заюзать этот интерфейс в реальном устройстве.
Выбор реального устройства пал на устройства ввода – keypad. Кто не в курсе – это набор (матрица) клавиш, часто 3х4 (а-ля телефон). Такие кейпады продаются в радиомагазинах.
Вот купил один:
Также заиметь такой кейпад можно способом расковыривания ненужной оргтехники (телефоны, калькуляторы – все пойдет в ход!) или, брутально, отпилить ножовкой по металлу кусок от ненужной «клавы» для PC.
Для классического варианта обслуживания матрицы клавиш нужно 3+4=7 линий (ножек микроконтроллера), но у ATtiny13 есть только 5 (не считая сброса), кроме того, одна ножка нам нужна для передачи сообщений по UART – итого 4. Не сходится. Но ничего, мы подключим keypad к ATtiny13 нестандартно! Используя АЦП микроконтроллера, мы обойдемся всего тремя ножками. Вот так:
На схеме не указан разъем для программирования, но я надеюсь Вы знаете куда его приткнуть. Пунктиром показаны не обязательные элементы, они могут понадобится в случае больших помех на линиях АЦП и не надежного срабатывания клавиш (конденсаторы подобрать экспериментально, но не более 0.01мкФ).
Идея такого подключения матрицы клавиш заключается в том, что на линиях строк, при помощи резисторного делителя напряжения, создаются разные потенциалы. При нажатии на клавишу соответствующий потенциал прикладывается к определенной линии столбца, где он оценивается соответствующим АЦП. По результатам оценки потенциала можно однозначно сделать вывод, о том какая клавиша нажата.
Раз мы обошлись всего тремя ножками для обслуживания keypad’а оставшеюся ножку используем для световой и звуковой сигнализации – клавиатура у нас будет «пикать» и красиво светить светодиодиком :).
В устройстве (прошивке) реализовано:
— устранение дребезга контактов;
— автоповтор при удержании клавиши;
— озвучивание нажатой клавиши;
— Shift-режим – расширение возможностей кейпада;
— индикация включения Shift-режима.
Работает устройство следующим образом:
При нажатии на клавишу, через UART, передается соответствующий символ (пример: нажали клавишу 1 – по UART передался символ «1»). При длительном удержании клавиши включается автоповтор — по UART непрерывно передаются символы нажатой клавиши.
При нажатии на любую из клавиш подается звуковой сигнал – «пиканье».
При нажатии клавиши «*» включается Shift-режим – загорится светодиод. В Shift-режиме при нажатии на клавиши по UART будут передаваться символы латиницы (пример: нажали клавишу 1 –по UART передался символ «A»; 2 – «B»; 3 – «C» и т.д.). Это сделано для того, чтобы расширить функциональность кейпада. Например, при помощи кейпада в нормальном режиме вводятся данные, а в Shift-режиме он используется для навигации по меню (по аналогии с Num Lock ПиСишной клавиатуры). Клавиши «*», «0» и «#» передают по UART одни и те-же символы в обоих режимах (реализация общих для режимов клавиш, например: если клавишу «#» Ваш проект будет воспринимать как «Enter» , то этот «Enter» будет работать в любом режиме). Повторное нажатие «*» выключит Shift-режим.
Настройки передатчика UART:
— Скорость — 9600;
— Количество бит данных — 8;
— Стоп-бит – 1;
— Бит четности – нет.
(Baud Rate: 9600, 8 Data, 1 Stop, No Parity).
А вот и сама прошивка для ATtiny13:
047-T13-Key-to-UART.zip (3173 Загрузки)
047-T13-fusebits.png (2978 Загрузок)
Выводы:
Реализовав драйвер клавиатуры на ATtiny13 мы освободили: 6 ножек микроконтроллера Вашего проекта; как минимум, один таймер; память и процессорное время на обработку матрицы. Теперь для того, чтобы подключить клавиатуру к вашему проекту достаточно одной ножки микроконтроллера и минимальной обработки принятых символов.
Смотрим демонстрацию устройства:
048-Демонстрация: 047-Драйвер матричной клавиатуры 3х4 на ATtiny13 с UART выходом.
P.S.
Программа драйвера клавиатуры вышла размером в 140 слов — это всего 30% доступной памяти — жалко! Если есть какие пожелания, в плане чего добавить, пишите, будем добавлять!