Например TDA7294

Форум РадиоКот • Просмотр темы - Подавление дребезга контактов на инкрементном энкодере
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Пт янв 24, 2020 04:57:01

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Подавление дребезга контактов на инкрементном энкодере
СообщениеДобавлено: Пт сен 28, 2018 14:05:07 
Встал на лапы

Карма: 12
Рейтинг сообщений: 12
Зарегистрирован: Сб апр 28, 2018 20:29:42
Сообщений: 80
Рейтинг сообщения: 0
Всем привет!

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

Долго гулял по форумам и смотрел разные решения программного подавления дребезга контактов. Пробовал всякие разные и все таки осенило сделал вот такое:

Вариант на прерывании по таймеру.

Код:
unsigned char _encoderTurned; // PORTD Encoder connected pins
unsigned char _encoderMask = 0b00000011; //Маска
unsigned char _encoderCurrentValue;
unsigned char _encoderTurned; //Флаг поворота енкодера

void TimerCounter0Init()
{
   TCCR0A = 0;
   TCCR0B = 0;
   
   TCCR0A |= (1<<WGM01);
   TCCR0B |= (1<<CS00);
   
   TCCR0B = (1<<CS02); //Div  256
   OCR0A = 30;
   TIMSK0 |= (1<<OCIE0A);
}

ISR(TIMER0_COMPA_vect)
{
   if((PIND&_encoderMask)==3) //Проверяем положение енкодера и очищаем флаг если он дощелкнулся
   {
      _encoderTurned=0;       
      return;   
   }
   
   if(_encoderTurned==0)ReadEncoder();
}

void ReadEncoder()
{
   _encoderCurrentValue = (PIND&_encoderMask); //Читаем два пина

   if(_encoderCurrentValue==1)Increment(); //Проверяем фазу А
   if(_encoderCurrentValue==2)Decrement();//Проверяем фазу В

//Кто быстрей сработал тот и прав
   
   _encoderTurned = 1; // Устанавливаем флаг поворота.
}


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

PS: Да простит меня модератор, если не там неписал..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Подавление дребезга контактов на инкрементном энкодере
СообщениеДобавлено: Пт сен 28, 2018 16:20:40 
Вымогатель припоя
Аватар пользователя

Карма: 5
Рейтинг сообщений: 135
Зарегистрирован: Сб дек 22, 2012 08:17:42
Сообщений: 618
Откуда: Караганда, Казахстан
Рейтинг сообщения: 0
Dream555 писал(а):
Коллеги, я проверил это уже на собранной плате и работает вроде как очень даже хорошо.
Значит энкодер новый. Потому, как с поношенным энкодером бывают всякие чудеса. Это недавно обсуждалось, отсюда и дальше. Сначала в конференции, потом мы с коллегой sunjob ушли в личку, то, что у меня получилось в итоге, sunjob выложил в последней мессаге. По-хорошему, там надо еще подобрать коэффициенты, и будет все ОК. Правда, sunjob так и не сознался, какой масштаб по оси времени на его осциллограммах, поэтому я не довел дело до конца. Да, проект там под Мегу 328PA, так, что на 48-ю он скомпилируется без вопросов.

_________________
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)


Вернуться наверх
 
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Подавление дребезга контактов на инкрементном энкодере
СообщениеДобавлено: Пт сен 28, 2018 20:45:05 
Встал на лапы

Карма: 12
Рейтинг сообщений: 12
Зарегистрирован: Сб апр 28, 2018 20:29:42
Сообщений: 80
Рейтинг сообщения: 0
Цитата:
Значит энкодер новый. Потому, как с поношенным энкодером бывают всякие чудеса.


У меня и с новым енкодером тоже были чудеса. Вроде берешь не один рабочий пример и даже почти работает. Но все равно проскакивает... Крутишь в оду сторону, а показывает то так то этак.
Мой таймер настроен на 1 микросекунду. Да и кода там почти ноль, так что спасло. По правде говоря мой бесконечный цикл настолько нагружен, что через него не получилось нормально обработать енкодер. Но прерывания спасли..


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $88 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay
Не в сети
 Заголовок сообщения: Re: Подавление дребезга контактов на инкрементном энкодере
СообщениеДобавлено: Пт ноя 22, 2019 20:20:02 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 16
Зарегистрирован: Ср дек 08, 2010 19:03:17
Сообщений: 274
Рейтинг сообщения: 0
Цитата:
так и не сознался, какой масштаб по оси времени на его осциллограммах

там есть метка с длительностью :)

_________________
Енот - это кот, только инкогнито!


Вернуться наверх
 
DC/DC-преобразователи: принципы работы и уникальные решения Maxim Integrated

Что нового можно сказать про DC/DC? Написаны десятки статей, а самостоятельное изготовление преобразователя мощностью от единиц Вт до нескольких кВт даже в домашних условиях не составляет большого труда. Тем не менее, когда речь идет о микро-, или даже нано-ваттах, проектировщик может столкнуться с рядом трудностей. Грамотная схемотехника системы питания не возможна без знания основ работы DC/DC преобразователей. Освежить базовые знания и узнать об особенностях проектирования узлов питания мобильного устройства с оптимальным энергопотреблением можно из следующей статьи.

Читать статьи>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: makarevich и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y