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

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

Добавлено: Вс мар 06, 2011 12:20:31
joneblade
Здравствуйте уважаемые !!! Я видимо не совсем кот... Скорее котопёс:) Ну невыходит у меня ничего...
В МК я новичок. Суть проблемы в том,что когда я эмулирую схему в протеусе,энкодер не работает должным образом (при повороте влево например состояние поменялось,а вправо нет и наоборот, через раз.).И еще, нужно чтоб на выходе были импульсы,пытаюсь сбросить состояние выводов через задержку после их установки...(тоже невыходит)
Суть устройства: Замена кнопок в 5.1 аудиосистеме на энкодер и 1 кнопку выбора. Нажали кнопку 1 раз-регулируем "мастер", еще раз -
регулируем тыл ,и т.д. Программа еще не дописана, но вот проблема с энкодером уже выплыла.
Контроллер Atmega8. Буду очень благодарен,если кто ткнёт пальцем в мои ошибки!

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

Добавлено: Пн мар 07, 2011 21:32:54
ARM7
Переходите на Си-там обработка энкодера 5-6 строчек.

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

Добавлено: Пн мар 07, 2011 22:13:30
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), что приведёт к неправильному счёту при одиночных поворотах в обратную сторону(а они обязательно будут, как минимум из-за дребезга контактов).

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

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

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

Добавлено: Вт мар 08, 2011 16:38:12
Murav
Наверняка где-нибудь в коде есть ещё ошибки.

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

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

Добавлено: Ср мар 09, 2011 14:05:09
joneblade
Прерывания настроены. А по поводу Си я бы с радостью. Только его учить надо. Естественно начну учить, но сейчас мне надо эту прогу дописать и устройство запустить.

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

Добавлено: Ср мар 09, 2011 18:22:38
Murav
Значит телепатов тут нет.
joneblade писал(а):Только его учить надо. Естественно начну учить, но сейчас мне надо эту прогу дописать и устройство запустить.
С такими знаниями ни на C ни на ассемблере эту прогу дописать вряд ли получиться.

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

Добавлено: Ср мар 09, 2011 18:24:32
joneblade
Ну что товарищи? Здесь же много умных людей,я уверен. Или помочь нельзя начинающему? Пусть типа сам разбирается-учится...
Я уже измучался без колонок 5.1 фильмы смотреть,уже хотца доделать.

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

Добавлено: Ср мар 09, 2011 18:26:21
joneblade
Murav писал(а):Значит телепатов тут нет.
joneblade писал(а):Только его учить надо. Естественно начну учить, но сейчас мне надо эту прогу дописать и устройство запустить.
С такими знаниями ни на C ни на ассемблере эту прогу дописать вряд ли получиться.
А причём тут телепаты? Я вначале выложил код. Всё что нужно еще выложу.
Ошибку что мне сказали исправил, один фиг,та же песня.

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

Добавлено: Ср мар 09, 2011 20:18:17
joneblade
Вот что у меня получилось сейчас. Со скачками состояний выводов справился уменьшив значение счётчика. А вот с прерыванием по кнопке и сбросом состояния выводов так и немогу разобраться.

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

Добавлено: Ср мар 09, 2011 22:13:03
joneblade
Вот так теперь работает.
Осталось понять как сбрасывать состояние выводов .Чтоб при повороте энкодера на выводах не просто появлялся высокий лог.ур
,а импульсы.
Почему все молчат? Классный форум!

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

Добавлено: Ср мар 09, 2011 22:21:30
joneblade
Спасибо всем за "помощь"! Теперь всё работает.
Я тупил. Хотя за изучение МК взялся 3 дня назад. Теперь бы и экран прикрутить. :)

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

Добавлено: Пн мар 14, 2011 09:24:35
joneblade
Доброе время суток народ! Может сейчас кто подскажет?
Оказалось,на аудиоситеме матричная клавиатура... Каким образом в данной ситуации нужно обойтись с кнопками?
Осциллографа у мну нет, чтобы посмотреть происходящий опрос матрицы. Пробовал поочерёдно давать на сканирующие строки 0, изо всех кнопок срабатывают только две(и не те что по схеме SB-UP SB-DW). схему аудиосистемы прилагаю.