Прошу помощи в решении проблемы с перезапуском digispark

Макс и Ко
Offline
Зарегистрирован: 22.12.2018

Прошу помощи в решении проблемы с перезапуском digispark

Решил собрать систему автополива на digispark по проекту AlexGyver, но столкнулся с проблемой. Когда отключаю питание на прошитом дигиспарке, а потом включаю, контроллер не возобновляет работу, загорается индикатор питания и больше ничего не происходит. Для возобновления работы необходимо заново загружать скетч в digispark с подключённым питанием.

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

#include <avr/wdt.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>



#define adc_disable() (ADCSRA &= ~(1<<ADEN)) // disable ADC (before power-off)
// #define adc_enable()  (ADCSRA |=  (1<<ADEN)) // re-enable ADC
// http://alexgyver.ru/arduino/DigiDrivers.rar

const uint32_t 
    PERIOD      = 259200, // пауза между включениями помпы в секундах
    START       = 10,            // задержка перед стартом
    WORK        = 30,            // время работы помпы в секундах
    MOS         = 1;             // пин мосфета помпы


uint32_t mainTimer = PERIOD - START, 
         myTimer = 0;
         
boolean state = false;

void setup() {
    // все пины как входы, экономия энергии
    adc_disable();          // отключить АЦП (экономия энергии)

    wdt_reset();            // инициализация ватчдога
    wdt_enable(WDTO_1S);    // разрешаем ватчдог на 1 секунду
    // 15MS, 30MS, 60MS, 120MS, 250MS, 500MS, 1S, 2S, 4S, 8S

    WDTCR |= _BV(WDIE);     // разрешаем прерывания по ватчдогу. Иначе будет резет.
    sei();                                   // разрешаем прерывания
    set_sleep_mode(SLEEP_MODE_PWR_DOWN); // максимальный сон
    
}


void loop() {
 
    mainTimer++;

    if (!state) {                           // если помпа не включена
        if (mainTimer - myTimer >= PERIOD) {   // таймер периода
            myTimer = mainTimer;                // сброс таймера
            state = true;                       // флаг на запуск
            pinMode(MOS, OUTPUT);               // пин как выход
            digitalWrite(MOS, HIGH);            // врубить
        }
    } 
    else {                                  // если помпа включена
        if (mainTimer - myTimer >= WORK) {     // таймер времени работы
            myTimer = mainTimer;                // сброс
            state = false;                      // флаг на выкл
            digitalWrite(MOS, LOW);             // вырубить
            pinMode(MOS, INPUT);                // пин как вход (экономия энергии)
        }
    }

    sleep_enable();   // разрешаем сон
    sleep_cpu();      // спать!
}

ISR (WDT_vect) {
    WDTCR |= _BV(WDIE); // разрешаем прерывания по ватчдогу. Иначе будет реcет.
}
[/code]
sadman41
Offline
Зарегистрирован: 19.10.2016

Тут давеча писали, что подобная система "от Гувера" устроила болото в доме. Хорошо, что остановили ея, пока лягухи не завелись. 

Так что поосторожней с энтим делом.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Уберите watchdog и будет вам счастье. 

Простой блинк после включения питания без заливки работает?

Макс и Ко
Offline
Зарегистрирован: 22.12.2018

Вряд ли это произошло из-за ошибок в коде или схеме подключения, скорее всего к этому привело отсутствие клапана в системе, который перекрывает воду, когда останавливается помпа

Аsam, блинк тоже перестаёт работать после отключения питания

Макс и Ко
Offline
Зарегистрирован: 22.12.2018

Пробовал, отдельно на дигиспарк подавать 5В но ничего не меняется. После прерывания питания программа не возобновляется. Скетчи пробовал на двух платах результат один и тоже…

 

 

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

конденсатор на Reset-GND навешай. И резистор к плюсу

Макс и Ко
Offline
Зарегистрирован: 22.12.2018

DetSimen, я Вас правильно понял?

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

читай 

http://easyelectronics.ru/podklyuchenie-mikrokontrollera-likbez.html

в середине картинка "Цепь надежного сброса"

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

Макс и Ко пишет:

DetSimen, я Вас правильно понял?

я в этих комиксах не понимаю ничо, в статье нормальная схема.  

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

DetSimen пишет:

конденсатор на Reset-GND навешай. И резистор к плюсу

Дело не а ресете. Прошивка и первый запуск же нормально проходят.

Макс и Ко
Offline
Зарегистрирован: 22.12.2018

DetSimen пишет:

Макс и Ко пишет:

DetSimen, я Вас правильно понял?

я в этих комиксах не понимаю ничо, в статье нормальная схема.  

Я в схемотехнике и программировании новичок, поэтому прошу прощения за комиксы! 

Схему нашёл, как собрать разобрался. Спасибо!!!

 

 

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

DetSimen пишет:

читай 

http://easyelectronics.ru/podklyuchenie-mikrokontrollera-likbez.html

в середине картинка "Цепь надежного сброса"

Там что, серьезно 100 мкФ?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Достал из загашника этот дигиспарк, который как-то заказал на али в очередном шопоголическом приступе.

Те же самые симптомы - спразу после прошивки скетч работает, а после перезапуска нет. Подтяжка ресета к +5В ничего не меняет.

Причем не важно как перезапускать - или заново в USB вставить, или подать внешнее питание, или просто ресет на 0 временно коротнуть. 

Ну, думаю, может китайци какой не тот будтлоадер залили. Залил в Нано arduino ISP, подключил это дигиспрак. Не тут-то было. avrdude не признает. Достал для проверки 45-ю тиньку, подключил - все нормально. Похоже какой-то клон недоделанный вместо 85и стоит. 

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

asam пишет:

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

уж не важгат ли )))

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018
Макс и Ко
Offline
Зарегистрирован: 22.12.2018

Спаял по предложенной схеме, не помогло, результат тот же.

 

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

собрал весной на дигиспарке  одну поделку - с тех пор работает в режиме 24/7 - сбоев нет

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

Макс и Ко пишет:

Спаял по предложенной схеме, не помогло, результат тот же.

прям как у В.Высоцкого ...и я пошёл попил поел - не полегчало... всё таки видимо чип левый

Макс и Ко
Offline
Зарегистрирован: 22.12.2018

Сэкономил блин...

Ведь когда заказывал, хотел Nano mini взять, вдруг бы решил что-то добавить...

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Если хочется экономии и совместимости с Нано/уно лучше брать мини про . Типа такой

https://ru.aliexpress.com/item/1pcs-lot-Pro-Mini-Module-Atmega328-5V-16M-Compatible-With-Nano/32823517187.html

только для заливки скетча нужен будет или USB конвертер типа такого https://ru.aliexpress.com/item/CH340E-USB-ttl-5-3-3/32902390274.html

Или другую ардуино с USB как программатор использовать

 

для любителей максимальной экономии и хардкора можно посоветовать платки на STM8

Макс и Ко
Offline
Зарегистрирован: 22.12.2018

Asam, спасибо за совет, обязательно попробую!

Всем спасибо за помощь!

 

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

У вас заряжатель не подключает аккумулятор, если я правильно понял. Подайте питание через микро-USB. Напряжение проверьте тестером.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Green пишет:

У вас заряжатель не подключает аккумулятор, если я правильно понял. Подайте питание через микро-USB. Напряжение проверьте тестером.

Какой заряжатель? Откуда у дигиспарка micro-USB? Где проверять наряжение?

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

Я только смотрю схему ТС.

Макс и Ко
Offline
Зарегистрирован: 22.12.2018

Green пишет:

У вас заряжатель не подключает аккумулятор, если я правильно понял. Подайте питание через микро-USB. Напряжение проверьте тестером.

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

 

 

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

asam пишет:

Ну, думаю, может китайци какой не тот будтлоадер залили. Залил в Нано arduino ISP, подключил это дигиспрак. Не тут-то было. avrdude не признает.

Некоторые производители этих платок отключают ногу ресет, что-б был дополнительный вывод. Если у вас отключен, то обычный программатор МК не увидит, и манипуляции с выводом ресета бессмысленны. Но само по себе отключение ресета не вызывыает такой проблемы. Предпологаю что тут скорее несоответствие версии аддона и бутлоадера.