Visits: 323
Самый недорогой и простой вариант ввода данных в устройство на микроконтроллерах, это считывание состояния тактовых кнопок. Для подключения к порту микроконтроллера достаточно одного резистора. А если порт позволяет подключать встроенные подтягивающие резисторы, то подключение имеет элементарно простой вид:
Самый эффективный вариант опроса кнопок и формирования управляющих флагов, это когда обработка выполняется через прерывания. Для семейства PIC24 (MPLAB® XC16) это легко реализовать через прерывания по изменению состояния на входе порта B.
Для примера возьмём простую клавиатуру из 3 тактовых кнопок, из схемы на рисунке, с аналогичным подключением.
Первое что необходимо это для себя определить, какие флаги состояния нам необходимо получит при выполнении события по нажатию тактовой кнопки. При нажатии на кнопку PB1 – должен установиться флаг MINUS, для PB2 – PLUS, для PB3 – FUNC. Дополнительно опишем флаги предыдущего состояния кнопок, они нам понадобиться, что-бы программа могла формировать только типа один импульс при нажатии кнопки, а не последовательность.
/* описываем флаги */ struct { unsigned RB3p : 1; // флаг прошлого состояния unsigned RB4p : 1; // флаг прошлого состояния unsigned RB5p : 1; // флаг прошлого состояния unsigned FUNC : 1; // флаг функция unsigned PLUS : 1; // флаг увеличение unsigned MINUS : 1; // флаг уменьшение } Flagw; // Flagw.NAG название переменной (компилятор самостоятельно отводит количество байт)
Следующее – выполним настройку портов, выполнить настройку выводов порта – это делается при инициализации в начале программы.
/* настройка входов для клавиатуры*/ /* разрешение прерываний*/ CNEN1 = 0b0000000011100000; CNEN2 = 0b0000000000000000; /* включение подтягивающих резисторов*/ CNPU1 = 0b0000000011100000; CNPU2 = 0b0000000000000000; _CNIF = 0;/*сбросить прерывание*/ _CNIE = 1;/*включить прерывание*/
После этого надо создать саму функцию прерывания, а именно в этой функции будут описываться реакция на нажатия кнопок, у нас самое простое, при нажатии программа должно получить 1 импульс независимо от того как долго нажата кнопка.
/* прерывание от клавиатуры*/ void __attribute__((interrupt, auto_psv)) _CNInterrupt (void) { __delay_us(100); if(!_RB5 && Flagw.RB5p) // если кнопка нажата и в предыдущем состоянии, она была отжата, то установить флаг MINUS { Flagw.MINUS=1; } else if(!_RB4 && Flagw.RB4p) { Flagw.PLUS=1; } else if(!_RB3 && Flagw.RB3p) { Flagw.FUNC=1; } // запоминание предыдущего состояния кнопок клавиатуры Flagw.RB5p=_RB5; Flagw.RB4p=_RB4; Flagw.RB3p=_RB3; _CNIF = 0; // сброс прерывания }
Из программы прерывания мы получаем флаги состояния кнопок, эти флаги легко обработать в основном цикле программы например так:
if(Flagw.PLUS) { chettt++; Flagw.PLUS=0; } if(Flagw.MINUS) { chettt--; Flagw.MINUS=0; } if(Flagw.FUNC) { OledString ("тест",1,0,0,0,-1,70); Flagw.FUNC=0; }
Т.е. как видно, все очень просто!
Это может быть интересно
- Светодиоды со встроенным драйвером WS2812BVisits: 916 Производитель http://www.world-semi.com Краткое описание продукции фирмы Каталог продукции” catcatcat_ws_19 catcatcat_ws_15 catcatcat_ws_11 catcatcat_ws_07 catcatcat_ws_03 catcatcat_ws_18 catcatcat_ws_14 catcatcat_ws_10 catcatcat_ws_06 catcatcat_ws_02 catcatcat_ws_05 catcatcat_ws_09 catcatcat_ws_13 catcatcat_ws_17 catcatcat_ws_16 catcatcat_ws_12 catcatcat_ws_08 catcatcat_ws_04 catcatcat_ws_01 This jQuery …
- Development of temperature control and management systemsVisits: 56 Catcatcat Electronics Пошта для контакту e-mail: catcatcat.electronics@gmail.com
- Проект с использованием MCC часть 14Visits: 799 С выводом данных на дисплей мы справились (но могу сразу сказать библиотеку графики к этой статьи пришлось доработать, поэтому в этом проекте она обновлена). У нас на текущем …
- Сенсорный выключатель светаVisits: 10536 Хотя в настоящий момент актуальны системы управления освещением с передачей данных по электросети, но я думаю, что проекты такого рода тоже имеют право на жизнь. Анонс Три вида …
- MCC PIC24 – модуль OUTPUT COMPARE – в режиме генератора звуковых сигналовVisits: 600 При проектировании простых устройств автоматики, часто необходимо иметь механизм звукового оповещения. Самый верхний уровень, это формирование голосовых сообщений, но об этом, как то по позже… В самом примитивном …
- Гаджеты для домашней автоматики – Датчик движенияVisits: 1427 Управление светодиодным освещением – Датчик движения. Данный гаджет предназначен для управления освещением рабочих столов (кухонных столов), освещение прихожих, освещение зеркал в прихожих, автоматическое включение света в коридорах. Датчик позволяет …
- MPLAB® Code ConfiguratorVisits: 1768 MPLAB ® Code конфигуратор (MCC) является свободно распространяемым плагином, это графическая среда программирования, которая генерирует бесшовный, легкий для понимания кода на Cи, чтобы вставить его в свой проект.
- PIC18 – System ArbitrationVisits: 554 Системный арбитр. Разрешает доступ к памяти между выборами уровнями системы (т.е. Main, Interrupt Service Routine) и выбором периферийных устройств (т.е. DMA и Scanner) на основе назначенных пользователем приоритетов. Каждый …
- Altium Designer my setup system and project structureVisits: 619 Используйте только последнее обновление!!! Updates https://catcatcat.d-lan.dp.ua/altium-designer-my-libraries-project-templates-system-settings-by-catcatcat-v23-09/ Тут хочу поделиться как я настраиваю Altium Designer и как я использую файлы DXPPreferences.DXPPrf для быстрой конфигурации и получения …
- HVLD модуль на примере PIC24FJ128GA204Visits: 618 HVLD модуль представляет собой простое устройство, для контроля напряжения питания микроконтроллера или внешнего напряжения (через делитель). Его задача при “выходе” напряжения за заданные пределы сформировать сообщение микроконтроллеру, что …