Почему в спящем режими потреблении больше чем в активном

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

Приветствую! Столкнулся с такой проблемой, что в спящем режими потреблении больше чем в активном, с чем это может быть связано?  скетч прилагаю

#define coin_amount 4    // число монет, которые нужно распознать
byte coin_value[coin_amount] = {1.0, 2.0, 5.0, 10.0};  // стоимость монет
String currency = "RUB"; // валюта (английские буквы!!!)
int stb_time = 10000;    // время бездействия, через которое система уйдёт в сон (миллисекунды)
//-------НАСТРОЙКИ---------
#include "TM1637.h"
#define CLK 10
#define DIO 9
TM1637 disp(CLK, DIO);

int coin_signal[coin_amount];    // тут хранится значение сигнала для каждого размера монет
int coin_quantity[coin_amount];  // количество монет
byte empty_signal;               // храним уровень пустого сигнала
unsigned long standby_timer, reset_timer; // таймеры
int summ_money = 0;            // сумма монет в копилке

//-------БИБЛИОТЕКИ---------
#include "LowPower.h"
#include "EEPROMex.h"
#include "LCD_1602_RUS.h"
//-------БИБЛИОТЕКИ---------

LCD_1602_RUS lcd(0x27, 16, 2);            // создать дисплей
// если дисплей не работает, замени 0x27 на 0x3f

boolean recogn_flag, sleep_flag = true;   // флажки
//-------КНОПКИ---------
#define button 2         // кнопка "проснуться"
#define calibr_button 3  // скрытая кнопка калибровкии сброса
#define disp_power 7    // питание дисплея
#define LEDpin 6        // питание светодиода
#define IRpin 5         // питание фототранзистора
#define IRsens 14        // сигнал фототранзистора
//-------КНОПКИ---------
int sens_signal, last_sens_signal;
boolean coin_flag = false;

void setup() {
  Serial.begin(9600);                   // открыть порт для связи с ПК для отладки
  delay(500);
  disp.init();  // инициализация
  disp.set(3);
  // подтягиваем кнопки
  pinMode(button, INPUT_PULLUP);
  pinMode(calibr_button, INPUT_PULLUP);
  // пины питания как выходы
  pinMode(disp_power, OUTPUT);
  pinMode(LEDpin, OUTPUT);
  pinMode(IRpin, OUTPUT);

  // подать питание на дисплей и датчик
  digitalWrite(disp_power, 1);
  digitalWrite(LEDpin, 1);
  digitalWrite(IRpin, 1);

  // подключить прерывание
  attachInterrupt(0, wake_up, CHANGE);

  empty_signal = analogRead(IRsens);  // считать пустой (опорный) сигнал

  if (!digitalRead(calibr_button)) {  // если при запуске нажата кнопка калибровки
    Serial.print("Сервис");
    ///////////////////////////////////////////////////////////
    delay(500);
    reset_timer = millis();
    while (1) {                                   // бесконечный цикл
      if (millis() - reset_timer > 3000) {        // если кнопка всё ещё удерживается и прошло 3 секунды
        // очистить количество монет
        for (byte i = 0; i < coin_amount; i++) {
          coin_quantity[i] = 0;
          EEPROM.writeInt(20 + i * 2, 0);
        }
        Serial.print("Память очищена");
        digitalWrite(disp_power, 1);
        //  tm1637.display(1111);
        delay(500);
        digitalWrite(disp_power, 0);

        ///////////////////////////////////////////////////////////
        delay(100);
      }
      if (digitalRead(calibr_button)) {   // если отпустили кнопку, перейти к калибровке
        Serial.print("Калибровка");
        break;
      }
    }
    while (1) {
      for (byte i = 0; i < coin_amount; i++) {
        // tm1637.display(coin_value[i]);
        Serial.print(coin_value[i]); // отобразить цену монеты, размер которой калибруется
        Serial.print(currency);      // отобразить валюту
        last_sens_signal = empty_signal;
        while (1) {
          sens_signal = analogRead(IRsens);                                    // считать датчик
          if (sens_signal > last_sens_signal) last_sens_signal = sens_signal;  // если текущее значение больше предыдущего
          if (sens_signal - empty_signal > 3) coin_flag = true;                // если значение упало почти до "пустого", считать что монета улетела
          if (coin_flag && (abs(sens_signal - empty_signal)) < 2) {            // если монета точно улетела
            coin_signal[i] = last_sens_signal;                                 // записать максимальное значение в память
            EEPROM.writeInt(i * 2, coin_signal[i]);
            coin_flag = false;
            break;
          }
        }
      }
      break;
    }
  }

  // при старте системы считать из памяти сигналы монет для дальнейшей работы, а также их количество в банке
  for (byte i = 0; i < coin_amount; i++) {
    coin_signal[i] = EEPROM.readInt(i * 2);
    coin_quantity[i] = EEPROM.readInt(20 + i * 2);
    summ_money += coin_quantity[i] * coin_value[i];  // ну и сумму сразу посчитать, как произведение цены монеты на количество
  }

  /*
    // для отладки, вывести сигналы монет в порт
    for (byte i = 0; i < coin_amount; i++) {
      Serial.println(coin_signal[i]);
    }
  */
  standby_timer = millis();  // обнулить таймер ухода в сон
}

void loop() {
  if (sleep_flag) {  // если проснулись  после сна, инициализировать дисплей и вывести текст, сумму и валюту
    delay(500);
    Serial.print(summ_money);

    //////////////////////////////////////////////////////////
    empty_signal = analogRead(IRsens);
    sleep_flag = false;
  }

  // далее работаем в бесконечном цикле
  last_sens_signal = empty_signal;
  while (1) {
    sens_signal = analogRead(IRsens);  // далее такой же алгоритм, как при калибровке
    if (sens_signal > last_sens_signal) last_sens_signal = sens_signal;
    if (sens_signal - empty_signal > 3) coin_flag = true;
    if (coin_flag && (abs(sens_signal - empty_signal)) < 2) {
      recogn_flag = false;  // флажок ошибки, пока что не используется
      // в общем нашли максимум для пролетевшей монетки, записали в last_sens_signal
      // далее начинаем сравнивать со значениями для монет, хранящимися в памяти
      for (byte i = 0; i < coin_amount; i++) {
        int delta = abs(last_sens_signal - coin_signal[i]);   // вот самое главное! ищем АБСОЛЮТНОЕ (то бишь по модулю)
        // значение разности полученного сигнала с нашими значениями из памяти
        if (delta < 30) {   // и вот тут если эта разность попадает в диапазон, то считаем монетку распознанной
          summ_money += coin_value[i];  // к сумме тупо прибавляем цену монетки (дада, сумма считается двумя разными способами. При старте системы суммой всех монет, а тут прибавление
          Serial.print(summ_money);
          digitalWrite(disp_power, 1);
          disp.displayInt(summ_money);
          delay(500);
          disp.clearDisplay();
         /////////////////////////////////////////////////////////////
          coin_quantity[i]++;  // для распознанного номера монетки прибавляем количество
          recogn_flag = true;
          break;
        }
      }
      coin_flag = false;
      standby_timer = millis();  // сбросить таймер
      break;
    }

    // если ничего не делали, времят аймера вышло, спим
    if (millis() - standby_timer > stb_time) {
      good_night();
      break;
    }

    // если монетка вставлена (замыкает контакты) и удерживается 2 секунды
    /* while (!digitalRead(button)) {
       if (millis() - standby_timer > 2000) {
         lcd.clear();

         // отобразить на дисплее: сверху цены монет (округлено до целых!!!!), снизу их количество
         for (byte i = 0; i < coin_amount; i++) {
           lcd.setCursor(i * 3, 0); Serial.print((int)coin_value[i]);
           lcd.setCursor(i * 3, 1); Serial.print(coin_quantity[i]);
         }
       }
      }
    */
  }
}

// функция сна
void good_night() {
  // перед тем как пойти спать, записываем в EEPROM новые полученные количества монет по адресам начиная с 20го (пук кек)
  for (byte i = 0; i < coin_amount; i++) {
    EEPROM.updateInt(20 + i * 2, coin_quantity[i]);
  }
  sleep_flag = true;
  // вырубить питание со всех дисплеев и датчиков
  digitalWrite(disp_power, 0);
  digitalWrite(LEDpin, 0);
  digitalWrite(IRpin, 0);
  delay(100);
  // и вот теперь спать
  LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
}

// просыпаемся по ПРЕРЫВАНИЮ (эта функция - обработчик прерывания)
void wake_up() {
  // возвращаем питание на дисплей и датчик
  digitalWrite(disp_power, 1);
  digitalWrite(LEDpin, 1);
  digitalWrite(IRpin, 1);
  standby_timer = millis();  // и обнуляем таймер
}

 

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

Потребление чего и чем?

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

Потребления тока. к ардуино нано подключен тм1637, фотодиод и фототранзистор. В обычном режиме потребление 0.03 ( не знаю чего, поставил переключатель как на фото. Это милиамперы?), а когда уходит в спящий режим, потребление 0.08

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

qwerty13rus пишет:

Приветствую! Столкнулся с такой проблемой, что в спящем режими потреблении больше чем в активном

У вас устройство НИКОГДА не попадет в спящий режим. Скетч нерабочий.  Код ваш или где-то накопипастили?

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

копипаст, переделал как смог под свой дисплей

вот оригинальный скетч

/*
  Электронный распознаватель монет (по размеру) для копилки со счётчиком суммы и статистикой по каждому типу монет.
  Функционал:
  Распознавание размера монет с высокой точностью и его привязка к стоимости каждой монеты
  Вычисление общей суммы монет в копилке
  Статистика по числу монет каждого типа
  Все настройки сохраняются в энергонезависимую память и не сбрасываются при питании
  Накопленная сумма тоже хранится в энергонезависимой памяти и не боится сбоев питания
  Режим глубокого энергосбережения: в спящем режиме потребляется 0.07 мА, в схеме без преобразователя 0.02 мА
  Поддержка любого числа монет разного размера
  Автоматическая калибровка типов монет
  Сброс накопленного количества
  Подробности в видео: https://youtu.be/lH4qfGlK2Qk
  Created 2017
  by AlexGyver
  AlexGyver Home Labs Inc.
*/

//-------НАСТРОЙКИ---------
#define coin_amount 5    // число монет, которые нужно распознать
float coin_value[coin_amount] = {0.5, 1.0, 2.0, 5.0, 10.0};  // стоимость монет
String currency = "RUB"; // валюта (английские буквы!!!)
int stb_time = 10000;    // время бездействия, через которое система уйдёт в сон (миллисекунды)
//-------НАСТРОЙКИ---------

int coin_signal[coin_amount];    // тут хранится значение сигнала для каждого размера монет
int coin_quantity[coin_amount];  // количество монет
byte empty_signal;               // храним уровень пустого сигнала
unsigned long standby_timer, reset_timer; // таймеры
float summ_money = 0;            // сумма монет в копилке

//-------БИБЛИОТЕКИ---------
#include "LowPower.h"
#include "EEPROMex.h"
#include "LCD_1602_RUS.h"
//-------БИБЛИОТЕКИ---------

LCD_1602_RUS lcd(0x27, 16, 2);            // создать дисплей
// если дисплей не работает, замени 0x27 на 0x3f

boolean recogn_flag, sleep_flag = true;   // флажки
//-------КНОПКИ---------
#define button 2         // кнопка "проснуться"
#define calibr_button 3  // скрытая кнопка калибровкии сброса
#define disp_power 12    // питание дисплея
#define LEDpin 11        // питание светодиода
#define IRpin 17         // питание фототранзистора
#define IRsens 14        // сигнал фототранзистора
//-------КНОПКИ---------
int sens_signal, last_sens_signal;
boolean coin_flag = false;

void setup() {
  Serial.begin(9600);                   // открыть порт для связи с ПК для отладки
  delay(500);

  // подтягиваем кнопки
  pinMode(button, INPUT_PULLUP);
  pinMode(calibr_button, INPUT_PULLUP);

  // пины питания как выходы
  pinMode(disp_power, OUTPUT);
  pinMode(LEDpin, OUTPUT);
  pinMode(IRpin, OUTPUT);

  // подать питание на дисплей и датчик
  digitalWrite(disp_power, 1);
  digitalWrite(LEDpin, 1);
  digitalWrite(IRpin, 1);

  // подключить прерывание
  attachInterrupt(0, wake_up, CHANGE);

  empty_signal = analogRead(IRsens);  // считать пустой (опорный) сигнал

  // инициализация дисплея
  lcd.init();
  lcd.backlight();

  if (!digitalRead(calibr_button)) {  // если при запуске нажата кнопка калибровки
    lcd.clear();
    lcd.setCursor(3, 0);
    Serial.print("Сервис");
    delay(500);
    reset_timer = millis();
    while (1) {                                   // бесконечный цикл
      if (millis() - reset_timer > 3000) {        // если кнопка всё ещё удерживается и прошло 3 секунды
        // очистить количество монет
        for (byte i = 0; i < coin_amount; i++) {
          coin_quantity[i] = 0;
          EEPROM.writeInt(20 + i * 2, 0);
        }
        lcd.clear();
        lcd.setCursor(0, 0);
        Serial.print("Память очищена");
        delay(100);
      }
      if (digitalRead(calibr_button)) {   // если отпустили кнопку, перейти к калибровке
        lcd.clear();
        lcd.setCursor(0, 0);
        Serial.print("Калибровка");
        break;
      }
    }
    while (1) {
      for (byte i = 0; i < coin_amount; i++) {
        lcd.setCursor(0, 1); Serial.print(coin_value[i]);  // отобразить цену монеты, размер которой калибруется
        lcd.setCursor(13, 1); Serial.print(currency);      // отобразить валюту
        last_sens_signal = empty_signal;
        while (1) {
          sens_signal = analogRead(IRsens);                                    // считать датчик
          if (sens_signal > last_sens_signal) last_sens_signal = sens_signal;  // если текущее значение больше предыдущего
          if (sens_signal - empty_signal > 3) coin_flag = true;                // если значение упало почти до "пустого", считать что монета улетела
          if (coin_flag && (abs(sens_signal - empty_signal)) < 2) {            // если монета точно улетела
            coin_signal[i] = last_sens_signal;                                 // записать максимальное значение в память
            EEPROM.writeInt(i * 2, coin_signal[i]);
            coin_flag = false;
            break;
          }
        }
      }
      break;
    }
  }

  // при старте системы считать из памяти сигналы монет для дальнейшей работы, а также их количество в банке
  for (byte i = 0; i < coin_amount; i++) {
    coin_signal[i] = EEPROM.readInt(i * 2);
    coin_quantity[i] = EEPROM.readInt(20 + i * 2);
    summ_money += coin_quantity[i] * coin_value[i];  // ну и сумму сразу посчитать, как произведение цены монеты на количество
  }

  /*
    // для отладки, вывести сигналы монет в порт
    for (byte i = 0; i < coin_amount; i++) {
      Serial.println(coin_signal[i]);
    }
  */
  standby_timer = millis();  // обнулить таймер ухода в сон
}

void loop() {
  if (sleep_flag) {  // если проснулись  после сна, инициализировать дисплей и вывести текст, сумму и валюту
    delay(500);
    lcd.init();
    lcd.clear();
    lcd.setCursor(0, 0); Serial.print("На яхту");
    lcd.setCursor(0, 1); Serial.print(summ_money);
    lcd.setCursor(13, 1); Serial.print(currency);
    empty_signal = analogRead(IRsens);
    sleep_flag = false;
  }

  // далее работаем в бесконечном цикле
  last_sens_signal = empty_signal;
  while (1) {
    sens_signal = analogRead(IRsens);  // далее такой же алгоритм, как при калибровке
    if (sens_signal > last_sens_signal) last_sens_signal = sens_signal;
    if (sens_signal - empty_signal > 3) coin_flag = true;
    if (coin_flag && (abs(sens_signal - empty_signal)) < 2) {
      recogn_flag = false;  // флажок ошибки, пока что не используется
      // в общем нашли максимум для пролетевшей монетки, записали в last_sens_signal
      // далее начинаем сравнивать со значениями для монет, хранящимися в памяти
      for (byte i = 0; i < coin_amount; i++) {
        int delta = abs(last_sens_signal - coin_signal[i]);   // вот самое главное! ищем АБСОЛЮТНОЕ (то бишь по модулю)
        // значение разности полученного сигнала с нашими значениями из памяти
        if (delta < 30) {   // и вот тут если эта разность попадает в диапазон, то считаем монетку распознанной
          summ_money += coin_value[i];  // к сумме тупо прибавляем цену монетки (дада, сумма считается двумя разными способами. При старте системы суммой всех монет, а тут прибавление
          lcd.setCursor(0, 1); Serial.print(summ_money);
          coin_quantity[i]++;  // для распознанного номера монетки прибавляем количество
          recogn_flag = true;
          break;
        }
      }
      coin_flag = false;
      standby_timer = millis();  // сбросить таймер
      break;
    }

    // если ничего не делали, времят аймера вышло, спим
    if (millis() - standby_timer > stb_time) {
      good_night();
      break;
    }

    // если монетка вставлена (замыкает контакты) и удерживается 2 секунды
    while (!digitalRead(button)) {
      if (millis() - standby_timer > 2000) {
        lcd.clear();

        // отобразить на дисплее: сверху цены монет (округлено до целых!!!!), снизу их количество
        for (byte i = 0; i < coin_amount; i++) {
          lcd.setCursor(i * 3, 0); Serial.print((int)coin_value[i]);
          lcd.setCursor(i * 3, 1); Serial.print(coin_quantity[i]);
        }
      }
    }
  }
}

// функция сна
void good_night() {
  // перед тем как пойти спать, записываем в EEPROM новые полученные количества монет по адресам начиная с 20го (пук кек)
  for (byte i = 0; i < coin_amount; i++) {
    EEPROM.updateInt(20 + i * 2, coin_quantity[i]);
  }
  sleep_flag = true;
  // вырубить питание со всех дисплеев и датчиков
  digitalWrite(disp_power, 0);
  digitalWrite(LEDpin, 0);
  digitalWrite(IRpin, 0);
  delay(100);
  // и вот теперь спать
  LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
}

// просыпаемся по ПРЕРЫВАНИЮ (эта функция - обработчик прерывания)
void wake_up() {
  // возвращаем питание на дисплей и датчик
  digitalWrite(disp_power, 1);
  digitalWrite(LEDpin, 1);
  digitalWrite(IRpin, 1);
  standby_timer = millis();  // и обнуляем таймер
}
// Спасибо за внимание, ваш Алекс

 

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

Ардуину в принципе нет смысла загонять в LowPower не снеся с неё 80% деталей.

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

sadman41 пишет:

Ардуину в принципе нет смысла загонять в LowPower не снеся с неё 80% деталей.

Не скажите, потребление снижается в разы, а если еще сделать эти действия, то вообще гуд https://www.youtube.com/watch?v=MmgMjlzpkfE&t=3s&index=3&list=LL1qffs-v9BeKv03Pi3dXq6w

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

Какие там разы??? На плате остаются линейный стабилизатор и USB-UART мост, они потребляют не меньше микроконтроллера.

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

qwerty13rus пишет:

Не скажите, потребление снижается в разы

если выкинуть ардуину и взять голую микросхему - потребление снижается в ТЫСЯЧИ РАЗ (абсолютно серьезно - с миллиампер до микроампер)

Так что ваши РАЗЫ - это абсолютно ни о чем. Какая разница, проработает девайс на батерейке один день или три, когда нормальное мобильное устройство должно работать месяцы и годы.

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

Jeka_M пишет:

Какие там разы??? На плате остаются линейный стабилизатор и USB-UART мост, они потребляют не меньше микроконтроллера.


Хорошо, преувеличил, но сравнению без использовании режима сна и действий что на видео, можно добиться хорошего результата, если верить источникам)

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

b707 пишет:

qwerty13rus пишет:

Не скажите, потребление снижается в разы

если выкинуть ардуину и взять голую микросхему - потребление снижается в ТЫСЯЧИ РАЗ (абсолютно серьезно - с миллиампер до микроампер)

Так что ваши РАЗЫ - это абсолютно ни о чем. Какая разница, проработает девайс на батерейке один день или три, когда нормальное мобильное устройство должно работать месяцы и годы.

Это конечно хорошо, но желания возиться с голой МК - нет, да и не умею если на то пошло) Сейчас при потреблении 0.02 мА и емкостью аккумулятора 7500 мА/ч, все это должно проработать около 2 месяцев? или я не прав?

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

qwerty13rus][quote=b707 пишет:

Сейчас при потреблении 0.02 мА и емкостью аккумулятора 7500 мА/ч, все это должно проработать около 2 месяцев? или я не прав?

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

Похоже вы ошиблись и хотели написать 0.02А ? - то есть 20 мА. Это вполне похоже на правду.

Но в обоих случаях у вас с математикой явные проблемы. Для потребления 0.02мА с батарейкой 7500мАч девайс проработал бы 42 года, а в случае 20 мА = 2 недели.

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

Индикатор почаще гасите и не надо будет с псевдо-LowPower страдать. Саморазряд аккумулятора может быть гораздо сильнее, чем разница между потреблением во сне и в режиме работы. Тем более, что сон у вас в разы прожорливей вышел.

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

b707 пишет:

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

Похоже вы ошиблись и хотели написать 0.02А ? - то есть 20 мА. Это вполне похоже на правду.

Но в обоих случаях у вас с математикой явные проблемы. Для потребления 0.02мА с батарейкой 7500мАч девайс проработал бы 42 года, а в случае 20 мА = 2 недели.

Так, переключатель я поставил как на фото

Показало 0.02, что это? И да, считал онлайн калькулятором

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

Что есть индикатор? Фотодиод и фототранзистор?

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

Jeka_M пишет:

Какие там разы??? На плате остаются линейный стабилизатор и USB-UART мост, они потребляют не меньше микроконтроллера.

Вы даже ссылку на видео не глянули, а там сразу аж "три совета от гайвера". Я бы не стал спорить :)

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

qwerty13rus пишет:

Так, переключатель я поставил как на фото

Показало 0.02, что это? И да, считал онлайн калькулятором

Я не знаю, что вы меряли - я просто точно знаю, что опустить потребление покупной ардуины ниже 5мА  нереально. То есть получить 0.02 вы не могли в принципе. Либо прибор неисправен, либо вы им пользоваться не умеете.

На фоне того, что вы 7500 на 0.02 не смогли правильно поделить даже на калькуляторе и ошиблись в 250 раз - ошибка с мультметром не удивляет.

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

Ухх, какие мы умные. В любом случае спасибо за попытку помочь

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

qwerty13rus пишет:

Ухх, какие мы умные. В любом случае спасибо за попытку помочь

умные или нет - это еще вопрос. А вот то, что возня со спящим режимом для готовой платы ардуино - вещь абсолютно бессмысленная - давно установленный факт.

Хотите мобильности - переходите на голые контроллеры. Это совсем не сложно.

 

ЗЫ кстати - то, что у вас в спящем режиме потребление больше, чем в активном - тоже может говорить о том, что вы просто неправильно измеряете

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

b707 пишет:

 

умные или нет - это еще вопрос. А вот то, что возня со спящим режимом для готовой платы ардуино - вещь абсолютно бессмысленная - давно установленный факт.

Хотите мобильности - переходите на голые контроллеры. Это совсем не сложно.

 

ЗЫ кстати - то, что у вас в спящем режиме потребление больше, чем в активном - тоже может говорить о том, что вы просто неправильно измеряете

Что может быть не правильного?  Амперметр в разрыв цепи между ист. пит. и ардуйней? 

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

На картинке выше выбран предел измерения 10 ампер, а не миллиампер. Цифра 0.02 означает 0.02 ампера, т.е. 20 миллиампер. И это очень грубое измерение. Мерять нужно на пределах 200m, 20m, 2000u

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

Тут чел смог ограничить потребление до 0.07 мА, так что не знаю о каких 5 мА вы говорите. Все тот же гайвер https://m.youtube.com/watch?v=lH4qfGlK2Qk&t=644s

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

Оо, хоть что то полезное, благодарю

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

qwerty13rus пишет:

Тут чел смог ограничить потребление до 0.07 мА, так что не знаю о каких 5 мА вы говорите.

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

Можно взять готовую ардуину и срезать с нее все лишнее, оставив только контроллер. А можно сразу взять голый МК

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

b707 пишет:

qwerty13rus пишет:

Тут чел смог ограничить потребление до 0.07 мА, так что не знаю о каких 5 мА вы говорите.

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

Можно взять готовую ардуину и срезать с нее все лишнее, оставив только контроллер. А можно сразу взять голый МК

угу, взять голый МК,я так понимаю что еще припаивать обвязку для прошивки, помоему с готовым все проще, не?

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

qwerty13rus пишет:

угу, взять голый МК,я так понимаю что еще припаивать обвязку для прошивки, помоему с готовым все проще, не?

А что есть обвязка для прошивки, в вашем представлении?

Green
Offline
Зарегистрирован: 01.10.2015

Может прошивка для обвязки?)
Ардуины разные бывают. Про Мини без светодиода и 78l05, но с nRF24L01 показывала 5 мка как то.

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

bwn пишет:

qwerty13rus пишет:

угу, взять голый МК,я так понимаю что еще припаивать обвязку для прошивки, помоему с готовым все проще, не?

А что есть обвязка для прошивки, в вашем представлении?

Сейчас нашел, посмотрел. Нужно несколько кондеров, кварц при надобности и резистор, разве игра стоит свеч?

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

это конечно не для прошивки, а для работы)

Green
Offline
Зарегистрирован: 01.10.2015

Если для работы, то достаточно одного конденсатора 0,1 мкф. И контроллера, ес-но.)

SLKH
Offline
Зарегистрирован: 17.08.2015

qwerty13rus пишет:

 

угу, взять голый МК,я так понимаю что еще припаивать обвязку для прошивки, помоему с готовым все проще, не?

минимум трудов, если взять про-мини и отковырять стабилизатор и 1 светодиод.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

b707 пишет:

qwerty13rus пишет:

Так, переключатель я поставил как на фото

Показало 0.02, что это? И да, считал онлайн калькулятором

Я не знаю, что вы меряли - я просто точно знаю, что опустить потребление покупной ардуины ниже 5мА  нереально. То есть получить 0.02 вы не могли в принципе. Либо прибор неисправен, либо вы им пользоваться не умеете.

Как раз, что он мерял, прекрасно видно на картинке: измерял ток на пределе 10А. Соответственно, получил 0.02А = 20 мА, что вполне логичо. Ну а то, что он не може отличить А от мА, это уже другое дело.

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

SLKH пишет:

qwerty13rus пишет:

 

угу, взять голый МК,я так понимаю что еще припаивать обвязку для прошивки, помоему с готовым все проще, не?

минимум трудов, если взять про-мини и отковырять стабилизатор и 1 светодиод.

Если весь девайс будет состоять из одной проминьки и изоленты, то да.  А если делать плату, нахрена проминька?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

andriano пишет:

Как раз, что он мерял, прекрасно видно на картинке: измерял ток на пределе 10А. Соответственно, получил 0.02А = 20 мА, что вполне логичо. Ну а то, что он не може отличить А от мА, это уже другое дело.

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

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

xDriver пишет:

загадка. 

Ну, почему сразу загадка? Никаких загадок - цена на прошлогодний овёс.

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

Вообщем разобрался с работой мультиметра :D Теперь потребление у меня меньше 2 мА, мне хватит) Проблема была строчке 207 в стартовом топике, я ее убрал и все гуд. Почему то при отключении питания с тм1637 ток возрастал.

lean_74
Offline
Зарегистрирован: 22.12.2015

Green пишет:

Если для работы, то достаточно одного конденсатора 0,1 мкф. И контроллера, ес-но.)

Давайте уточним, кондер и резистор на резет, т.к. было дело без этого не стартовал, и по питанию один,(это уже два) если работаем без кварца. С кварцем желательно еще два пиковых на землю. Я так на резет еще и электролит 1-2 мкФ плюсом ставлю. или что не так?

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

lean_74 пишет:

Давайте уточним, кондер и резистор на резет, т.к. было дело без этого не стартовал, и по питанию один,(это уже два) если работаем без кварца. С кварцем желательно еще два пиковых на землю. Я так на резет еще и электролит 1-2 мкФ плюсом ставлю. или что не так?

давайте разделять понятия "я ставлю" и "необходимо". В реальных схемах я тоже много чего ставлю - но если говорить о минимальном наборе - то Атмега328, Тини85 и Тини13 у меня отлично работали в полном одиночестве - и без кондеров, и без кварца, и без подтяжки РЕСЕТа

lean_74
Offline
Зарегистрирован: 22.12.2015

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

inspiritus
Offline
Зарегистрирован: 17.12.2012

 

SLKH пишет:

qwerty13rus пишет:

 

угу, взять голый МК,я так понимаю что еще припаивать обвязку для прошивки, помоему с готовым все проще, не?

минимум трудов, если взять про-мини и отковырять стабилизатор и 1 светодиод.

 

Pro mini рулит с ободранным обвесом особенно :)

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

qwerty13rus пишет:

Вообщем разобрался с работой мультиметра :D Теперь потребление у меня меньше 2 мА, мне хватит)

скорее всего опять в 10 раз ошибся при измерении. Если это Нано, из которой ничего не выпаивали - должно быть где-то 10-15 мА

 

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

b707 пишет:

скорее всего опять в 10 раз ошибся 

Блин, ну только человек обрадовался, заулыбался, напитался положительными эмоциями, а тут пришёл поручик Ржевский ...

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

b707 пишет:

qwerty13rus пишет:

Вообщем разобрался с работой мультиметра :D Теперь потребление у меня меньше 2 мА, мне хватит)

скорее всего опять в 10 раз ошибся при измерении. Если это Нано, из которой ничего не выпаивали - должно быть где-то 10-15 мА

 

выпаяд стабилизатор, светодиод и отправил в спящий режим, думаете будет больше 2 мА?

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

Очень точное описание меня

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

qwerty13rus пишет:

выпаяд стабилизатор, светодиод и отправил в спящий режим, думаете будет больше 2 мА?

нет, если все это выпаял - то нормально. Если удалить еще USB - есть шанс получить ток, близкий к цифрам в видео Гувера

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

b707 пишет:

qwerty13rus пишет:

выпаяд стабилизатор, светодиод и отправил в спящий режим, думаете будет больше 2 мА?

нет, если все это выпаял - то нормально. Если удалить еще USB - есть шанс получить ток, близкий к цифрам в видео Гувера

USB, что?

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

qwerty13rus пишет:

USB, что?

отключить USB-UART

qwerty13rus
Offline
Зарегистрирован: 05.12.2018

b707 пишет:

отключить USB-UART

Первый раз это слышу, не подскажете как?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

xDriver пишет:

andriano пишет:

Как раз, что он мерял, прекрасно видно на картинке: измерял ток на пределе 10А. Соответственно, получил 0.02А = 20 мА, что вполне логичо. Ну а то, что он не може отличить А от мА, это уже другое дело.

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

https://www.youtube.com/watch?v=pgYKbfBkK8k

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

qwerty13rus пишет:

b707 пишет:

отключить USB-UART

Первый раз это слышу, не подскажете как?

Значить, рано тебе еще энэргию сберегать... 

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

DetSimen пишет:

qwerty13rus пишет:

b707 пишет:

отключить USB-UART

Первый раз это слышу, не подскажете как?

Значить, рано тебе еще энэргию сберегать... 

Эм, я что то заблудился, а на про мини, он хде?