реклама на сайте
подробности

 
 
> Глюки watchdoga в меге 2560, а можетбыть и не watchdoga %|
superbizzon
сообщение Feb 20 2008, 08:04
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 32
Регистрация: 28-04-05
Пользователь №: 4 592



Здарасьте всем! Такая проблема - делаю проектик на меге 2560, шла без нареканий пока не понадобилось организовать програмный сброс - просто перестаю обнулять watchdog. Резет-то происходит но только мега остается в зарезеченом состоянии.... приэтом сброс от программатора не помогает, ещё интересно что в этом состоянии можно перепрошить - но после прошивки остаётся в такомже состоянии %| .... помогает только снятие питания и перезапуск...

Сразу попробовал тестовую прогу - по сути только запуск вотчдога и дрыганье ногой в бесконечном цикле - всё тоже самое, сбрасывается и висит...

Много раз проделывал такой фокус с другими контроллерами АВР ( не 2560) - ваще никаких проблем, а тут полдня потерял всё бестолку....

ПОМОЖИТЕ! Что делать, как бороться!?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kuzmi4
сообщение Feb 20 2008, 08:31
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 superbizzon - как писал недавно тут товарисч - "...к величайшему сожалению телепатов тут нет.."

Желательно было б увидеть код, или его ключевые части для начала...
Go to the top of the page
 
+Quote Post
superbizzon
сообщение Feb 20 2008, 08:43
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 32
Регистрация: 28-04-05
Пользователь №: 4 592



Цитата(Kuzmi4 @ Feb 20 2008, 11:31) *
2 superbizzon - как писал недавно тут товарисч - "...к величайшему сожалению телепатов тут нет.."

Желательно было б увидеть код, или его ключевые части для начала...


Мда... как раз ирония в том что кода три строчки -

int main()
{
_WDR();
WDTCSR=0x38;
WDTCSR=0x28;

DDRD|=0x01;

while(1)
{
PORTD^=0x01;
}
}

Даём питание, прошиваем... смотрим осцылом - дрыгает ногой PD1 две секунды.... потом перестаёт.... и всё, пока питалово не выключишь-включишь не начинает .... проходит две секунды опять виснет.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 20 2008, 14:30
Сообщение #4


Ambidexter
*****

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



Цитата(superbizzon @ Feb 20 2008, 08:43) *
Рисет-то происходит, но только мега остается в зарисеченом состоянии.... приэтом сброс от программатора не помогает, ещё интересно что в этом состоянии можно перепрошить - но после прошивки остаётся в таком же состоянии %| .... помогает только снятие питания и перезапуск...

Похоже, у вас таблица векторов прерываний (и адрес сброса в том числе) находится в области загрузчика, и по рисету (неважно ручному или от охранного таймера) вы направляете программу в область загрузчика. Чтобы избежать подобного, перед настройкой вотчдога поставьте две команды
MCUCR=0x01;
MCUCR=0x00; //вектора прерываний в начале флеша

Вся программа примерно такая
int main()
{
_WDR();
MCUCR=0x01;
MCUCR=0x00; //вектора прерываний в начале флеша
WDTCSR=0x38;
WDTCSR=0x28; //системный сброс и период на 4с
DDRD|=0x01;
while(1)
{
PORTD^=0x01;
}
}

Должно помочь.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
superbizzon
сообщение Feb 21 2008, 06:12
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 32
Регистрация: 28-04-05
Пользователь №: 4 592



Цитата(=GM= @ Feb 20 2008, 17:30) *
Похоже, у вас таблица векторов прерываний (и адрес сброса в том числе) находится в области загрузчика, и по рисету (неважно ручному или от охранного таймера) вы направляете программу в область загрузчика. Чтобы избежать подобного, перед настройкой вотчдога поставьте две команды
MCUCR=0x01;
MCUCR=0x00; //вектора прерываний в начале флеша

Вся программа примерно такая
int main()
{
_WDR();
MCUCR=0x01;
MCUCR=0x00; //вектора прерываний в начале флеша
WDTCSR=0x38;
WDTCSR=0x28; //системный сброс и период на 4с
DDRD|=0x01;
while(1)
{
PORTD^=0x01;
}
}

Должно помочь.


2VladimirYU - не спасло sad.gif ... ничего не изменилось


2 =GM=

Тоесть - в пррограмме после включения какимто образом выставляется начальный адрес при резете на зону загрузчика.... потом я подаю внешний резет, контроллер сбрасывается, но попадает опятьже в зону загрузчика......Видимо да... очень похоже что связано с чемто таким... только не совсем понятно как и когда прописывается что он должен перезагружаться в загрузчик...

пробывал вчера так -
int main()
{
_WDR();
WDTCSR=0x38;
WDTCSR=0x28; //системный сброс и период на 4с

MCUCR=0x00;

DDRD|=0x01;
while(1)
{
PORTD^=0x01;
}
}


Тоесть не -
MCUCR=0x01;
MCUCR=0x00;

а просто
MCUCR=0x00;

- не помогло.... Но обязательно вечером попробую Ваш вариант, спасибо! smile.gif
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 21 2008, 11:26
Сообщение #6


Ambidexter
*****

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



Цитата(superbizzon @ Feb 21 2008, 06:12) *
2 =GM=
Тоесть не -
MCUCR=0x01;
MCUCR=0x00;

а просто
MCUCR=0x00;

- не помогло.... Но обязательно вечером попробую Ваш вариант, спасибо! smile.gif

Просто MCUCR=0x00 не поможет, поскольку бит <1>, который отвечает за положение веторов прерывания, защищён от прямой записи. Поэтому сначала надо выставить бит <0> в единицу, а потом в течение 4 тактов сбросить бит <1>. Читайте дейташит, там всё подробно расписано.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
superbizzon
сообщение Feb 26 2008, 07:07
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 32
Регистрация: 28-04-05
Пользователь №: 4 592



Цитата(=GM= @ Feb 21 2008, 14:26) *
Просто MCUCR=0x00 не поможет, поскольку бит <1>, который отвечает за положение веторов прерывания, защищён от прямой записи. Поэтому сначала надо выставить бит <0> в единицу, а потом в течение 4 тактов сбросить бит <1>. Читайте дейташит, там всё подробно расписано.


ДА, всё правильно... попробывал так,но не спасает sad.gif
Перерыл datashIt вдоль и поперек... всё должно работать, но не работает..... Запустил в Astudiю ассемблерный файл - и вот что получается :
После загрузки - стоит на нулевом адресе, где сидит команда на прыжок на адрес начала программы (0х00083)... она прыгает.... там проходит seg_init и ещё какието initы.... далее переходит к моим командам...... жду - происходит сброс.... программа возвращается на нулевой адрес, откуда прыгает опятьже на (0х00083) и вязнет в initaх.... тоесть вектора сброса тут не причём абсолютно.... это пакостит IAR.... пытался отключить вставку этих самых initoв - пока не нашел как....


Добавлю -
вот что наковырял по теме - http://electronix.ru/forum/index.php?showt...mp;#entry358180
видимо должно помочь..

Сообщение отредактировал superbizzon - Feb 26 2008, 07:18
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 26 2008, 08:20
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(superbizzon @ Feb 26 2008, 09:07) *
и вязнет в initaх....
Вот это смущает. Поставьте точку останова на вектор сброса и посмотрите - происходит ли повторный сброс собаки. Если да - то
Цитата(superbizzon @ Feb 26 2008, 09:07) *
вот что наковырял по теме - http://electronix.ru/forum/index.php?showt...mp;#entry358180
как раз ваш случай, но непонятно - что же может ИАР в стартапе вашей программе из нескольких строчек делать столько времени? Ведь если нет глобальных переменных, то обнулять и копировать нечего, а больше там ничего и не делается.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- superbizzon   Глюки watchdoga в меге 2560   Feb 20 2008, 08:04
|- - VladimirYU   Цитата(superbizzon @ Feb 20 2008, 11:43) ...   Feb 20 2008, 09:03
||- - superbizzon   Цитата(VladimirYU @ Feb 20 2008, 12:03) П...   Feb 20 2008, 09:12
||- - VladimirYU   Цитата(superbizzon @ Feb 20 2008, 12:12) ...   Feb 20 2008, 09:50
||- - superbizzon   Цитата(VladimirYU @ Feb 20 2008, 12:50) Д...   Feb 20 2008, 10:18
||- - VladimirYU   Цитата(superbizzon @ Feb 20 2008, 13:18) ...   Feb 20 2008, 11:39
||- - superbizzon   Цитата(VladimirYU @ Feb 20 2008, 14:39) И...   Feb 20 2008, 11:50
|- - VladimirYU   Цитата(superbizzon @ Feb 21 2008, 09:12) ...   Feb 21 2008, 06:52
- - xelax   Как проблема то разрешилась? Получил точно такую ...   May 21 2008, 05:49
- - mdmitry   Я ничего подобного не наблюдал. Может от ревизии к...   May 21 2008, 12:06
- - xelax   Если кому интересно, то разобрал проблему. Всё ...   May 26 2008, 12:04
- - no_d@t@   Столкнулся с точно такой же проблемой в Меге2560 п...   May 27 2008, 08:03


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 02:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01456 секунд с 7
ELECTRONIX ©2004-2016