Easyelectronics.ru

Электроника для всех
Текущее время: 23 янв 2021, 00:31

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Проблема с Вотчдогом на Atmega 328
СообщениеДобавлено: 21 авг 2019, 14:06 
Только пришел

Зарегистрирован: 08 мар 2019, 00:37
Сообщения: 15
Всем доброго времени суток.
Возникла проблема с Вотчдогом.
Программу тестировал на плате Ардуино Уно. При записи программы с использованием стандартного ардуиновского загрузчика все работает. Перезагрузка по Вотчдог происходит исправно.

При записи программы через программатор (при этом загрузчик стирается) программа начинает работать, доходить до Вотчдога, восемь секунд выжидает и подвисает. Перезагрузка не происходит. В чем проблема, как вылечить?


Последний раз редактировалось Aleksandr2019 21 авг 2019, 14:40, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Вотчдогом на Atmega 328
СообщениеДобавлено: 21 авг 2019, 14:20 
Только пришел

Зарегистрирован: 08 мар 2019, 00:37
Сообщения: 15
#include <avr/wdt.h>

int counter = 0;

void setup()
{
pinMode(13, OUTPUT);

digitalWrite(13, HIGH);
delay(4000);
digitalWrite(13, LOW);
delay(4000);

wdt_disable();

Serial.begin(9600);

Serial.println("Setup");

wdt_enable (WDTO_8S); // перезагрузка· 8 секунд.

Serial.println("Enable");
}

void loop()
{
if(!(millis()%1000))
{
counter ++;
Serial.println(counter);

digitalWrite(13, digitalRead(13)==1?0:1); delay(1);
}
// wdt_reset();
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Вотчдогом на Atmega 328
СообщениеДобавлено: 21 авг 2019, 15:38 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Если слезли с ардуино - идите читать даташиты. Или оставайтесь на ардуино. Других вариантов нет.
Читайте про фьюз бит WDTON и режимы работы вотчдога, а также регистр WDTCSR. Хинт: после wdt_enable() добавьте WDTCSR |= (1 << WDE); Но читать даташиты надо, да, без этого каждый раз придется на форуме вопросы задавать, на любой "чих".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Вотчдогом на Atmega 328
СообщениеДобавлено: 21 авг 2019, 16:01 
Старожил

Зарегистрирован: 10 фев 2016, 19:55
Сообщения: 351
NStorm писал(а):
Хинт: после wdt_enable() добавьте WDTCSR |= (1 << WDE);

Зачем?

А теперь к сути вопроса.
После перезагрузки по WD у Вас есть примерно 16 ms для настройки этого самого WD, иначе опять произойдёт сброс по WD. Ардуиновский бутлоадер успевал это сделать. А в Вашем скетче настройка WD начинается после двух пауз по 4 сек каждая. Вот МК постоянно и уходит в перезагруз.
Поставьте вызов wdt_disable() в самое начало функции setup(), может успеете сбросить WD.

И ещё, если стираете бутлоадер, то стоит проверить фьюз BOOTRST. Этот фьюз вместе с фьюзами BOOTSZ[0..1] определяют адрес, с какого будет стартовать контроллер после включения или перезагрузки. В Ардуино это адрес бутлоадера, который Вы стираете. В общем случае это не очень влияет на работоспособность, если основная прошивка не затрагивает секцию бутлоадера. Контроллер просто пробежит по пустым ячейкам памяти и, в конце концов, начнёт выполнение прошивки с нулевого адреса. Но это "пробежит" займёт некоторое время.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Вотчдогом на Atmega 328
СообщениеДобавлено: 21 авг 2019, 17:17 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
По ДШ написано что в дефолтном состоянии бит WDE вырублен, если вырублен WDTON фьюз. Но видимо фьюзы ТС не менял, да и он всё-таки включен, просто поздно отключает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Вотчдогом на Atmega 328
СообщениеДобавлено: 21 авг 2019, 18:45 
Только пришел

Зарегистрирован: 08 мар 2019, 00:37
Сообщения: 15
Состояние фьюзов после прошивки через программатор. Изначально фьюзы были сконфигурированы загрузчиком ардуино


Вложения:
Состояние фьюзов.pdf [192.62 Кб]
Скачиваний: 42
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Вотчдогом на Atmega 328
СообщениеДобавлено: 22 авг 2019, 01:32 
Только пришел

Зарегистрирован: 08 мар 2019, 00:37
Сообщения: 15
По совету Netzschlange решил попробовать уложиться в 16 мсек. Просто в начале программы забил комментариями 4 строчки, где мигаю светодиодом и устанавливаю задержки. И все заработало при заливке в чип через программатор ( без загрузчика ). Даже фьюзы не трогал. Они были автоматически установлены ранее прописанным загрузчиком.

Но вот что странно. Если программу в исходном коде залить в Ардуино УНО (с загрузчиком о УНО), то программа будет исправно работать. И никакие 2 задержки по 4 секунды в начеале программы не помешают правильно запуститься WD. С другими ардуинами, напримен Нано, это не пройдет. Контроллер подвиснет. НО, если НАНО прошить загрузчиком от УНО, то все заработает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Вотчдогом на Atmega 328
СообщениеДобавлено: 22 авг 2019, 10:04 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Ну так разные загрузчики небось. В одном ВД отключается, в другом нет. Исходники загрузчиков есть, если хотите выяснить - копайтесь в них )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Вотчдогом на Atmega 328
СообщениеДобавлено: 22 авг 2019, 13:21 
Старожил

Зарегистрирован: 10 фев 2016, 19:55
Сообщения: 351
Aleksandr2019 писал(а):
Но вот что странно. Если программу в исходном коде залить в Ардуино УНО (с загрузчиком о УНО), то программа будет исправно работать. И никакие 2 задержки по 4 секунды в начеале программы не помешают правильно запуститься WD. С другими ардуинами, напримен Нано, это не пройдет. Контроллер подвиснет. НО, если НАНО прошить загрузчиком от УНО, то все заработает.

Странного ни чего нет.
УНО и Нано используют один и тот же загрузчик -- optiboot. В Нано может быть другой загрузчик, если Вы эту Нану купили у непонятного продавца или сами уже над ней поколдовали (с помощью своего программатора).

И по умолчанию загрузчик это первый код, который начинает выполняться как в УНО, так и в Нано после включения или перезагрузки. И уже этот загрузчик конфигурирует WD и решает -- запускать Вашу прошивку или заняться своей работой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Вотчдогом на Atmega 328
СообщениеДобавлено: 22 авг 2019, 14:05 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Optiboot - это "кастомный" бутлодырь ведь. Вроде дуинка раньше свой, большего размера использовала. Что-то поменялось?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Вотчдогом на Atmega 328
СообщениеДобавлено: 22 авг 2019, 14:26 
Старожил

Зарегистрирован: 10 фев 2016, 19:55
Сообщения: 351
Optibut был включён в состав Arduino IDE осенью 2010 года. С тех пор все выпускаемые Ардуинки (УНО, Нано и т.п.) используют его. А кастомный ли он или нет, я не знаю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Вотчдогом на Atmega 328
СообщениеДобавлено: 22 авг 2019, 14:54 
Только пришел

Зарегистрирован: 08 мар 2019, 00:37
Сообщения: 15
Всех благодарю за помощь. Активация WD в самом начале кода программы (при работе без загрузчика) проблем не создает, все работает нормально


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Вотчдогом на Atmega 328
СообщениеДобавлено: 22 авг 2019, 15:05 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Netzschlange писал(а):
Optibut был включён в состав Arduino IDE осенью 2010 года. С тех пор все выпускаемые Ардуинки (УНО, Нано и т.п.) используют его. А кастомный ли он или нет, я не знаю.

Не все. Если глянуть в boards.txt, видно, что та же mega2560 использует старый бутлодырь. На меге1280, меге168 тоже старые пока. Где как короче. Но на уно и нано, да, оптибут нынче (не знал, да дуинами сильно не следил).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Вотчдогом на Atmega 328
СообщениеДобавлено: 22 авг 2019, 15:37 
Старожил

Зарегистрирован: 10 фев 2016, 19:55
Сообщения: 351
Вы правы. Я не правильно выразился. В скобочках надо было не "УНО, Нано и т.п.", а "на базе ATmega328"...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB