Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Сенсорный модуль на 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 Поиск в магазине ОтронВ блокнот
C1 Конденсатор0.1 мкФ1 Поиск в магазине ОтронВ блокнот
R1-R3 Резистор
1 МОм
3 Поиск в магазине ОтронВ блокнот
Добавить все

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

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

Теги:

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

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

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

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

Комментарии (29) | Я собрал (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" чтобы подключить непосредственно к другому мк
Ответить
0
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;

Простейший пример, чтобы понять логику, но применять его все же затратно.
Ответить
-1
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);
};
Ответить
-1
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);

Изящно ли или нет, но работает
Ответить
0
Владимир #
Хочу перейти на процессор ATtiny 2313. Возникает ошибка: "Can't open file: D:\Program_AVR\Sensor\TOUCH-SENSOR_2313_8-kod\Debug\Exe\sens.o."
Не могу понять как создается он. Через блокнот посмотрел что там, пробовал изменить на 2313, ничего не дало. Если есть возможность, помогите разобраться.
Ответить
0
KonoG #
Добрый день. Подскажите какие фьюзы нужно выставлять для одной кнопки? И нужно подтягивать 1 ногу через резистор? А то собрал по вашей схеме с фьюзами FF и 6A (вроде так калькулятором посчитал), но ничего не работает. И что поменять в коде что выход был минусовой?
Ответить
-1
ilil #
Собрал на три кнопки. Фьюзы выставил правильно - не работает. Испортил три микроконтроллера.
Ответить
0
ilil #
Все работает. Плохо проверил свою печатку. Спасибо.
Ответить
0
KonoG #
Всем привет. Подскажите как поднять чувствительность сенсора?
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
Металлоискатель MD3010II FM-модуль RDA5807M
вверх