047-Драйвер матричной клавиатуры 3х4 на ATtiny13 с UART выходом.

Автор: | 08.07.2010

титлВ предыдущей статье мы реализовали программный 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.hex v1.0 [501 bytes] - Драйвер матричной клавиатуры на ATtiny13 c UART
047-T13-fusebits.png [1.68 KB] - Фьюзы для ATtiny13

Выводы:
Реализовав драйвер клавиатуры на ATtiny13 мы освободили: 6 ножек микроконтроллера Вашего проекта; как минимум, один таймер; память и процессорное время на обработку матрицы. Теперь для того, чтобы подключить клавиатуру к вашему проекту достаточно одной ножки микроконтроллера и минимальной обработки принятых символов.

047-ABProg-Key-to-UART.zip [8.61 KB] - Исходник драйвера клавиатуры на Algorithm Builder


Смотрим демонстрацию устройства:
048-Демонстрация: 047-Драйвер матричной клавиатуры 3х4 на ATtiny13 с UART выходом.

P.S.
Программа драйвера клавиатуры вышла размером в 140 слов — это всего 30% доступной памяти — жалко! Если есть какие пожелания, в плане чего добавить, пишите, будем добавлять!


(Visited 2 010 times, 3 visits today)

047-Драйвер матричной клавиатуры 3х4 на ATtiny13 с UART выходом.: 18 комментариев

  1. haosx86

    Возможно ли использовать «лишний» пин для тактирования и подключить клавиатуру к PS/2 ? Тогда если останется память можно будет на доп. функциональные клавиши забить свои пароли, к примеру)

  2. foxit

    А код на Си для Mega8 можно?

  3. GetChiper Автор записи

    haosx86 :

    Возможно ли использовать «лишний» пин для тактирования и подключить клавиатуру к PS/2 ? Тогда если останется память можно будет на доп. функциональные клавиши забить свои пароли, к примеру)

    Интересная идея. Надо будет подумать над этим. Заделать брелок-ключ с паролями?

  4. GetChiper Автор записи

    foxit :

    А код на Си для Mega8 можно?

    Имеется в виду саму процедуру работы с клавиатурой через АЦП?

  5. foxit

    хотелось бы увидеть весь исходник описанного проекта.
    — работа с клавиатурой через АЦП
    — устранение дребезга контактов;
    – автоповтор при удержании клавиши;
    – озвучивание нажатой клавиши;
    – Shift-режим – расширение возможностей кейпада;
    – индикация включения Shift-режима.

  6. GetChiper Автор записи

    Исходника на С не существует, так как программа написана в Algorithm Builder. Но, в качестве изучения С, мне самому будет интересно реализовать то-же самое на С. Поэтому, чуть позже, когда завершу следующее устройство, я попробую наваять программу на С и выложить ее здесь. Так пойдет?

  7. foxit

    Конечно.
    А пока если не сложно выложи программу в Algorithm Builder.
    Какой следующий проект?

  8. GetChiper Автор записи

    Исходник выложил (вродь там все нормально закоментированно).
    А следующим проектом будет драйвер линейки семисегментных цифровых индикаторов (тоже на ATtiny13). Есть неплохая идея реализации.

  9. foxit

    Наверно, подожду исходник на Си.
    А то что-то исходник на AB не идет.

  10. Уведомление: калькулятор битов « Эхо блогосферы

  11. JaroslavB

    А возможно по этой схеме сделать джостик для компа? чтобы нажатие кнопки определялось в опциях клавиатуры в игре

  12. GetChiper Автор записи

    Теоретически можно, но если смысл в нем? На клаве будет поудобней …
    Или есть какие-то особые соображения?

  13. GetChiper Автор записи

    По ножкам совместимы, но как поведет себя прошивка — это нужно пробовать.

  14. anatoliy

    ИМХО ненадёжная конструкция. Иза Куда проще поставить парочку регистров. И опрашивать эту конструкцию динамически. Сюда же можно добавить динамическую индикацию. У мя так в частотометре сделано.

  15. GetChiper Автор записи

    anatoliy :

    ИМХО ненадёжная конструкция. Иза Куда проще поставить парочку регистров. И опрашивать эту конструкцию динамически. Сюда же можно добавить динамическую индикацию. У мя так в частотометре сделано.

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

    PIC2AVR :

    Attiny12V пойдёт?

    Все таки возьмите тини13

  16. Gnusmas

    Большое спасибо за интересную с практической точки зрения, и легкую в поторении конструкцию. Это была моя первая конструкция на микроконтроллере. Я делал с автономным питанем от батареи CR2032 (батерейный отсек идеально вписался на имеющиюся макетку). Боялся что ничего не получиться, потому что входы АЦП привязаны к уровню напряжения +5В, и придеться как-то править исходник, но даже с севшей батарейкой (2.7В) все прекрасно работает, разве что бузер очень тихо пикает. Ниже 2.7В уже начинаються кракозябры вместо цифер и символов, или вообще не работает. Вобщем респект. Постараюсь еще что-то повторить, ресурс супер, добавил в закладки, буду советовать всем инересующимся знакомым.
    Фото того, что получилось: http://piccy.info/view3/6212113/cdf84d3f0f3c7daac4b6b25769f8567b/

Добавить комментарий