ATmega и энкодер.Help!!!

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
joneblade
Родился
Сообщения: 12
Зарегистрирован: Сб июл 18, 2009 20:49:23

ATmega и энкодер.Help!!!

Сообщение joneblade »

Здравствуйте уважаемые !!! Я видимо не совсем кот... Скорее котопёс:) Ну невыходит у меня ничего...
В МК я новичок. Суть проблемы в том,что когда я эмулирую схему в протеусе,энкодер не работает должным образом (при повороте влево например состояние поменялось,а вправо нет и наоборот, через раз.).И еще, нужно чтоб на выходе были импульсы,пытаюсь сбросить состояние выводов через задержку после их установки...(тоже невыходит)
Суть устройства: Замена кнопок в 5.1 аудиосистеме на энкодер и 1 кнопку выбора. Нажали кнопку 1 раз-регулируем "мастер", еще раз -
регулируем тыл ,и т.д. Программа еще не дописана, но вот проблема с энкодером уже выплыла.
Контроллер Atmega8. Буду очень благодарен,если кто ткнёт пальцем в мои ошибки!
Вложения
praktik.asm
(3.03 КБ) 495 скачиваний
Аватара пользователя
ARM7
Встал на лапы
Сообщения: 85
Зарегистрирован: Пн мар 07, 2011 19:52:52

Re: ATmega и энкодер.Help!!!

Сообщение ARM7 »

Переходите на Си-там обработка энкодера 5-6 строчек.
Murav
Опытный кот
Сообщения: 877
Зарегистрирован: Чт фев 18, 2010 13:51:56

Re: ATmega и энкодер.Help!!!

Сообщение Murav »

Ну во-первых при входе в прерывание нужно сохранять все регистры, которые в нём используются(в том числе SREG), а при выходе восстанавливать. Пока это не мешает, но когда начнёшь писать код, в котором разрешены прерывания, в нём будут чудеса.

Сам код совершенно нечитабельный - не надо использовать copy-paste везде где непоподя. Например, если поменять местами состояния энкодера 2 и 3, то эту кучу ветвлений легко свести к арифметическим операциям. Две процедуры для поворотов в разные стороны тоже излишни - достаточно сделать одну процедуру и передавать ей в качестве аргумента направление вращения(1 - в одну сторону, -1 в другую)
joneblade писал(а):Суть проблемы в том,что когда я эмулирую схему в протеусе,энкодер не работает должным образом (при повороте влево например состояние поменялось,а вправо нет и наоборот, через раз.).

Вот и ошибка:
Cpi OldState,2
brne Cpi3
Cpi NewState,3
brne Cpi31
Rcall RightShift
Cpi31:
Cpi NewState,0
brne Cpi12
rcall LeftShift
Cpi32:
mov OldState,NewState

И кроме того для подсчёта поворотов в обе стороны используется один и тот же регистр R20(он же count), что приведёт к неправильному счёту при одиночных поворотах в обратную сторону(а они обязательно будут, как минимум из-за дребезга контактов).
joneblade
Родился
Сообщения: 12
Зарегистрирован: Сб июл 18, 2009 20:49:23

Re: ATmega и энкодер.Help!!!

Сообщение joneblade »

Честно говорю, за основу взял код обработки энкодера с какого то сайта и пытаюсь сам дописать. И по поводу читабельности, видимо я еще не привык, самому вроде понятно... Буду стараться писать правильно. Извините.В коде вроде как разобрался (оказывается ошибаюсь) ,написал для себя свой в виде если так, то делаем так и т.п. Вставляю внешнее прерывание для кнопки переключения выходного сигнала на разные ножки ( для управления ключами/кнопками аудиосистемы +-) ,так оно почему то оно не срабатывает (уже незнаю что думать) ,все переменные задействованные в этом прерывании не задействованы больше нигде.
И почему немогу снять состояние Portc через задержку после того как поставил(остаётся так же 1)? Спасибо откликнувшимся.
Ошибку понял,исправил.И счётчика теперь два. Эмулирую в протеусе: движу энкодер влево на 4 такта -на PC0 есть 1, движу обратно на PC1 -0,а на PC0 по прежнему 1. Движу опять влево PC0 - 1 , обратно- тут наконец то PC1 -1. И так через раз, неугадаешь. Эксперементировал с временем опроса и ничего.
Murav
Опытный кот
Сообщения: 877
Зарегистрирован: Чт фев 18, 2010 13:51:56

Re: ATmega и энкодер.Help!!!

Сообщение Murav »

Наверняка где-нибудь в коде есть ещё ошибки.

А вообще советую переходить на C.
joneblade писал(а):Вставляю внешнее прерывание для кнопки переключения выходного сигнала на разные ножки ( для управления ключами/кнопками аудиосистемы +-) ,так оно почему то оно не срабатывает (уже незнаю что думать) ,все переменные задействованные в этом прерывании не задействованы больше нигде.

Везде, где нужно было настроить прерывание оно настроено?
joneblade
Родился
Сообщения: 12
Зарегистрирован: Сб июл 18, 2009 20:49:23

Re: ATmega и энкодер.Help!!!

Сообщение joneblade »

Прерывания настроены. А по поводу Си я бы с радостью. Только его учить надо. Естественно начну учить, но сейчас мне надо эту прогу дописать и устройство запустить.
Murav
Опытный кот
Сообщения: 877
Зарегистрирован: Чт фев 18, 2010 13:51:56

Re: ATmega и энкодер.Help!!!

Сообщение Murav »

Значит телепатов тут нет.
joneblade писал(а):Только его учить надо. Естественно начну учить, но сейчас мне надо эту прогу дописать и устройство запустить.

С такими знаниями ни на C ни на ассемблере эту прогу дописать вряд ли получиться.
joneblade
Родился
Сообщения: 12
Зарегистрирован: Сб июл 18, 2009 20:49:23

Re: ATmega и энкодер.Help!!!

Сообщение joneblade »

Ну что товарищи? Здесь же много умных людей,я уверен. Или помочь нельзя начинающему? Пусть типа сам разбирается-учится...
Я уже измучался без колонок 5.1 фильмы смотреть,уже хотца доделать.
joneblade
Родился
Сообщения: 12
Зарегистрирован: Сб июл 18, 2009 20:49:23

Re: ATmega и энкодер.Help!!!

Сообщение joneblade »

Murav писал(а):Значит телепатов тут нет.
joneblade писал(а):Только его учить надо. Естественно начну учить, но сейчас мне надо эту прогу дописать и устройство запустить.

С такими знаниями ни на C ни на ассемблере эту прогу дописать вряд ли получиться.


А причём тут телепаты? Я вначале выложил код. Всё что нужно еще выложу.
Ошибку что мне сказали исправил, один фиг,та же песня.
joneblade
Родился
Сообщения: 12
Зарегистрирован: Сб июл 18, 2009 20:49:23

Re: ATmega и энкодер.Help!!!

Сообщение joneblade »

Вот что у меня получилось сейчас. Со скачками состояний выводов справился уменьшив значение счётчика. А вот с прерыванием по кнопке и сбросом состояния выводов так и немогу разобраться.
Вложения
praktik.asm
(3.46 КБ) 266 скачиваний
joneblade
Родился
Сообщения: 12
Зарегистрирован: Сб июл 18, 2009 20:49:23

Re: ATmega и энкодер.Help!!!

Сообщение joneblade »

Вот так теперь работает.
Осталось понять как сбрасывать состояние выводов .Чтоб при повороте энкодера на выводах не просто появлялся высокий лог.ур
,а импульсы.
Почему все молчат? Классный форум!
Вложения
praktik.asm
(3.41 КБ) 374 скачивания
joneblade
Родился
Сообщения: 12
Зарегистрирован: Сб июл 18, 2009 20:49:23

Re: ATmega и энкодер.Help!!!

Сообщение joneblade »

Спасибо всем за "помощь"! Теперь всё работает.
Я тупил. Хотя за изучение МК взялся 3 дня назад. Теперь бы и экран прикрутить. :)
Вложения
praktik.asm
(4.05 КБ) 366 скачиваний
joneblade
Родился
Сообщения: 12
Зарегистрирован: Сб июл 18, 2009 20:49:23

Re: ATmega и энкодер.Help!!!

Сообщение joneblade »

Доброе время суток народ! Может сейчас кто подскажет?
Оказалось,на аудиоситеме матричная клавиатура... Каким образом в данной ситуации нужно обойтись с кнопками?
Осциллографа у мну нет, чтобы посмотреть происходящий опрос матрицы. Пробовал поочерёдно давать на сканирующие строки 0, изо всех кнопок срабатывают только две(и не те что по схеме SB-UP SB-DW). схему аудиосистемы прилагаю.
Вложения
tde-430@20page2.jpg
(160.03 КБ) 475 скачиваний
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»