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

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

Сенсорный модуль на 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-х кнопок).

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

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

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

  • TOUCH SENSOR – код.rar (122 Кб)
  • TOUCH SENSOR – Плата под ЛУТ.rar (36 Кб)

Источник: http://cxem.net/mc/mc297.php

Сенсорная кнопка на микроконтроллере ATtiny

Введение

   Во многих современных устройствах в качестве органов управления используются сенсорные кнопки. Например, у меня на кухне с помощью сенсорных кнопок включается и выключается варочная поверхность.

 
   Сенсорные кнопки хороши тем, что для них не нужны отверстия в корпусе, и у них отсутствует механический износ, присущий традиционным кнопками.

Кроме того конструкция сенсорной кнопки, если не считать электронную начинку, намного проще механической, ведь это обычная проводящая поверхность изолированная слоем диэлектрика, и ей можно придать практически любую конфигурацию. 
   В этой статье я расскажу о простой реализации сенсорной кнопки на микроконтроллере. 

Принцип работы сенсорной кнопки

   По сути, сенсорная кнопка – это сенсор, то есть какая-то проводящая поверхность, и контроллер, измеряющий его емкость (способность накапливать электрический заряд). При неизменных условиях внешней среды емкость сенсора не меняется. Но когда к нему подносится палец, его емкость увеличивается.

По этому изменению контроллер “делает вывод”, что пользователь нажал на кнопку. 
   Емкость измеряется путем подсчета времени, которое требуется для ее заряда до определенного уровня напряжения. Это время зависит как от значения емкости, так и от величины зарядного тока, которая задается какой-то внешней цепью.

В простейшем случае эту роль может выполнять резистор, подключенный одним концом к источнику питания, а другим к сенсору. 

   где Cs – емкость сенсора, Cf – емкости вносимые прикосновением пальца. 

   Поскольку емкость сенсора и ее изменения очень маленькие (единицы, десятки пикофарад), то время заряда тоже будет небольшим. Чтобы упростить измерение времени заряда, нужно увеличить его значение, а для этого необходимо заряжать емкость сенсора очень маленьким током (микроамперами).

Конфигурация сенсорной кнопки

   От конфигурации (от его формы и размера) сенсора зависит его емкость. У меня в проекте использовался сенсор в виде вытравленной круглой контактной площадки диаметром 1 см. Также я пробовал использовать прямоугольные кусочки фольгированного текстолита разного размера.

Чем больше площадь сенсора, тем больше его емкость и тем более чувствительную сенсорную кнопку можно сделать. 
   Чувствительную в том плане, что она будет в состоянии срабатывать через толстый слой диэлектрика.

Вообще на эту тему лучше почитать атмеловские материалы, поскольку сейчас я об этом мало что могу сказать. 

Схема

   Схема, которую использовал я, представлена на рисунке выше. 
   Сенсор через резистор подключен к выводу микроконтроллера, который подтянут высокоомным резистором к плюсу питания. Первый резистор служит простейшей защитой от электростатики (ESD), а второй ограничивает зарядный ток.

 
   В начальный момент вывод микроконтроллера работает в режиме выхода и на нем установлен уровень логического нуля. Емкость сенсора, если она имеет какой-то заряд, быстро разряжается на внутренние цепи микроконтроллера.

Когда она разрядится вывод микроконтроллера переключится в режим входа с отключенным подтягивающим резистором и емкость сенсора начинает заряжаться через внешний высокоомный резистор. В это время программа опрашивает состояние вывода микроконтроллера и подсчитывает количество циклов опроса.

Когда емкость зарядится до напряжения логической единицы, микроконтроллер зафиксирует это и сравнит состояние счетчика с каким-то пороговым значением. По результату этого сравнения микроконтроллер определяет поднесен ли к сенсору палец или нет. 

Код

   Сам принцип думаю понятен, теперь можно посмотреть как это может выглядеть в Си коде. Для реализации одиночных сенсорных кнопок, я написал небольшой программный модуль – драйвер.    Чтобы добавить его в свой проект, нужно переписать заголовочный и сишный файл драйвера (sensor.c и sensor.

h) в папку проекта, добавить сишный файл sensor.c к проекту внутри среды разработки и включить заголовочный файл драйвера sensor.h (с помощью директивы include) в свой файл, где будут использоваться функции драйвера.    Разберем как им пользоваться.

Для хранения настроек сенсора используется структура данных sensor_t. В настройки сенсорной кнопки входит адрес порта, номер вывода в порте, пороговое значение и текущее состояние. Чтобы добавить к проекту сенсорную кнопку, нужно для начала создать переменную типа sensor_t.

 Пример:

#include “sensor.h”….//объявляем сенсорную кнопкуsensor_t sensor1;

   Для инициализации используется функция SENS_Init(…

) которой нужно передать адрес переменной, хранящей настройки, номер вывода микроконтроллера, адрес используемого порта и пороговое значение срабатывания.

Пороговое значение зависит от емкости сенсора (от его геометрии) и от зарядного тока. Сейчас значение можно определить только экспериментально, потом я хочу добавить функцию калибровки.

Пример:

//инициализация sensor1 – 0-й вывод порта B, порог – 25 циклов опроса.SENS_Init(&sensor1, 0, &PORTB, 25);

   Опрос одной сенсорной кнопки выполняет функция SENS_Poll(…), которой нужно передать адрес переменной типа sensor_t. Эта функция возвращает состояние сенсорной кнопки.

Для всех возможных состояний сенсорной кнопки объявлен специальный тип данных sensor_state_t. Но функция опроса возвращает только два состояния SENS_PRESSED и SENS_NOT_PRESSED.

Остальные состояния сделаны на будущее.

Пример:

//опрос одной сенсорной кнопки
if (SENS_Poll(&sensor1) == SENS_PRESSED){
// зажечь светодиод

}

Источник: http://chipenable.ru/index.php/programming-avr/item/170

Емкостный сенсор на микроконтроллерах AVR и задержка итерациями. Примеры на Attiny13 — DRIVE2

Приветствую, любитель микроконтроллеров!

Вступление
Я продолжаю воплощать в жизнь свой первый, когда-то заброшенный, проект на микроконтроллере — лампу настроения. И, как и обещал в прошлый раз, по ходу разработки пишу небольшие заметки для начинающих.

В этот раз рассмотрим как реализуется емкостный сенсор и задержки тех или иных операций итерациями основного цикла. Что касается самого проекта, могу сказать, что на данный момент написана полностью рабочая прошивка.

Остается дело за схемой, печаткой и тестированием в нормальном железе. Затем выложу все на ваш суд.

Сенсорная кнопкаПринцип сенсорной кнопки прост. Берем небольшую площадку не важно какой формы, я взял кусок фольгированного текстолита (далее — кнопка). Подпаиваем к ней резистор большого номинала, порядка 1 МОм. И подключаем кнопку через этот резистор к питанию.

Подпаиваем к кнопке провод, который соединит кнопку с ножкой микроконтроллера (далее — МК). Площадку изолируем тонким изолятором, хотя и без него будет работать. Площадка кнопки имеет определенную емкость, которая увеличивается, когда на ней находится палец человека.

Сенсорная кнопка. Сверху покрыта скотчем

Алгоритм работы следующий:1. Переводим ногу МК в режим выхода.2. Подаем низкий уровень, чтобы разрядить емкость кнопки.3. Переводим ногу МК в режим входа и ждем когда емкость кнопки зарядится через резистор 1 МОм и на входе появится верхний уровень. Ожидание производится в цикле, в котором инкрементируется счетчик.4. Сенсор зарядился — по значению счетчика можно судить о состоянии сенсора.

Обратите внимание, что подсчет итераций идет в атомарном блоке. Это значит, что в это время не будут срабатывать прерывания и не собьют нам время заряда сенсора.

Теперь для использования нашего алгоритма нам необходимо определить порог срабатывания кнопки. Для этого при инициализации мы выполняем калибровку. И берем в качестве порогового — значение на четверть большее, чем возвращается при свободном сенсоре.

Я проверял, на пустом сенсоре функция у меня возвращает стабильно 15. А когда кладешь на сенсор палец — около 30. Значит порог у нас будет где-то 15 + 15/4 = 18.

Ну а далее, в основном цикле программы нам остается проверять состояние сенсора и сравнивать его с пороговым значением. Если превысило — кнопка нажата, нужно отреагировать.

Читайте также:  Как не платить мгтс за повременку

При необходимости, нужно в блок обработки нажатия добавить задержку, чтобы обработка не срабатывала несколько раз подряд.

Я, в течении нескольких дней, пользовался кнопкой, пока отлаживал прошивку для лампы — сенсор срабатывает четко!

Задержка итерациями основного циклаИногда в основном цикле требуется периодически производить какие-то действия с большой задержкой. Скажем 2 секунды. Однако, просто “спать” при этом нельзя, потому что можно проворонить, скажем, нажатие на сенсорную кнопку или другое событие.

В этом случае есть простой выход. Берем счетчик, выставляем его в некоторое значение и каждую итерацию основного цикла декрементируем. Как только счетчик стал равен нулю — наша задержка истекла и пришло время для нашего действия.

В основном цикле можно добавить минимальную задержку, которая не сделает появление ожидаемого события критическим.

Таким образом, с помощью счетчиков легко организовать различные задержки в основном цикле программы, не проворонив при этом критических событий и не расходуя драгоценные байты на дорогостоящие функции delay.

Результат
Дабы разбавить сухой текст, я хочу показать результат сегодняшнего урока наглядно. Т.к. я делаю лампу настроения, то я использовал RGB-светодиод. В основном цикле будем менять 7 цветов радуги + розовый по кругу.

А при нажатии на сенсорную кнопку будем просто моргать белым цветом. Микроконтроллер будет работать на частоте 9.6 МГц, для этого достаточно от фьюзов по умолчанию убрать делитель на 8 (сделать CKDIV8 = 1).

Фьюз байты удобно рассчитывать вот этим калькулятором.

Задержка между сменами цветов реализована циклами. Регулировка яркости светодиода реализована с помощью бинарной модуляции, о которой и подробно писал в прошлый раз.

Схема для модуляции в протеусе получилась немного отличающейся от реальной картины: пришлось реализовать емкостный сенсор на двух конденсаторах и переключателе. Питание 5В для МК на схеме отсутствует, но оно необходимо!

Принципиальная схема

Смотрим результат на видео

Исходный код, схему, модель в протеусе можете скачать в архиве.

Ссылки на используемые материалы
Еще раз о емкостных сенсорах
Сенсорная кнопка на микроконтроллерах Attiny

В преддверии Нового года, желаю вам довести все ваши проекты до конца!

Источник: https://www.drive2.ru/b/2574973/

Подключение сенсорного экрана к микроконтроллеру AVR

Сенсорные экраны (Touch Screen) находят все большее применение – это устройство ввода информации представляет собой экран, реагирующий на прикосновения к нему.

Существует несколько разных типов сенсорных экранов, которые работают на разных физических принципах: резистивные сенсорные экраны, матричные сенсорные экраны, емкостные сенсорные экраны, проекционно-емкостные сенсорные экраны, оптические сенсорные экраны.

Мы рассмотрим подключение четырехпроводного сенсорного экрана к микроконтроллеру AVR, на котором реализуем сенсорный USB интерфейс для подключения к компьютеру для реализации сенсорной мышки. Данный тип сенсорного экрана используется, например, в игровой приставке PlayStation Portable (PSP) или Nintendo DS.

Для нашего проекта потребуется:

  • микроконтроллер ATmega168 (или ATmega328);
  • кварцевый резонатор 16 МГц;
  • монтажная плата для 28-выводных микроконтроллеров AVR (использовалась макетная плата Olimex  AVR-P28);
  • программатор микроконтроллеров AVR;
  • плата с установленным разъемом miniB USB;
  • сенсорный экран от игровой приставки PSP;
  • коннектор для подключения сенсорного экрана;
  • два резистора номиналом 68 Ом, один резистор номиналом 1.5 кОм;
  • соединительные провода.

Резистивный сенсорный экран состоит из стеклянной панели и гибкой пластиковой мембраны. И на панель, и на мембрану нанесено резистивное покрытие.

Пространство между стеклом и мембраной заполнено микроизоляторами, которые равномерно распределены по активной области экрана и надежно изолируют проводящие поверхности.

Когда на экран нажимают, панель и мембрана замыкаются, и контроллер с помощью аналогово-цифрового преобразователя регистрирует изменение сопротивления и преобразует его в координаты прикосновения (X и Y).

В общих чертах алгоритм считывания таков:

  1. На верхний электрод подается напряжение +5 В, нижний заземляется. Левый с правым соединяются накоротко и проверяется напряжение на них. Это напряжение соответствует Y-координате экрана.
  2. Аналогично на левый и правый электрод подается +5 В и «земля», с верхнего и нижнего считывается X-координата.

Алгоритм работы показан на иллюстрации ниже.

Кликните для увеличения

Как видно, работа данного алгоритма означает, что электроды должны непрерывно переключаться, чтобы быстро определить координаты. Подключение сенсорного экрана была выбрано следующее:

Выводымикроконтроллера Выводы сенсорногоэкрана ВОВ-09224) Соответствие выводовдля чтения координаты X Соответствие выводовдля чтения координаты Y
PC4 X1 5 В АЦП
PC3 Y1 не подключен GND
PC2 Y2 АЦП 5 В
PC1 X2 GND не подключен

Подключение очень простое – прямое подключение сенсорного экрана к линиям ввода/вывода микроконтроллера, но заметьте (как видно из таблицы), два из них обязательно должны быть подключены к входным каналам АЦП. Питание сенсорного экрана подается через вывод микроконтроллера, подтянутый к 5 В и другой вывода микроконтроллера, подтянутый к GND.

Для реализации интерфейса USB HID требуется несколько резисторов подключенных к двум выводам внешних прерываний микроконтроллера ATMega168, а также следует учесть, что вывод USB порта D+ подключен к выводу INT0 микроконтроллера.

Реализация USB HID интерфейса на микроконтроллерах AVR возможна с помощью библиотеки V-USB. Более подробная информация: Objective Development. На страничке загрузок Вы можете найти данные библиотеки, исходные файлы, примеры использования и полезную документацию, а также все необходимые рекомендации для применения библиотеки в своих устройствах.

Первоначальная задача при разработке кода для микроконтроллера – убедиться, что мы можем получить надежные координаты от сенсорного экрана, прежде чем организовывать передачу данных по интерфейсу USB. Вы можете скачать исходный код программы микроконтроллера для чтения данных АЦП от сенсорного экрана.

В основном, требуется два обращения к АЦП, одно для координаты X, второе – для координаты Y. Однако, мы не можем просто установить надолго один вывод сенсорного экрана на один канал АЦП, выводы должны будут постоянно меняться.

Была написана функция для каждой координаты, которая меняет соответствие выводов и производит чтение данных АЦП.

void read_x(void) { DDRC = 0b00010010; // Output on PC4(5V) and PC1(GND), Input on PC4(ADC) sbi(PORTC, 4); //pull PC4 to 5V cbi(PORTC, 1); //pull PC1 to GND _delay_ms(1); //wait for screen to initialize ADMUX = (1

Источник: https://www.rlocman.ru/shem/schematics.html?di=64606

Сенсорный выключатель на модуле TTP223

Ввиду мелкого размера микросхем TTR223 (datasheet), данный сенсорный модуль является довольно удобным выходом для тех, кто не хочет связываться с распайкой детали в корпусе SOT-23. О модуле и примере его практического применения можно прочитать ниже.

Предыстория:

пару лет назад на у китайцев был приобретен настенный двухрожковый светильник, в данный момент он не продается. Подобных изделий на Али предлагается огромное количество. Так и лежал он, так сказать про запас, до тех пор, пока не решил использовать его при ремонте ванной комнаты.

Провод для светильника, перед укладкой плитки, в стену заложил, но затем встал вопрос как включать светильник? Работать он должен отдельно от основного света на потолке, т.к. там стоят яркие лампы, а когда лежишь в ванной хотелось бы мягкий рассеяный свет.

В коридоре стоит трехклавишный выключатель (туалет, коридор и верхний свет в ванной), городить туда еще один отдельный выключатель для светильника смешно. Сначала думал вставить в корпус светильника выключатель на шнурке, но размеры не позволили этого сделать.

Решение стало очевидным — подавать на светильник 12В с вынесенного блока питания, установить светодиодные лампы DC12 и сделать сенсорное включение прикосновением по корпусу, для чего и был приобретен описываемый модуль.

Саму микросхему уже здесь описывал koltinov, поэтому я опишу только сам модуль. Модуль представляет собой распаяную микросхему с минимальной обвязкой из конденсатора и светодиода с резистором, извещающего о срабатывании сенсора.

Так же на модуле есть пары выводов под запайку А и В. Пара А — служит для выбора уровня на выходе модуля при срабатывании — по умолчанию высокий уровень, в запаянном состоянии — низкий. Пара В — для управления типом срабатывания — по умолчанию кнопка, в запаяном состоянии триггер.

Кроме того, рядом с микросхемой TTP223 имеется место под установку конденсатора от 0 до 50 пФ для снижения чувствительности сенсора, сюда же подпаивается проводок для выносного сенсора.Таким образом, я запаял пару В (нужен высокий уровень для открытия N-канального мосфета), поставил конденсатор 0805 на 30пФ и сначала сделал вывод на корпус светильника.

Не тут то было, из за размера корпуса нет четкого срабатывания, включение происходит крайне не стабильно, в том числе в зависимости от того, раскрыта кисть или вытянут один палец — может сработать при положении руки за 20 см от светильника, а может не сработать при прямом прикосновении.

Установка конденсаторов различных номиналов ничего не дала, чувствительность менялась, но нестабильноть работы так и оставалась.

Пришлось винтик и декоративную шишечку, с помощью которых светильник крепиться к внутреннему кронштейну (а тот соответственно к стене) изолировать от основного корпуса с помощью прокладки из текстолитовой шайбы, силиконовой резинки (от какого то винчестера) и кусочка термоусадки.Вывод на сенсор подпоял к этому винтику.

Модуль срабатывает четко, только от прикосновения к маленькой шишечке (человек со стороны и не поймет как лампу включить). Т.е. при его использовании не следует стремиться к сенсору большой площади.

Платка легко помещается внутрь корпуса, туда же сунул 7805 для запитки модуля и мосфет 60N03L в качестве реле для светодиодных ламп, все оголенные проводки и выводы покрыл цапон-лаком и приклеил изнутри к корпусу на термоклей.

Найти подходящую лампу оказалось не так просто, абажуры устанавливаются на лампы и держатся за счет ее формы, а ламп на DC12В с цоколем Е14 в форме капли можно сказать и нет. Хотел уж было лампочку на 220 В переделывать, но потом нашел эти, взял на 3Вт, 4000К. При 12В потребляет 0,26 мА, что соответствует заявленной мощности.

Читайте также:  Автомобильный контроллер подсветки приборной панели

Судя по коробочке, производитель изготавливает лампочки всеразличных цветов, мощностей, на разные цоколи и напряжения
В качестве источника питания применил блок питания на 12В 1А, его описывал Kirich в своем обзоре.

Заодно сделал подсветку под тумбой с умывальником. Я как то описывал микроволновый датчик движения, применял его тогда для скрытой установки за пластиковой дверцей.

Но в данном случае из под тумбы есть прямая видимость, поэтому использовал всем известные ультразвуковой датчик SRF-05, Ардуино Nano и тот же мосфет 60N03L, что получается в два раза дешевле.

В качестве источника света использовал такой светодиодный модуль

Я его не покупал, а взял с рекламного проспекта, с выставкиДля точечной скрытой подсветки такие модули самое то, мне понравилось. На Али наверняка есть что то подобное.По настоящему свет гораздо мягче чем на фото, при этом видно все помещение, если зашел что то взять или положить — основой свет можно не включать. На ощупь он греется слегка, сзади металлическая пластина, приклеил к холодной плитке на стену и никакого перегрева. Подобные модули рекомендую всем, гораздо удобнее лены + гидроизоляция. Схема в светильнике:

Источник: https://mysku.ru/blog/aliexpress/48317.html

Сенсорная клавиатура на AVR

Сенсорная клавиатура с подсветкой

English version here

Современные микроконтроллеры имеют все, что необходимо для реализации сенсорной клавиатуры, чувствительной к прикосновению пальцев.

Существует несколько методов реализации емкостных датчиков — многие фирмы-производители микроконтроллеров рекомендуют использовать свои библиотеки.

Мне было любопытно попробовать самостоятельно реализовать сенсорную матрицу основываясь только на теоретическом описании технологии и вот что из этого получилось.

Теория

В качестве базового варианта я выбрал QMatrix, который просто и доступно описан в QMatrix™ Technology White Paper. Смысл состоит в постепенном переносе заряда через емкость сенсорной клавиши на накопительную емкость, которая заряжается до определенного значения.

Это значение можно измерить разряжая накопительную емкость через сопротивление и измеряя время, которое проходит до пересечения нуля. Прикосновение пальца к поверхности диэлектрика отводит часть электрического заряда на тело, где он рассеивается.

Таким образом, при прочих равных, накопленный заряд на емкости при касании датчика пальцем будет меньше, что можно будет увидеть по укороченному времени ее разряда.

В QMatrix Whitepaper приведена отличная иллюстрация происходящего, но для удобства я перерисовал условную схему на свой лад. Ckey — это сенсор, узор на односторонней печатной плате (трогать его будем со стороны диэлектрика). Ctank — накопительная емкость.

Ключи: Sdrive — служит для подачи импульсов через Ckey; Sslope — включает ток заряда для измерения; Stop, Sbottom — «переворачивают» конденсатор в процессе накопления заряда; Sc — подключает вход компаратора.

Rslope — служит для медленной разрядки конденсатора.

https://www.youtube.com/watch?v=fAo9LOZdTWc

Схема зарядки Ctank больше всего напоминает работу зарядового насоса (см. Хоровиц и Хилл. Искусство схемотехники §6.23).

Схема

Изначально все ключи открыты, ток не течет. Замыкаем Sbottom, затем Sdrive. Положительный фронт импульса проходит через Ckey и чуть-чуть заряжает Ctank. Если теперь переключить Sdrive на землю, ничтожный заряд, попавший на Ctank, точно таким же путем уплывет обратно. Его надо «поймать».

Для этого перед тем, как переключить Sdrive на землю, надо открыть Sbottom и закрыть Stop. Конденсатор «перевернулся» — заряд сохранился, но теперь он виден со стороны нижней обкладки и, относительно земли, он будет отрицательным.

Разрядиться через накачивающую цепь он теперь не может, поэтому спокойно даем пройти заднему фронту импульса — переключаем Sdrive на землю. Этот процесс изображен на диаграмме справа.

Так, кроха за крохой, заряд на Ctank будет постепенно накапливаться и, допустим через 50 итераций, напряжение на нижней обкладке будет равно —достаткол вольт (см.

 нижнюю часть диаграммы). Тогда приходит время включить компаратор, взвести таймер и детектор событий и замкнуть Sslope, ток через который потечет в Ctank и постепенно разрядит его до 0, а затем зарядит и до +Vdd. Нам интересен момент перехода через 0, который отловит компаратор. Значение таймера, которое окажется в момент пересечения нуля и будет измеряемой величиной.

По разнице во времени разряда емкости можно будет судить о том, какие клавиши «нажаты». Эта же схема легко превращается в матрицу клавиш. Все накачивающие линии будут называться X, а линии датчиков — Y.

Реализация

В качестве тестовой платформы я выбрал ATmega8 на 16МГц. Матрицу клавиш я изначально хотел сделать 5×4, но, как всегда тут и там недосмотрел, поэтому успешно получилось сделать только 4×3. Итак, что же позволяет реализовать этот проект в одном AVR без лишних деталей?

Самое важное, это встроенный компаратор. С его помощью отлавливается момент перехода через 0.

Не менее важным является наличие мультиплексора входов АЦП: с его помощью можно во-первых отключить компаратор на время накопления заряда и, во-вторых, реализовать несколько столбцов матрицы.

Так же очень удобно иметь во-первых таймер и модуль захвата событий, вход которого к тому же можно подключить к выходу компаратора. За каждое из этих неслучайных совпадений воздадим хвалу инженерам, которые разрабатывали периферию AVR.

В этот момент всплывает одна деталь: все входы микроконтроллера снабжены диодами Шотки для защиты от пробоя. Это значит, что даже если вход находится в состоянии высокого импеданса, он отключен только пока напряжение на нем будет больше Vss-0.2V, или меньше Vdd+0.2V. Фактически это означает, что достаткол 

Источник: http://www.sensi.org/~svo/capsensor/

Дисплей сенсорный 2,4 TFT LCD 240×320

Дисплей сенсорный 2,4 TFT LCD 240×320

Модуль TJCTM24024-SPI позволяет оснастить устройство на основе микроконтроллера цветным (18-битный цвет – 262144 цветов) сенсорным дисплеем с диагональю 2,4 дюйма. Дисплей имеет подсветку. Его удобно использовать благодаря большому углу обзора.

Контрастность и динамические свойства ЖКИ индикатора H24TM84A  позволяют воспроизводить видео. В состав модуля входит контейнер для CD карты, на которой могут размещаться изображения, видеозаписи и множество фрагментов программ для разгрузки памяти МК.

Дисплей сенсорный 2,4 TFT LCD 240×320 имеет ЖКИ контроллер ILI9341 и контроллер сенсорных функций ADS7843 или XPT2046  Контроллер ЖКИ содержит буфер RAM, что снижает требования к микроконтроллеру прибора. Дисплей управляется по последовательной SPI шине. Мощный сервис модуля TJCTM24024-SPI позволяет прекрасно работать с системами Arduino, Raspberry Pi, STM32 Nucleo.

Удобный интерфейс великолепно сочетается с МК классов Atmel AVR, 51, PIC и других. Совместим и является глубоким развитием дисплея Nokia LCD 5110 о котором рассказано здесь www.arduino-kit.ru

Характеристики

Напряжение питания 3 В или 5 В Ток потребления при включенной подсветке 100 мА Разрешение экрана 320 x 240 точек Негативное воспроизведение Объем SD карты 2 Гбайт

Питание

Цепи питания модуля.

На плате модуля установлена микросхема CE6209 стабилизатора напряжения 3 В для питания модуля от источника 5 В. При питании от источника 3,3 В перемычка J1 должна быть замкнута. Перед включением напряжения питания 5 В проверить отсутствие перемычки J1.

Линии питания модуля соединяются с контактом VCC и GND. Питание от 5 В предпочтительнее так как стабилизатор модуля обеспечивает напряжение 3 В более соответствующее требованиям ЖКИ чем напряжение 3,3 В. Подсветка через контакт LED питается напряжением 3 В.

Контакты и сигналы

Интерфейс модуля содержит две раздельные шины SPI. 14-контактный соединитель J2 содержит контакты сигналов интерфейса SPI дисплея: CS, MOSI, MISO, SCK.

Они имеют логические уровни с максимальным значением 3 В, а также J2 содержит контакты: LED – питание подсветки 3 В, D/C – выбор передачи данных или команд, RST – сброс, низкий активный уровень. Соединитель J2 содержит контакты сигналов сенсорного управления, их название начинается с T_.

Интерфейс SPI SD-карты выведен на набор контактов J4.  1    SD_CS          2    SD_MOSI  3    SD_MISO  4    SD_SCK При подключении к микроконтроллеру питающемуся от 5 В дисплей сенсорный 2,4 TFT LCD 240×320 подключают через цепи согласования уровней. В противном случае TJCTM24024-SPI испортится.

В качестве цепей согласования применяют резисторные делители, диодные ограничители совместно с резисторами, специальные микросхемы и другие схемные решения.

Ознакомительное включение

Проверка

Для ознакомления с дисплеем возьмем Arduino Pro Mini, имеющее питание 3,3 В. Подключение одинаковое для нескольких типов Arduino. Дисплей     Arduino UNO, NANO или PRO MINI SDO (MISO)        контакт 12 LED            3.3 V SCK            13 SDI (MOSI)        11 D/C            9 RESET        3.

3 V CS            10 GND            GND VCC            3.3 V

Проведем тестирование программной библиотеки Adafruit ILI9341 нашей программой graphictest. Предварительно установим программные библиотеки Adafruit ILI9341 https://github.com/adafruit/Adafruit_ILI9341 и Adafruit GFX https://github.

com/adafruit/Adafruit-GFX-Library Наберем текст программы.

Следует без изменений компилировать и загрузить программу. Включим соединенные модули. На экране должны появляться различные изображения показанные далее.

Если открыть последовательный монитор, то увидим характеристики информации отображаемой дисплеем.Перейдем к более полезным примерам.

Индикация значения напряжения на аналоговом входе

Для этого нужно подвижный контакт потенциометра соединить с аналоговым входом AN0, а остальные его контакты соединить с общим проводом и питанием 3 В. Загрузите следующую программу.

[code1]

Рекомендуем:

Источник: https://arduino-kit.ru/product/displey-sensornyiy-24-tft-lcd-240×320

Сенсорная клавиатура на микроконтроллере avr

Всем привет. В одном из своих проектов на микроконтроллерах, мне понадобилось реализовать клавиатуру без использования тактовых кнопок. Устройство полностью должно было быть герметичным, безо всяких отверстий. Для реализации данной задачи и была разработана  сенсорная клавиатура.

Читайте также:  Электроизмерительная лаборатория радиолюбителя

Данная клавиатура работает через пластик, стекло и другие материалы, не содержащих металл. Уверенное расстояние срабатывания составляет 4мм.  Данное устройство собранно на микроконтроллере avr. С применением микроконтроллера atmega16. Сенсорная клавиатура является полностью законченным устройством.

Поскольку эта клавиатура, то для определения нажатой сенсорной кнопки предусмотрен протокол общения с другим микроконтроллером по USART. При нажатии любого сенсора, микроконтроллер передаст по USART код нажатой кнопки. Нажатие сопровождается звуковым сигналом и миганием светодиода. Это если нужно. При длительном без действии клавиатура блокируется.

 Для более наглядного демонстрирования и возможностей посмотрите видео.

 Разберем некоторые моменты.

Указуется сколько задействовано сенсорных кнопок. Для примера 12

#define Koli_Sensorov  12      // количество сенсорных кнопок ( макс. 20)

Программа для микроконтроллера написана таким образом, что вам позволяет разместить сенсоры на любые порты микроконтроллера.  Так что вы сами создаете печатную плату с размещенными сенсорными площадками как вам удобно. В программе нужно указать, какие порты микроконтроллера выделены под сенсорные кнопки. Сенсорами является вытравленная площадка 10×10мм.

#define Sensor_1_PORTB  4  // первая сенсорная кнопка, 4 пин на PORTB

#define Kod_Sensora1    1     // в случае нажатия первой сенсорной кнопки код” 1″ (макс. 255)  передан будет по  USART

#define Sensor_2_PORTB  7   

#define Kod_Sensora2    2

Порты микроконтроллера перенастроятся программой автоматически. Для калибровки клавиатуры относительно поверхности, нужно на печатной плате установить тактовую кнопку и соответственно прописать в программе. Прописать нужно светодиод и визир для звука, если применяется. 

#define Zvyk_PORTB 0           //для звука назначаем порт D, 5 ножка порта микроконтроллера

#define Indikasia_PORTB 1   //куда подключен светодиод ( порт D на 0 пине )

#define Kalibrovka_PORTB 2 //кнопка для калибровки клавиатуры ( PORTC на 0 пине )

Назначаем сенсорную кнопку для снятия блокировки клавиатуры

#define Knopka_Blok  Sensor_1_PORTB    //снятие блока назначьте любую действующую кнопку

Код сенсорной клавиатуры полностью открыт, для самостоятельного изучения. Думаю сложностей для реализации сенсорной клавиотуры не должно возникнуть. Среда разработки Atmel Studio, язык си.

Питание                        :  +5V

Микроконтроллер       : Atmega16

Частота                        : 16Мгц.

Макс. сенсоров            : 20шт.

Настройка USART      : 9600бит, 1 стоп бит, 8 бит размер слова.

Собранное устройство.

Программа для микроконтроллера – http://atmel-programme.clan.su/Sensor…
PDF по сборке – http://dfiles.ru/files/gdwoi7st1 для покупной платы.
 

Источник: http://atmel-programme.clan.su/publ/ustrojstva_na_mikrokontrollerakh/sensornaja_klaviatura_na_mikrokontrollere_avr/sensornaja_klaviatura_na_mikrokontrollere_avr/32-1-0-73

Простые интерфейсы для сенсорных экранов на примере AVR и TFT 2.4 и зачем это надо?

?kulevanton (kulevanton) wrote,
2016-09-30 23:50:00kulevanton
kulevanton
2016-09-30 23:50:00

А надо ли?

Для начала стоит задуматься о целесообразности затеи. Обьясню почему.

В наше время, тема интерфейсов уже далеко не нова. Существуют уже устоявшиеся методики разработки UI's, которые обеспечивают хорошую гибкость кода, удобство использования, а так же упрощают индивидуализацию интерфейса, его отрисовку. Написание UI сейчас – много возможностей, но в случае с AVR микроконтроллерами, эти возможности не совпадают с возможностями МК.

Все верно. возможности AVR микроконтроллеров крайне скудны и сложные интерфейсы идут в ущерб основным задачам программы.  К счастью,  на рынке есть и другие микроконтроллеры. Например уже полюбившийся всем STM32, который работает с интерфейсами чудесно.

Но все же, заходя в крайности стоит отметить. Да, на самых продвинутых версиях Stm32, можно делать сложные оконные системы, похожие на UI современных OS, но для таких задач используются и более мощные процессоры, другой подход к построению устройства.

Применимость:

1.  Устройства, где необходимо иметь несколько окн с информацией. 2.  Изменять параметры на лету в отдельном окне.3.  Устройство, которые выполняют разные действия где нужно наблюдать за ходом действий, используя отдельное окно.

Либа для STM32 с многопоточностью и другими классными плюшками будет, но это уже совсем другая история.

#include
#include // Core graphics library
#include // Hardware-specific library
#include // Touch library
 
#define ROTATION 2
#define DEBUG 0
 
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4
 
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
 
#define YP A2
#define XM A3
#define YM 8
#define XP 9
 
#define WINDOW 0
#define TEXT 1
#define BUTTON 2
 
 
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
// Определяем окно
 
typedef void (* DigitFuncPtr) (); // Для хранения событий
 
struct Screen // Контейнер для данных окна.
{ byte type; // Тип: Окно, кнопка или текст byte x; // Позиция на экране по X byte y; // Позиция на экране по Y byte width; // Ширина byte height; // Высота String value; //Значение (текст) int param; // вспомогательные параметр int color; // Цвет текста int background; // Цвет фона DigitFuncPtr onclick; //Событие при нажатии если кнопка и если окно – событие при отрабатывании int activetextcolor; // цвет HOVER текста
};
 
Screen const *current; // Указатель на активное окно
size_t current_size=0; // Размер активного окна
 
void Main(){ // Действия, происходящие во время активности окна Main
 
/* Здесь какой-то выполняемый в цикле код */
 
}
 
void Window1_Work(){ // Действия, происходящие во время активности окна WINDOW1
 
/* Здесь какой-то выполняемый в цикле код */
 
}
 
void Window2_Work(){ // Действия, происходящие во время активности окна WINDOW2
 
/* Здесь какой-то выполняемый в цикле код */
 
}
Screen const Window1[2]={ // параметры окна сканирования {WINDOW,50 /*text x*/,5 /*text y*/,240,320,”WINDOW 1″,1,WHITE,BLACK,Window1_Work /*Здесь функция которая крутится во время показа окна */,NULL}, {BUTTON,20,20,70,30,”Back”,1,WHITE,GREEN,toMain,BLACK} };
Screen const Window2[2]={ // параметры окна сканирования {WINDOW,50 /*text x*/,5 /*text y*/,240,320,”WINDOW 2″,1,WHITE,BLACK,Window2_Work /*Здесь функция которая крутится во время показа окна */,NULL}, {BUTTON,20,20,70,30,”Back”,1,WHITE,GREEN,toMain,BLACK} };
 
 
/* События */
void OpenWindow1(){ // событие для включение окна сканирования DrawScreen(window1,2);
}
void OpenWindow2(){ // событие для включение окна сканирования DrawScreen(window2,2);
}
 
 
Screen const main[7]={
{WINDOW,50 /*text x*/,5 /*text y*/,240,320,”Zagolovok okna”,1,WHITE,BLACK, Main /*Здесь функция которая крутится во время показа окна */,NULL},
 
{BUTTON,20,20,200,30,”Open Window 1″,1,WHITE,GREEN,OpenWindow1,BLACK}, {BUTTON,20,60,200,30,”Open Window 2″,1,WHITE,GREEN,OpenWindow2,BLACK}, };
 
void toMain(void){ // Событие “Домой”. можно повесить на отдельную кнопку, как на смартфонах, а можно указывать в кнопке назад, в окнах. DrawScreen(main,7);
}
 
 
void DrawScreen(const struct Screen *screens,size_t size){ //Рисуем экран for (int sn;sn 100) && y

Источник: https://kulevanton.livejournal.com/102719.html

Alex_EXE

Многим знаком один из самых распространённыхи и доступных программаторов для прошивки AVR микроконтроллеров USB ASP. Который можно без особых проблем изготовить самостоятельно или приобрести в различных магазинах и на интернет площадках.

Есть множество различных программ, которые без проблем работают с этим, народным, программатором.

Так же в интернет магазинах имеет большое распространение программатор USB ISP, который схож по схемотехники с USB ASP, но отличается прошивкой и ПО, которое менее разнообразно и менее распространено.

Бывший программатор USB ISP, теперь USB ASP

Т.к. данные программаторы схожи схемотехникой — следовательно можно без особых проблем переделать и перепрошить ISP программатор в ASP, только для этого ненадолго понадобится ещё один программатор для AVR микроконтроллеров.

Зачем может понадобиться приобретать программатор ISP вместо ASP, а потом его перепрошивать:

  1. при покупки их можно перепутать
  2. продавец может ввести в заблуждение или сам перепутать
  3. в наличии остался только ISP
  4. у него оказалась более выгодная цена
  5. Вам USP ISP программатор достался в подарок

Читать полностью »

Alex_EXE | 30.09.2017 | AVR |

Сенсорные технологии набирают популярность и постепенно вытесняют механические кнопки. И этому есть причины: сенсор не содержит механических частей и не изнашивается, он компактный, такую кнопку можно встроить, почти, куда угодно и придать любую форму, вот раздолье для дизайнеров.

И при этом это будет плоская пластина с чипом, а не здоровенная механическая кнопка. Если её накрыть прочным оргстеклом, то она становиться вандалостойкой.

Радом с ней или в ней на пластине сенсора или точнее на плате можно разместить светодиоды отображения её состояния или чисто для декоративной подсветки.

Сенсорная клавиатура

Одним из разновидностей сенсорных датчиков являются емкостные, которые наиболее простые в реализации. О драйвере матрицы из 16 таких емкостных кнопок — AT42QT2160, кратко расскажу в статье.

Читать полностью »

Alex_EXE | 18.09.2013 | AVR |

Ранее мы уже рассмотрели, как дёргать ножки и опрашивать кнопки, сейчас познакомимся с одним интерфейсом микроконтроллера, который позволит нам его сопрячь с компьютером и различной периферией, которая этот интерфейс поддерживает.

UART — один из самых распространёны и удобных в работе портов.

Хоть его первоначальную разновидность в виде RS-232C уже сложно найти, то его родственники встречаются повсеместно, как в виде промышленных проводных гигантов, таких, как RS485.

В микроконтроллерной технике он соединяет различные узлы, которые обмениваются большими объёмами данных, например: МК, датчики, модули беспроводных и проводных интерфейсов…

Связь Atmeg’и16 с ПК по UART

В свою очередь, UART расшифровывается, как «универсальный асинхронный приемник и передатчик» («Universal Asynchronous Receiver and Transmitter»). Рассмотрим его по подробнее.

Читать полностью »

Alex_EXE | 02.04.2013 | AVR |

Ранее мы уже установили среду для разработки и научились создавать проект. В этом уроке мы напишем свою первую программу, в которой помигаем светодиодом, которая является своеобразным «Hello World» для микроконтроллеров.

Первая программа, первое устройство на atmeg’е

Читать полностью »

Источник: https://alex-exe.ru/category/radio/avr/

Ссылка на основную публикацию
Adblock
detector