Перейти к содержанию

Помогите Подобрать Контроллер


KushlaVR

Рекомендуемые сообщения

Доброго времини суток.

Вобщем сломалась сенсорная панель вытяжки.

Вся логика сенсора вынесена на отдельную плату (схема прилагается)

Вобщих чертах раскажу принцип работы

На плате есть 4 сенсора

Свет (должен работать по алгоритну кнопка с фиксацией - типа нажал светит - нажал - погас)

1-я скорость вентилятора

2-я скорость вентилятора

3-я скорость вентилятора

(1-2-3 - ето переключение скоростей вентилятора)

Тактовая частота с ноги CLKOUT через резистор R1, R3, R5, R7 дует в конденсаторы C1, C3, C5, C7. На второй ноге конденсаторов образуется переменное напряжение.

Позитивная фаза напряжения бежит через D1, D3, D5, D7 на дополнительную емкость (соотвецтвенно C2,C4,C6,C8), Негативная фаза шунтируется диодами D2, D4, D6, D8

Таким образом на практике на входах BTN_LIGHT, BTN_1, BTN_2, BTN_3 имеем 2,2В в состоянии покоя (когда сенсор не нажат).

Когда к сенсору поднести палец - то организм человека будет создавать дополнительную емкость. Ето приведет к падению напряжения до 0,8В на соотвецтвующих ножках (BTN_LIGHT, BTN_1, BTN_2 или BTN_3)

Все вроди норма - вот только производитель затер маркировку контроллера. Корпус SOIC20

Я (в силу малого опыта по работе с PIC) визулально по расположению ног взял за основу PIC16F628. (тот что в SOIC18...) на печатной плате 10, 11 нога SOIC20-го корпуса не задействована...

Но чувствую что контроллер не угадал.

Теперь собственно вопрос:

Какой контроллер посоветуете.

От него необходимо:

1 совпадение ног питания

2 Совпадение ног кристала

3 Возможность на входах BTN_LIGHT, BTN_1, BTN_2 или BTN_3 различить 0,8В и 2,2В

post-24244-0-44236300-1459234800_thumb.png

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Сейчас на Вашей схеме ноги у МК совпадают с реальными ногами в железе ?

Т.е. , если мы сделаем вот так :

post-48853-0-76521500-1459239342_thumb.png

Выводы совпадают с теми, которые на плате ?

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Сейчас на Вашей схеме ноги у МК совпадают с реальными ногами в железе ?

Т.е. , если мы сделаем вот так :

post-48853-0-76521500-1459239342_thumb.png

Выводы совпадают с теми, которые на плате ?

Извиняюсь за неточность. Схема нарисована будто там сидит PIC16F628. Но он скорее всего не подходит.

Если смотреть на разводку то должно бить так

Ноги 10, 11 в железе не задействованы

5 => +5V

16 => GND

post-24244-0-33773500-1459247316.png

Изменено пользователем KushlaVR
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

PIC16F1826/27 - http://www.microchip...s/en/PIC16F1827

Правда корпус SSOP-20, но можно приспособить. И 6 нога не совпадает. Там она Vss. Можно перекинуть на другую.

Как я понял - по ногам он такойже как и F628 только арсенал багаче?

Почеу выбори пал именно на него

Изменено пользователем KushlaVR
Ссылка на комментарий
Поделиться на другие сайты

Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Как я понял - по ногам он такойже как и F628 только арсенал багаче?
Он намного богаче 628-ого. Рядом их не поставишь :)
Поче вібори паль именно на него
Хм, взял первый попавшийся, на который у меня есть даташит. А то, что 628-ой есть в 20-ом корпусе, даже и не знал :)
Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ок. Спасибо.

Теперь раз пошла такая жата вопрос номер 2.

Как PIC16F1826 сможет распознать 0,8В и 2,2В

Оба уровня относятся к диапазону [лог 0]?

Если взять ADC (он я так понял на всех ногах кроме MCRL) получается => проблема с RA5 [Нога №4]?

Или есть хитрость какаято?

Изменено пользователем KushlaVR
Ссылка на комментарий
Поделиться на другие сайты

Из PIC16... 20 ног имеют: PIC16F1507 PIC16F57 PIC16F59 PIC16F631 PIC16F677

и т.д. и т.п. А еще AVR...

Допустим, что через неделю Вы отыщете 5 шт по совпадению питания и osc. Что дальше? Программы то нет, и вряд ли найдете. Нужно писать.

Выход: разрабатывайте свою схему под МК, который Вам знаком.

0,8 вольт - это максимальный уровень нуля ТТЛ входа, а 2 вольта - минимальный уровень высокого уровня. Раздел "Электрические характеристики".

Ссылка на комментарий
Поделиться на другие сайты

Из PIC16... 20 ног имеют: PIC16F1507 PIC16F57 PIC16F59 PIC16F631 PIC16F677

и т.д. и т.п. А еще AVR...

Допустим, что через неделю Вы отыщете 5 шт по совпадению питания и osc. Что дальше? Программы то нет, и вряд ли найдете. Нужно писать.

Выход: разрабатывайте свою схему под МК, который Вам знаком.

0,8 вольт - это максимальный уровень нуля ТТЛ входа, а 2 вольта - минимальный уровень высокого уровня. Раздел "Электрические характеристики".

Какраз программа то не проблема. Литературы море, Инструмент есть. Програматор одолжил на несколько дней.

Собственно я и программу уже написал.

Там все просто ждем в вечном цикле пока на одном из входов упадет напряжение. Упало - значит палец вблизи сенсора.

Если сенсор освещения значит переключаем освещение.

Если один из сенсоров скорости - активируем нужную ногу.

Зажигаем нужный светодиод.

Потом. 100 милисекунд занимаемся употреблением енергии (типа сидим в задержке) и все... На следующую итерацию.

Вся проблема в том что я сомниваюсь на счет контроллера.

Когда PIC16F628 поставил - он 2,2 распознает как лог0. Тобиш "думает" что сенсор задействован (ну типа он не умеет думать... ето в переносном смысле).

Думаю купить всетаки PIC16F1826. Попробую как с ним будет...

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

Да, на RA5 нет ADC. Тут я не проверил. В основном смотрел на кварц и на питание.

Придётся эту ногу куда-нибудь перемещать, где есть ADC.

Перемещать ето типа проводником дорожку перенести (там еще есть свободные ноги), или PIC умет тусовать назначение ног?

П.С.

Я просто еще весь даташит не переварил.... потому и задаю всякие дурацкие вопросы ))))

Ссылка на комментарий
Поделиться на другие сайты

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

Понял.

Я подозревал что тусовать ноги настройками - ето из области "фанастика". Но инженерам PIC - нужно взять на вооружение. Круто было бы )))

Ссылка на комментарий
Поделиться на другие сайты

Когда PIC16F628 поставил - он 2,2 распознает как лог0
Оно всё верно. Если идёт подъём с нуля до единицы, 2.2V будет недостаточно для перещёлкивания внутренней защёлки.

Уровни для входа с TS - 0.8V...0.8Vdd

Тусовать ноги - это не из области фантастики. В том же PIC16F1827 есть ремапинг некоторой периферии. ADC в неё не входит, к сожалению.

Ссылка на комментарий
Поделиться на другие сайты

Хм.... 0.8Vdd = 4В? правильно?

А чем надуть 4В в конденсатор C6,. На выходе с С5 (как я понимаю) переменка с амплитудой 5В. Пол периода диод шунтирует, второй полпериод пропускает. Пик 2,5В. Отсюда и напряжение на входе BTN_2 => 2.2В. (немного сглаженое конденсатором и чуток просаженое резистором)

Ссылка на комментарий
Поделиться на другие сайты

Я вообще с трудом представляю себе логику всей этой схемы. Как вообще такие подключения не просаживают амплитуду кварца :huh:

У PIC'а, кстати, есть внутренний осцилятор на 4 Мгц, а на ногу CLKOUT можно вывести эту частоту, делённую на 4. Можно попробовать кварц выкинуть и вывести эту частоту, она будет амплитудой в 5V.

Хм.... 0.8Vdd = 4В? правильно?
Да, если вход имеет триггер шмидта. А на сколько мне известно по памяти, все входа в режиме I/O его имеют.

Могу ошибаться, даташит курить лениво :)

Ссылка на комментарий
Поделиться на другие сайты

Припаял панельку Дип20. Пик прошил прошывкой "гирлянда". Типа бежыт огонек по светодиодах.

Тактируемся от внутреннего генератора-огонек бежыт.

Тактируемся от кварца-не е бежит.

Отпаиваем кварц от платы и цепляем напрямую на панельку - бежыт.

По ходу тяжело кварцу дуть во все конденсаторы. Или диод пробит... Буду проверять...

Ссылка на комментарий
Поделиться на другие сайты

Доброго времини суток.

Вобщем сломалась сенсорная панель вытяжки.

Вся логика сенсора вынесена на отдельную плату (схема прилагается)

Когда к сенсору поднести палец - то организм человека будет создавать дополнительную емкость.

Вы изобретаете деревянный велосипед с квадратными колесами, уважаемый...

В МК (в PICах в частности) есть вполне себе известный и часто даже поддерживаемый специальным периферийным модулем МК способ измерения ЕМКОСТИ присоединенной между пином МК и землей МК.

Физика работы очень простая. С питания МК к АНАЛОГОВОМУ входу делается подтяжка, которая вместе с источником питания МК образует ГЕНЕРАТОР ТОКА.

Алгоритм работы такой. Пин исходно закорачивается выходным буфером МК на землю (выводится ноль). Затем вывод переводится на аналоговый вход и емкость на входе начинает заряжаться через вышеобозначенный резистор с питания. Через определенное расчетное время измеряется напряжение на пине (посредством АЦП). Чем выше емкость на входе, тем ниже напряжение, которое будет измерено. Емкость в определенном интервале будет заряжаться от генератора тока практически линейно.

Вот и все.

И не нужно никакого генератора и нагромождения вокруг сенсоров.

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

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Доброго времини суток.

Вобщем сломалась сенсорная панель вытяжки.

Вся логика сенсора вынесена на отдельную плату (схема прилагается)

Когда к сенсору поднести палец - то организм человека будет создавать дополнительную емкость.

Вы изобретаете деревянный велосипед с квадратными колесами, уважаемый...

В МК (в PICах в частности) есть вполне себе известный и часто даже поддерживаемый специальным периферийным модулем МК способ измерения ЕМКОСТИ присоединенной между пином МК и землей МК.

Физика работы очень простая. С питания МК к АНАЛОГОВОМУ входу делается подтяжка, которая вместе с источником питания МК образует ГЕНЕРАТОР ТОКА.

Алгоритм работы такой. Пин исходно закорачивается выходным буфером МК на землю (выводится ноль). Затем вывод переводится на аналоговый вход и емкость на входе начинает заряжаться через вышеобозначенный резистор с питания. Через определенное расчетное время измеряется напряжение на пине (посредством АЦП). Чем выше емкость на входе, тем ниже напряжение, которое будет измерено. Емкость в определенном интервале будет заряжаться от генератора тока практически линейно.

Вот и все.

И не нужно никакого генератора и нагромождения вокруг сенсоров.

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

Да я вчера про такое читал в даташите...

Но разве ето ложытся на схему сенсора в атаче?

У меня есть ПП вытяжки и пока что я не расматриваю вариант делать свою ПП (точнее была такая мысль, но ето план №"Ь").

Пока работаем в направлении => "заменить микросхему".

Возможно ето совпадение что ПИК подходит по ногам питания и кварца и на самом деле там должен сидеть не ПИК....

П.С

Если стояла б задача сделать новую плату - то я б скорее всего взял за АВР, - я с ними больше знаком. И программа для сенсора уменя уже есть дял АВР (с распознаванием жестов Клик/Слайд/Удержание)

Ссылка на комментарий
Поделиться на другие сайты

По фаткту микросхему PIC16F1827 в наличии в магазинах своего города не нашел. Заказл в интернет магазине.

Тем временем поексперемнтировал в протусе с блоком сенсора.

По факту - наличие ADC в контроллере не обязательно, основной фактор - частота 4MHz на CLOCK_OUT.

Такое возможно ТОЛЬКО с тактирование от внутреннего генератора. С квацем - контроллер не запускается, (как правильно подметил Alex - сенсор просадит импульсы генератора).

Итог: PIC16F1827 - ето подсилу (внутренний генератор 16MHz, с возможностю вывода на CLKOUT => 16MHz / 4 = 4MHz - то что доктор прописал...). А первому подопытному PIC16F628 к сожалению ето не подсилу (внутренний генератор 4MHz, с возможностю вывода на CLKOUT => 4MHz / 4 = 1MHz).

Как показали експериментыв протусе при 1MHz напряжение сенсора еле еле достигает 1,2В. Что на практике тоже подтвердилось... А увеличение частоты до 4MHz - приводит к росту напряжения блока сенсора до 4,2В. Что вполне достаточно для четкого распознавания лог уровней процессором.

Изменение скважности сигнала (была мысль замутить ШИМ на порт CLKOUT) приводит только к падению напряжения... И ето логично. Ведь с изменением скважности переменная составляющая падает, а постоянная увеличивается. А конденсатор способен пропускать только переменную составляющую напряжения...

Продолжение следует.

Изменено пользователем KushlaVR
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Задача решена. Спасибо всем кто подключился.

Результат можна посмотреть тут

drive.google.com/open?id=0B-SmX6iwS8HeSlpaelJoZDZfY1U

(извините - незнаю как видео к сообщению прикрепить)

По факту использовал контроллер PIC16F1826. (хотя в оригинале 100% был другой... ну и ладно - главное же результат...)

Пришлось перерезать дорожки и переставить местами проводники, (те что шли от сенсоров).

Также выбросил кварц. Он для даного контроллера оказался без надобности :-)

Финальная схема устройства получилась такая

post-24244-0-79480000-1460748756_thumb.jpg

Ну и для полноты картины - исходники (среда MPLAB X IDE, язык C++)

#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <xc.h>
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = ON	 // Watchdog Timer Enable (WDT enabled)
#pragma config PWRTE = OFF	 // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF	 // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF		 // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF	 // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON	 // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = ON // Clock Out Enable (CLKOUT function is enabled on the CLKOUT pin)
#pragma config IESO = ON	 // Internal/External Switchover (Internal/External Switchover mode is enabled)
#pragma config FCMEN = ON	 // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
// CONFIG2
#pragma config WRT = OFF	 // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = ON	 // PLL Enable (4x PLL enabled)
#pragma config STVREN = ON	 // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO	 // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = ON		 // Low-Voltage Programming Enable (Low-voltage programming enabled)
#define _XTAL_FREQ 16000000L

#define BTN1_PORT PORTB
#define BTN1_PIN (1<<2)
#define BTN2_PORT PORTA
#define BTN2_PIN (1<<2)
#define BTN3_PORT PORTA
#define BTN3_PIN (1<<4)
#define BTN_LIGHT_PORT PORTB
#define BTN_LIGHT_PIN (1<<1)

#define LED1_ON PORTBbits.RB0=0;PORTBbits.RB7=1;
#define LED1_OFF PORTBbits.RB0=1;PORTBbits.RB7=0;
#define LED2_ON PORTAbits.RA7=0;PORTAbits.RA0=1;
#define LED2_OFF PORTAbits.RA7=1;PORTAbits.RA0=0;
#define LED3_ON PORTAbits.RA3=0;PORTAbits.RA1=1;
#define LED3_OFF PORTAbits.RA3=1;PORTAbits.RA1=0;
#define LED_LIGHT_ON PORTBbits.RB3=0;PORTBbits.RB6=1;
#define LED_LIGHT_OFF PORTBbits.RB3=1;PORTBbits.RB6=0;
#define BUTTON_LIGHT_PRESSED_LEVEL 300/*if value > 1.2V (1024/5*1.5=307 => 300 приблизительно...)*/
#define BUTTON_1_PRESSED_LEVEL 300
#define BUTTON_2_PRESSED_LEVEL 300
#define BUTTON_3_PRESSED_LEVEL 300

void setup_pins (void);
unsigned char btn1_pressed();
unsigned char btn2_pressed();
unsigned char btn3_pressed();
unsigned char btn_light_pressed();
unsigned char isCurrentButtonPressed(unsigned short lvl);
void waitADC(){
unsigned char i;
for (i=150;i>0;i--){;};
CLRWDT();
}

int main(int argc, char** argv) {
CLRWDT();
setup_pins();
LED1_OFF;
LED2_OFF;
LED3_OFF;
LED_LIGHT_OFF;
CLRWDT();
unsigned int i;
unsigned int j;
unsigned char k;

unsigned char btn_light_state = 0;
unsigned char lightIsOn = 0;

unsigned char btn1_state = 0;
unsigned char btn2_state = 0;
unsigned char btn3_state = 0;
unsigned char speed = 0;

i=0;
while(1){
 //PORTA=0xFF;
 k=0;
 j++;
 if (j==5){
	 j=0;
	 i++;
 }
 if (btn1_pressed()==0){
	 btn1_state++;
	 if (btn1_state>10) btn1_state=10;
 } else {
	 if (btn1_state>0){
		 btn1_state--;
		 if (btn1_state==0){
			 if (speed==1){
				 speed = 0;
			 } else {
				 speed = 1;
			 }
		 }
	 }
 }

 if (btn2_pressed()==0){
	 btn2_state++;
	 if (btn2_state>10) btn2_state=10;
 } else {
	 if (btn2_state>0){
		 btn2_state--;
		 if (btn2_state==0){
			 if (speed==2){
				 speed = 0;
			 } else {
				 speed = 2;
			 }
		 }
	 }
 }

 if (btn3_pressed()==0){
	 btn3_state++;
	 if (btn3_state>10) btn3_state=10;
 } else {
	 if (btn3_state>0){
		 btn3_state--;
		 if (btn3_state==0){
			 if (speed==3){
				 speed = 0;
			 } else {
				 speed = 3;
			 }
		 }
	 }
 }
 if (speed==1) {LED1_ON;} else {LED1_OFF;}
 if (speed==2) {LED2_ON;} else {LED2_OFF;}
 if (speed==3) {LED3_ON;} else {LED3_OFF;}
 if (btn_light_pressed()==0){
	 btn_light_state++;
	 if (btn_light_state>10) btn_light_state=10;
 } else {
	 if (btn_light_state>0){
		 btn_light_state--;
		 if (btn_light_state==0){
			 if (lightIsOn==1){
				 LED_LIGHT_OFF;
				 lightIsOn = 0;
			 } else {
				 LED_LIGHT_ON;
				 lightIsOn = 1;
			 }
		 }
	 }
 }

 CLRWDT();
}

return (EXIT_SUCCESS);
}

void setup_pins (void)
{
//OSC freq
OSCCONbits.SCS0 = 1;
OSCCONbits.SCS1 = 1;
OSCCONbits.IRCF0 = 1;
OSCCONbits.IRCF1 = 1;
OSCCONbits.IRCF2 = 1;
OSCCONbits.IRCF3 = 1;

ANSELA = (1<<2)|(1<<4);//RA4=>analog|RA2=>analog
LATA = 0;

ANSELB = (1<<1)|(1<<2);//RB1=>analog|RB2=>analog;
LATB = 0;

TRISA = (1<<2)|(1<<4); //RA4=>INPUT|RA2=>INPUT
TRISB = (1<<1)|(1<<2); //RB1=>INPUT|RB2=>INPUT
PORTA = 0;
PORTB = 0;

//ADC CLOCL=>FOSC/64
ADCON1bits.ADFM=1;
ADCON1bits.ADCS0=0;
ADCON1bits.ADCS1=1;
ADCON1bits.ADCS2=1;

//ADC volage reference
ADCON1bits.ADNREF=0;//Negative ref=>GND
ADCON1bits.ADPREF=0;//POSITIVE ref=>VCC
}

unsigned char btn1_pressed(){
//ADC chanel => RB2/AN10
ADCON0bits.CHS0=0;
ADCON0bits.CHS1=1;
ADCON0bits.CHS2=0;
ADCON0bits.CHS3=1;
ADCON0bits.CHS4=0;

return isCurrentButtonPressed(BUTTON_1_PRESSED_LEVEL);
}
unsigned char btn2_pressed(){
//ADC chanel => RA2/AN2
ADCON0bits.CHS0=0;
ADCON0bits.CHS1=1;
ADCON0bits.CHS2=0;
ADCON0bits.CHS3=0;
ADCON0bits.CHS4=0;

return isCurrentButtonPressed(BUTTON_2_PRESSED_LEVEL);
}
unsigned char btn3_pressed(){
//ADC chanel => RA4/AN4
ADCON0bits.CHS0=0;
ADCON0bits.CHS1=0;
ADCON0bits.CHS2=1;
ADCON0bits.CHS3=0;
ADCON0bits.CHS4=0;

return isCurrentButtonPressed(BUTTON_3_PRESSED_LEVEL);
}
unsigned char btn_light_pressed(){
//ADC chanel => RB1/AN11
ADCON0bits.CHS0=1;
ADCON0bits.CHS1=1;
ADCON0bits.CHS2=0;
ADCON0bits.CHS3=1;
ADCON0bits.CHS4=0;

return isCurrentButtonPressed(BUTTON_LIGHT_PRESSED_LEVEL);
}
unsigned char isCurrentButtonPressed(unsigned short lvl){
unsigned short ret=0;
ADCON0bits.ADON=1;//ADC Module On
waitADC();
ADCON0bits.ADGO=1;//Start conversion;
while (ADCON0bits.ADGO){;};//wait for ADC complete
ret=ADRES;
ADCON0bits.ADON=0;//ADC Module Off
if (ret>lvl)
 return 0;
else
 return 1;
}

Программа плоская...

Измеряэм напряжение на ногах. Если оно упало ниже опредиленного уровня (зависит от площади сенсора) - значит сенсор нажат.

Для удобства уровень вынес в отдельный макрос. Думал для сенсоров пдбирать придется експерементально. но по факту все заработало с первого раза. Что меня чесно говоря удиввило. )))

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...