|
Проблемы с Mega8515, сбросы без причины |
|
|
|
Aug 29 2009, 13:53
|
Группа: Участник
Сообщений: 11
Регистрация: 29-08-09
Пользователь №: 52 087

|
Добрый день всем. Есть проблемы с ATMEGA8515. Если кто сталкивался с подобным - поделитесь опытом. Проблема в следующем. При прогоне программы в симуляторе все прекрасно. Загружаю в контроллер и начинаю проверять. По началу все работает, но при некоторых условиях появляются сбои без видимой причины. Контроллер как бы сбрасывается, т.е. программа начинает выполнятся сначала, но после такого "сброса" ведет себя уже не адекватно. Такое впечатление, что нарушается стек, хотя в симуляторе этого не происходит. С этой проблемой сталкиваюсь уже второй раз (программы разные!) именно на ATMEGA8515. Заранее благодарен за любые советы.
|
|
|
|
|
Aug 29 2009, 14:04
|
Группа: Участник
Сообщений: 11
Регистрация: 29-08-09
Пользователь №: 52 087

|
Кажется снимал, но проверю еще раз. Благодарю за совет.
|
|
|
|
|
Aug 29 2009, 18:10
|

Местный
  
Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836

|
Цитата Снимите бит совместимости с AT90S8515 - "C8515" Цитата Конденсаторы не забыли повесить на каждую пару Vcc-GND? И тут появляются гуру телепаты :-) Ув. автор темы, скорее всего у Вас процентов на 99,9 проблемы с кодом, а не с камнем. Но 0,1 процент оставлю на включенный аппаратно вачдок не сбрасываемый программно. Вам быстрее помогут, не гадая на кофейной гуще, если Вы предоставите на всеобщее обозрение свой код. И что значит-"как бы сбрасывается"? Вы уверены что программа переходит на нулевой вектор?
|
|
|
|
|
Aug 31 2009, 13:21
|
Группа: Участник
Сообщений: 11
Регистрация: 29-08-09
Пользователь №: 52 087

|
Проблема однозначно с кодом, по тому как сбой при одной и той же внешней команде. Смущает то, что в симуляторе все нормально. Или симулятор AVR Studio и реальный камень не тождественны? На счет перехода на нулевой вектор на 100% не уверен, но очень похоже, поскольку начальные значения, которые устанавливаю при старте устанавливаются и при сбое, дальше все как после включения питания но некоторые команды (устройства в целом а не контроллера) реботают уже не адекватно. Повторюсь, что такое же явление наблюдал на другом устройстве с Mega8515, но там оно проявлялось в случайные моменты (или закономерность была не очевидна). Навеска емкостей по питанию и замена камней проблему не снимала, как не снимает и в этом случае (керамика 0,15 на каждом корпусе плюс электролиты 470мкф на каждой плате). Код в ближайшее время выложу, просто при моем любительском стиле написания боюсь, что вежливо пошлют, учитывая, что написано на ASM и почти без коментариев, да и перевалило уже за 3 кб.
Ув. prottoss. По поводу бита совместим с S8515. При прошивке оставлял этот бит с заводской установкой, т.е. 1(незапрограмирован), что по описанию соответствует режиму MEGA. К сожалению устройство сейчас на обкатке в другом городе, а на голом камне поэкспериментировать не смогу. Вопрос: в предложении "Снимите бит совместимости с AT90S8515 - "C8515"" Вы имели в виду сбросить его в ноль, т.е. перейти в режим совместимости с S8515, или "снять" в смысле выключить этот режим? С AT90S8515 не работал, но если не ошибаюсь, она не поддерживает команд умножения, которые у меня используются.
Коротко об устройстве. Простейшее устройство ЧПУ для фрезерного станка. Основнвя часть на одной Mega8515, контроллер привода (следящая часть) на трех Mega48 (по одному на каждую ось станка), которые с Mega8515 общаются через SPI (связь односторонняя). Кроме этого к Mega8515 подцеплено 32к внешнего СОЗУ и на этой же шине сидят контроллер клавиатуры/индикации на i8279 (К580ВГ79) и два регистра К580ИР82 для управления автоматикой станка.
|
|
|
|
|
Aug 31 2009, 14:09
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(max_cnc @ Aug 31 2009, 16:21)  Или симулятор AVR Studio и реальный камень не тождественны? В симуляторе хватает своих "тараканов", кроме того Studio не симулирует внешние цепи... Цитата(max_cnc @ Aug 31 2009, 16:21)  На счет перехода на нулевой вектор на 100% не уверен, но очень похоже, поскольку начальные значения, которые устанавливаю при старте устанавливаются и при сбое, дальше все как после включения питания но некоторые команды (устройства в целом а не контроллера) реботают уже не адекватно. Возможно, что Вы разрешили (ошибочно, случайно) некое прерывание, а процедуры его обработки - нет (т.к. не предполагали, что это прерывание произайдёт). Некоторые трансляторы в случае непредвиденного прерывания "выводят" программу на адрес 0 (т.е. забивают "свободные" вектора прерывания кодом приводящим на команду jmp 0).
|
|
|
|
|
Aug 31 2009, 15:09
|
Группа: Участник
Сообщений: 11
Регистрация: 29-08-09
Пользователь №: 52 087

|
В таблице векторов все неиспользуемые прерывания закрыл командами RETI, но еще раз проверю, благодарю за напоминание. К стати, вот еще один прикол, который удалось устранить методом тыка. В цикле интерполяции (вычисление очередных координат перемещения) для задания направления использовал три младших бита R25, соответственно для координат X, Y, Z. Зашиваю и проверяю. Y и Z все нормально, а X отрабатыват только в одну сторону. Бадался около недели. Перепроверил все подпрограммы и прерывания, использующие - никаких конфликтов. В конце концов переставил флаг направления для X с нулевого на третий бит того же R25, и О чудо! Все заработало. Понимаю, что чудес не бывает, но... Причем потом по старым копиям сравнивал, это не ошибка, в старой копии было именно SBRS R25,0. И опять таки, в симуляторе все работало четко. Я не в коем случае не качу бочку на AVR, наоборот, из тех 8 бит МК о которых я имею представление - это лучшая на мой взгляд архитектура, но вот когда неделями паришся над подобными проблемами... Должно же быть им какое-то логическое объяснение? Кривизна рук и головы естественно не исключается :-).
|
|
|
|
|
Aug 31 2009, 15:39
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(max_cnc @ Aug 31 2009, 21:21)  По поводу бита совместим с S8515... Я имел ввиду установить его в "1", т.е. запрограммировать для того, чтобы не было режима совместимости с 90S8515. Цитата(max_cnc @ Aug 31 2009, 23:09)  Должно же быть им какое-то логическое объяснение? Кривизна рук и головы естественно не исключается :-). Дак Вы начните с малого. Разбейте программу на логические модули, сделайте работающий скелет и прочее, что делают программисты. Повесьте, наконец, на какой нибудь вывод светодиод и начните уже отлаживать программу пошагово. Еще лучше, конечно, выводить отладочную инфу через UART. Таким образом, на мой взгляд, за не большой период времени отлавливается большинство явных косяков - как раз Ваш случай.
--------------------
|
|
|
|
|
Aug 31 2009, 15:50
|
Группа: Участник
Сообщений: 11
Регистрация: 29-08-09
Пользователь №: 52 087

|
Тогда проблема не в фюзе 8515С. Благодарю за беспокойство.
В том то и дело, что по частям все работает, только я отлаживал не по модулям, а по подпрограммам, давая им необжодимые начальные установки и зашивая по отдельности. А вот при сборке в кучу начинаются приколы. И как их отлавливать? USART дело конечно, но боюсь в данной проге ему места уже не хватит. Хотя попробую помучать.
|
|
|
|
|
Sep 1 2009, 10:40
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 24-06-09
Из: Беларусь
Пользователь №: 50 607

|
Цитата(max_cnc @ Aug 31 2009, 16:21)  Коротко об устройстве. Простейшее устройство ЧПУ для фрезерного станка. Основнвя часть на одной Mega8515, контроллер привода (следящая часть) на трех Mega48 (по одному на каждую ось станка), которые с Mega8515 общаются через SPI (связь односторонняя). Кроме этого к Mega8515 подцеплено 32к внешнего СОЗУ и на этой же шине сидят контроллер клавиатуры/индикации на i8279 (К580ВГ79) и два регистра К580ИР82 для управления автоматикой станка. Предчувствую ОЧЕНЬ большие проблемы с отладкой устройства в реальных условиях. АВР очень чувствительны к разнообразным электромагнитным помехам, коих в станке выше крыши. Помню отлаживал ДУ передатчика - так уже на 20 Вт (УКВ-ФМ) 8 и 88 меги начинали буквально балдеть... РЕСЕТ напрямую на плюс, неиспользуемые ноги как выход или как вход и снаружи на землю, электролиты и керамика по питанию, питание аналоговой части естественно подключено - ничего не помогало... Разве только не догадался экранировать В общем проблема решилась с помощью ПИК - причем вообще без переделок - то есть маленькая платка с мегой заменилась платкой с ПИК и всё ОК
|
|
|
|
|
Sep 1 2009, 15:47
|
Группа: Участник
Сообщений: 11
Регистрация: 29-08-09
Пользователь №: 52 087

|
Проблема явно не в наводках, т.к. сбоит и на станке и на столе (станок в другом городе - при наладке кататься туда накладно, поэтому привды подач эмулирую так: микродвигатели + TDA2030 + датчики ВТМ-1, а автоматику - светодиодами). Выкладываю код. Правда сам не представляю как в нем можно разобраться без подробного описания алгоритма и схемы. Для конкретизации, вот одно из подпзреваемых мест где проявляются сбои: ;==============ПОДПРОГРАММА КОНТРОЛЛЕРА ЭЛЕКТРОАВТОМАТИКИ==================== RUN_M: PUSH R16 PUSH R17 LDS R16,$80 CPI R16,2 BREQ END_RM1 LDS R16,$90 CPI R16,3 BRNE RM4 (1) LDS R17,$8C SBRC R17,0 RJMP END_RM SBRC R17,2 RJMP END_RM SBRC R17,1 RJMP END_RM LDI R17,0B10000000 STS $0FF8,R17 LDI R16,7 STS $A1,R16 RCALL DELAY SBR R17,0B10000010 STS $0FF8,R17 STS $8C,R17 LDI R16,8 STS $A1,R16 RCALL DELAY END_RM1: RJMP END_RM RM4: CPI R16,4 BRNE RM5 LDS R17,$8C SBRC R17,0 RJMP END_RM SBRC R17,1 RJMP END_RM SBRC R17,2 RJMP END_RM LDI R17,0B10000000 STS $0FF8,R17 LDI R16,7 STS $A1,R16 RCALL DELAY SBR R17,0B10000100 STS $0FF8,R17 STS $8C,R17 LDI R16,8 STS $A1,R16 RCALL DELAY RJMP END_RM RM5: CPI R16,5 BRNE END_RM LDI R16,0B10000000 STS $0FF8,R16 LDI R16,8 STS $A1,R16 RCALL DELAY LDI R16,0B10001000 STS $0FF8,R16 LDI R16,30 STS $A1,R16 RCALL DELAY LDI R16,0B10000000 STS $0FF8,R16 STS $8C,R16 END_RM: POP R17 POP R16 RET Так вот: ветки алгоритма, которые начинаются со строки (1) и с метки RM5:отрабатываются нормально, а ветка по метке RM4:, т.е. когда в $90 записано 4 - высывает сброс с дальнейшими глюками. $0FF8 - это внешний порт на К580ИР82 для связи с релейной частью станка. Чего-то с первого раза не получилось. Вот код в CNC.txt.
Прикрепленные файлы
CNC.txt ( 69.1 килобайт )
Кол-во скачиваний: 78
|
|
|
|
|
Sep 1 2009, 22:49
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(niXto @ Sep 1 2009, 18:40)  Цитата(max_cnc) Коротко об устройстве. Простейшее устройство ЧПУ для фрезерного станка. Основнвя часть на одной Mega8515, контроллер привода (следящая часть) на трех Mega48 (по одному на каждую ось станка), которые с Mega8515 общаются через SPI (связь односторонняя). Кроме этого к Mega8515 подцеплено 32к внешнего СОЗУ и на этой же шине сидят контроллер клавиатуры/индикации на i8279 (К580ВГ79) и два регистра К580ИР82 для управления автоматикой станка. Случайно  увидел подробности разработки. Топик стартеру извинения за флуд, но прям детством своим повеяло, когда так и не исполнилась мечта о "РК-86"  Плюс развесистая схема на комплекте 8080, Плюс писание на Ассемблере... Хотя, ИМХО ВСЕ можно было запихать в один АРМ и писать на Си. Но это так к слову, еще раз извиняюсь. По теме. Возможно, у Вас аппаратные проблемы, а не программные. Потому как, судя по коду вершина стека у Вас находится как раз во внешнем ОЗУ. А на шине данных сидит, кроме ОЗУ, еще несколько устройств. Можно схему в студию? PS: Все пишу на Си, даже для контроллеров с 2К флэши.
--------------------
|
|
|
|
|
Sep 2 2009, 14:12
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(max_cnc @ Sep 1 2009, 14:47)  ...ветки алгоритма, которые начинаются со строки (1) и с метки RM5, отрабатываются нормально, а ветка по метке RM4, т.е. когда в $90 записано 4 - высывает сброс с дальнейшими глюками. $0FF8 - это внешний порт на К580ИР82 для связи с релейной частью станка Посмотрел код по диагонали, много играетесь с сохранением в стеке, посмотрите, не налезает ли стек на какие-либо переменные в определённых режимах? Ничего личного, как говорится, но стиль написания у вас конечно ещё тот. Я бы вам посоветовал поменять все адреса в программе на символьные переменные, сами же небось путаетесь где что находится. И, пожалуйста, замените это ужасные обозначения $90 на стандартные 0х90.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|