Например TDA7294

Форум РадиоКот • Просмотр темы - Пытаюсь настроить опрос Энкодера
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт мар 28, 2024 12:09:40

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


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



Начать новую тему Ответить на тему  [ Сообщений: 20 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Пн окт 09, 2017 22:00:03 
Встал на лапы

Зарегистрирован: Чт июл 28, 2011 18:12:28
Сообщений: 149
Рейтинг сообщения: 0
Приветствую! Тема такая, хочу к одному МК (мега128) подключить до 5 энкодеров и опрашивать их по таймеру. Как всегда получается, что в протеусе всё норм, а на деле ничего, реакции на вращение ноль. До этого делал, но опрос был в общем цикле, при быстром вращении были проскоки. Энкодеры ставлю эти https://ru.aliexpress.com/item/5pcs-360 ... 0.0.hEFelS
Код:
char New;
int EncState1=0;
int EncData1=0;

//Инициализация таймера
void timer_init (void)
{
cli(); //остановка глобального прерывания
TCCR0=(1<<WGM01); // устанавливаем режим СТС (сброс по совпадению)
TIMSK |= (1<<OCIE0); // устанавливаем бит разрешения прерывания  счетчика по совпадению
OCR0 = 0b11111111; // определяем число сравнения
TCCR0|=(1<<CS00); //запуск таймера с предделителем
sei(); // enable global interrupt
}

//опрос порта Д
void EncoderScan(void)
{
 New = PIND & 0xFF;   // Берем текущее значение
 //1-й энкодер
 if ((New != EncState1) && (EncState1 == 3))
 {
      if(New == 0b00000001)
        EncData1++;       
      else
        if(New == 0b00000010)                     
          EncData1--;           
 }
 EncState1 = New;      // Записываем новое значение
}

ISR (TIMER0_COMP_vect)
{
  EncoderScan();
  if(EncData1 == 1)
  {
   EncData1=0;
   j+=1; //увеличиваем переменную на 1 + преходим в режим ожидания единиц
   if (j > 9) //так как подключено 10 светодиодов, обнуляем.
     j = 0;
  } 
  if(EncData1 == -1)
  {
   EncData1=0;
   j-=1; //уменьшаем переменную на 1 + преходим в режим ожидания единиц
   if (j < 0)
     j = 9;   
  }
}

int main(void) //Основное тело программы
{
//настраиваем порты ввода-вывода
DDRA=0xFF; //установить PA как выходы     
PORTA=0x01;//Первоначально устанавливаем на всех выходах 1         
DDRD=0x00; //порт PD сконфигурировать как входы
PORTD=0x00;//Первоначально устанавливаем на всех выходах 0
//PORTD |= (1 << PD1)|(1 << PD0); // подключаем подтягивающие резисторы       
//Инициализация внутреннего таймера и установка прерываний
timer_init();
while(1)//Бесконечный цикл
{
  тут будем зажигать 1 из 10-ти светодиодов по кругу, переменная j подскажет какой зажечь
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Пн окт 09, 2017 23:02:57 
Электрический кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 128
Зарегистрирован: Чт июн 20, 2013 00:00:58
Сообщений: 1031
Откуда: москва, м.Сходненская
Рейтинг сообщения: 0
таймер не правильно настроен
частота какая?
пробуйте так
Код:
TCCR0|=(1<<CS01); //запуск таймера с предделителем на 8
TIMSK |= (1<<OCIE0); // устанавливаем бит разрешения прерывания  счетчика по совпадению
OCR0 = 0b11111111; // определяем число сравнения
sei(); // enable global interrupt


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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Вт окт 10, 2017 06:12:33 
Встал на лапы

Зарегистрирован: Чт июл 28, 2011 18:12:28
Сообщений: 149
Рейтинг сообщения: 0
Попробовал, уже что-то пытается обрабатывать.
кварц на 4 МГц.


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Вт окт 10, 2017 16:17:20 
Электрический кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 128
Зарегистрирован: Чт июн 20, 2013 00:00:58
Сообщений: 1031
Откуда: москва, м.Сходненская
Рейтинг сообщения: 0
понижать частоту таймера надо, делитель на 32 - будет опрос 489Гц для энкодера за глаза.
а вообще подключаем осцил, крутим энкодер, смотрим длину импульсов - подгоняе таймер на гарантированный захват импульса....


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Вт окт 10, 2017 16:55:24 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
может не совсем в тему, но енкодер удобно вешать (вместе с другими кнопками) на шину общих анодов/катодов семисегментных индикаторов (входа разделив диодами) потом собираем всё в одну кучу и получаем и энкодер и кнопки ценой одной лапки МК.

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Вт окт 10, 2017 19:41:43 
Встал на лапы

Зарегистрирован: Чт июл 28, 2011 18:12:28
Сообщений: 149
Рейтинг сообщения: 0
понижать частоту таймера надо, делитель на 32 - будет опрос 489Гц для энкодера за глаза.
а вообще подключаем осцил, крутим энкодер, смотрим длину импульсов - подгоняе таймер на гарантированный захват импульса....


Осциллографа нет, всё на глазок и методом тыка. По поводу настройки делителя на 32, в таблице нашёл только 8, 64, 128, 256, 1024.
Как настроить асинхронный таймер/счтчик я не знаю.

Поменял значение 0xFF в строке New = PIND & 0xFF; на 0x03 и теперь хоть как-то начал обрабатывать сигналы. При вращении встречаются проскоки, на один щелчок, иногда бывает на 5 щелчков, если слишком быстро вращать, то всё зависает и перестаёт обрабатывать сигнал, а после отклика происходит сброс программы


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Ср окт 11, 2017 04:06:34 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
по идее частота опроса должна быть не меньше максимально возможной частоты переключения энкодера: вот, допустим, крутить его будешь до 5 об/с у него 20 шагов за оборот, 4 переключения за шаг, перемножаем получается 400 гц — при меньшей частоте опроса при такой скорости вращения будут пропуски. если частота опроса выше - МК просто по несколько раз промерит одно и то же состояние, это не страшно.

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Ср окт 11, 2017 06:00:11 
Встал на лапы

Зарегистрирован: Чт июл 28, 2011 18:12:28
Сообщений: 149
Рейтинг сообщения: 0
Проблема в том, что кроме обработки энкодера должен ещё выполняться основной код, где имеется задержки, циклы и всё должно куда-то выводиться. Делаю развивающую игру, одну сделал, хочу ещё одну, но как-то не выходит.
По ссылке ниже, можно посмотреть предыдущий вариант игры, сама игра разделена на под игры. Имеется лабиринт, где на перекрестке мигает разными цветами светодиод, на картинке есть дорожки соответствующих цветов и в зависимости от того какой цвет зажёгся, необходимо в этот момент нажать кнопку соответствующего цвета, но если дорожка выбрана не правильна можно зайти в тупик, смысл дойти до конца. Есть ещё двоичный преобразователь, щелкая 8-ю тумблерами можно получить число, тумблер это 1 или 0. Есть ещё просто крутилка, у меня ребёнок любит на стиральной машине крутить большой круг и смотреть как лампочки по кругу бегают. Все игры пришлось разделить на части и выбирать каждую соответствующей кнопкой, одновременно не получилось сделать, так как в каждой разные задержки (паузы) для цикличного мигания и т.п. Не знаю, ясно ли объяснил.
https://youtu.be/1aMetwfHZxg


Вложения:
123.JPG [96.61 KiB]
Скачиваний: 513
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Ср окт 11, 2017 07:32:39 
Электрический кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 128
Зарегистрирован: Чт июн 20, 2013 00:00:58
Сообщений: 1031
Откуда: москва, м.Сходненская
Рейтинг сообщения: 0
нужно менять принцип опроса, вешать на INT0...INT4 и таймер не понадобится количество ног тоже...
еще к ногам энкодера надо подключить кондеры по 0,1мкф должно улучшить их работу


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Ср окт 11, 2017 07:37:58 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2057
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18024
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
У DiHalt-а на сайте была статья про энкодеры с хорошим принципом опроса (автомат состояний). Немного стерлось из памяти, поэтому не ручаюсь за абсолютную точность, но по-моему этот принцип позволяет по единственному таймеру опрашивать хоть десяток энкодеров и помещать результат их опроса в переменные для дальнейшей обработки. Статья находится поиском на раз-два.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

скушно, бабоньки!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Ср окт 11, 2017 08:30:18 
Сверлит текстолит когтями
Аватар пользователя

Карма: 15
Рейтинг сообщений: 210
Зарегистрирован: Вт мар 31, 2015 22:56:07
Сообщений: 1272
Откуда: Мы люди простые, живем в лесу, на пенек молимся
Рейтинг сообщения: 0
Там у дихальта небольшая ошибка есть с состояниями (что принимать, что отбрасывать). Просто для сведения.

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Ср окт 11, 2017 20:18:47 
Встал на лапы

Зарегистрирован: Чт июл 28, 2011 18:12:28
Сообщений: 149
Рейтинг сообщения: 0
Можно наглядно показать как обрабатывать данные с энкодера по int0 и т.д.?
нужно менять принцип опроса, вешать на INT0...INT4


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Чт окт 12, 2017 03:55:34 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
самое простое: настраивай инт0 (к нему один вывод приходит) например на спад и в прерывании проверяй пин, куда второй вывод приходит — 1 - крутим вперед, 0 - назад.
но так можно качанием около одной точки его наматывать (но если енкодер явственно щелкает, то этот баг может никогда не выявиться),
правильней: инт0 на эни ченж (любое изменение), в прерывании делать исключающее или от ног энкодера и если 1 - полшага вперед, если 0 - полшага назад (или просто сравнивать их меж собой — равно-туда/неравно-сюда).
при желании можно и четверть шага ловить, но на это уже 2 прерывания понадобятся чтобы обрабатывать каждое изменение.
//странно - 2ки вместо 0ей - исправил

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Последний раз редактировалось Ivanoff-iv Чт окт 12, 2017 08:51:52, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Чт окт 12, 2017 06:20:13 
Встал на лапы

Зарегистрирован: Чт июл 28, 2011 18:12:28
Сообщений: 149
Рейтинг сообщения: 0
Ivanoff-iv - В первом варианте вроде всё понятно, я так кнопку обычную подключал, прерывание по изменению сигнала на входе. По второму варианту сложнее понять, если можно приведите пример ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Чт окт 12, 2017 08:56:37 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Код:
nterrupt [EXT_INT0] void ext_int0_isr(void)
{if (PIND.3==PIND.0) step++ else step--;}

при:
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Any change
в примере D3 и D0 пины на которые подцеплены ножки энкодера (не помню на какой пин приходится инт0 у меги, у тини2313 на D3) т.е. одна из ног кроме участия в сравнении должна сменой состояния вызывать прерывание.
это в кодевижне. если так пины не адресуются можно писать и ((PIND&1<<3)^^(PIND&1<<0)) должно сработать (не проверял).

Добавлено after 22 minutes 52 seconds:
((PIND&1<<3)==(PIND&1<<0)) - точно не прокатит т.к. 1цы в разных "разрядах" появляются

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Чт окт 12, 2017 10:21:19 
Сверлит текстолит когтями
Аватар пользователя

Карма: 15
Рейтинг сообщений: 210
Зарегистрирован: Вт мар 31, 2015 22:56:07
Сообщений: 1272
Откуда: Мы люди простые, живем в лесу, на пенек молимся
Рейтинг сообщения: 0
alexey6522, а что – вариант с диспетчером не катит совсем?

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Чт окт 12, 2017 11:25:38 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
по поводу циклов... мне кажется частота мала и хоть
кварц на 4 МГц.
а реальная частота может быть другая или из-за фьюзов (тактирование не с кварца) или из-за включенного какого нибудь делителя. тогда конечно будут пропуски. А остальные частотозависимые задачи правильно работают?

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Чт окт 12, 2017 19:23:15 
Встал на лапы

Зарегистрирован: Чт июл 28, 2011 18:12:28
Сообщений: 149
Рейтинг сообщения: 0
alexey6522, а что – вариант с диспетчером не катит совсем?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Чт окт 12, 2017 20:31:58 
Сверлит текстолит когтями
Аватар пользователя

Карма: 15
Рейтинг сообщений: 210
Зарегистрирован: Вт мар 31, 2015 22:56:07
Сообщений: 1272
Откуда: Мы люди простые, живем в лесу, на пенек молимся
Рейтинг сообщения: 0
Ну, не знаю тогда... Когда приперло, я под mikroPascal сам «родил» несложный диспетчер. Не рокетсайнс же.

_________________
Изображение


Последний раз редактировалось trengtor Пт окт 13, 2017 10:27:28, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пытаюсь настроить опрос Энкодера
СообщениеДобавлено: Чт окт 12, 2017 20:33:49 
Встал на лапы

Зарегистрирован: Чт июл 28, 2011 18:12:28
Сообщений: 149
Рейтинг сообщения: 0
Есть рабочий пример работы диспетчера для WinAVR?


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


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

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


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