КАК ЗА RESETить АРДУИНО ПОСЛЕ 15 минут РАБОТЫ.

IVAN222
Offline
Зарегистрирован: 19.04.2017

Нужно чтобы через 15 мин. происходил сброс. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, проверяйте в lopp (millis()  >= 900000ul) и как только стало истиной, передайте управление на нулевой адрес.

Buldakov
Offline
Зарегистрирован: 17.01.2016

На нулевой адрес это правильно. Но многие не знают как на Arduino Это сделать?

Клапауций 112
Offline
Зарегистрирован: 01.03.2017

Buldakov пишет:

На нулевой адрес это правильно. Но многие не знают как на Arduino Это сделать?

те, кто не знает - цепляют пин на RESET 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015
void(* resetFunc) (void) = 0;  //объявляем функцию reset с адресом 0
...
resetFunc();  //вызываем reset 

 

Buldakov
Offline
Зарегистрирован: 17.01.2016

Этот ответ понятен - цеплять пин на сброс. Меня интересует как сделать программным способом переход на 0 адрес. Типа для 580вм80а "JMP 00H"

Спасибо. Пока писал - уже ответили.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Buldakov пишет:

Типа для 580вм80а "JMP 00H"

В AVR ресет всё по тому же адресу :)

asm volatile ("jmp 0x0");

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Buldakov пишет:

Этот ответ понятен - цеплять пин на сброс. Меня интересует как сделать программным способом переход на 0 адрес. Типа для 580вм80а "JMP 00H"

Спасибо. Пока писал - уже ответили.

наверное так и писать:

jmp (00h);

 

Logik
Offline
Зарегистрирован: 05.08.2014

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Logik пишет:

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

на спутниках три типа ресета приходится делать, интересно на AVR это как реализуется?

Buldakov
Offline
Зарегистрирован: 17.01.2016

Ну как еще один вариант использовать вызов сторожевого таймера.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Buldakov пишет:

На нулевой адрес это правильно. Но многие не знают как на Arduino Это сделать?

Это уже столько раз обсуждалось, что Вы наверное, имели в виду "многие не умеют набрать в окне поиска сдлва "Программный ресет""

Logik
Offline
Зарегистрирован: 05.08.2014

Buldakov пишет:

Ну как еще один вариант использовать вызов сторожевого таймера.

Дак стандартный загрузчик его не сбрасывает ведь, и будет висеть, моргать и ребутится. Вощем как ни крутись, а нада писать правильный код чтоб стабильно работало. И схемотехнику грамотную. А ребут делать один раз и навсегда ;)

ПС. Я из некоторых нано уже кнопки ребута повыпаивал. А нафига они если не используются?

Клапауций 112
Offline
Зарегистрирован: 01.03.2017

Logik пишет:

ПС. Я из некоторых нано уже кнопки ребута повыпаивал. А нафига они если не используются?

и, как ты перезапускаешь свою дуино? блок питания выдёргиваешь?

Гриша
Offline
Зарегистрирован: 27.04.2014

IVAN222 пишет:

Нужно чтобы через 15 мин. происходил сброс. 

чем вызвана такая стабильность сброса??? Вероятностью повисания в течении этого времени? так до программного ресета можно и не дожить.

Нужно что-то на подобии супервайзера, к примеру 555й - если не получен импульс сброса в течении Х сек с момента последнего сброса, на выходе логический сигнал сброса (одновибратор). На вход ФВЧ первого порядка от повисания ноги МК, как управление ресетом одновибратора.

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

 

Logik
Offline
Зарегистрирован: 05.08.2014

Клапауций 112 пишет:

Logik пишет:

ПС. Я из некоторых нано уже кнопки ребута повыпаивал. А нафига они если не используются?

и, как ты перезапускаешь свою дуино? блок питания выдёргиваешь?

А зачем перезапускать? Работает себе, чего его ребутить понапрасну. Ну питание выключится когда надо выключить устройство, включитс когда надо.. Как мы дома телевизор и холодильник ребутим. Вот дето и дуню так. А при прошивке нана сама ребутится. Вот кнопка и не нужна вобще.

IVAN222
Offline
Зарегистрирован: 19.04.2017

Сторожевой таймер ставил всеравно через какоето время завис.

 

void setup() {

  // Вставьте ваш код по инициализации периферии, переменных и т.д.
  wdt_enable(WDTO_8S); // Активируем сторожевой таймер с интервалом 8 секунд
}

void loop() {
  // Вставьте основной код вашей программы в это место
  wdt_reset(); // производим периодический сброс таймера 

}

Может на 555 спаять таймер сброса , ипусть ресетит через время N минут. Но это крайней вариант. Хочется чтото внутри дуни , дописать что то в скечи . Кто знает как это сделать , дописать. Помогите.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Logik пишет:

А зачем перезапускать? 

Ну, а если хочется сделать блинк без loop и без циклов?

IVAN222
Offline
Зарегистрирован: 19.04.2017

Я создал предыдущую тему: (сервоприводы работают 20-25 минут после зависают) но там что то нет обсуждения, прилось создать другую.

ВОТ ЭТА ТЕМА:

Суть программы , с копьютера по COM порту идут данные координаты Х и У , ардуино их получает и переводит в градусы поворота сервоприводов от 0 - 54 , все роботает нормально , но проходит 20-25 минут сервы могут завернуться кудато в сторону, а могут и нет , и все, происходит зависание сервоприводов, хотя ТХ мигает то есть данные с компа идут, нажимаю RESET на ардуинке опять начинает работать нормально примерно 20-25 мин. В ЧЕМ МОЖЕТ БЫТЬ ДЕЛО?                                                                                                

 Вот скеч.




#include <Servo.h> 


Servo servo1;


Servo servo2;





int x=27;


int y=20;


int ledPin = 13; 


String datas;


String readString;





void setup() {


pinMode(ledPin, OUTPUT);


Serial.begin(115200);


servo1.attach(10); 


servo2.attach(11); 


}


void loop() {


if(Serial.available() > 0) {


//datas = Serial.read();


char c = Serial.read();


readString += c; 


if(readString.indexOf("coordinate") >=0){


x=Serial.read();


delay(3);


y=Serial.read();


}


}


servo1.write(x); 


servo2.write(y); 

}

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

IVAN222 пишет:

Я создал предыдущую тему: 

И что?

IVAN222 пишет:

там что то нет обсуждения

Как нет? Я Вам там сказал как нужно выкладывать скетч и ссылку дал. Вы на это наплевали. И чего Вы ждёте? Пока скетч не будет выложен как положено, его на 90% и читать-то никто не будет.

Вы плюёте на правила форума (в которые Вас прямо носом ткнули), а форум плюёт на Вас - третий закон Ньютона никто не отменял.

IVAN222 пишет:

прилось создать другую.

И опять код выложен неправильно. Нахрена гадить-то? Соблюдайте правила и люди к Вам потянутся.

 

IVAN222
Offline
Зарегистрирован: 19.04.2017
#include <Servo.h> 
Servo servo1;
Servo servo2;

int x=27;
int y=20;
int ledPin = 13; 
String datas;
String readString;

void setup() {
     pinMode(ledPin, OUTPUT);
  Serial.begin(115200);
    servo1.attach(10); 
    servo2.attach(11); 
}
void loop() {
   if(Serial.available() > 0) {
       //datas = Serial.read();
       char c = Serial.read();
       readString += c; 
        if(readString.indexOf("coordinate") >=0){
          x=Serial.read();
          delay(3);
          y=Serial.read();
         }
       }
      servo1.write(x);     
      servo2.write(y);  
}

 

IVAN222
Offline
Зарегистрирован: 19.04.2017

ЕвгенийП пишет:

IVAN222 пишет:

Я создал предыдущую тему: 

И что?

IVAN222 пишет:

там что то нет обсуждения

Как нет? Я Вам там сказал как нужно выкладывать скетч и ссылку дал. Вы на это наплевали. И чего Вы ждёте? Пока скетч не будет выложен как положено, его на 90% и читать-то никто не будет.

Вы плюёте на правила форума (в которые Вас прямо носом ткнули), а форум плюёт на Вас - третий закон Ньютона никто не отменял.

IVAN222 пишет:

прилось создать другую.

И опять код выложен неправильно. Нахрена гадить-то? Соблюдайте правила и люди к Вам потянутся.

 

исправил, сразу не понял , что код надо так вставлять.

okta
Offline
Зарегистрирован: 10.01.2015

Как минимум после строки 25 (до закрытия if) надо добавить

readString="";

А углы в каком формате передаются?

IVAN222
Offline
Зарегистрирован: 19.04.2017

Углы=координатом Х и У.

Мне надо что бы ресет произошел через 20 минут.

okta
Offline
Зарегистрирован: 10.01.2015

Нафик вам ресет, если вы не будете память переполнять?

IVAN222
Offline
Зарегистрирован: 19.04.2017

Я уже не знаю какое решение предпренять. Вижу пока ресет каждые 20 минут. Тогда ардуинка работает сервы не зависают.

IVAN222
Offline
Зарегистрирован: 19.04.2017

Я уже не знаю какое решение предпренять. Вижу пока ресет каждые 20 минут. Тогда ардуинка работает сервы не зависают.

okta
Offline
Зарегистрирован: 10.01.2015

okta пишет:

Как минимум после строки 25 (до закрытия if) надо добавить

readString="";

Т.е. это пробовать не собираетесь...

Logik
Offline
Зарегистрирован: 05.08.2014

))))

Не, ну смотрите. Вы в readString только и делаете что добавляете все новые и новые пришедшие символы. Вот память и заканчивается! okta дело говорит.

IVAN222
Offline
Зарегистрирован: 19.04.2017

Вставил readString="";   .  Сеичас провожу тест. Пока работает 28 мин.

IVAN222
Offline
Зарегистрирован: 19.04.2017

50 минут . Работает. Я думаю проблема решилась.  СПАСИБО  okta , Logik.

Logik
Offline
Зарегистрирован: 05.08.2014

Ок. А ведь был шанс пройти  Дао Костылей. ))

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

Вот собственно в таком состоянии находится практически весь используемый нами софт (((

Ваш случай - отличный простой пример типичной проблемы.

IVAN222
Offline
Зарегистрирован: 19.04.2017

Я рад и доволен! 2ч21м еще работает, не каких глюков. до вечера по тестирую. Я думаю эта проблема исчерпана. Теперь можно собирать свой проект до кучи. Доделывать корпус и запихивать все туда. Да еще микрофон надо сделать направленным.

bwn
Offline
Зарегистрирован: 25.08.2014

Гриша пишет:

Нужно что-то на подобии супервайзера, к примеру 555й - если не получен импульс сброса в течении Х сек с момента последнего сброса, на выходе логический сигнал сброса (одновибратор). На вход ФВЧ первого порядка от повисания ноги МК, как управление ресетом одновибратора.

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

Когда еще только знакомился с дуиной и не знал "сторожевого пса", замутил от 555(1006), каждую секунду светик мигает, если не мигнул, через пять секунд аппаратный сброс. Девайс уж года три работает, продукты сохраняет.))))

Гриша
Offline
Зарегистрирован: 27.04.2014

bwn пишет:

Когда еще только знакомился с дуиной и не знал "сторожевого пса", замутил от 555(1006), каждую секунду светик мигает, если не мигнул, через пять секунд аппаратный сброс. Девайс уж года три работает, продукты сохраняет.))))

ОФФТОП

Ну, я сам не силен в программировании, по этой причине часто берусь за паяльник, по этой же причини читаю топики. Иногда, полезное узнаешь, конечно чаще мусор, его не менее 90%.  Несколько скуден по функционалу данный ресурс, не нашел способ настроить фильтр поиска по топикам во вкладке следить в профиле. Да и отметить наиболее заинтересовавшие посты не представляется возможным. Для тех мелочей, что я ваяю, программных знаний вполне достаточно, а вот аппаратная сторона в купе со слесаркой убивает массу времени. Но мне, намного приятнее держать паяльник, чем отлавливать баги в моем недокоде (даром что рабочем). Мне проще на RC цепях с компаратором организовать Reset по условию. Правда теперь появилась задача с управлением частотным преобразователем и программным ПИД регулятором, где обязательно потребуется этот пес... Все же лепить обвязку вокруг корпуса намного интереснее, чем ЧеПатать сотни строк, но без последнего, к сожаления, никак.  

ручной сторожевой пес на 555 таймере - кормить импульсами.

Logik
Offline
Зарегистрирован: 05.08.2014

Гриша пишет:

 читаю топики. Иногда, полезное узнаешь, конечно чаще мусор, его не менее 90%. 

Чем віше квалификация тем больше свежей инфы оказывается не нужной. увы неизбежно.

Гриша пишет:

 слесаркой убивает массу времени. 

О да! (( От мысли про корпус просто рвота. Надобность плату сверлить тоже печалит.

Гриша пишет:

 приятнее держать паяльник, чем отлавливать баги 

Та не. Отловленая бага больше радует чем найденая закоротка.

Гриша пишет:

. Все же лепить обвязку вокруг корпуса намного интереснее, чем ЧеПатать сотни строк,

Не верно. Сотни строк - много. Код должен быть лаконичным как взмах катаны. Тогда он совершенен. И как побочное следствие - хороше работает. Попробуйте ставить целью не "чтоб работало", а чтоб понятно и коротко было написано. Работать будет как следствие совершенства.

Гриша
Offline
Зарегистрирован: 27.04.2014

Logik пишет:

 О да! (( От мысли про корпус просто рвота.

последние 2 корпуса были из обувной губки БУ :)

Logik
Offline
Зарегистрирован: 05.08.2014

))) Возьму на заметку. А я ардуино мини иногда в коробочку от тиктака засовую.

Гриша
Offline
Зарегистрирован: 27.04.2014

Logik пишет:

))) Возьму на заметку. А я ардуино мини иногда в коробочку от тиктака засовую.

если нужно побольше, но дорого зараза 60руб и выше