Оптический сенсор, назначение оптический концевик, для автоматики, бесконтактный выключатель с функцией автоматического отключения…
Метка:Первая программа
Цифровой ввод данных
Цифровой ввод данных – Чтение состояния кнопок.
Для реализации этого проекта нам потребуется две тактовые кнопки. Надо будет к их выводам припаять проводки с контактами.
Порты контроллера (в последних моделях) Представляют собой комбинацию из четырех основных регистров. Это регистры управления направлением передачи цифровых (данных с логическими уровнями) данных TRIS. Регистры ввода цифровых данных PORT. Регистры вывода цифровых данных LAT. И регистры отвечающие за тип данных, т.е.аналоговые или цифровые ANSEL.
Для нашего примера мы будем использовать порт B. Для контроля мы применим светодиод подключенный к выводу RB1. Для ввода информации мы будем использовать выводы порта RB7 и RB6. К этим портам мы подключим тактовые кнопки.
Схема приведена применительно к плате ILLISSI-4B-primum. Теперь когда мы собрали схему начинается самое интересное.
Первое это надо правильно сконфигурировать порты контроллера. В нашего контроллера PIC16F1936 три порта A, B, C. Первые два могут работать и аналоговыми сигналами. Третий только цифровой.
Возможный вариант настройки портов и тактового генератора:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// настройка внутренего генератора 8*4=32мГц OSCCON=0b11110000; // |||||||| // ||||| ++-- SCS<1:0> основной гене-р (раб. через PLL) // |++++----- IRCF<3:0> частота 8 мГц // +--------- SPLLEN умножитель 1-включен // конфигурирование портов микроконтроллера TRISA = 0; // настроить на вывод данных PORTA = 0; // установит низний уровень ANSELA = 0; // настроить как цифровой TRISB = 0b11000000; //два на ввод данных, остальные на вывод // || +--- порт на вывод данных - RB1 инд. - светодиод // |+ --------- порт на ввод данных - RB6 // +---------- порт на ввод данных - RB7 PORTB = 0; // установит низний уровень ANSELB = 0; // настроить как цифровой PORTC = 0; // настроить на вывод данных TRISC = 0; // установит низкий уровень nWPUEN = 0; // включить резисторы WPUB = 0b11000000; // выключить подтягивающие резисторы на выводах 5-0 (по сбросу включены) |
Теперь необходимо к портам на которых установлены тактовые кнопки создать высокий проверь. Для этого мы будем использовать подтягивающие резисторы WEAK PULL-UPS которые встроены в порт B. Для этого необходимо выполнить следующее:
1 2 |
nWPUEN = 0; // включить резисторы WPUB = 0b11000000; // выключить подтягивающие резисторы на выводах 5-0 (по сбросу включены) |
На этом настройки контроллера окончены, теперь приступаем к самой программе.
Кода мы активировали подтягивающие резисторы на выводах Порта B устанавливается высокий логический уровень. При нажатии на тактовую кнопку она замыкается и уровень изменяется на низкий.
Для проверки работы кнопки будем использовать включение светодиода.
1 2 3 4 5 6 |
while (1) { CLRWDT(); // сброс сторожевого таймера if (RB6==0)LATB1=1; else LATB1=0; } |
В этом примере мы проверяем состояние на входе порта рано “0” (низкому уровню, если да включаем светодиод, иначе выключаем.
Хоть наши достижения и радуют, но усложним программу. Сделаем так чтобы при одном нажатии на нашу кнопку светодиод загорался, а при втором погасал. В принципе ничего сложного, только один маленький нюанс. При замы замыкании или размыкании механического контакта, происходить так называемый “дребезг”.
В нашей схеме уровни сигнала будут иметь следующий вид. Это происходит в следствии свойства механического контакта, при соединении контактов сопротивление изменяется пропорционально силе сжатия и на протяжении 10-20 миллисекунд, пока кнопка нажимается возникает такой переходной процесс. Когда уровень сигнала пересекает логический уровень переключения входа порта контроллера, контроллер из-за своей высокой скорости опроса порта может “решить”, что кнопка нажималась не один раз а 20 :). Поэтому для входов которые выполняют подсчет импульсов приходящих с механических контактов необходимо решить проблему “отсеивания” дребезга контакта. Как это решить. Логически это решается просто. При опросе входа порта, если программа обнаружила низкий логический уровень необходимо подождать 10 миллисекунд и снова проверить уровень на входе порта. Если уровень низкий, делаем вывод кнопка нажата, если уровень высокий, значит была “какая то помеха”.
Для реализации такого варианта программы нам понадобиться еще один контрольный флаг. Назовем его NAG. Для чего он нужен. Он необходим чтобы программа могла понять при тестировании порта кнопка “только что нажата” или “уже давно начата”. Без этого флага у нас не получиться счетного входа.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
while (1)// основной цикл программ { CLRWDT(); // сброс сторожевого таймера if (RB6==0) // тестируем состояние порта { __delay_ms(10); // ожидаем 10 мс, пропускаем дребезг if (RB6==0&&NAG==0) // снова тестируем состояние порта и флаг "кнопка была нажата" { // если уровень низкий и клавиша, до этого не была нажата" выполняем код в скобках NAG=1; // устанавливаем флаг кнопка нажата LATB1=!LATB1; // переключаем свечение светодиода } } else { NAG=0; // сбросить флаг "кнопка нажата" - исходя из логики } } // конец основного цикла |
Что делает эта программа описано в комментариях к каждой строке. Запустите программу и проверьте её работу. Одно примечание, контакты бывают разные, тактовая кнопка это один из вариантов “почти идеального” контакта, если в режиме тестирования вы наблюдаете, что “не четко срабатывает счет”, например, наблюдается при нажатии несколько переключений светодиода. То необходимо увеличить величину задержки.
Как видите из этих промеров – микроконтроллеры это просто.
В заключении усложним программу. Подключит к плате вторую кнопку. И используя интерфейс связи с ПК (программу Serial Bootloader AN1310). Организуем реверсивной счетчик. Информация будет выводиться прямо в оно программы.
Саму программу описывать не буду, Пора включить мозги и разобрать самостоятельно. Для пояснения добавлю, что мы будем использовать стандартную библиотеку Си stdio.h. из её нас интересует функция printf. Для работы последовательным интерфейсом необходимо будет включить в нашей прорамме модуль UART и настроисть скорость для приложений в программе AN1310 – 115200 бод.
Все сообщения на ПК выводим на английском, к сожалению русскими символами наш терминал программы AN1310 не владеет только ANSI.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
/************************************************************************ * Copyright (c) 2012, Project - ILLISSI. * * Демонстрационная программа "опрос тактовых кнопок" + связи с последовательным портом * системная плата ILLISSI-B4-primum * для контроллеров PIC16(L)F1936 * функции * при нажатии на клавиатуре ПК клавиши "1" - можно включать выключать светодиод на демо плате * при нажатии на кнопки на демо плате можно включать ылючать светодиод, при этом увеличивается * или уменьшается состояние переменной counter, значение которой выводиться на ПК. * Author Date Comment ************************************************************************* * Гена Чернов 27/07/12 V1.0 * ************************************************************************/ #include #include // конфигурирование контроллера __CONFIG( FOSC_INTOSC & // INTOSC oscillator: I/O function on CLKIN pin WDTE_ON & // WDT disabled PWRTE_ON & // PWRT enabled MCLRE_ON & // MCLR/VPP pin function is digital input CP_ON & // Program memory code protection is enabled CPD_ON & // Data memory code protection is enabled BOREN_ON & // Brown-out Reset enabled CLKOUTEN_OFF & // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin IESO_OFF & // Internal/External Switchover mode is disabled FCMEN_OFF); // Fail-Safe Clock Monitor is disabled __CONFIG( WRT_ALL & // 000h to 7FFh write protected, no addresses may be modified by EECON control PLLEN_ON & // 4x PLL enabled STVREN_OFF & // Stack Overflow or Underflow will not cause a Reset BORV_HI & // Brown-out Reset Voltage (VBOR) set to 2.7V LVP_OFF); // High-voltage on MCLR/VPP must be used for programming #define _XTAL_FREQ 32000000 #define BAUDRG 68 // 115.2Kbps from 32MHz (BRG16 = 1) __EEPROM_DATA(0, 1, 2, 3, 4, 5, 6, 7); unsigned char data; void interrupt isr(void); void putch(unsigned char byte); bit NAG; int counter; //-------------------------------- void main(void) { CLRWDT(); // сброс сторожевого таймера // настройка генератора 8*4=32мГц OSCCON=0b11110000; // |||||||| // ||||| ++-- SCS основной генератор (работа через PLL) // |++++----- IRCF частота 8 мГц // +--------- SPLLEN умножитель 1-включен // конфигурирование портов TRISA = 0; PORTA = 0; ANSELA = 0; TRISB = 0b11000000; // это типа гибридной настройки, два на ввод данных, остальные на вывод // || +--- порт на вывод данных - RB1 индикация - светодиод // |+--------- порт на ввод данных - RB6 // +---------- порт на ввод данных - RB7 PORTB = 0; ANSELB = 0; PORTC = 0; TRISC = 0b11000000; // для работы EUSART SPBRGH = 0; SPBRG = BAUDRG; BAUDCON = 0; // регистр управления скорости передачи BRG16 = 1; // установить бит BRG16: используется 16-битный генератор Baud Rate TXSTA = 0b00100100; // |||||||+--TX9D: // ||||||+---TRMT:Transmit Shift Register Status bit // |||||+----BRGH:1 = High speed // ||||+-----SENDB:Send Break Character bit // |||+------SYNC:0 = Asynchronous mode // ||+-------TXEN:1 = Transmit enabled // |+--------TX9:0 = Selects 8-bit transmission // +---------CSRC: в асинхронном режиме не имеет значения (Все равно) RCSTA = 0b10010000; // |||||||+--RX9D: // ||||||+---OERR: Overrun Error bit // |||||+----FERR: Framing Error bit // ||||+-----ADDEN: Address Detect Enable bit // |||+------CREN:1 = Enables receiver // ||+-------SREN: Single Receive Enable bit (Все равно) // |+--------RX9: 9-bit Receive Enable bit // +---------SPEN: Serial Port Enable bit Serial port enabled // configure timer 0 for maximum prescaler and enable interrupt TMR0 = 0; T0IE = 1; OPTION_REG = 0b11010111; nWPUEN = 0; // включить резисторы WPUB = 0b11000000; // выключить подтягивающие резисторы на выводах 5-0 (по сбросу включены) __delay_ms (100); // запрос задержки в миллисекундах ei(); // включить прерывания printf("\n\n Version = 1.01 \r\n\n"); printf(" Poll clock buttons!! \nPIC16(L)F1936 Demosoft\r\n"); printf(" web site illissi.com\r\n"); printf(" click!\r\n"); //-------------------------------------------------------------------------- while (1) { CLRWDT(); // сброс сторожевого таймера if(RCIF) { // RCIF=0; if(FERR && (RC7 == 0)) { // RXD состояние BREAK обнаружено, переключиться обратно в режим загрузчика. di(); // отключить прерыания #asm clrf _PCLATH // сбросить страший регистр счетчика алресса goto 0 // (должно быть выполненно только из основного цикла, чтобы избежать переполнения стека вызовов) #endasm } data = RCREG; // putch(data); switch(data) { case '1': putch(data); LATB1=!LATB1; break; default: printf("\r\n"); putch(data); printf(" - it is not a command, type the commands LEDs 1,2,3,4\r\n"); break; } } if (RB6==0) // тестируем состояние порта { __delay_ms(10); // ожидаем 10 мс, пропускаем дребезг if (RB6==0&&NAG==0) // снова тестируем состояние порта и флага "кнопка была нажата" { // если уровень низкий и клавиша, до этого не была нажата" выполняем код в скобках NAG=1; // устанавливаем флаг кнопка нажата LATB1=!LATB1; // переключаем свечение светодиода counter++; printf("counter++: %d\r\n", counter); } } else if (RB7==0) // тестируем состояние порта { __delay_ms(10); // ожидаем 10 мс, пропускаем дребезг if (RB7==0&&NAG==0) // снова тестируем состояние порта и флага "кнопка была нажата" { // если уровень низкий и клавиша, до этого не была нажата" выполняем код в скобках NAG=1; // устанавливаем флаг кнопка нажата LATB1=!LATB1; // переключаем свечение светодиода counter--; printf("counter--: %d\r\n", counter); } } else { NAG=0; // сбросить флаг "кнопка нажата" - исходя из логики } } }// // прерывания void interrupt isr(void) { static signed char timerd = 0; T0IF = 0; if(timerd++ > 20) // период мигания светодиода { timerd = 0; LATB0=!LATB0; // индикация работы таймера } }// // передача байта void putch(unsigned char byte) { while(TXIF == 0); // ожидание готовности передачи TXREG = byte; }// |
Загрузить первый пример

Цифровой ввод данных - Чтение состояния кнопок 00 1.35 KB 795 downloads
Цифровой ввод данных - Чтение состояния кнопок...
Цифровой ввод данных - Чтение состояния кнопок 01 1.62 KB 723 downloads
Цифровой ввод данных - Чтение состояния кнопок...
Цифровой ввод данных - Чтение состояния кнопок 02 2.97 KB 716 downloads
Цифровой ввод данных - Чтение состояния кнопок...
Цифровой ввод данных - Чтение состояния кнопок 03 9.43 KB 832 downloads
Цифровой ввод данных - Чтение состояния кнопок...
Это может быть интересно
MCC PIC24 – модуль OUTPUT COMPARE – в режиме генератора звуковых сигналов
При проектировании простых устройств автоматики, часто необходимо иметь механизм звукового оповещения. Самый верхний уровень, это формирование голосовых сообщений, но об этом, как то по позже… В самом примитивном варианте можно …Проект с использованием MCC часть 10
Алгоритм управления освещением от нажатия кнопки. Обработка удержания кнопки: Мы должны проверить кнопка в настоящий момент нажата и флаг удержания установлен, если да Проверить таймер удержания “отработал” – это значит, …PIC18 – System Arbitration
Системный арбитр. Разрешает доступ к памяти между выборами уровнями системы (т.е. Main, Interrupt Service Routine) и выбором периферийных устройств (т.е. DMA и Scanner) на основе назначенных пользователем приоритетов. Каждый из уровней …Проект с использованием MCC часть 02
Когда мы запустили конфигуратор, самое главное понять, что с этим делать и как проверить, то что мы делаем работает или нет. Для начала настроим регистры конфигурации микроконтроллера и настроем тактовый генератор. …Проект с использованием MCC часть 08
И так создадим проект в котором при помощи двух кнопок мы сможем управлять яркостью светодиодов. При использовании МСС у нас лафа полная, добрые дяди с Microchipa подготовили функции, которыи позволяет …Индикатор температуры
Проект для начинающих, на демо плате BB-2T3D-01. Простой индикатор температуры. Проект никак не задумывался, просто на витрину магазин Ворон нужна была демонстрационная модель на макетной плате, чего нибудь работающего. Остановились на индикаторе температуре. Нужен был какой нибудь выводной …Простой цифровой регулятор мощности
Простой регулятор мощности с цифровой индикацией. Этот проект создан как обучающий, для ознакомления с основами построения сетевых регуляторов мощности. Устройства подобного типа можно использовать для управления освещением, скоростью работы вентиляторов …Ultrasonic Level Meters – ULM –53L
Измерение расстояния при помощи ультра звукового датчика ULM–53L–10. Диапазон измерения от 0,5 м до 10 м, полностью пластмассовый излучатель PVDF, механическое соединение фланцем из полиэтилена HDPE (исполнение “N”) Характеристики Диапазон измерения …MPLAB® Harmony – или как это просто! Часть 4.
Часть четвертая – это может показаться немного сложно. Структура проекта. Для облегчения конфигурирования проекты MPLAB Harmony обычно структурированы таким образом, чтобы изолировать код, необходимый для настройки «системы», от кода библиотеки …Регулятор влажности ch-3800
И еще один проект на плате ch-c3xxx – универсальный регулятор влажности ch-3800. Регулятор позволяет работать как в режиме индикатора влажности, так и в режиме регулятора. Рабочий диапазон измеряемой относительной …
Как заставить мигать светодиод
Управление светодиодом – это для начинающего разработчика встроенных систем сказать на языке Си – “Привет мир”.
Как заставить мигать светодиод.
Для начала, что такое светодиод?
Светодио́д или светоизлучающий диод (СД, СИД, LED англ. Light-emitting diode) — полупроводниковый прибор с электронно-дырочным переходом, создающий оптическое излучение при пропускании через него электрического тока (а более подробнее читаем в Википедии). Т.е. нам нужен любой светодиод. Рабочее напряжение нашей учебной платы ILLISSI-4B-03-primum 5 вольт, а светодиода, в зависимости от цвета, может быть от 1,8 до 3,2 вольта. Нам еще понадобиться резистор, для ограничения тока протекающего через него. Эту сложную схему придется спаять :).
Подключим светодиод к порту B выводу RB1. На фото белый провод, это “+” светодиода. Этот провод необходимо соединить
с с выводом порта RB1. Другой с контакту с надписью Vss. Вариант подключения хорошо виден на фото. Почему вариант? На плате ILLISSI-4B-03-primum есть несколько выводов для подключения к шине Vss “земля”, можно использовать любой из них.
Самый простой способ заставить мигать светодиод, это организовать в главном цикле программы задержку и по окончанию задержки переключать состояние светодиода на противоположное. В Си это будет выглядеть очень
просто:
1 2 3 4 5 6 |
while (1) { CLRWDT(); // сброс сторожевого таймера __delay_ms(1000); // задержка в 1 секунду LATB1=!LATB1; // переключить светодиод } |
Чтобы менять частоту импульсов необходимо изменить число 1000. Что обозначает каждая строчка. Цикл while (1) { } – это бесконечный цикл, главный цикл нашей программы. __delay_ms(1000); – макрос задержки – в этом мести процессор контроллера выполняет цикл задержки с длительно нами заданной. LATB1 = !LATB1 – это сама команда переключения светодиода. Для управления используем регистр LATB, это регистр управления выходными сигналами порта B. А читать строку программы необходимо так, присвоить LATB1 значение “инверсное” его текущему состоянию. Т.е. если был “0”, то станет “1” и наоборот. Команда CLRWDT(); – это сброс сторожевого таймера, это тот таймер который контролирует отсутствие сбоев (зависания) нашей программы (он в регистре конфигурации нашей программы включен).
А размер самой программы тоже не очень велик, основной текст, это конфигурирование контроллера под наши нужды:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include // конфигурирование контроллера __CONFIG( FOSC_INTOSC & // INTOSC oscillator: I/O function on CLKIN pin WDTE_ON & // WDT disabled PWRTE_ON & // PWRT enabled MCLRE_ON & // MCLR/VPP pin function is digital input CP_ON & // Program memory code protection is enabled CPD_ON & // Data memory code protection is enabled BOREN_ON & // Brown-out Reset enabled CLKOUTEN_OFF & // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin IESO_OFF & // Internal/External Switchover mode is disabled FCMEN_OFF); // Fail-Safe Clock Monitor is disabled __CONFIG( WRT_ALL & // 000h to 7FFh write protected, no addresses may be modified by EECON control PLLEN_ON & // 4x PLL enabled STVREN_OFF & // Stack Overflow or Underflow will not cause a Reset BORV_HI & // Brown-out Reset Voltage (VBOR) set to 2.7V LVP_OFF); // High-voltage on MCLR/VPP must be used for programmin // сообщить компилятору с какой тактовой частотой работает микроконтроллер #define _XTAL_FREQ 32000000 |
1 2 3 4 5 6 7 8 9 10 |
// сама программа, в начале настройка тактового генератора void main(void) { CLRWDT(); // сброс сторожевого таймера // настройка внутреннего генератора 8*4=32мГц OSCCON=0b11110000; // |||||||| // ||||| ++-- SCS<1:0> основной генератор (работа через PLL) // |++++----- IRCF<3:0> частота 8 мГц // +--------- SPLLEN умножитель 1-включен |
1 2 3 4 5 6 7 8 9 10 11 |
// конфигурирование портов микроконтроллера TRISA = 0; PORTA = 0; ANSELA = 0; TRISB = 0; PORTB = 0; ANSELB = 0; PORTC = 0; TRISC = 0; |
1 2 3 4 5 6 7 8 9 |
//--------------------------------------------------------------- // главный цикл, управления миганием светодиода. while (1) { CLRWDT(); // сброс сторожевого таймера __delay_ms(1000); // задержка в 1 секунду LATB1=!LATB1; // переключить светодиод } }// |
Поэкспериментируйте с константой – 1000 в макросе __delay_ms, установите последовательно значения – 500, 250, 125.
Примечания. Это только пример и такое управление в реальных проектах не приемлемо. В современных проектах для формирования длительности удобнее использовать встроенные таймеры контроллера и через систему прерываний управлять длительностью мигания светодиода.
Полностью проект можно скачать Среда MPLAB v8.85, компилятор HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode) V9.83

Это может быть интересно
Система AT команд версии V2.0 для ESP8266 и ESP32
Появление нового модуля на базе ESP32 заставило систематизировать систему AT команд, а так же систему обновления и для модулей на базе ESP8266. Начиная с версии v2.0 в ESP8266 внедряется прошивка …Сумеречное реле
Реле управления освещением, датчик день-ночь – одним словом фотореле для управления освещением или формирования сигнала для системы умный дом о понижении или повышении освещенности относительно заданного уровня. Реле выполнено по классической схеме, конденсаторный блок питания, от сети переменного тока 220 вольт. …Мультизоновый индикатор-терморегулятор ch-c3010
Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре, температуру на улице, а в погребе (или на балконе) не только …Проект с использованием MCC часть 08
И так создадим проект в котором при помощи двух кнопок мы сможем управлять яркостью светодиодов. При использовании МСС у нас лафа полная, добрые дяди с Microchipa подготовили функции, которыи позволяет …DS18B20 – удаленный контроль температуры
Плата в корпусе Датчики температуры DS18B20 Схема подключения Вывод данных на ПК Установка дополнительных резисторов Назначение выводов This jQuery slider was created with the free EasyRotator for WordPress plugin from …Проект с использованием MCC часть 14
С выводом данных на дисплей мы справились (но могу сразу сказать библиотеку графики к этой статьи пришлось доработать, поэтому в этом проекте она обновлена). У нас на текущем этапе имеется …LCD драйвер – UC1601s
http://svetomuzyka.narod.ru/project/UC1601s.html Читайте обновление на http://catcatcat.d-lan.dp.ua/?page_id=178 В данный момент можно приобрести в ООО “Гамма” несколько типов индикаторов на драйвере UC1601s. RDX0048-GC, RDX0077-GS, RDX0154-GC и RDX0120-GC выполнены по технологии COG. Метки:UC1601sСтабилизатор тока для светодиодов SN3350
SN3350 ближайший аналог ZXLD1350 Как собрать готовый вариант, читайте во второй части – http://catcatcat.d-lan.dp.ua/stabilizator-toka-na-sn3350-chast-2/ 40V драйвер светодиодов с внутренним ключом SN3350 – импульсный понижающий преобразователь, разработанный для того, чтобы эффективно управлять одним или группой параллельно-последовательно …CCP модуль для декодирования ИК-кодов пультов ДУ
Множество изготовителей для своих пультов дистанционного управления на ИК лучах используют принцип широтно-импульсной модуляции. В таких кодах бит единицы представляется импульсом большой длительности, а ноль импульсом короткой длительности. Внешний вид …MTouch® Модуль Емкостной Библиотеки для MPLAB®X Code Configurator (MCC)
Введение MTouch ® Модуль Емкостной Библиотеки для MPLAB ® X Code Configurator (MCC) позволяет быстро и легко генерировать решение кода на Cи для емкостной сенсорной кнопки, датчика приближения и слайдера. В записи нет …