Энкодер

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

Модератор: gurvinok

Ответить
V@dim
Сообщения: 27
Зарегистрирован: 16 фев 2014, 19:44

Энкодер

Сообщение V@dim » 02 сен 2014, 19:01

Здравствуйте. Попробовал сделать регулятор напряжения на шим. Управлял с помощью 2-х кнопок, программа работает. Подскажите как заменить кнопки на энкодер. Желательно пример программы. Есть ли библиотеки обработки энкодера? Если есть, то как ими пользовоться. Спасибо.
Вложения
1.rar
(48.55 КБ) 408 скачиваний

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Энкодер

Сообщение gurvinok » 04 сен 2014, 19:54

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

V@dim
Сообщения: 27
Зарегистрирован: 16 фев 2014, 19:44

Re: Энкодер

Сообщение V@dim » 07 сен 2014, 12:46

Спасибо Вам за помощь. У меня появился еще вопрос , а как сделать ограничение энкодера в максимальном и минимальном положении т.е при достижении переменой data значения 255 он не сбрасывал ее в 0 при следующем щелчке энкодера и аналогично при достижении 0 .

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Энкодер

Сообщение gurvinok » 07 сен 2014, 16:30

Зы... Ну это банально...

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

switch(buf) // Изменение значения переменной data в зависимости от направления вращения
	{
		case 0:
			{
				if((input == 2)&(data < 255)) data++;
				if((input == 1)&(data > 0)) data--;
				break;
			}
		case 1:
			{
				if((input == 0)&(data < 255)) data++;
				if((input == 3)&(data > 0)) data--;
				break;
			}
		case 2:
			{
				if((input == 3)&(data < 255)) data++;
				if((input == 0)&(data > 0)) data--;
				break;
			}
		case 3:
			{
				if((input == 1)&(data < 255)) data++;
				if((input == 2)&(data > 0)) data--;
				break;
			}
	}
Если долго мучиться, может быть получится.

V@dim
Сообщения: 27
Зарегистрирован: 16 фев 2014, 19:44

Re: Энкодер

Сообщение V@dim » 07 сен 2014, 17:43

Для опытного программиста это банально, а для начинающего - огромный шаг. :D

V@dim
Сообщения: 27
Зарегистрирован: 16 фев 2014, 19:44

Re: Энкодер

Сообщение V@dim » 19 фев 2015, 19:13

Подскажите,а как правильно записать условие input = PINC & 0x03; если энкодер подключен к разным портам PORTC.5
и PORTD.0.

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Энкодер

Сообщение gurvinok » 19 фев 2015, 20:55

Самый простой вариант так:

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

input |= (PINC.5>>6)|(PIND.0<<1); 
Если долго мучиться, может быть получится.

Ответить