Здраствуйте Уважаемые форумчане!
Возникла проблема с работой энкодера на Pic16f628a.
Счетчик на 99 мин. 59 сек.
Программу написал. В Протеусе проверил. На макете работает.
Суть такова: Меняется скорость работы энкодера. При начальной настройке счетчика вращать энкодер нужно довольно медленно. После запуска и остановки таймера, когда значения еще остались, вращать можно с любой скоростью.
С железом проблем нет, пробовал других деталях - все точно так же.
Может где какой ляп или косяк в программе. Два дня ломал голову - не вижу причины.
Заранее благодарен!
Помогите решить проблему с энкодером
- Реклама
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Помогите решить проблему с энкодером
Процедура обработки декодера хорошо сделана Ридико Л И и, по-моему , она де факто является стандартом (очень многие пользуются), так что выдумывать велосипед...
На этом сайте есть.
Замечания к коду.
1 Никогда не ставьте задержку в прерываниях. Ну вообще никогда.
2 При обработке прерывания от портов 4-7 мало сбросить флаг, нужно прочитать или записать порт, чтобы зафиксировать изменение - там же, в прерывании
3 Для выставления 99 минут необходимо 99*60 = 5940 щелчков энкодера, берем 20 щелчков энкодера на оборот, итого провернуть энкодер 297 раз.
Немного напряжно для пользователя, не находите ? На энкодере есть кнопка, вот при нажатии на нее сделайте приращение- уменьшение не на 1, а на 50,например.
На этом сайте есть.
Замечания к коду.
1 Никогда не ставьте задержку в прерываниях. Ну вообще никогда.
2 При обработке прерывания от портов 4-7 мало сбросить флаг, нужно прочитать или записать порт, чтобы зафиксировать изменение - там же, в прерывании
3 Для выставления 99 минут необходимо 99*60 = 5940 щелчков энкодера, берем 20 щелчков энкодера на оборот, итого провернуть энкодер 297 раз.
Немного напряжно для пользователя, не находите ? На энкодере есть кнопка, вот при нажатии на нее сделайте приращение- уменьшение не на 1, а на 50,например.
Re: Помогите решить проблему с энкодером
Спасибо большое за ответ!
Задержку в прерывании поставил временно. Без нее очень плохо и не удобно работает, пока. Исправлю ошибку уберу конечно.
Энкодер у меня с фиксацией положений 12 щелчков за оборот, с кнопкой, на 24 пока не нашел.
Больше 15 минут таймер ставить может ни когда не буду. А код на 99 мин написан с запасом на будущие разработки.
Минуты и секунды выставляются отдельно, выбор производится кнопкой самого энкодера. Так что даже довольно удобно.
Процедуру Ридико посмотрю обязательно.
Я сейчас уехал от железа, остался только компьютер. В воскресенье вечером буду пробовать.
Поясните, пожалуйста, как же прочитать порт или записать, чтобы зафиксировать изменение, желательно с примером.
Заранее благодарен.
Задержку в прерывании поставил временно. Без нее очень плохо и не удобно работает, пока. Исправлю ошибку уберу конечно.
Энкодер у меня с фиксацией положений 12 щелчков за оборот, с кнопкой, на 24 пока не нашел.
Больше 15 минут таймер ставить может ни когда не буду. А код на 99 мин написан с запасом на будущие разработки.
Минуты и секунды выставляются отдельно, выбор производится кнопкой самого энкодера. Так что даже довольно удобно.
Процедуру Ридико посмотрю обязательно.
Я сейчас уехал от железа, остался только компьютер. В воскресенье вечером буду пробовать.
Поясните, пожалуйста, как же прочитать порт или записать, чтобы зафиксировать изменение, желательно с примером.
Заранее благодарен.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Помогите решить проблему с энкодером
http://www.microchip.com/stellent/idcpl ... e=en011050
перед сбросом флага читается порт.
Далее, для отбивки секунды используйте неостанавливаемый таймер (те в прерывании по переполнению не трогайте регистры таймера) с методом Брезенхема - будет поточнее
пример здесь
http://www.microchip.ru/phorum/read.php ... eply_39000
перед сбросом флага читается порт.
Далее, для отбивки секунды используйте неостанавливаемый таймер (те в прерывании по переполнению не трогайте регистры таймера) с методом Брезенхема - будет поточнее
пример здесь
http://www.microchip.ru/phorum/read.php ... eply_39000
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Помогите решить проблему с энкодером
Немного помучил ваш код. Куда-то исчез постоянный клиент и просто есть время.
- Вложения
-
- kot_enc.zip
- (110.34 КБ) 209 скачиваний
- Реклама
- КРАМ
- Друг Кота
- Сообщения: 25277
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Помогите решить проблему с энкодером
Не юзабельно...urry писал(а):На энкодере есть кнопка, вот при нажатии на нее сделайте приращение- уменьшение не на 1, а на 50,например.
Юзабельно сделать дискрет функцией угловой скорости. Быстро крутишь - меняется на минуты, медленно на десятки секунд. Совсем медленно - единицы секунд...
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Помогите решить проблему с энкодером
возможно, нужно попробовать.
- КРАМ
- Друг Кота
- Сообщения: 25277
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Помогите решить проблему с энкодером
Юрий, это не я придумал.
Это фича от Matsushita Electric.
У меня СВЧ печка Panasonic именно так и регулирует время.
Исключительно удобно...

Это фича от Matsushita Electric.
У меня СВЧ печка Panasonic именно так и регулирует время.
Исключительно удобно...

Re: Помогите решить проблему с энкодером
Огромное спасибо!
Вы мне очень помогли. Я многому у Вас научился!
Разобрал код по косточкам. Кое что переделаю по себя, для удобства, и выложу все полностью.
Вы мне очень помогли. Я многому у Вас научился!
Разобрал код по косточкам. Кое что переделаю по себя, для удобства, и выложу все полностью.


