Страница 1 из 1

ATmega328 WDT 8 sec

Добавлено: 06 янв 2021, 19:22
maxxir
Как понял "собаку" аппаратную на Mega328P/UNO/Nano и тд. стандартный блок Сергея подымает не корректно.
Проверено на совместимость с optiboot Arduino UNO/Nano или если вы вообще не пользуетесь загрузчиком.
Используемая версия FLProg 7.3.0.

Прикладываю свои элементы.

WDT_M328P_8sec_(Code_-_Basic).ubi - собственно само включение WDT на 8 сек.
WDT_CHK_RESET_(Code_-_Basic).ubi - это только для проверки работы WDT, при включении в проект "завешивает"
систему через 4 сек. Итого перезагрузка системы идет через 4+8 = 12 сек.

termoregulyator_ universal_v04.flp - Как пример использования блоков прикладываю немного доработанный "напильником" проект Грачика универсального термостата на DS18B20/DHT11/DHT22.

Ну и до кучи:
M328p_EMC_IMMUNE_(Code_-_Basic).ubi - для увеличения помехоустойчивости все неиспользуемые выводы микроконтроллера
переводим на выход с логическим "0" (это редко кто делает, а зря :smile38: ).


PS (Для тех кто хочет понять как это работает в коде).

Оно не подвешивает систему при старте, т.к. перед стартом основной программной секции
запускается программный код который сбрасывает флаг WDRF в SFR MCUSR и выключает "собаку" до старта setup() Arduino кода.
(По идее этот флаг должен обрабатывать загрузчик бутлоадера, но это реализовано не во всех загрузчиках или его вообще нет)

Код: Выделить всё

uint8_t mcusr_mirror __attribute__ ((section (".noinit")));

void get_mcusr(void) __attribute__((naked)) __attribute__((section(".init3")));
void get_mcusr(void)
{
	mcusr_mirror = MCUSR;
	MCUSR = 0;
	wdt_disable();
}
Ну а далее в setup() происходит ре-инициализация "собаки"

Код: Выделить всё

void setup(){
	wdt_enable(WDTO_8S);
	wdt_reset();
..
Без первого фрагмента кода выше микропроцессор гарантированно уходит на перезагрузку через ~16 mseс
после старта программы (те. идёт вечная мнгновенная перезагрузка до момента повторного отключения/включения питания).

ATmega328 WDT 8 sec

Добавлено: 06 янв 2021, 21:18
Rovki
Зависания актуальны на есп . А туда можно использовать ваши блоки ?

ATmega328 WDT 8 sec

Добавлено: 06 янв 2021, 21:37
maxxir
Rovki писал(а): 06 янв 2021, 21:18 Зависания актуальны на есп . А туда можно использовать ваши блоки ?
Нет, подобного рода вставка актуальна только для AVR Mega.

Отправлено спустя 39 секунд:
ESP только внешний супервайзер.

ATmega328 WDT 8 sec

Добавлено: 06 янв 2021, 21:39
Rovki
maxxir писал(а): 06 янв 2021, 21:37
Rovki писал(а): 06 янв 2021, 21:18 Зависания актуальны на есп . А туда можно использовать ваши блоки ?
Нет, подобного рода вставка актуальна только для AVR Mega.

Отправлено спустя 39 секунд:
ESP только внешний супервайзер.
Понятно ,так и думал ,но уточнил ...Спасибо

ATmega328 WDT 8 sec

Добавлено: 08 янв 2021, 12:32
Di123
на нано не работает
точнее работает как зависатель
4 сек моргает и тишина потом

2021-01-08_161945.png
Отправлено спустя 10 минут 17 секунд:
ясно на 328РВ не работает
а на 168 можете реализовать нечто подобное ?

ATmega328 WDT 8 sec

Добавлено: 08 янв 2021, 16:59
maxxir
Di123 писал(а): 08 янв 2021, 12:32 на нано не работает
точнее работает как зависатель
4 сек моргает и тишина потом


2021-01-08_161945.png

Отправлено спустя 10 минут 17 секунд:
ясно на 328РВ не работает
а на 168 можете реализовать нечто подобное ?
Верно этот элемент чисто для проверки "зависания" через 4 сек + через 8 сек следует сброс микроконтроллера от WDT.
На 88/168 надо проверить - думаю все должно работать как и на 328.
328PB - не разу не держал в лапах, ничего про него не могу сказать. А что среда FLProg его поддерживает ?
Там где надо больше UART портов, RAM/ROM обычно использую ATmega 644p/1284p.

ATmega328 WDT 8 sec

Добавлено: 09 янв 2021, 05:03
Di123
на 168 тоже не работает
если один блок вытащить то так же она отключается через 4 сек и всё
если добавить ещё второй блок то так же отключается через 4 сек и потом дико начинает моргать 13 светодиод
теже симптомы как и у 328РВ были
2021-01-09_085235.png
флпрог подерживает потомучто она совместима с обычной 328

Отправлено спустя 7 минут 58 секунд:
на уно работает
только в таком случае от вашего блока нет никакого смысла ибо тут уже есть аналогичный пользовательский блок в котором при этом ещё можно и время выбрать на перезагрузку

ATmega328 WDT 8 sec

Добавлено: 09 янв 2021, 11:48
maxxir
Должно перезагружаться через 12 сек а не через 4.
Что то там у 168 не так идет. Какой загрузчик на 168?
Если там не optiboot вполне может быть.

Отправлено спустя 3 минуты 18 секунд:
У меня работает этот метод на 168/328/644/1284/2560/2561.
В Eclipse AVR plugin, C make, Arduino, да и FLProg.
Видимо у ВАС c загрузчиком нестыковка.. :smile37:

ATmega328 WDT 8 sec

Добавлено: 09 янв 2021, 12:06
Di123
168 это у меня промини там обычный загрузчик как и у всех

на уно работает потомучто туда я заливал оптибут , точнее я в промини 328 залил от уно из ИДЕ и на ней этот блок работает ну собственно он у меня и работал раньше на ней от другого пользователя на вачдог

под 168 оптибута вроде как несуществует

ATmega328 WDT 8 sec

Добавлено: 09 янв 2021, 12:24
maxxir
Di123 писал(а): 09 янв 2021, 12:06 168 это у меня промини там обычный загрузчик как и у всех

на уно работает потомучто туда я заливал оптибут , точнее я в промини 328 залил от уно из ИДЕ и на ней этот блок работает ну собственно он у меня и работал раньше на ней от другого пользователя на вачдог

под 168 оптибута вроде как несуществует
Тут покопайтесь вроде есть.

ATmega328 WDT 8 sec

Добавлено: 09 янв 2021, 13:43
Di123
а для чего там уарты с разной скоростью ?

Отправлено спустя 50 секунд:
если мне прошивать через ИДЕ исп

ATmega328 WDT 8 sec

Добавлено: 10 янв 2021, 01:29
maxxir
Di123 писал(а): 09 янв 2021, 13:43 а для чего там уарты с разной скоростью ?

Отправлено спустя 50 секунд:
если мне прошивать через ИДЕ исп
115200 надо выбирать скорее всего