27.10.2017, 16:28 | #1 (permalink) |
Новичок
Регистрация: 10.02.2015
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Энергоэффективный режим работы Arduino с DS3231
250 мкА из которых утекают по линии SQW которая будет arduino. То есть если arduino спит без подключенной линий SQW часов потребление 30-40 мкА (что устраивает). Но если подключить линию SQW к пину 2 ( который в режиме INPUT_PULLUP и еще подтянут к питанию 5кОм) то паразитный ток 250мкА все портит. (То есть в SQW при режиме ожидания висит резюк 10кОм перед землей, в момент срабатывания будильника сопротивление убирается и коротится на землю, что пробуждает контролер). Если в линию еще последовательное ставить резистр, то ток уменьшается но arduino уже не просыпается. Ниже код урезанный именно та часть которая отвечает за сон и пробуждение (так то линия запитки и дачтиков висит на одной из ног дуины, перед сном они переводятся в состояние INPUT, что посзволило снизить с единиц мА до десятков мкА). Код:
#include <DS3231.h> #include <Wire.h> #include <LowPower.h> #include <avr/sleep.h> #include <avr/power.h> #include <SPI.h> #include <Streaming.h> #define wakePin 2 DS3231 clock; RTCDateTime dt; void setup() { pinMode(wakePin, INPUT_PULLUP); clock.begin(); clock.enableOutput(false); clock.armAlarm1(false); clock.armAlarm2(false); clock.clearAlarm1(); clock.clearAlarm2(); } void loop() { setSleepTimer(1); sleepNow(); } } void wakeUp() { // Just a handler for the pin interrupt. } void setSleepTimer(int mins) { uint8_t hours = mins / 60; uint8_t mins_left = mins - hours * 60; dt = clock.getDateTime(); uint8_t hnow = dt.hour; uint8_t mnow = dt.minute; uint8_t sec = dt.second; mnow += mins_left; if (mnow >= 60) { mnow -= 60; hnow += 1; } hnow += hours; if (hnow > 23) { hnow -= 24; } clock.setAlarm1(0, hnow, mnow, sec, DS3231_MATCH_H_M_S); } void sleepNow() { ADCSRA = 0; power_all_disable(); attachInterrupt(0, wakeUp, LOW); PINs_to_sleep(); LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF); sleep_enable(); sleep_mode(); sleep_disable(); power_all_enable(); detachInterrupt(0); PINs_to_work(); delay(100); } |
27.10.2017, 16:28 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Пожалуйста, просмотрите данные топики, скорее всего там будет решение вашего вопроса Двухканальный режим работы памяти Режим работы А транзистора Samsung 710 N - неоптимальный режим работы Странный режим работы машины |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Метки |
arduino, ds3231, lowpower |
|
|