Возникла проблема с работой энкодера на Pic16f628a. Счетчик на 99 мин. 59 сек. Программу написал. В Протеусе проверил. На макете работает.
Суть такова: Меняется скорость работы энкодера. При начальной настройке счетчика вращать энкодер нужно довольно медленно. После запуска и остановки таймера, когда значения еще остались, вращать можно с любой скоростью.
С железом проблем нет, пробовал других деталях - все точно так же.
Может где какой ляп или косяк в программе. Два дня ломал голову - не вижу причины.
Процедура обработки декодера хорошо сделана Ридико Л И и, по-моему , она де факто является стандартом (очень многие пользуются), так что выдумывать велосипед... На этом сайте есть. Замечания к коду. 1 Никогда не ставьте задержку в прерываниях. Ну вообще никогда. 2 При обработке прерывания от портов 4-7 мало сбросить флаг, нужно прочитать или записать порт, чтобы зафиксировать изменение - там же, в прерывании 3 Для выставления 99 минут необходимо 99*60 = 5940 щелчков энкодера, берем 20 щелчков энкодера на оборот, итого провернуть энкодер 297 раз. Немного напряжно для пользователя, не находите ? На энкодере есть кнопка, вот при нажатии на нее сделайте приращение- уменьшение не на 1, а на 50,например.
Спасибо большое за ответ! Задержку в прерывании поставил временно. Без нее очень плохо и не удобно работает, пока. Исправлю ошибку уберу конечно.
Энкодер у меня с фиксацией положений 12 щелчков за оборот, с кнопкой, на 24 пока не нашел. Больше 15 минут таймер ставить может ни когда не буду. А код на 99 мин написан с запасом на будущие разработки.
Минуты и секунды выставляются отдельно, выбор производится кнопкой самого энкодера. Так что даже довольно удобно.
Процедуру Ридико посмотрю обязательно. Я сейчас уехал от железа, остался только компьютер. В воскресенье вечером буду пробовать.
Поясните, пожалуйста, как же прочитать порт или записать, чтобы зафиксировать изменение, желательно с примером.
На энкодере есть кнопка, вот при нажатии на нее сделайте приращение- уменьшение не на 1, а на 50,например.
Не юзабельно... Юзабельно сделать дискрет функцией угловой скорости. Быстро крутишь - меняется на минуты, медленно на десятки секунд. Совсем медленно - единицы секунд...
Огромное спасибо! Вы мне очень помогли. Я многому у Вас научился! Разобрал код по косточкам. Кое что переделаю по себя, для удобства, и выложу все полностью.
Сейчас этот форум просматривают: fil721 и гости: 7
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения