Watchdog более 30 сек на ATMEGA328P-AU
- Войдите на сайт для отправки комментариев
Чт, 23/11/2017 - 18:21
Здравствуйте, имеется arduino uno на ATMEGA328P-AU, а также код где при нажатии включается нагрузка несколько раз по ~5 сек с перерывом в ~2 сек итого старндартный Watchdog с его максимальным значением 10 сек начинает ребутить железку, подскажиите пожалуйста как увеличить время Watchdogа?
int _PWDC = 0; int buttonPinE = 9; void releEv(){ for (int i=0; i<3; i++) { digitalWrite(12, 1); //on delay(5000); digitalWrite(12, 0); //off delay(2000); } } void setup() { TCCR2A = 0x00; TCCR2B = 0x07; TIMSK2=0x01; TCNT2=100; pinMode(buttonPinE, INPUT_PULLUP); } void loop(){ {_PWDC = 0; if( digitalRead(buttonPinE) == 1 ){ delay(10); releEv(); } } } ISR(TIMER2_OVF_vect) { TCNT2=100; if(_PWDC >= 1000){asm volatile ("jmp 0x0000");}else{_PWDC = _PWDC+1;}; // 10 сек }
подскажиите пожалуйста как увеличить время Watchdogа?
Никак. И в этом нет необходимости.
Вместо этого нужно переписать код так, чтобы в нем не было delay(5000)
Кстати - а что это у вас в коде за таймеры? Уж не самодельный ли ватчдог? Удаление гланд через... ?
Штатный ватчдог на Атмеге328 делается в три строки:
Тут правильнее спросить "Как избавиться от delay?" тогда и ватчдог трогать не придется.
ЗЫ - а что это у вас в коде за таймеры? Уж не самодельный ли ватчдог? Удаление гланд через... ?
Вы как всегда правы :) FlProg его лепит
Либо делать собаку двухступенчатым
Либо делать собаку двухступенчатым
Деда, посмотри исходник! - зачем тут двухступенчатый ватчдог? :))))
В этом коде - не нужен. Но вопрос то стоял...
Вместо этого нужно переписать код так, чтобы в нем не было delay(5000)
Подскажите пожалуйста чем его можно заменить?
Подскажите пожалуйста чем его можно заменить?
изучайте BlinkWithoutDelay
В этом коде - не нужен. Но вопрос то стоял...
ну, кстати, у ТС в коде как раз двухступенчатый ватчдог. И 10 секунд, там, к слову. далеко не максимум :) Только, сдается мне, что это не ватчдог вовсе, а фигня. Если МК зависнет - этот ватчдог зависнет вместе с ним.
ну, кстати, у ТС в коде как раз двухступенчатый ватчдог. И 10 секунд, там, к слову. далеко не максимум :) Только, сдается мне, что это не ватчдог вовсе, а фигня. Если МК зависнет - этот ватчдог зависнет вместе с ним.
На практике так и есть...2 раза за сутки стабильно)
На практике так и есть...2 раза за сутки стабильно)
в строке 44 в условии сравнения вместо 1000 можете поставить любое число вплоть до 32767 - задержка вашего "ватчдога" вырастет в соответсвующее число раз. Если 1000 соответсвует 10 сек(лень проверять, так ли это) - значит максимум вашей "собаки" около 327 сек, то есть 5.5 минут.
Но код все равно будет подвисать, потому что это не настоящий ватчдог. Правильнее - переписать код, чтобы loop() укладывался хотя бы в пару секунд, чтобы использовать штатную "собаку". У штатного ватчдога максимум - 8сек.
Правильнее - переписать код, чтобы loop() укладывался хотя бы в пару секунд,
Фрикассе себе, это что же в него без делеев напихать надо?))))
А за неделю сможешь? Не, один не смогу, тут помошники нужны.(с))))))
Как измерить емкость Ардуины в
попугаяхв delay-ях? Надо напихать ровно столько delay-ев , и это будет емкость Ардуины.изучайте BlinkWithoutDelay
Подскажите пожалуйста, я правильно все сделал/переделал?
void
pauze(
long
intrval)
37
{
38
unsigned
long
pre = millis();
39
wail(milis() - pre < intrval);
40
}
ничем не лучше delay(). тока еще и while непраильна написан.
Подскажите пожалуйста, я правильно все сделал/переделал?
Неправильно.
DetSimen уже написал - этот код полностью аналогичен delay - точно так же зависает на одном месте на 5 сек.
Вам нужно сделать отдельную процедуру для digitalWrite(12, ON) и отдельную для OFF. Вошли в первую процедуру, включили нагрузку - и передали управление loop-у на 5 секунд. Секунды прошли - вошли в процедуру для OFF и выключили нагрузку. И все это столько раз, сколько у вас было в цикле for
Правильнее - переписать код, чтобы loop() укладывался хотя бы в пару секунд,
Фрикассе себе, это что же в него без делеев напихать надо?))))
Зря вы так на ТС, задачу он решил.))))
Ну а почему вот так нельзя?
тоесть в функцию которая выполняется при нажатии и длительность общая 22 сек вставить обратиться к loop() итого общее время будет не 22 сек, а 7 сек?
Штатный ватчдог на Атмеге328 делается в три строки:
Оффтоп конечно, но спрошу.
Тут мы его инициализируем -
#include <avr/wdt.h>
А тут сбрасываем его в каждом цикле -
Я правильно понял? Где-бы поподробнее про него почитать. Пока вроде не нужен, но вдруг пригодится)))
Истинно, для малых интервалов на время отладки wdt.disable(). А то залезет в вечный перезагруз и будешь резетом скетч отлавливать.
Истинно, для малых интервалов на время отладки wdt.disable(). А то залезет в вечный перезагруз и будешь резетом скетч отлавливать.
чтобы не отлавливать, в начале setup кроме wdt.disable() вставить delay секунд на 10
в функцию которая выполняется при нажатии и длительность общая 22 сек вставить обратиться к loop() итого общее время будет не 22 сек, а 7 сек?
тогда уж вставьте там не loop(). а wdt_reset();, хотя это все равно костыль.
Повторяю - любую программу с любыми задержками можно переписать так, чтобы loop() оборачивался как минимум за 1-2 секунды. Причем посмотрите - когда я пишу "1-2 секунды" - и то надо мной все смеются, потому что вообще-то нормальные программы делают полный цикл loop за доли миллисекунд.
Здравствуйте, имеется arduino uno на ATMEGA328P-AU, а также код где при нажатии включается нагрузка несколько раз по ~5 сек с перерывом в ~2 сек
Может ТАК
Может ТАК
поздравляю с вступлением в клуб "тех, кого крик развел на код" :)
Может ТАК
поздравляю с вступлением в клуб "тех, кого крик развел на код" :)
СПАСИБО!!! Я старался.
Та нормально. Вы же не оскудели от этого, что написали код. Считайте это тренировкой "программистких мускул". А вот если эти "мускулы" ослабнут, тяжело будет браться за серьезный проект.
Я конечно понимаю, что делай на 5 секунд это моветон, но т.к. собака на 8 секунд, то что мешает после таких делаев просто сбрасывать собаку?
Нет вы не понимаете. Вот вам , к примеру, хватает на жизнь 500 рублей , что бы жить на подсосе. И вот вы начали получать 2000 рублей зарплаты. Но 1500 рублей у вас принудительно забирают. Что для вас изменилось. Так любые delay это вы изымаете из процессора в пустую. Watchdog это экономия энергии. А если вы энергию не экономите, то Watchdog принимать бесмысленно.
Нет вы не понимаете. Вот вам , к примеру, хватает на жизнь 500 рублей , что бы жить на подсосе. И вот вы начали получать 2000 рублей зарплаты. Но 1500 рублей у вас принудительно забирают. Что для вас изменилось. Так любые delay это вы изымаете из процессора в пустую. Watchdog это экономия энергии. А если вы энергию не экономите, то Watchdog принимать бесмысленно.
тс, я так понимаю, не электричество экономить хотел, а перегрузку при зависаниях
тс, я так понимаю, не электричество экономить хотел, а перегрузку при зависаниях
так, это лечится не перезагрузкой, а физической ликвидацией пейсателя кода, который зависает.
Код зависает не потому что в коде Watchdog отсутсвует, потому что это зависание запрограммировано кривым программированием. Так что мой вам совет.Учитесь правильно писать программы и отлаживать. Но перед тем как писать, надо сначало проектировать программу. И не хватайтесь за Watchdog. Это не то.
Программирование в среде ардуино кривое по определению.
KVadik, чем же кривое программирование на arduino? Чем оно отличается например от программирования в глобальном смысле от x86 процессоров в защищённом режиме?
Программирование в среде ардуино кривое по определению.
ты как-то оперделись - тебе не нравится способ программирования или ты пишешь код, который загоняется в зависания.
лично мне интересны примеры, что сцуко может зависнуть в среде ардуино?
гм, это как сравнивать жидкое с зеленым
гм, это как сравнивать жидкое с зеленым
ты примеры зависающего по причине кривости среды будешь выкладывать или будешь в своём гавне ковыряться?
ПС: Посмотрите это http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-chainikov
И это так легкий пробег. Там есть Менеджер задач. Так развитие этого направления вообще бомба.
Здесь вы не правы. На ардуине можно вполне нормально программировать , но новичкам это не под силу.
ПС: Посмотрите это http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-chainikov
И это так легкий пробег. Там есть Менеджер задач. Так развитие этого направления вообще бомба.
Возможно я не так высказался. Ардуино любительская среда, так сказать, микроконтроллеры для чайников. Можно писать "красиво" и "правильно" в любой среде. Но ардуино изначально детская игрушка, не расчитанная на серьезные задачи. Она бесплатна, поддерживает различное оборудование, все желающие пишут для неё свои библиотеки и т.д. Все это дает возможность быстро решать многие задачи, даже обладая весьма скромными и смутными познаниями в микроконтроллерах и программировании. Но при этом программа задачу решает, стоит дешево, но может быть достаточно "кривой" и иногда зависать. Я уже не говорю про дешевое китайское железо, которое обычно используют любители, из-за которого тоже возможны подвисания. Собака же вполне спасает от таких зависаний.
Возможно я не так высказался. Ардуино любительская среда, так сказать, микроконтроллеры для чайников. Можно писать "красиво" и "правильно" в любой среде. Но ардуино изначально детская игрушка, не расчитанная на серьезные задачи. Она бесплатна, поддерживает различное оборудование, все желающие пишут для неё свои библиотеки и т.д. Все это дает возможность быстро решать многие задачи, даже обладая весьма скромными и смутными познаниями в микроконтроллерах и программировании. Но при этом программа задачу решает, стоит дешево, но может быть достаточно "кривой" и иногда зависать. Я уже не говорю про дешевое китайское железо, которое обычно используют любители, из-за которого тоже возможны подвисания. Собака же вполне спасает от таких зависаний.
набор общих слов, из которых совершенно очевидно одно - ты не в теме, бро :)- верятно, ни под "детскую" ардуино, ни под другие МК ("взрослые"? :)никогда ничего не писал
Программирование в среде ардуино кривое по определению.
Криворукость программирования зависит от исполнителя, а не от среды и микроконтроллера.
Криворукость программирования зависит от исполнителя, а не от среды и микроконтроллера.
Дык, в среде ардуино, из-за ее назначения, число криворуких исполнителей преобладает. Да и микроконтроллеры тоже имеют разные глюки, особенно новые и особенно в SDK, над которой ардуино просто надстройка. Причем еще кривизны добавлятся когда среда ардуино программу в код контроллера, т.к. подавляющее большенство пользователей аруино не вникают в тонкости работы конкретной модели контроллера и работы на нем тех или иных библиотек.
Криворукость программирования зависит от исполнителя, а не от среды и микроконтроллера.
Дык, в среде ардуино, из-за ее назначения, число криворуких исполнителей преобладает. Да и микроконтроллеры тоже имеют разные глюки, особенно новые и особенно в SDK, над которой ардуино просто надстройка. Причем еще кривизны добавлятся когда среда ардуино программу в код контроллера, т.к. подавляющее большенство пользователей аруино не вникают в тонкости работы конкретной модели контроллера и работы на нем тех или иных библиотек.
Какое интересное мнение.... Посмотрел бы я на криворукость под какой нибудь банальный Z80, вы сами то верите в то что пишите? Если уж под ардуино не в состоянии писать код - это полный пипец :(
P. S. Кстати о loop цикле: в текущим проекте добился 300 мс - все равно плохо - при низком уровне внешнего освещения мерцание дисплея :(
почему вы пытаетесь сравнивать между собой конкретные процессоры/архитектуры (z80, x86) со средой/оболочкой ардуино?
И еще раз Ардуино это "средство для построения простых систем автоматики и робототехники, для непрофессиональных пользователей".
Программирование в среде ардуино кривое по определению.
Криворукость программирования зависит от исполнителя, а не от среды и микроконтроллера.
в среде ардуино, из-за ее назначения, число криворуких исполнителей преобладает
И из-за этого программирование тоже кривое? Кстати, а в чём назначение среды Ардуино?
микроконтроллеры тоже имеют разные глюки, особенно новые и особенно в SDK
В глюках микроконтроллеров виноват набор софта (Software Development Kit)?
подавляющее большенство пользователей аруино не вникают в тонкости работы конкретной модели контроллера и работы на нем тех или иных библиотек
И поэтому "программирование в среде ардуино кривое по определению"?
Что-то диалог идет по кругу.
И из-за этого программирование тоже кривое? Кстати, а в чём назначение среды Ардуино?
Выше написал: "средство для построения простых систем автоматики и робототехники, для непрофессиональных пользователей"
Меня поправили, что не простых, а "примитивных" и изначально "для новичков" . Но, имхо, это не суть важно. В результате имеем то, что имеем.
Мухи отдельно, котлеты отдельно. Есть глюки в SDK, над которыми среда Ардуино надстройка. Но бывают и в самих микроконтроллерах (как изначально допущенные ошибки, которые исправляются в более поздних версиях, так и брак, который китайцы могут пустить на дешевые ардуинки.
Да. Обычно "непрофессиональные пользователи" и "новички" пишут программы криво. А профессионалы используют другие среды. Но это если говорить о профессионалах в сфере программирования микроконтроллеров. Есть один нюанс, ардуино сейчас часто используют профессиональные программисты, которые плохо знакомы со схемотехникой. Они вполне могут писать "красивые" и "правильные" программы, но часто ошибаюся в схемотехнике.
з.ы. Я уже забыл чего мы тут обсуждаем. Вроде у тс был конкретный вопрос, а мы тут совсем зафлудили тему. Засим откланиваюсь.
з.ы. Я уже забыл чего мы тут обсуждаем. Вроде у тс был конкретный вопрос, а мы тут совсем зафлудили тему. Засим откланиваюсь.
Не, всё в пределах темы, общайтесь :)
Если все в пределах темы - в итоге WDT в 7 секунд уместили?
Точнее в 30 секунд
А профессионалы используют другие среды.
Зачем другие среды, если и в этой работает: http://arduino.ru/forum/proekty/transistor-tester-arduino