Главная » Микроконтроллеры
Призовой фонд
на сентябрь 2019 г.
1. Осциллограф DSO138
Паяльник
2. 1000 руб
Паяльник

Сенсорный модуль на AVR

Бесспорно, что кнопочная клавиатура является одним из основных способов введения информации (выбор режима работы, установка параметров и т.д.) в микроконтроллерную поделку. Но иногда, гордый вид торчащих механических кнопок придаёт «громоздкость» внешнему виду вашего устройства. В этом случае можно применить сенсорную клавиатуру, благо, хорошее описание принципа действия и готовые схемные решения найти в интернете не составляет проблем. Не оставит в беде и Arduino, предложив радиолюбителю выбрать между сенсорной кнопкой или 9-12-кнопочной панелью. Однако, покупать сенсорную кнопку на своё устройство для меня было как-то не спортивно, а готовые 9 или 12-кнопочные клавиатуры были как-то чересчур для моих устройств, причём во многих из них информация передавалась по интерфейсу UART, который у меня обычно уже занят под иные задачи, а программную реализацию интерфейса делать было не особо охота. Поэтому, взяв прототипом реализацию сенсорной клавиатуры от небезызвестного мистера Chan(а), я сделал сенсорный модуль на 1, 2 и 3 кнопки, что зачастую вполне достаточно для работы с микроконтроллерными устройствами.

Ограничение на количество сенсорных кнопок накладывает применяемый микроконтроллер – Attiny13A-SSU , но даже его применение для однокнопочного сенсорного модуля по себестоимости выходит дешевле аналогичного модуля от Arduino.

Выводы модуля:
VCC – питание 3-5 В;
GND – земля;
SIG1-SIG3 – цифровой сигнал нажатия кнопки.

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

Схема сенсорного модуля на 3 кнопки

В случае слишком большой чувствительности сенсорных кнопок (на выходе модуля появляется сигнал до прикосновения к сенсорной панели) можно уменьшить сопротивление резисторов R1-R3. Исходник программы, как я уже упоминал, основан на коде от мистера Chan(а), однако функцию опроса сенсорных кнопок и определение нажатой кнопки я полностью переделал, повысив помехоустойчивость и реализовав надёжное определение нажатия и отпускания сенсорной кнопки.

В архиве представлен исходный код и прошивка для трёх исполнений модуля – на 1, 2 и 3 кнопки, единственное отличие битов конфигурации для последнего случая – установить галочку напротив бита RSTDISBL (на рисунках ниже - конфигурация для 1 и 2-х кнопок).

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
DD1 МК AVR 8-бит
ATtiny13A
1 Поиск в Utsource В блокнот
C1 Конденсатор0.1 мкФ1 Поиск в Utsource В блокнот
R1-R3 Резистор
1 МОм
3 Поиск в Utsource В блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 2
Я собрал 0 2
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 2 чел.

Комментарии (24) | Я собрал (0) | Подписаться

0
mixan23 #
Отличная реализация! Как раз у меня этих контроллеров завалялось тысяч таки 5. У вас на картинке со схемой небольшая ошибка. Конденсатор по питанию подключен к "выходу с кнопки", а не к земле. Но это ерунда.
Ответить
0

[Автор]
Igoryosha #
Спасибо, исправлю!
Ответить
0
Dr. Alex #
Да, очень неплохая статья! И не надо городить огородов!
Ответить
0
CRImier #
При нажатии кнопки, на соответствующем цифровом выводе появится логическая «1», хотя вы можете исправить в коде программы на «0», тогда будет полная имитация нажатия механической кнопки.
Сигнал на выходе механической кнопки зависит от того, что на втором контакте - земля или питание.
А проект очень неплохой, думаю, как раз есть повод заказать пару ATTiny13.
Ответить
0

[Автор]
Igoryosha #
Верно! Просто привык подключать кнопки к земле, поэтому уже считаю это стандартом де-факто
Ответить
0
никита #
А кнопки будут работать, если их например покрыть лаком? Или же они используют проводимость тела?
Ответить
0

[Автор]
Igoryosha #
Сенсорная клавиатура использует емкостной метод, расстояние между пальцем и металлической площадкой не должно быть больше 1,5 мм, поэтому покрытие кнопок лаком на работу никак не повлияет.
Ответить
0
Alex #
Скажите пожалуйста, а на выходе "1" после нажатия остаётся? Или при убирании пальца становится обратно "0"?
Можно ли будет повесить резистор транзистор и реле, или нужно триггер ставить?
Ответить
+1
CRImier #
Насколько я понимаю работу этой схемы - да, понадобится триггер.
Отредактирован 12.08.2014 14:11
Ответить
0

[Автор]
Igoryosha #
Верно, пока нажата сенсорная кнопка, на выходе "1", а при отпускании - "0".
Ответить
+1
maksms #
Можно программный триггер добавить в прошивку - ничего сложного
Ответить
+1
Nizam #
Работу в триггерном режиме можно организовать? И защиту от одновременного нажатия не плохо бы.
Ответить
+1
lionp #
Уважаемый автор! Подскажите пожалуйста, что нужно подшаманить в коде, чтобы получить триггер?
Ответить
0
serega85 #
Тоже бы хотелось получить на выходах триггер.
Ответить
+1
дмитрий #
Пробовал через стекло 4-5мм работает хорошо
Ответить
0
serega85 #
А я пробовал через пластик 5-6 мм., отлично срабатывает
Ответить
0
Алексей #
Не могли бы изменить прошивку, чтобы при нажатии на выходе был "0", а не " 1" чтобы подключить непосредственно к другому мк
Ответить
+1
kote #
Да уж... С программным триггером это было бы здорово.
Может автор снизойдёт и напишет ещё одну прошивку с триггером? Многие и многие будут очень благодарны. Тем более, что знающему человеку это на 5 мин. работы. Код в несколько строк.
P.S. Сам пробовал добавить код триггера, но увы... знаний недостаточно. Ошибки, ошибки, ошибки.
Ответить
0
Дмитрий #
Страждущие.
Допишите сами, логика триггера в простейшем представлении будет выглядеть. Специально жирно и в лоб. На самом деле есть более красивые и правильные реализации.
Прошивку не смотрел, почему то не могу скачать архив.
Будем полагать что состояние кнопки у автора хранится в переменной KEY_Level

char cnt=0; // переменная для счетчика
char KEY_Level_TRIG // в этой переменной будем хранить состояние "кнопки"

if(KEY_Level==1){cnt++;} //если уровень на кнопке ==1, прибавляем одну единицу в счетчик
switch (cnt) //проверяем наш счетчик
{
case 0: //если в нем ноль(по умолчанию)
KEY_Level_TRIG=0; // Записываем в нашу переменную флаг единицу
break;
case 1: //нажали второй раз, в счетчик записалась единичка ,
KEY_Level_TRIG=1; // записываем в нашу переменную-флаг единицу
break;
default: // после третьего нажатия в счетчик запишется "3", и он обнуляется.
cnt=0;
break;

Простейший пример, чтобы понять логику, но применять его все же затратно.
Ответить
0
serega85 #
С триггером прошивку так и ни кто не сделает?
Ответить
0
skullhead #
Как можно увеличить чувствительность? Увеличением резисторов R1-R3?
Ответить
0
Павел #
для триггера надо добавить три битовых (bit в CVAvr) глобальных переменных (для трех кнопок)

....
char KeyBuffer; //Переменная считывания кода нажатой сенсорной кнопки
bit b1=0,b2=0,b3=0;


void main(void)
{...

и поменять код главного цикла в такой вид

while (1)
{
TOUCH_CompareKey();

KeyBuffer=TOUCH_GetKey();
if(KeyBuffer==1){ b1++; SIG1=b1;}
else if(KeyBuffer==2){b2++; SIG2=b2;}
else if(KeyBuffer==3){b3++; SIG3=b3;};


delay_ms(10);
};
Ответить
0
slavianr #
Собрал для приемника на rda5807. Работает. Одно но... не реализовано одновременная работа хотя-бы двух портов. (одновременное нажатие на пару сенсоров) в данном случае это необходимо. Переделать прошивку знаний не хватит.
Ответить
0
BlackStorm #
Небольшая доработка кода(триггер):
char KeyLevelTrig; // добавляем в начале

В основном цикле делаем так:
TOUCH_CompareKey();

KeyBuffer=TOUCH_GetKey();
if(KeyBuffer==1 & KeyBuffer!=KeyLevelTrig) SIG1= ~SIG1;
else if(KeyBuffer==2 & KeyBuffer!=KeyLevelTrig) SIG2= ~SIG2;

KeyLevelTrig = KeyBuffer;

delay_ms(10);

Изящно ли или нет, но работает
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Паяльная станция Hakko 936 FM-модуль RDA5807M
вверх