Прошу помощи в решении проблемы с перезапуском digispark
- Войдите на сайт для отправки комментариев
Сб, 22/12/2018 - 22:43
Прошу помощи в решении проблемы с перезапуском 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]
Тут давеча писали, что подобная система "от Гувера" устроила болото в доме. Хорошо, что остановили ея, пока лягухи не завелись.
Так что поосторожней с энтим делом.
Уберите watchdog и будет вам счастье.
Простой блинк после включения питания без заливки работает?
Вряд ли это произошло из-за ошибок в коде или схеме подключения, скорее всего к этому привело отсутствие клапана в системе, который перекрывает воду, когда останавливается помпа
Аsam, блинк тоже перестаёт работать после отключения питания
Пробовал, отдельно на дигиспарк подавать 5В но ничего не меняется. После прерывания питания программа не возобновляется. Скетчи пробовал на двух платах результат один и тоже…
конденсатор на Reset-GND навешай. И резистор к плюсу
DetSimen, я Вас правильно понял?
читай
http://easyelectronics.ru/podklyuchenie-mikrokontrollera-likbez.html
в середине картинка "Цепь надежного сброса"
DetSimen, я Вас правильно понял?
я в этих комиксах не понимаю ничо, в статье нормальная схема.
конденсатор на Reset-GND навешай. И резистор к плюсу
Дело не а ресете. Прошивка и первый запуск же нормально проходят.
DetSimen, я Вас правильно понял?
я в этих комиксах не понимаю ничо, в статье нормальная схема.
Я в схемотехнике и программировании новичок, поэтому прошу прощения за комиксы!
Схему нашёл, как собрать разобрался. Спасибо!!!
читай
http://easyelectronics.ru/podklyuchenie-mikrokontrollera-likbez.html
в середине картинка "Цепь надежного сброса"
Достал из загашника этот дигиспарк, который как-то заказал на али в очередном шопоголическом приступе.
Те же самые симптомы - спразу после прошивки скетч работает, а после перезапуска нет. Подтяжка ресета к +5В ничего не меняет.
Причем не важно как перезапускать - или заново в USB вставить, или подать внешнее питание, или просто ресет на 0 временно коротнуть.
Ну, думаю, может китайци какой не тот будтлоадер залили. Залил в Нано arduino ISP, подключил это дигиспрак. Не тут-то было. avrdude не признает. Достал для проверки 45-ю тиньку, подключил - все нормально. Похоже какой-то клон недоделанный вместо 85и стоит.
. Достал для проверки 45-ю тиньку, подключил - все нормально. Похоже какой-то клон недоделанный вместо 85и стоит.
уж не важгат ли )))
Не, брал в All Electronics Trading Company
https://ru.aliexpress.com/item/Micro-Digispark-Kickstarter-USB-ATTINY85/...
Спаял по предложенной схеме, не помогло, результат тот же.
собрал весной на дигиспарке одну поделку - с тех пор работает в режиме 24/7 - сбоев нет
Спаял по предложенной схеме, не помогло, результат тот же.
прям как у В.Высоцкого ...и я пошёл попил поел - не полегчало... всё таки видимо чип левый
Сэкономил блин...
Ведь когда заказывал, хотел Nano mini взять, вдруг бы решил что-то добавить...
Если хочется экономии и совместимости с Нано/уно лучше брать мини про . Типа такой
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
Asam, спасибо за совет, обязательно попробую!
Всем спасибо за помощь!
У вас заряжатель не подключает аккумулятор, если я правильно понял. Подайте питание через микро-USB. Напряжение проверьте тестером.
У вас заряжатель не подключает аккумулятор, если я правильно понял. Подайте питание через микро-USB. Напряжение проверьте тестером.
Какой заряжатель? Откуда у дигиспарка micro-USB? Где проверять наряжение?
Я только смотрю схему ТС.
У вас заряжатель не подключает аккумулятор, если я правильно понял. Подайте питание через микро-USB. Напряжение проверьте тестером.
С подачей питания всё в порядке. Проблема именно с дигиспарком, он не запускает программу после прерывания питания.
Ну, думаю, может китайци какой не тот будтлоадер залили. Залил в Нано arduino ISP, подключил это дигиспрак. Не тут-то было. avrdude не признает.
Некоторые производители этих платок отключают ногу ресет, что-б был дополнительный вывод. Если у вас отключен, то обычный программатор МК не увидит, и манипуляции с выводом ресета бессмысленны. Но само по себе отключение ресета не вызывыает такой проблемы. Предпологаю что тут скорее несоответствие версии аддона и бутлоадера.