Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Закрытая тема
Опции темы
Непрочитано 15.11.2008, 18:51   #11
ra9mig
Прописка
 
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
ra9mig на пути к лучшему
По умолчанию

Цитата:
Без включения Usart работает вроде нормально, но как только включаешь, программа сбивается, а в некоторых случаях всё просто останавливается.
По порядку:
- "time" и "err" находятся по одному и тому же адресу 0х0140 ($140) в SRAM;
- в прерываниях не сохраняете рабочие регистры и SREG (там где проверки - обязательно!), после выхода из обработчика дальнейшая реакция непредсказуемая;
- "ADC_Complete" и "wait" думается вообще можно убрать - контролируй сброс ADSC;
- и вообще зачем прерывания, у вас агоритм линейный (исключая UART).
Ну вот помелочи.
Обработчик по UART ("u") в алгоритме ни где не вызывается. Где должен быть вызов или переход?
Вот ADC без прерывания...

-- Прилагается рисунок: --
Реклама:
__________________
Если мы вам не подходим, вы нам вовсе не нужны!
Услышал и забыл, увидел и запомнил, сделал и понял!
Нейрон - штука тонкая!
Чудес на свете не бывает!
ra9mig вне форума  
Непрочитано 16.11.2008, 14:09   #12
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,956
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию

1) при входе в прерывание надо сохранить SREG и используемые регистры (TMP).
2) при выходе - восстанавливать сохраненное
3) изменение указателя стека в обработчике - грубая ощибка. Стек устанавливается один раз при инициализации, и трогать его не надо.
nml вне форума  
Непрочитано 16.11.2008, 16:02   #13
festoon
Частый гость
 
Регистрация: 15.08.2005
Сообщений: 38
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
festoon на пути к лучшему
По умолчанию

Да, вот по поводу ADC без прерывания идея неплохая, надо попробовать. Всё же без прерывания будет очень частая проверка на замыкание датчиков, а там стоят оптические, могут быть ложные частые срабатывания, а таймер ограничивает период проверок временем 0.3 сек. u это просто описание, там и без u включение усарта сбивает работу.
А что за TMP такой?
Почему указатель стека трогать нельзя? Ведь, если датчики не сработали выход из прерывания происходит по reti, а если сработали, то выполнение программы происходит "как бы" заново и стек загружается снова.
festoon вне форума  
Непрочитано 16.11.2008, 16:50   #14
ra9mig
Прописка
 
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
ra9mig на пути к лучшему
По умолчанию

Сообщение от festoon
Всё же без прерывания будет очень частая проверка на замыкание датчиков, а там стоят оптические, могут быть ложные частые срабатывания, а таймер ограничивает период проверок временем 0.3 сек.
Так у Вас ничего не делается пока датчики не проверились. Ну поставь задержку как в остальных случаях.
Сообщение от festoon
А что за TMP такой?
Это, я так понимаю, условное название любых регистров Tempx (x - n-ное кол-во), которые используются только в прерывании. Но можно и просто рабочие регистры сохранять в стеке, а по окончании обработчика востанавливать из стека (push и pop).
Сообщение от festoon
Почему указатель стека трогать нельзя?
Можно, но обычно так ни кто не делает. Он нужен для сохраненния адресса при вызове процедуры, сохранения данных и др.случаях. По этой причине, как правило, он выставляется один раз в начале программы и, как правило, на конец памяти (что бы было больше "места").
Но из всего есть исключения.
P.S. Так где же должен быть вызов обработки данных от UART.
Он жестко управляет приводами. Если "телега" делает "маневр объезда", то может и не "доехать".
__________________
Если мы вам не подходим, вы нам вовсе не нужны!
Услышал и забыл, увидел и запомнил, сделал и понял!
Нейрон - штука тонкая!
Чудес на свете не бывает!
ra9mig вне форума  
Непрочитано 16.11.2008, 17:18   #15
festoon
Частый гость
 
Регистрация: 15.08.2005
Сообщений: 38
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
festoon на пути к лучшему
По умолчанию

Обработка от уарт помещалась в основной цикл, тот, который с меткой f, но так как были сбои, дальше я не развивал обработку от уарт.
Дело в том, что датчики проверяются в любой момент с интервалом 0.3 с, то есть если даже в процедуре left идёт поворот руля и отслеживание положения резистора и происходит срабатывание датчика, то программа начинает выполнение сначала, то есть центрирует руль, отъезжает надаз и тд. А если делать проверку датчиков без таймера, то проверяться они будут очень часто и без задержки. Хотя в принципе, надо попробовать, может прокатит.
От уарт хочу сделать радиоуправление, чтоб можно было прервать автоматическое управление и рулить с пульта.
То есть в обработчике прерывания надо: в начале sreg-›, r16-›, а в конце перед reti: -›r16, -›sreg ?
festoon вне форума  
Непрочитано 16.11.2008, 18:06   #16
ra9mig
Прописка
 
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
ra9mig на пути к лучшему
По умолчанию

Сообщение от festoon
То есть в обработчике прерывания надо: в начале sreg-›, r16-›, а в конце перед reti: -›r16, -›sreg ?
Ну где-то так, если в обработчике используется только r16. Если еще и другие регистры, то их тоже нужно "пропустить" через стек. Важно сохранять последовательность занесения/возврата!
Можно сохранять и в рабочих регистрах (назвать их, к примеру: Tmp1, Tmp2 и т.д.) и выполнять
Код:
.def TmpSREG = r13
.def Tmp1 = r14
.def Tmp2 = r15
---------------
Any_Int:
in  TmpSREG, SREG
mov Tmp1, r16
mov Tmp2, r17
(или вообще movw Tmp1, r16)
.....
тут какие-то действия, сравнеия...
.....
out SREG, TmpSREG
mov r16, Tmp1
mov r17, Tmp2
reti
это только пример! (без стека )

С UART в целом ясно...

По поводу движения - "телега" должна ехать куда-то или куда "глаза глядят". Если только прямо, объезжая препятствия, то может сделать отдельный блок обезда (ну типа как у Вас), а по его выполнению продолжать движение в том-же направление. А то получается что она все время в сторону наровит свернуть...

P.S. Может вообще алгоритм пересмотреть, так сказать - "проработать"...
__________________
Если мы вам не подходим, вы нам вовсе не нужны!
Услышал и забыл, увидел и запомнил, сделал и понял!
Нейрон - штука тонкая!
Чудес на свете не бывает!
ra9mig вне форума  
Непрочитано 16.11.2008, 18:13   #17
ra9mig
Прописка
 
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
ra9mig на пути к лучшему
По умолчанию

Сообщение от festoon
Дело в том, что датчики проверяются в любой момент с интервалом 0.3 с, то есть если даже в процедуре left идёт поворот руля и отслеживание положения резистора и происходит срабатывание датчика, то программа начинает выполнение сначала, то есть центрирует руль, отъезжает надаз и тд.
Выходит что ее легко загнать в угол - она все время будет ехать назад. А надо что-бы вперед на "врага" - натаран. И ни какие прерывания не страшны!!!
__________________
Если мы вам не подходим, вы нам вовсе не нужны!
Услышал и забыл, увидел и запомнил, сделал и понял!
Нейрон - штука тонкая!
Чудес на свете не бывает!
ra9mig вне форума  
Непрочитано 16.11.2008, 18:24   #18
festoon
Частый гость
 
Регистрация: 15.08.2005
Сообщений: 38
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
festoon на пути к лучшему
По умолчанию

Да, такая вот пугливая тележка получается убегает от преследования, причём задним ходом (передней толстой бронёй к противнику ).
Спасибо вам за советы, буду пробовать, правда уже алгоритм пересматривал пару раз... Не хотят со мной контроллеры дружить.
Думаю, вопросы ещё возникнут- напишу.
festoon вне форума  
Непрочитано 16.11.2008, 20:07   #19
ra9mig
Прописка
 
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
ra9mig на пути к лучшему
По умолчанию

Кстати говоря, в ваше случае можно сделать вообще все наоборот, то-есть полностью на прерываниях. Подумайте над этим.
P.S. По поводу алгоритма - на roboforume масса всяких тележек.
__________________
Если мы вам не подходим, вы нам вовсе не нужны!
Услышал и забыл, увидел и запомнил, сделал и понял!
Нейрон - штука тонкая!
Чудес на свете не бывает!
ra9mig вне форума  
Непрочитано 17.11.2008, 00:39   #20
festoon
Частый гость
 
Регистрация: 15.08.2005
Сообщений: 38
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
festoon на пути к лучшему
По умолчанию

Вроде обработка АЦП по ADSC помогла, но вот какое дело: запрограммировал, проверил, вроде всё ок (усарт включён, но обработчика нет). Потом кое-что исправлял, но в итоге привёл к прежнему виду и как-то нестабильно работает, пауза иногда не выдерживается нужное время. Такое ощущение, что или в контроллере косяк или в алгоритм билдере. Возможна ли косячная компиляцияпрограммирование? Никто не замечал подобного?
festoon вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по Си компиляторам AVR dimonbest Proteus, KiCAD и другие ECAD 51 11.11.2009 22:59
обработчики прерываний микроконтроллеров AVR Gn0me Микроконтроллеры, АЦП, память и т.д 8 06.03.2009 00:40
обработка клавиатуры? maxNTF Микроконтроллеры, АЦП, память и т.д 18 26.10.2007 23:44
нид хелп. Обработка сигнала с датчика freele Автоматика и аппаратура связи 5 14.07.2007 16:56
Обработка прерываний. Tibo Микроконтроллеры, АЦП, память и т.д 12 13.07.2007 17:22


Часовой пояс GMT +4, время: 10:17.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot