| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Atmega32 и энкодер
17.02.2011, 18:02
|
|
|
Прописка
Регистрация: 21.08.2010
Адрес: Таганрог
Сообщений: 108
Сказал спасибо: 19
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Atmega32 и энкодер
Подключен такой энкодер, вернее только часть Jog от него к МК.

Подключено так:
Но если вращать энкодер в какую-либо сторону, в какой-то момент видно, что проскакивает шаг в другую сторону.
Вот код:
ISR(INT1_vect)
{
unsigned char tmp;
if (DialChange==0)
{
tmp=PINC;
_delay_us(30);
if ((tmp&0x80)==0x00)
{
dial++;
DialChange =1;
}
else
{
dial--;
DialChange =1;
}
}
}
Что можно сделать, чтоб не проскакивали шаги в обратную сторону?
Спасибо!
|
|
|
|
17.02.2011, 18:54
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,138
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
Re: Atmega32 и энкодер
Попробуйте увеличить время задержки антидребезга. Возможно контроллер не успевает обработать поступающие сигналы. У меня такое было когда делал вывод на символьный дисплей с тупыми задержками и без ожидания флага готовности.
|
|
|
|
17.02.2011, 19:06
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,011
Сказал спасибо: 0
Сказали Спасибо 4,955 раз(а) в 2,379 сообщении(ях)
|
Re: Atmega32 и энкодер
подобную тему обсуждали на телесистемах - посмотри архивы или задай вопрос там. можно решить при помощи дополнительных внешних корпусов логики
|
|
|
|
17.02.2011, 21:14
|
|
|
Прописка
Регистрация: 21.08.2010
Адрес: Таганрог
Сообщений: 108
Сказал спасибо: 19
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Atmega32 и энкодер
Сообщение от _guardianangel
|
|
Попробуйте увеличить время задержки антидребезга.
|
Пробовал, не решает проблему.
Сообщение от jump
|
|
можно решить при помощи дополнительных внешних корпусов логики
|
Не желательно такой вариант, ПП уже готова. Хотелось бы программно.
А тему на Телесистемах не могу найти. Может, кто поможет найти?
|
|
|
|
17.02.2011, 22:18
|
|
|
Временная регистрация
Регистрация: 29.03.2005
Сообщений: 86
Сказал спасибо: 6
Сказали Спасибо 45 раз(а) в 21 сообщении(ях)
|
Re: Atmega32 и энкодер
Подключение поворотного энкодера к компьютеру через USB. По ссылкам в статье найдете код подпрограмм энкодера. Подпрограммы очень простые, и работают стабильно.
|
|
|
|
17.02.2011, 22:21
|
|
|
Прописка
Регистрация: 11.10.2008
Сообщений: 132
Сказал спасибо: 8
Сказали Спасибо 35 раз(а) в 30 сообщении(ях)
|
Re: Atmega32 и энкодер
А есть чем посмотреть, что творится на линии J1(2), осцилл? Какова максимальная частота импульсов от энкодера, крутите быстро? Номинал R5, R7 (или C1,C4) пробовали увеличить?
Задержка, кстати, у Вас в обработчике , не к месту и даже наоборот, вредит. После задержки надо проверять состояние именно той линии, которая вызвала прерывание, и в зависимости от изменилось или нет состояние (дребезг или не дребезг) решать, обрабатывать или нет.
Да, еще у Вас в схеме j2 заведен на PD1 , j1 на PD3, а в коде проверяется вобще PC7 - кому верить?  А с энкодера j1 на j2, j2 на j1 - капец, кто ж вас такому рас 3.14 здяйству учит!?
Последний раз редактировалось Nfc; 17.02.2011 в 22:30.
|
|
|
|
17.02.2011, 23:17
|
|
|
Прописка
Регистрация: 21.08.2010
Адрес: Таганрог
Сообщений: 108
Сказал спасибо: 19
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Atmega32 и энкодер
Сообщение от Nfc
|
|
еще у Вас в схеме j2 заведен на PD1 , j1 на PD3, а в коде проверяется вобще PC7 - кому верить? А с энкодера j1 на j2, j2 на j1 - капец, кто ж вас такому рас 3.14 здяйству учит!?
|
Да, это на схеме опечатки, на плате так
Сообщение от Nfc
|
|
Номинал R5, R7 (или C1,C4) пробовали увеличить?
|
Попробую!
|
|
|
|
18.02.2011, 11:08
|
|
|
Прописка
Регистрация: 11.10.2008
Сообщений: 132
Сказал спасибо: 8
Сказали Спасибо 35 раз(а) в 30 сообщении(ях)
|
Re: Atmega32 и энкодер
Насчет задержки в коде - поробуйте так:
...
tmp=PIND;
_delay_us(30); //чтобы прикинуть какое время задержки применить, должна быть известна максимальная частота импульсов от энкодера. Иначе - методом подбора.
if (tmp&0x08&PIND) //определяем, дребезг или нет (ориентируюсь на то, что прерывание настроено по нарастающему фронту).
{
if (PINC&0x80) ... //тут Ваш код обработки направлений и т.д.
|
|
|
|
18.02.2011, 12:16
|
|
|
Вид на жительство
Регистрация: 03.06.2010
Сообщений: 451
Сказал спасибо: 35
Сказали Спасибо 168 раз(а) в 133 сообщении(ях)
|
Re: Atmega32 и энкодер
|
|
|
|
18.02.2011, 12:24
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Atmega32 и энкодер
Вообще-то, если энкодер замыкает на землю, то ничего не надо увеличивать, кроме задержки. Раз в 1000.
|
|
|
|
Сказали "Спасибо" omercury
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:24.
|
|