Страница 1 из 1

Помогите решить проблему с энкодером

Добавлено: Пт июл 19, 2013 11:35:41
kia74
Здраствуйте Уважаемые форумчане!

Возникла проблема с работой энкодера на Pic16f628a.
Счетчик на 99 мин. 59 сек.
Программу написал. В Протеусе проверил. На макете работает.

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

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

Может где какой ляп или косяк в программе. Два дня ломал голову - не вижу причины.

Заранее благодарен!

Re: Помогите решить проблему с энкодером

Добавлено: Сб июл 20, 2013 08:49:52
urry
Процедура обработки декодера хорошо сделана Ридико Л И и, по-моему , она де факто является стандартом (очень многие пользуются), так что выдумывать велосипед...
На этом сайте есть.
Замечания к коду.
1 Никогда не ставьте задержку в прерываниях. Ну вообще никогда.
2 При обработке прерывания от портов 4-7 мало сбросить флаг, нужно прочитать или записать порт, чтобы зафиксировать изменение - там же, в прерывании
3 Для выставления 99 минут необходимо 99*60 = 5940 щелчков энкодера, берем 20 щелчков энкодера на оборот, итого провернуть энкодер 297 раз.
Немного напряжно для пользователя, не находите ? На энкодере есть кнопка, вот при нажатии на нее сделайте приращение- уменьшение не на 1, а на 50,например.

Re: Помогите решить проблему с энкодером

Добавлено: Сб июл 20, 2013 10:20:34
kia74
Спасибо большое за ответ!
Задержку в прерывании поставил временно. Без нее очень плохо и не удобно работает, пока. Исправлю ошибку уберу конечно.

Энкодер у меня с фиксацией положений 12 щелчков за оборот, с кнопкой, на 24 пока не нашел.
Больше 15 минут таймер ставить может ни когда не буду. А код на 99 мин написан с запасом на будущие разработки.

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

Процедуру Ридико посмотрю обязательно.
Я сейчас уехал от железа, остался только компьютер. В воскресенье вечером буду пробовать.

Поясните, пожалуйста, как же прочитать порт или записать, чтобы зафиксировать изменение, желательно с примером.

Заранее благодарен.

Re: Помогите решить проблему с энкодером

Добавлено: Сб июл 20, 2013 11:10:17
urry
http://www.microchip.com/stellent/idcpl ... e=en011050
перед сбросом флага читается порт.
Далее, для отбивки секунды используйте неостанавливаемый таймер (те в прерывании по переполнению не трогайте регистры таймера) с методом Брезенхема - будет поточнее
пример здесь
http://www.microchip.ru/phorum/read.php ... eply_39000

Re: Помогите решить проблему с энкодером

Добавлено: Сб июл 20, 2013 15:16:04
urry
Немного помучил ваш код. Куда-то исчез постоянный клиент и просто есть время.

Re: Помогите решить проблему с энкодером

Добавлено: Сб июл 20, 2013 17:06:57
КРАМ
urry писал(а):На энкодере есть кнопка, вот при нажатии на нее сделайте приращение- уменьшение не на 1, а на 50,например.
Не юзабельно... :(
Юзабельно сделать дискрет функцией угловой скорости. Быстро крутишь - меняется на минуты, медленно на десятки секунд. Совсем медленно - единицы секунд...

Re: Помогите решить проблему с энкодером

Добавлено: Вс июл 21, 2013 08:41:26
urry
возможно, нужно попробовать.

Re: Помогите решить проблему с энкодером

Добавлено: Чт июл 25, 2013 21:45:45
КРАМ
Юрий, это не я придумал.
:)
Это фича от Matsushita Electric.
У меня СВЧ печка Panasonic именно так и регулирует время.
Исключительно удобно...

Изображение

Re: Помогите решить проблему с энкодером

Добавлено: Чт июл 25, 2013 21:51:56
kia74
Огромное спасибо!
Вы мне очень помогли. Я многому у Вас научился!
Разобрал код по косточкам. Кое что переделаю по себя, для удобства, и выложу все полностью.