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

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

Сообщение joneblade »

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

Сообщение ARM7 »

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

Сообщение 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), что приведёт к неправильному счёту при одиночных поворотах в обратную сторону(а они обязательно будут, как минимум из-за дребезга контактов).
Родился
Сообщения: 12
Зарегистрирован: Сб июл 18, 2009 20:49:23

Сообщение joneblade »

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

Сообщение Murav »

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

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

Сообщение joneblade »

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

Сообщение Murav »

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

Сообщение joneblade »

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

Сообщение joneblade »

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

Сообщение joneblade »

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

Сообщение joneblade »

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

Сообщение joneblade »

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

Сообщение joneblade »

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

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