Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
14.11.2008, 12:46
|
|
Частый гость
Регистрация: 15.08.2005
Сообщений: 38
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Обработка нескольких прерываний AVR (вопрос)
День добрый. Делаю самодвижущуюся тележку на atmega48 в algorithmbuilder. Используется АЦП и таймер и, соответственно, их прерывания обрабатываются, таймер постоянно, АЦП по необходимости. Всё вроде бы нормально работает, но при включении USART, просто при настройке приёмника, даже отсутствии обработчика прерывания, все действия тележки непонятные, работает как хочет. К примеру, программная пауза (~5 с) может прекратиться в любой момент, также пропускаются некоторые условия в самой программе (‹, ›, -=).
В чём может быть причина такого поведения, почему пропускаются условия?
|
|
|
|
14.11.2008, 13:20
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,956
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Шаманов и ясновидящих тут нету. Покажите программу. Да, при входе в прерывание сохранять - все что меняется - не забыли?
|
|
|
|
14.11.2008, 14:12
|
|
Частый гость
Регистрация: 15.08.2005
Сообщений: 38
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Вот программка, уверен, она не оптимальна, если есть предложения, буду рад выслушать.
Прикрепленный файл: 273448.rar
|
|
|
|
14.11.2008, 14:18
|
|
Частый гость
Регистрация: 15.08.2005
Сообщений: 38
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Не совсем понимаю, почему простое прерывание без обработчика, вызывает такую реакцию.
|
|
|
|
15.11.2008, 00:06
|
|
Прописка
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Пришли .asm, пожалуйста. AB дома нет (качать лень ).
P.S. Там в AB чикрыжик поставить то надо.
__________________
Если мы вам не подходим, вы нам вовсе не нужны!
Услышал и забыл, увидел и запомнил, сделал и понял!
Нейрон - штука тонкая!
Чудес на свете не бывает!
|
|
|
|
15.11.2008, 01:40
|
|
Частый гость
Регистрация: 15.08.2005
Сообщений: 38
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Что поставить надо в билдере?
Тут асм из самого же билдера.
Поделитесь любыми соображениями, может кто расскажет, как надо работать с несколькими прерываниями?
Прикрепленный файл: 3347331.rar
|
|
|
|
15.11.2008, 07:58
|
|
Прописка
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Цитата:
|
Что поставить надо в билдере?
|
Обьясняю:
[Меню/Опции/Опции проекта/Компилятор], [Generate ASM file], [Применить]. Далее [F9] и в каталоге с проектом будет сформирован "нормальный" .asm.
Цитата:
|
Поделитесь любыми соображениями, может кто расскажет, как надо работать с несколькими прерываниями?
|
Вы, уважаемый, выложили только основной файл проекта, а у Вас там еще парачка подгружается (откомпилировать не смог)! Но даже из того что есть - все ясно. Вам известна команда "RETI"? Как Вы из прерывания Таймера так "лихо" по метке "f" выходите? А кто будет из стека адресс востанавливать и флажок "i" в "SREG" поднимать...
Или я опять чето напутал?
__________________
Если мы вам не подходим, вы нам вовсе не нужны!
Услышал и забыл, увидел и запомнил, сделал и понял!
Нейрон - штука тонкая!
Чудес на свете не бывает!
|
|
|
|
15.11.2008, 12:00
|
|
Частый гость
Регистрация: 15.08.2005
Сообщений: 38
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Просто использую 5.32, там нет пункта генерации асм. Сейчас сделал 5.00, в прикреплённом файле.
Там в обработчике таймера, если выполняется условие на ножках пора C, в указатель стека загружается адрес последнего байта памяти (перед строчками stop и center), а I устанавливается в следующих за ними подпрограммами.
Только вот не понятно с генерацией асм, он его не полностью генерирует что-ли. Некоторые строчки не описаны...
Прикрепленный файл: 2033246.rar
|
|
|
|
15.11.2008, 12:51
|
|
Прописка
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Обработка нескольких прерываний AVR (вопрос)
Ну вот другое дело, можно спокойно разобраться что к чему (жалко конечно что схемы нету что бы понять что откуда берется и "окуда ноги расту", ну да ладно и так вроде все понятно в общем и целом).
Вопрос вот в чем:
Сообщение от festoon
|
Всё вроде бы нормально работает, но при включении USART, просто при настройке приёмника, даже отсутствии обработчика прерывания, все действия тележки непонятные, работает как хочет. К примеру, программная пауза (~5 с) может прекратиться в любой момент, также пропускаются некоторые условия в самой программе (‹, ›, -=).
В чём может быть причина такого поведения, почему пропускаются условия?
|
Я обратил свое внимание на то, как Вы распределили переменные в памяти (раздел SRAM). Там у Вас "time" и "err" находятся по одному и томуже адресу 0х0140 ($140). Это правильно???
По позже еще "покавыряюсь"...
__________________
Если мы вам не подходим, вы нам вовсе не нужны!
Услышал и забыл, увидел и запомнил, сделал и понял!
Нейрон - штука тонкая!
Чудес на свете не бывает!
|
|
|
|
15.11.2008, 13:31
|
|
Частый гость
Регистрация: 15.08.2005
Сообщений: 38
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Вот программка попроще, но смысл почти такой же.
Без включения Usart работает вроде нормально, но как только включаешь, программа сбивается, а в некоторых случаях всё просто останавливается.
А смысл устройства такой: есть двигатель на приводе колёс и есть на повороте руля, на руле стоит резистор, показания которого оцифровываются, чтобы узнать положение руля, спереди 2 датчика. Ну и при столкновении с препятствием, тележка должна его объехать. По отдельности алгоритмы управления через усарт и алг. движения тележки работают, но вместе не хотят, сбивается всё.
Прикрепленный файл: 4194511.rar
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:50.
|
|