Страница 1 из 1
Зависает Arduino самопроизвольно
Добавлено: 17 фев 2021, 09:21
belokuriha
День добрый. Собственно вопрос , как решить проблему зависания ардуино ? Знаю что тут много таких тем , но проблема самопроизвольная , коммутации по реле и мощных нагрузок пока нет , т.е это проект ворот , что я тут выкладывал .
Сначала думал что нехватка питания , т.к когда отлаживал проект GSM модуль был ближе к базовой станции и сигнал был -53dbm , сейчас же сигнал стал -89 -90 , но просадки по питанию я не увидел , попробую еще переделать отдельное питание на GSM модуль , но не думаю что проблема в этом.
Собственно , после включения может работать хоть день , а может и минут 15 отработать , и наглухо зависнуть .
Зависает Arduino самопроизвольно
Добавлено: 17 фев 2021, 10:05
Serg_Grn
Причин зависания может быть масса. Без полной информации - схемы, обвязки, питания и т.д. Вам вряд ли помогут.
От себя могу сказать, без сторожевого таймера надёжное устройство построить невозможно.
https://flprog.ru/uchebnyj-centr/articl ... ntrollera/
Зависает Arduino самопроизвольно
Добавлено: 17 фев 2021, 10:17
belokuriha
Проект прикрепил , питание с импульсного БП , но пробовал питать от акб .
В самой UNO есть сторожевой пес ?
Зависает Arduino самопроизвольно
Добавлено: 17 фев 2021, 10:35
Serg_Grn
belokuriha писал(а): 17 фев 2021, 10:17
В самой UNO есть сторожевой пес ?
Его нет нигде. Для чего я и дал ссылку.
Зависает Arduino самопроизвольно
Добавлено: 17 фев 2021, 10:50
belokuriha
Serg_Grn писал(а): 17 фев 2021, 10:35
belokuriha писал(а): 17 фев 2021, 10:17
В самой UNO есть сторожевой пес ?
Его нет нигде. Для чего я и дал ссылку.
https://habr.com/ru/post/189744/ а как же это ? получается просто другой загрузчик . Или же он не работает ?
Зависает Arduino самопроизвольно
Добавлено: 17 фев 2021, 11:57
RedSky
На уно работает. Другие 328е можно прошить как уно. На форуме есть блок с выбором времени. Если есть лисплей 1602 или подобный время ставить 1 сек или более.
Зависает Arduino самопроизвольно
Добавлено: 17 фев 2021, 11:59
Serg_Grn
belokuriha писал(а): 17 фев 2021, 10:50
а как же это ? получается просто другой загрузчик . Или же он не работает ?
Встроенный watchdog - это не watchdog
Я не сильно владею теорией, но из практики могу сказать, что это не работает. Или работает, но не так как надо.
Хочешь гарантированный контроль зависания - делай внешний таймер.
Кстати, на промышленных контроллерах и всяких электронных устройствах на мк, таймеры внешние.
Зависает Arduino самопроизвольно
Добавлено: 17 фев 2021, 12:21
KulibinOrsk
[ref]belokuriha[/ref], вы схему бы выложили и не было бы гадания.
У меня ни на одном из штук 30 контроллеров не было зависания за 10 лет ! Но вот в прошлом году сделал проект с дисплеем на I2C и ... был в шоке. Потом конечно прояснил в чем дело, да да именно в наводках по I2C.
Давайте схему, а уж потом все гадалки.
Кстати по датчику снега что то решили? Кто победил в лотерее по предложению датчика ?
Зависает Arduino самопроизвольно
Добавлено: 17 фев 2021, 12:25
belokuriha
KulibinOrsk писал(а): 17 фев 2021, 12:21
[ref]belokuriha[/ref], вы схему бы выложили и не было бы гадания.
У меня ни на одном из штук 30 контроллеров не было зависания за 10 лет ! Но вот в прошлом году сделал проект с дисплеем на I2C и ... был в шоке. Потом конечно прояснил в чем дело, да да именно в наводках по I2C.
Давайте схему, а уж потом все гадалки.
Кстати по датчику снега что то решили? Кто победил в лотерее по предложению датчика ?
Проект прикрепил , а что еще надо ?
По датчику пока времени нет проверить .. Обязательно отпишусь в тему .
Зависает Arduino самопроизвольно
Добавлено: 17 фев 2021, 12:52
AndrejK
Попробуйте так:
void setup()
{
asm ("wdr"); сброс таймера WD.
код
WDTCSR = (1 << WDCE) | (1 << WDE);
WDTCSR = (1 << WDE) | (0 << WDIE); // на 16 мс бездействия void loop. Если в цикле много delay, то меняем биты регистров, чем изменям время дежурства с 16 мс до 8000 мс.
void loop() {
asm ("wdr"); если за 16 мс таймер WD не сбросится, то перезагрузка МК.
код
}
Зависает Arduino самопроизвольно
Добавлено: 17 фев 2021, 15:50
belokuriha
AndrejK писал(а): 17 фев 2021, 12:52
Попробуйте так:
void setup()
{
asm ("wdr"); сброс таймера WD.
код
WDTCSR = (1 << WDCE) | (1 << WDE);
WDTCSR = (1 << WDE) | (0 << WDIE); // на 16 мс бездействия void loop. Если в цикле много delay, то меняем биты регистров, чем изменям время дежурства с 16 мс до 8000 мс.
void loop() {
asm ("wdr"); если за 16 мс таймер WD не сбросится, то перезагрузка МК.
код
}
Это я так понял надо добавить в тело моего кода ?
Зависает Arduino самопроизвольно
Добавлено: 17 фев 2021, 17:55
Serg_Grn
KulibinOrsk писал(а): 17 фев 2021, 12:21
У меня ни на одном из штук 30 контроллеров не было зависания за 10 лет !
Это при работе нон стоп 24/7 и без внешнего таймера?
Чудеса...

Зависает Arduino самопроизвольно
Добавлено: 17 фев 2021, 19:04
BormanYA
belokuriha писал(а): 17 фев 2021, 09:21
сейчас же сигнал стал -89 -90
Про наводки от GSM модуля не думал? Ну там коаксиалом отвести антенну в сторону от МК, один из вариантов. Чем ниже сигнал, тем больше мощность по ВЧ выдаёт модуль. В кратце из опыта, этого достаточно чтобы завесить МК.
Зависает Arduino самопроизвольно
Добавлено: 17 фев 2021, 22:20
AndrejK
Глянул ваш проект. Переделал сторожа на 8 секунд. Так, как delay в loope больше 8 сек., а таймер перезагрузки настроен на максимальные 8 сек, то каждые 8 сек. МК будет перезагружаться: LED загорится и через 0,5 сек. погаснет, через 8 сек опять загорится и т.д.
void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, 1);
delay (500);
digitalWrite(13, 0);
asm("wdr");
WDTCSR |= (1 << WDCE) | (1 << WDE);
WDTCSR |= (1<<WDP3)|(1<< WDP0); 8000 ms
}
void loop() {
asm("wdr");
delay (10000);
}
Зависает Arduino самопроизвольно
Добавлено: 18 фев 2021, 05:49
belokuriha
BormanYA писал(а): 17 фев 2021, 19:04
belokuriha писал(а): 17 фев 2021, 09:21
сейчас же сигнал стал -89 -90
Про наводки от GSM модуля не думал? Ну там коаксиалом отвести антенну в сторону от МК, один из вариантов. Чем ниже сигнал, тем больше мощность по ВЧ выдаёт модуль. В кратце из опыта, этого достаточно чтобы завесить МК.
Вот как вариант , такое я думал , т.к мощность увеличилось , идет излучение больше. Вынесу антенну на улицу , дальше от I2c шины.