Jump to content
mal333

4 кнопки на 2 пинах

Recommended Posts

Всем привет.
Есть задачка на 2 пина контроллера посадить 4 кнопки и распознавать их состояние, а так же состояние "ни одна не нажата". Есть схемы подключения их в матрицу R2R и последующее аналоговое измерение, но я почему-то думаю, что можно считывать и чисто цифровым методом. Пораскинув мозгами, получилась эта схема.В ней опрос будет такой- сначала читаем состояние выводов, потом переключаем пины попеременно в 1 и смотрим состояние другого вывода. Может есть схемы проще, но вот что-то не нашел.

browser_2019-11-02_22-07-56.png

Edited by mal333
грамматич.ошибка

Share this post


Link to post
Share on other sites
8 минут назад, mal333 сказал:

можно считывать и чисто цифровым методом

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

Edited by Lexter

Share this post


Link to post
Share on other sites

Номиналы резисторов- от балды на рисунке, суть R3R2 в том, чтобы подсаживать на 0 пины. Можно и 20к их поставить.

Share this post


Link to post
Share on other sites

Финальные результаты тестирования литиевых батареек FANSO при нормальных условиях

Перед разработчиком устройства, в котором предполагается использование батарейки, всегда стоит задача выбора того или иного бренда. Конечно, наиболее объективный результат по качеству можно получить при реальном тестировании в режиме работы самого устройства. Для того чтобы у разработчиков была некоторая информация о реальных значениях основных параметров ЛХИТ, инженеры компании КОМПЭЛ решили провести серию из трех тестов. Первый тест на постоянный разряд в нормальных климатических условиях, начатый в апреле 2019 г., мы завершили.

Узнать финальный результат тестирования

Ну, если одновременное нажатие нескольких кнопок не рассматривать, то почему бы тогда не дополнить ещё двумя кнопками с диодами в другую сторону, и опрашивать их, устанавливая на выходе "0"? :)

 

Не, фигня. Резисторы-то только к нулю подтягивают...

Edited by Lexter

Share this post


Link to post
Share on other sites

Наверное можно, но я пока не догоняю как. И потом, а как тогда отличить состояние "ни одна не нажата"?

Share this post


Link to post
Share on other sites
                     

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

В цикле видеокурсов по работе с STM32G0 от компании STMicroelectronics показаны архитектура, периферия (особенности процессорного ядра, режимов пониженного питания, векторов прерываний, DMA и мультиплексора DMA, схемы тактирования и сброса, и.т.д.) и даны практические примеры. Материал дает наглядное понимание того, как начать работу на новых микроконтроллерах STM32G0

Подробнее

Шибко шустро вы отвечаете. :)  Мою поправку с предыдущим ответом объединило.

Да, нельзя.

Share this post


Link to post
Share on other sites

Делал зарядное устройство для автоаккумулятора на микроконтроллере. Нужно было подключить 5 кнопок, а свободный вывод контроллера был только один, причём с возможностью работы как ADC.

Кнопки подключил по такой схеме:

332a8ed6b6ed.jpg

В исходном состоянии, когда ни одна кнопка не нажата - на входе процессора 0 Вольт. При нажатии на любую кнопку на входе контроллера появляется напряжение.

Ну а дальше в контроллере программно обрабатывается код с ADC - напряжение постоянно опрашивается и при совпадении нескольких подряд выборок кода в течении доли секунды микроконтроллер "видит" нажатие соответствующей кнопки и отрабатывает соответствующую команду. Таким образом исключаются ошибки типа "дребезг контактов" и "переходные процессы". Точность считывания напряжение-код я делал ±10-15%. Параллельно резистору R5 в зарядном я подключил помехоподавляющий конденсатор (точно ёмкость уже не помню, вроде в пределах 0,01-0,1 мкФ).

В программе Proteus это подключение кнопок прекрасно симулируется. И не один год прекрасно работает в самом зарядном устройстве.

При одновременном нажатии нескольких кнопок будет отрабатываться только напряжение самой верхней нажатой кнопки (по приведённой схеме). То есть какие-то программные ошибки при одновременном нажатии нескольких кнопок исключаются.

 

Кнопки_1.DSN

Edited by Shahabbas

Share this post


Link to post
Share on other sites

Эхх) это как раз таки схема R2R, так то иногда норм, особенно если контроллер простаивает. Ищу вариант без него.

Share this post


Link to post
Share on other sites
15 часов назад, mal333 сказал:

это как раз таки схема R2R

Ни разу, даже близко не стояло. :)

Совершенно другая схема с совершенно другим "поведением".

Share this post


Link to post
Share on other sites

Ну, если быть особо въедливым, то да. Но по сути делает то же самое, резистивный ЦАП. Мне не очень такая подходит, т.к. вынуждает городить код с АЦП и учитывать время преобразования, а т.к. предполагается, что тинька будет выдавать 3-х канальный ШИМ, то лучше пусть код будет линейным.

Share this post


Link to post
Share on other sites
8 минут назад, mal333 сказал:

если быть особо въедливым

Вообще-то это обязательное качество того, чьи схемы работают. В отличие от тех, у кого "хоть как-то работают". :D

10 минут назад, mal333 сказал:

не очень такая подходит, т.к. вынуждает городить код ...

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

Какая разница, какой код разбирать, - с порта или с АЦП?

Share this post


Link to post
Share on other sites

Да я просто не стал вываливать ненужные подробности, которые к сути вопроса не относятся. Там же на самом деле не кнопки, а выход TTP224, например. Я хз, будет ли он нормально работать в предложенным Shahabbas варианте.

5 минут назад, IMXO сказал:

а сделать как здесь http://pic24.ru/doku.php/osa/ref/appendix/3leds_pic10f

не вариант?

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

Share this post


Link to post
Share on other sites

 Алгоритм такой:

  • читаем PB3,4, - узнаем нажаты ли SW1 и 2
  • если какая-то из кнопок нажата, то конец опроса, чтобы не было конфликта с остальным кнопками
  • переключаем PB3 на вход, переключаем на выход РВ4 подаем 1. Если читаем в РВ3 1, то нажата SW4
  • переключаем PB4 на вход,  переключаем на выход РВ3 подаем 1. Если читаем в РВ4 1, то нажата SW3
  • ...profit!!

Без диодов все же никак :(, тогда не определить, какая из SW3 или SW4 нажата. Одновременное нажатие SW1 и SW1, SW3 SW4 распознается.

Edited by mal333

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Сергей Фомин
      Изучаю прерывания на attiny13. Пока остановился на прерываниях по переполнению. Сделал тестовый код в Atmel Studio и сразу через программатор заливаю на тиньку со светодиодом. Проблема в том что гореть он должен 10 секунд и выключаться, а горит примерно 20-23 секунды. Прошу помощи в правильном расчёте. Код ниже (пока учусь сильно не ругайтесь) :
      #define F_CPU 1000000 #define LED PB2 #include <avr/io.h> //#include <util/delay.h> #include <avr/interrupt.h> unsigned char work_time =384;    //  1000000/1024/256=3.8  (0.026 сек)    10/0.026=384 volatile unsigned char temp =0; ISR (TIM0_OVF_vect) {      TCNT0=0x00;     temp ++;     if (temp>=work_time)     {         PORTB &=~(1<<LED);  //Инвертируем состояние         TCCR0B=0x00    // остановка таймера         cli (); //общее запрещение прерываний     } } int main (void) {     init();               while (1)     {              } } void init () {          DDRB |= (1<<LED); // выход     PORTB =(1<<LED); //включен     TCCR0B =0x05; // установка делителя на 1024     TIMSK0 |= _BV(TOIE0);     sei();   // Либо SREG |= (1<<SREG_I); //Разрешаем прерывания глобально     TCNT0 = 0X00;        //Обнулить счётный регистр }  
    • By дезигнер
      Наша компания осуществляет полный комплекс услуг, связанных с подготовкой пластмассового изделия к серийному производству, начиная от эскизного проекта, разработки конструкции, изготовления прототипа, мелкосерийного литья в формообразующих вставках и заканчивая крупносерийным литьем на полноценных пресс-формах.
      Наша компания осуществляет мелкосерийное и крупносерийное литье изделий из пластмасс в формообразующих вставках, устанавливаемых в блок.Данная технология позволяет изготавливать не дорогостоящую пресс-форму целиком, а только формообразующую вставку под размер одного из наших блоков (доступные габариты изделия – до 100х200 мм), что обеспечит существенное снижение затрат времени и средств на изготовление серии деталей из пластмассы.
      Материалы: АБС, ТЭП, полистирол, полиэтилен, полиацеталь.
       
      http://blokforma.ru
      info@blokforma.ru
       

       
       
    • By Юра Махович
      Доброго времени суток!
      Друг попросил сделать эму некий аппарат: пищалку, которая издает звук с определенным периодом.
      Пример работы: сигнал 2 секунды, тишина 1 минуту, потом опять по новой.

      Так вот, программу написал, и вроде как даже работает, но как-то не стабильно..
      Иногда пропустит один цикл, иногда (почти всегда) после нескольких минут вообще перестает работать.
      Использую сон ради экономии батареи, т.к. устройство автономно.
      Генерирую ШИМ на ноге PB0. переключатели подсоединены к PB3 PB4.
      Прошу помогите найти ошибку, а то я уже не знаю что тут не так..
    • By AndreyPetrov
      Суть проблемы в том, что на съемной панели автомагнитолы не работают кнопки. Все, кроме стандартных: включение, откидывание панели и громкость. Они я так понимаю идут своей дорогой. 
      Проблема в том, что плата панельки когда то ковырялась 220 вольтовым паяльником, с тех пор и так чудит. 
      На ней элементов не много: сам контроллер m66006, 12 бит, 20 ног, кнопки с двумя видами подсветки, десяток резисторов и 5 диодов.
      Кнопки все проверил, все рабочие, не текут. Диоды заменил, плата начала работать, я обрадовался, думал что может диод какой подтекал. Но как только она нагревается, снова кнопки отказывают. 
      Стоит только её охладить, как она работает пару секунд, до нагревания, и потом опять.
      Просто контроллера такого в наших краях нету. Заказывать нужно партией 5 штук с Али. Может вообще так себя вести микросхема, от перепада температур? При условии, что она неисправна конечно
    • By авмаппипв апиаи
      Доброго времени суток! Имеется такая схема для управления яркостью светодиода и стабилизации по току  , схемы не мои а содраны из разных источников, я их соединил. Прошу мне помочь из проверкой схемы может где что то подправить , доработать в общем помогите мне в этом деле! Питать буду от 18650 через плату заряда с защитой от розряда .  

  • Сообщения

    • Все инструкции на русском языке должны начинаться со слов: «Ну что, придурок, уже сломал?»
    • Извините что влезаю)) но вот сам всегда ругаю протеус, а по факту он все же работает, иногда приходится костылить, типа перемкнуть свитчем временно две ноги транзистора при включении схемы, а после включения разомкнуть и все ок. Но говорить о том что есть ошибка, так а где ее нет? И мерседесы ломаются) Атолик трусдуия выдает ошибки очень часто при дебаге, вылетает студия, кокос тоже бывает, хотя и гораздо реже. И виндовс падает и линь. Я не знаю есть ли вообще что то работающее прям идеально) Ну вот тут с трудом верится, или у вас очень простые схемы)) Или же вы волшебник)) Я даже другу свои схемы кидал которые не стартовали без костыля и у него тоже не стартовали, а потом другой чел  научил костылить под протеус)) По моему мнению в нем есть ошибки но все таки он удобен и работать можно) может и не всегда...
    • Проверял или, хотя бы, измерял ...?
    • Цена 4 т.р. + пересыл .
    • Работать оно будет, параметры резко ухудшаются. В итоге получаем бревно из деталей самолета. А зачем, когда можно сделать проще с теми же показателями, что и у инвалида? Ведь нам пофиг, главное, чтоб работало и был звук.  
    • Для обратнохода что лучше 3845 или 3843 ? Делал на 3843 +лм358 +распыленка т106-52  до 14 в 3 а все гуд дальше нужен обдув(греется полевик) ! Оказывается кольца из распыленного железа очень даже не плохо работают в обратноходах !
×
×
  • Create New...