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

|
Добрый день всем. Есть проблемы с ATMEGA8515. Если кто сталкивался с подобным - поделитесь опытом. Проблема в следующем. При прогоне программы в симуляторе все прекрасно. Загружаю в контроллер и начинаю проверять. По началу все работает, но при некоторых условиях появляются сбои без видимой причины. Контроллер как бы сбрасывается, т.е. программа начинает выполнятся сначала, но после такого "сброса" ведет себя уже не адекватно. Такое впечатление, что нарушается стек, хотя в симуляторе этого не происходит. С этой проблемой сталкиваюсь уже второй раз (программы разные!) именно на ATMEGA8515. Заранее благодарен за любые советы.
|
|
|
|
|
 |
Ответов
|
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 4 2009, 16:21
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Проверте вначале свой код на наличие детских ошибок. Например в обработчике прерывания должны сохраняться/восстанавливаться все используемые регистры: Код ;==========ВНЕШНЕЕ ПРЕРЫВАНИЕ 1 - ЗАПРОС ОТ КЛАВИАТУРЫ=================================
EXT_INT1: PUSH R16 IN R16,$3F PUSH R16 PUSH R26 PUSH R20 PUSH R19 ....... POP R19 POP R20 POP R26 POP R16 OUT $3F,R16 POP R16
RETI На первый взгляд все в порядке сколько регистров сохраняется столько и восстанавливается, в теле обработчика используются только эти регистры. Но в обработчике есть также вызовы функций, например: Код FIX_PAR: RCALL CHARG_PAR
;=======СБРОС================ KEYB20: CPI R16,$D3 BRNE KEYB21 RCALL CLIR RCALL TYPE
L1: RJMP L2 И что мы видем? Код CLIR: PUSH R20 PUSH R26 ;----------------- LDS R20,$98 SBRS R20,6 RJMP CL_L2
CBR R20,0B11000001 STS $98,R20
CLR R20 LDI >>>>>R31,$01<<<<<< LDI >>>>>R30,$09<<<<<< C1_L01: ST Z+,R20;СБРОС KX, KY, KZ, MDX - MDZ CPI R30,$1E BRLO C1_L01 и Код CHARG_PAR: PUSH R17 CLR R17 STS $86,R17 STS $87,R17
STS $81,R19 CBR R19,$F0
CPI R19,3 BRLO CGP0 CPI R19,9 BRSH CGP0 >>>LDI R30,3<<< >>>MOV R31,R19<<< SUBI R31,3 >>MUL R31,R30<<< CLR R31 LDI R30,$65 ... Портим регистры R0, R1, R30, R31? Нехорошо так поступать. Анатолий.
Сообщение отредактировал aesok - Sep 4 2009, 16:28
|
|
|
|
Сообщений в этой теме
max_cnc Проблемы с Mega8515 Aug 29 2009, 13:53 prottoss Цитата(max_cnc @ Aug 29 2009, 21:53) Добр... Aug 29 2009, 13:56 max_cnc Кажется снимал, но проверю еще раз. Благодарю за с... Aug 29 2009, 14:04 Petka Цитата(max_cnc @ Aug 29 2009, 17:53) По н... Aug 29 2009, 14:15 adc ЦитатаСнимите бит совместимости с AT90S8515 - ... Aug 29 2009, 18:10 max_cnc Проблема однозначно с кодом, по тому как сбой при ... Aug 31 2009, 13:21 Палыч Цитата(max_cnc @ Aug 31 2009, 16:21) Или ... Aug 31 2009, 14:09 prottoss Цитата(max_cnc @ Aug 31 2009, 21:21) По п... Aug 31 2009, 15:39 niXto Цитата(max_cnc @ Aug 31 2009, 16:21) Коро... Sep 1 2009, 10:40  prottoss Цитата(niXto @ Sep 1 2009, 18:40) Цитата(... Sep 1 2009, 22:49 max_cnc В таблице векторов все неиспользуемые прерывания з... Aug 31 2009, 15:09 max_cnc Тогда проблема не в фюзе 8515С. Благодарю за беспо... Aug 31 2009, 15:50 777777 Цитата(max_cnc @ Sep 1 2009, 19:47) Выкла... Sep 2 2009, 04:10 =GM= Цитата(max_cnc @ Sep 1 2009, 14:47) ...ве... Sep 2 2009, 14:12 RA3WUM Уважаемый автор топика.
Не сочтите за грубость, н... Sep 2 2009, 18:41 adc Цитата(RA3WUM @ Sep 2 2009, 22:41) ЗЫ А к... Sep 2 2009, 19:10 max_cnc Ну так я же предупреждал на счет кода Сознаюсь, с... Sep 4 2009, 14:06 max_cnc Точно, упустил. (Хочеш спрятать положи на видное м... Sep 7 2009, 14:55
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|