Не меняется переменная - не найду причину

Тема в разделе "Arduino & Shields", создана пользователем Justasf, 10 июл 2023.

Метки:
  1. User248

    User248 Гик

    Всё понятно. Неправильно настроено вот это:
    Код (C++):
    LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
    Питание полностью отрубается и сбрасывает переменные.

    А если так?
    Код (C++):
    LowPower.powerDown(SLEEP_FOREVER, ADC_ON, BOD_OFF);
     
    Последнее редактирование: 11 июл 2023
  2. User248

    User248 Гик

    Если нужно отключать питание с датчика, то можно подключить его питание к какому-нибудь пину ардуины.
     
  3. parovoZZ

    parovoZZ Гуру

    Вопрос не в этом, а в том, как компилятор интерпретирует эту запись. Тот же delay() ничего не возвращает. Да и к чему здесь такая запись?
     
  4. parovoZZ

    parovoZZ Гуру

    Нет. Квалификатор volatile указывает компилятору на то, что данная переменная может быть изменена вне ее поля видимости. Например, в прерывании.
     
    Последнее редактирование: 11 июл 2023
  5. parovoZZ

    parovoZZ Гуру

    Мы сейчас про атмегу или какой мк обсуждаем? У атмег нет такого режима сна, при котором бы обесточивалась память. У них вообще нет блоков, с которых программно можно снять электропитание. Только управление тактированием. Даже ресет кристалла не приводит к сбросу ОЗУ и, как следствие, не приводит к потере глобальных и статичных локальных переменных.
     
  6. parovoZZ

    parovoZZ Гуру

    На автовазе тоже ничего не читают. На остальных наших автозаводах тоже. Результат на лицо.
     
    DetSimen нравится это.
  7. User248

    User248 Гик

    Если в программе нет ничего, что могло бы обнулить переменную, значит происходит сброс. Сброс также происходит при открытии монитора порта. Ардуина уходит в сон примерно на 15 минут. Вы всё это время держите монитор порта открытым?
     
    Последнее редактирование: 11 июл 2023
    Ariadna-on-Line нравится это.
  8. User248

    User248 Гик

    Да, это я перепутал. Из-за этого ничего сбрасываться не должно. Данная строка вообще срабатывает при низком напряжении аккумулятора.
     
    Последнее редактирование: 11 июл 2023
  9. liahim55

    liahim55 Нерд

    Конечно вы правы, только в приложении к ардуино есть нюансы.
    Когда то давно столкнулся с аналогичной проблемой
    Решилось с этой подсказкой. https://arduino.ru/Reference/Volatile
     
  10. Justasf

    Justasf Нуб

    Тот автомобиль, который я строю, не продаю и никому не предлагаю...
     
  11. Justasf

    Justasf Нуб

    т.е. если я все время держу ардуину подключенной к монитору порта - то это может быть из-за этого? (на RX-TX GND посадил CH340 и считываю что там крутиться..)
     
  12. User248

    User248 Гик

    Наоборот, если закрыли и снова открыли монитор порта, то ардуина точно перезапустится и сбросит все переменные.
     
    Ariadna-on-Line нравится это.
  13. Justasf

    Justasf Нуб

    Модем подключен через SoftSerial. Для экономии батарейки я его отключаю на периоды.
    Код (C++):
    #define sim800_Vcc 2 // пин питания, куда подключен sim800
    От этого слетает монитор порта и все "ломается"? Это причина?
     
  14. parovoZZ

    parovoZZ Гуру

    Нет там никаких нюансов. Компилятор у ардуины такой же, как и у всех остальных.
     
  15. parovoZZ

    parovoZZ Гуру

    Каким образом?
     
  16. parovoZZ

    parovoZZ Гуру

    Нет. Причина в кривом синтаксисе написанной программы.
     
  17. parovoZZ

    parovoZZ Гуру

    Чтобы это знать точно, надо не гадать, а прочитать регистр статуса. В нем указана причина загрузки кристалла.
     
  18. parovoZZ

    parovoZZ Гуру

    ТС пишет, что он подключился только лишь к шине данных UART. Как через неё отправить мк в перезагрузку? Нет, это можно сделать, если написать немножко кода, но у ТС такой механизм не реализован.
     
  19. User248

    User248 Гик

    Я даже не обратил на это внимание. Контакты входа-выхода ардуины допускают ток не более 40мА. Пиковый ток SIM800 заявлен 2А. Так подключать GSM модуль нельзя.
     
    Ariadna-on-Line и b707 нравится это.
  20. b707

    b707 Гуру

    @User248 опередил

    СИМ800 потребляет до 2.5А. От пина ардуины он работать не будет - никаких шансов.
    Скорее всего ардуина перегружается.

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