Приветствую. В качестве пробы на будущее купил у наших "друзей" китайцев микры 8229BSF - это 8-16 канальный сенсорный драйвер, якобы такие как используются в макетных сенсорных клавиатурах для ардуино. Собрал тестовую плату, запаял микросхему, проверил режимы по даташиту все вроде норм, но после длительной проверки выявился "косяк". Ввиде того что у сенсора со временем уходит чувствительность, до полного непонимания прикосновения. Возможно это причины самокалибровки на окружающую среду, или общая подстройка каналов, так как там один конденсатор на несколько каналов регулирует чувствительность. Возможно брак, пока непонятно. Если кто сталкивался, или знает причины которых не углядел я, прошу известить. В аналог этому чипу решил сделать свой, только на контроллере AVR. Была написана библиотечка под BASCOM. Основой алгоритма будет замер емкости сенсорной площадки. В начальный момент вывод микроконтроллера работает в режиме выхода и на нем установлен уровень логического нуля. Емкость сенсора, если она имеет какой-то заряд, быстро разряжается на внутренние цепи микроконтроллера. Через некоторое время вывод микроконтроллера переключаем в режим входа с отключенным подтягивающим резистором и емкость сенсора начинает заряжаться через внешний высокоомный резистор. В это время программа опрашивает состояние вывода микроконтроллера. Когда емкость зарядится до напряжения логической единицы, контроллер зафиксирует это и сравнит состояние счетчика с каким-то пороговым значением. По результату этого сравнения мы определяем поднесен ли к сенсору палец или нет.
Емкостные сенсорные датчики очень «капризные». Они требуют особой разводки и экранов. Нужно, что бы рядом с линиями сенсорных клавиш и самими сенсорными клавишами не проходило линий питания и других сигнальных проводников, т.к. все они в той или иной степени будут давать наводки, что в свою очередь будет искажать работу и давать ложные срабатывания. Поэтому специалисты известных микроконтроллерных фирм предлагают варианты топологий сенсорных площадок для разных применений.
Для кнопок и линейных скролов.
Для круговых скролов.
Ну с теорией думаю все понятно. Перейдем к делу. Ниже схема подключения сенсоров.
Чтобы наши тест сенсоры заработали напишем небольшую программу для контроллера.
$Regfile = "m8def.dat $Crystal = 8000000 $hwstack = 15 $swstack = 15 $framesize = 40
'------------- Подключаем библиотеку сенсора --------------- $include "LIB_sensor.bas" '--------------------------------------------------------------------
LED alias PortD Config LED = Output
Сall Calibrate_sensor(ALL) 'калибруем сенсоры
Do
Сall Read_sensor(ALL) LED=0 LED.Knopka=1
Loop End |
Подключив библиотеку методов "LIB_sensor.bas" настраиваем параметры и указываем порты сенсоров. Методом Read_sensor(*) можно опрашивать и определенный порт сенсора, просто прописав параметр в свойстве Сall Read_sensor(5)
Const RESDOWN = 2 'время разряда емкости сенсоров (мс) Const DEBONCE = 10 'задержка от нестабильности емкости(мс) Const SENSOR = 6 'количество сенсоров Const OFFSET = 10 'чувствительность сенсора 0=MAX Const RELOAD = 50 'количество перезагрузок сенсоров при калибровке Const COUNTERR = 5 'количество ошибок до сброса кнопки
После прошивки контроллера при касании сенсора будет зажигаться светодиод согласно его номера. В результате получился неплохой вариант сенсора для применения в своих конструкциях, имеющий большую гибкость в настройках и алгоритмах обработки за счет программного кода. |