Не стартует после возобновления питания. Туплю.

Emer
Offline
Зарегистрирован: 02.11.2016

Затупил. Не могу понять.

Программка, выполняет разные действия (мониторинг и управление климатом). Питается 5 вольт, на V +5 через схему: Сеть>преобразователь +5>USB зарядное для LiIon>обратное повышение до +5

На время тестов так, потом все будет только от LiIon.

От + клеммы аккумулятора выход на аналоговый пин на Дуню, для замера напряжения.

Периодически происходит замер. Если напряжение начало падать (сеть пропала), черех N-промежуток времени (если не восстановилась сеть), устройство уходит в сон.

Каждые 8 сек пробуждается, опрашивает напряжение, если не появилось -спит дальше. Если появилось, то через минуту (примерно, учитывая погрешности WatchDoga) просыпаемся окончательно и идем дальше работать.

Устройство полностью фунциклирует, все хорошо, акка хватает на сон на неделю где то..

Все вроде бы хорошо. НО..

Если акк разрядился в ноль (что даже светик на дуне не горит), то подача напруги ни к чему не приводит. Совсем.  Загорается светик и все. Совсем все..

Ставил временный тест, что при сонном цикле, при пробуждении на замер, моргнуть светиком(на отдельном пине). Все работает вплоть до ухода в Ноль.

После подаче напруги (после разряда полного) не стартует никак. Горит только светик питания на дуне.

При нажатии кнопки RESET все начинает работать как надо.

Выжимки из кода:

#include ...// всякие библиотеки
..
..
.
.
ISR (WDT_vect) {
  wdt_disable(); 
}
.
.
.
float Check_Volt(int SS2) { //напряжометр
  int SS = 0;
  float koof = 4.77;
  if (voltage == 0)voltage = koof;
  while (SS < SS2) {
    sensorValue = analogRead(volt_pin);
    voltage = voltage + (sensorValue * koof) / 1024.0;
    SS++;
    delay(8);
  }
  voltage = voltage / SS2;
  return voltage;
}
.
.
void To_Sleep() { //функция отправки спать
 
  //идем спать

  int IliSleep = 0;
  while (1) {
    wdt_enable(WDTO_8S); 
    WDTCSR |= (1 << WDIE); 
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    sleep_enable();
    sleep_mode();
    IliSleep += 8;
     if (IliSleep > 60) {
      IliSleep = 0;
      if (Check_Volt(50) >= 4.15)break;
    }
   }
  //если есть, просыпаемся
   sleep_disable();
  wdt_disable();
}

.
.
.
void loop(void) { //основная программа
if (Check_Volt(50) < 3.80) {// если напряжение меньше 3.8 идем спать сразу
    To_Sleep();
    Sleep = 0;
  }
if (Check_Volt(50) < 4.12) {
    if ((Oldvoltage - voltage) >= 0.005) {//если уменьшается напруга переменную плюсуем
      Sleep++;
    }
  }
  if (voltage > 4.15) {// пошла напруга переменную обнуляем (считаем что уменьшение напруги носило разовый характер)
    Oldvoltage = 4.1;
    Sleep = 0;
  }
  if (Sleep > 5) {// переменная достигла значения -уходим в сон
    To_Sleep();
    Sleep = 0;
  }

.
.
.
// дальше программа, работает хорошо, не относится ни ко сну, ни к напруге.




}

Как заставить ее включаться после полной разрядки аккумулятора?

Туплю.

Emer
Offline
Зарегистрирован: 02.11.2016

Никто не знает..эх..

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Уважаемый, добавьте контроль аккумулятров и не допускайте их полного разряда. Как сделать - контролируйте напряжение аналоговым входом. И, ИМХО, у Вас хреновый блок питания.

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

Emer, вы ни дали никакой информации. Где схема? Как выставлены фузы bodlevel?

b707
Offline
Зарегистрирован: 26.05.2017

Emer пишет:

Если акк разрядился в ноль (что даже светик на дуне не горит), то подача напруги ни к чему не приводит. Совсем.  Загорается светик и все. Совсем все..

При нажатии кнопки RESET все начинает работать как надо.

Чтобы при подаче питания МК сам перезагрузился, напряжение до подачи питания должно упасть ниже 1в. А у вас аккумулятор не садится в ноль, на нем остается напряжение, думаю. пару вольт

Когда же вы нажимаете RESET - ресет происходит принудительно.

Emer
Offline
Зарегистрирован: 02.11.2016

b707 пишет:

Чтобы при подаче питания МК сам перезагрузился, напряжение до подачи питания должно упасть ниже 1в. А у вас аккумулятор не садится в ноль, на нем остается напряжение, думаю. пару вольт

Когда же вы нажимаете RESET - ресет происходит принудительно.

Тестировал. Блок заряда (защиты) аккумулятора отключает питание на выход при напряжении ниже 2.5 на акке. Дуня вырубается.

Фигня в другом, акк, без нагрузки, чуть чуть восстанавливается, напряжение появляется больше 2.5, блок защиты включается. Напряжение на дуне появляется. Загорается светодио питания и все. Если после подать питание полноценное, то дуня уже не стартует сама.

Что придумать-не врублюсь никак..

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

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

Emer пишет:

Фигня в другом, акк, без нагрузки, чуть чуть восстанавливается, напряжение появляется больше 2.5, блок защиты включается. Напряжение на дуне появляется. Загорается светодио питания и все. Если после подать питание полноценное, то дуня уже не стартует сама.

Что придумать-не врублюсь никак..

Настроить BODEN/BODLEVEL

Emer
Offline
Зарегистрирован: 02.11.2016

dimax пишет:

Настроить BODEN/BODLEVEL

А вот тут я неуч))

Как на Nano посмотреть/изменить фьюзы?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Emer пишет:

А вот тут я неуч))

Как на Nano посмотреть/изменить фьюзы?

Как и на любом микроконтроллере AVR, информации в сети достаточно.

Emer
Offline
Зарегистрирован: 02.11.2016

Не..фьюзы тут не при чем..

У меня же после акка  идет MT3608, а он держит напряжение на выходе 5 Вольт, вплоть до отключения Акка защитой (при 2.5).

Подача напруги после этого, продолжает подачу +5 на дуню, но она не стартует никак.. Светик питания горит и все. Чтоб запустить программу нужен Ресет.

+5 то на дуне есть. Как фьюзы отработают? Если условия (напряжение +5) благоприятные.?

b707
Offline
Зарегистрирован: 26.05.2017

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

Значит "при отключении акка защитой" какое-то напряжение на выходе все же остается - видимо порядка 1в. А в таком случае при последующей подаче питания ардуина НЕ ВКЛЮЧИТСЯ  - так говорит даташит, раздел 18.5 

 

Emer
Offline
Зарегистрирован: 02.11.2016

b707 пишет:

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

Значит "при отключении акка защитой" какое-то напряжение на выходе все же остается - видимо порядка 1в. А в таком случае при последующей подаче питания ардуина НЕ ВКЛЮЧИТСЯ  - так говорит даташит, раздел 18.5

Продолжил тесты. В итоге:

1. Акк уходит в ноль, это фигурально, защита его при 2.5 отключает, на повысителе (МТ3608) пропадает питание, и +5 на дуню не приходит уже.

2.Глюк работает только если не дать "отдохнуть" дуне после такого тестирования.  Если подождать (ждал минутку), то подача напруги совершенно нормаьно штатно стартует плату.

Из этого делаю вывод, что на линии питания дуни (в самой плате) кондер не успевает разрядиться и остаточное напряжение подвешивает плату.

Догадки конечно, может и не так. Соответственно вопрос не программный, а аппаратный?

 

sadman41
Offline
Зарегистрирован: 19.10.2016

А вы его пинцетиком разрядите и проверите свою догадку...

b707
Offline
Зарегистрирован: 26.05.2017

Emer пишет:

Продолжил тесты. В итоге:

1. Акк уходит в ноль, это фигурально, защита его при 2.5 отключает, на повысителе (МТ3608) пропадает питание, и +5 на дуню не приходит уже.

2.Глюк работает только если не дать "отдохнуть" дуне после такого тестирования.  Если подождать (ждал минутку), то подача напруги совершенно нормаьно штатно стартует плату.

Из этого делаю вывод, что на линии питания дуни (в самой плате) кондер не успевает разрядиться и остаточное напряжение подвешивает плату.

Думаю, предположение опять неверное. В самой плате нет таких кондеров. чтобы держать питание минуту.

У вас тестер есть? Чтобы не гадать -  может быть проще подключить его между пинами "5v" и GND в режиме вольтметра и непосредственно увидеть, какое напряжение в какой момент приходит на плату?

Emer
Offline
Зарегистрирован: 02.11.2016

b707 пишет:

У вас тестер есть? Чтобы не гадать -  может быть проще подключить его между пинами "5v" и GND в режиме вольтметра и непосредственно увидеть, какое напряжение в какой момент приходит на плату?

Так в том то и фигня. При питании +5, при отключении питания -0. (все тестером)

Если сразу подать +5 (дуня до этого спала), то загорается светик питания на дуне и все. Если подождать до подачи напруги минуту , все включается нормально. Дополнительных кондеров и т.п. на линии от Питания до Дуни нет...ну...кроме наверно линии замера напряжения от акка на аналоговый порт. Но если подождать, все стартует нормально же..