Энкодер вместо кнопок

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 4
Зарегистрирован: Сб мар 11, 2017 16:21:27

Сообщение grot »

Здравствуйте, уважавемые коты.

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

Чтобы быть более конкретным, хочу вот это (REX-C100) на картинке управлять энкодером, у меня на нем термостолик ,и сильно подбешивает тыкать эти китайские кнопочки

Изображение
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20071
Зарегистрирован: Чт янв 26, 2012 16:44:29
Откуда: Таксимо

Сообщение vlasovzloy »

Я брал поворотный переключатель, хотел встроить пока не встроил
https://aliexpress.ru/item/32983137351.html
Типа три кнопки вверх вниз и по центру как в энкодерах кнопка

Добавлено after 33 seconds:
Похоже на энкодер, но это не энкодер
Мои поставщики запчастей с отличной репутацией
texnomag.ru
radioremont.com
pl-1.org
4ip.info
elitan.ru
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

grot писал(а):хочу вот это (REX-C100) на картинке управлять энкодером
велика вероятность, что ерунда получится :dont_know:
В самом термоконтроллере опрос клавиатуры запрограммирован с определёнными задержками, может с фильтрацией дребезга и т.п.. И вы вместо кнопок подсунете ему эмулятор кнопок на энкодере..
Взаимодействовать то они так или иначе будут, но сомневаюсь, что такое управление тоже не будет "подбешивать"))
Вымогатель припоя
Сообщения: 593
Зарегистрирован: Ср янв 06, 2010 10:01:46

Сообщение metan »

Код: Выделить всё

//МОДУЛЬ ПОДДЕРЖКИ ЭНКОДЕРА (От Леонида Ивановича)
//Для подавления дребезга используется анализ двух последовательных
//состояний. Это позволяет обойтись без временных задержек.
//Функция EncoderInit() должна вызываться один раз в начале программы.
//Функция EncoderExe() должна вызываться в основном цикле.
//При повороте энкодера на шаг вправо или влево изменяется значение глобальной переменной EncoderValue.
//
//
//Глобалльные переменные
signed char EncoderValue = 0;

//Константы
#define EncoderDDR DDRC                        /*порт настройки*/
#define EncoderPORT PORTC                    /*порт управления*/
#define EncoderPIN PINC                        /*порт чтения*/
#define EncoderF1 (1<<3)                    /*пины чтения енкодера*/
#define EncoderF2 (1<<4)                    /*пины чтения енкодера*/
enum { State0, StateA, StateB, StateAB };     //состояния энкодера

//Переменные
static char EncPrev;                          //предыдущее состояние энкодера
static char EncPrevPrev;                      //пред-предыдущее состояние энкодера

//Инициализация энкодера
void EncoderInit(void)
{
    EncoderDDR &= ~(EncoderF1 | EncoderF2); //настройка портов на ввод
    EncoderPORT |= EncoderF1 | EncoderF2;   //включение подтягивающих резисторов
    EncPrev = State0;                       //инициализация предыдущего состояния
    EncPrevPrev = State0;                   //инициализация пред-предыдущего состояния
}

//Обработка энкодера
void EncoderExe(void)
{
    char EncCur = 0;

    if(! (EncoderPIN & EncoderF1)) 
        EncCur  = StateA; //опрос фазы 1 энкодера
    
    if(! (EncoderPIN & EncoderF2)) 
        EncCur |= StateB; //опрос фазы 2 энкодера
    
    if(EncCur != EncPrev) {                    //если состояние изменилось,
        if(EncPrev == StateAB && EncCur != EncPrevPrev ){//если предыдущее состояние StateAB и текущее и пред-предыдущее не равны,
            if(EncCur == StateB)              //если текущее состояние StateB,
                EncoderValue ++;            //шаг вверх
            else                              
                EncoderValue --;            //шаг вниз
        }
        EncPrevPrev = EncPrev;              //сохранение пред-предыдущего состояния
        EncPrev = EncCur;                   //сохранение предыдущего состояния
    }
} 
Все Благодарности Леониду Ивановичу :)
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 19055
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

enum { State0, StateA, StateB, StateAB };
а где инициализация каждой величины в этом перечне?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Вымогатель припоя
Сообщения: 593
Зарегистрирован: Ср янв 06, 2010 10:01:46

Сообщение metan »

Starichok51 писал(а):где инициализация
тут :wink: "Керниган, Ричи. Язык C.txt"
----------- cut here -----------------------------------------------------
Идентификаторы в списке-перечисления описываются как
константы и могут появиться там, где требуются (по контекс-
ту) константы. Если не используется вторая форма перечисляе-
мого (с равеством =), то величины констант начинаются с 0 и
возрастают на 1 в соответствии с прочтением их описания сле-
ва на право. Перечисляемое с присвоением = придает соответс-
твующему идентификатору указанную величину; последующие
идентификаторы продолжают прогрессию от приписанной величи-
ны.
Реклама
Родился
Аватара пользователя
Сообщения: 16
Зарегистрирован: Вс июн 05, 2022 00:15:01

Сообщение Котоник »

[uquote="grot",url="/forum/viewtopic.php?p=4688912#p4688912"]сильно подбешивает тыкать эти китайские кнопочки[/uquote]

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

Вот бы коллективным разумом выбрать оптимальное техническое решение для устранения этих недостатков ?

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

Несомненно, благодарности Леониду Ивановичу за изящное кодирование будут многократными.

А вот если на логике рассыпухе нечто подобное изобразить ? С устранением дребезга, с анализом направления вращения энкодера, с настраиваемой задержкой... ?
Этакая платка с парой корпусов, и чтобы можно было подвесить параллельно контактам кнопок ?
Наверное кто-то уже так делал ?
Вымогатель припоя
Сообщения: 593
Зарегистрирован: Ср янв 06, 2010 10:01:46

Сообщение metan »

Котоник писал(а):Наверное кто-то уже так делал ?
Наверное, кто-то леницца поискать в сети
https://forum.cxem.net/index.php?/topic ... на-логике/
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Работает на CMOS. Но с МК "красивее". (И более компактное).

Изображение
Контактная информация:
Родился
Аватара пользователя
Сообщения: 16
Зарегистрирован: Вс июн 05, 2022 00:15:01

Сообщение Котоник »

[uquote="metan",url="/forum/viewtopic.php?p=4689081#p4689081"]поискать в сети[/uquote]
Классная микросхемка LS7082N1 !
Надо попробовать.

Добавлено after 3 minutes 38 seconds:
[uquote="veso74",url="/forum/viewtopic.php?p=4689097#p4689097"]МК "красивее". (И более компактное).[/uquote]

Да, МК, это весчь !
Но а п̶о̶г̶о̶в̶о̶р̶и̶т̶ь̶ попаять ?
Да и размер самоделки доставляющей удовольствие, зачастую неважен.
Друг Кота
Аватара пользователя
Сообщения: 3487
Зарегистрирован: Вт окт 22, 2013 04:37:23
Откуда: Казань

Сообщение smacorp »

.
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Родился
Сообщения: 4
Зарегистрирован: Сб мар 11, 2017 16:21:27

Сообщение grot »

Спасибо всем и Леониду Ивановичу! Буду пробовать. Как что получится, обязательно отпишусь.

п.с. попаять конечно хорошо, но и попаять и попрограммировать еще лучше )
Родился
Аватара пользователя
Сообщения: 16
Зарегистрирован: Вс июн 05, 2022 00:15:01

Сообщение Котоник »

[uquote="smacorp",url="/forum/viewtopic.php?p=4689134#p4689134"].[/uquote]
Можно вот так попробовать.

Добавлено after 2 minutes 15 seconds:
[uquote="grot",url="/forum/viewtopic.php?p=4689139#p4689139"]попаять и попрограммировать еще лучше[/uquote]
Согласен. Поддерживаю. Стараюсь следовать этой стратегии.
Родился
Сообщения: 4
Зарегистрирован: Сб мар 11, 2017 16:21:27

Сообщение grot »

[uquote="vlasovzloy",url="/forum/viewtopic.php?p=4688921#p4688921"]Похоже на энкодер, но это не энкодер[/uquote]
А вот за эту штуку большое спасибо, много где пригодится. Если с мк не получится, то это всяко лучше, чем выносить на панель отдельные кнопки.
Нашел транзистор. Понюхал.
Сообщения: 174
Зарегистрирован: Пн янв 13, 2025 15:24:02

Сообщение Вячеслав М. »

На счёт антидребезга, посмотрите моё сообщение по ссылке:
https://radiokot.ru/forum/viewtopic.php ... &start=460
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Дарю идею. Этой идее много лет. Использую. Комп далеко. Попробую словами. D-триггер. КМОП. Положительная логика. То есть, активный уровень 1. D вход на + питания. C-вход типа вход S. R-вход как есть. Асинхронный. Сброс. Берется два триггера. К примеру, К561ТМ2.

Такой триггер я назвал идеальным. Кто то возможно и вспомнит. Поднимал я эту тему. Идеальный триггер.

Выход A энкодера на вход C первого триггера. Выход B энкодера на вход R первого триггера.
Выход B энкодера на вход C второго триггера. Выход A энкодера на вход R второго триггера.

По такой схеме исключается дребезг вообще. Особенно с энкодерами на контактах. Так как схема триггерная.

Особенность есть. Учитываются только полные состояния энкодера. Без промежуточных.

По поводу примера от Ридико Леонида Ивановича. Вы забыли схему привести. Источник.

Предупреждаю сразу. Авторство этой схемы (антидребезг энкодера) за мной. Все моменты по этой схеме в личку.
Вложения
2025-03-09_23-57-31.png
(105.46 КБ) 552 скачивания
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 174
Зарегистрирован: Пн янв 13, 2025 15:24:02

Сообщение Вячеслав М. »

У всех этих энкодеров есть офигительная особенность - через не продолжительное время они начинают дребезжать, а эти все триггеры рассыпухой будут работать только когда победить эту болезнь, по этому начинайте с антидребезга. Эту болезнь можно увидеть практически везде, самые именитые фирмы не могут с ней справиться, и их аппаратура подглючивает везде и всюду по причине не решённой проблемы, но она решается легко, в той ссылке я подробно всё объяснил.
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Вячеслав М., я только что вам всем дал схему, которая решает проблему антидребезга энкодеров. Любых. Контакты, оптические.
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 174
Зарегистрирован: Пн янв 13, 2025 15:24:02

Сообщение Вячеслав М. »

Demiurg, Вы похоже в митсубиси Альфа программируете, тоже писал программы на него, уже десяток лет без сбоев работают контроллеры. Но тут то и прикол, вы ничего не дали, можете сами посмотреть, там только внешние контуры функциональных блоков от промышленного контроллера митсубиси Альфа.
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Mitsubishi Alpha один из инструментов. Для отработки некоторых логических схем. Ну и да, были и проекты на этих программируемых релюшках.

Схема антидребезга энкодеров. Авторская.
Вложения
2025-03-10_01-05-37.png
(127.77 КБ) 499 скачиваний
Последний раз редактировалось Demiurg Вс мар 09, 2025 21:08:13, всего редактировалось 1 раз.
Контактная информация:
Ответить

Вернуться в «AVR»