Всем привет. Использую данный код для управления люстрой через 433 передатчик и TSOP, а так же вывод времени через МК PT 6961 на экран-сегментный. Все работает. НО, как только отключаю из розетки, время отстает. DS3231 -выпаял диод, резистор и замкнул контакты- отставания остались. У меня етсь подозрение на мой код: Код (Text): #include "Wire.h" //код полностью рабочий 2015 #define DS1307_I2C_ADDRESS 0x68 #include "OasisLED.h" #include <Arduino.h> #include <IRremote.h> #include <RCSwitch.h> int RECV_PIN = 11; int push_button=0; long buttons[]={836800,836656,836611}; uint8_t clockPin = 3; uint8_t strobePin = 2; uint8_t dataPin = 4; OasisLED ledDisplay = OasisLED(clockPin, strobePin, dataPin); IRrecv irrecv(RECV_PIN); decode_results results; RCSwitch mySwitch = RCSwitch(); byte decToBcd(byte val) { return ( (val/10*16) + (val%10) ); } byte bcdToDec(byte val) { return ( (val/16*10) + (val%16) ); } void setDateDs1307(byte second, // 0-59 byte minute, // 0-59 byte hour, // 1-23 byte dayOfWeek, // 1-7 byte dayOfMonth, // 1-28/29/30/31 byte month, // 1-12 byte year) // 0-99 { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(0); Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.write(decToBcd(dayOfWeek)); Wire.write(decToBcd(dayOfMonth)); Wire.write(decToBcd(month)); Wire.write(decToBcd(year)); Wire.endTransmission(); } void getDateDs1307(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(0); Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } void setup() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; Wire.begin(); ledDisplay.initialize(); // Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver mySwitch.enableTransmit(10); mySwitch.setPulseLength(251); second = 30; minute = 00; hour = 23; dayOfWeek = 7; dayOfMonth = 17; month = 5; year = 15; // setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); } void loop() { printTime(); } void printTime() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); ledDisplay.setValue(hour*100+minute); if(irrecv.decode(&results)) { // Serial.println(results.value, HEX); if ((results.value == 0x37) || (results.value == 0x10037) ) { push_button++; if (push_button==0){regim3();} if (push_button==1){regim1();} if (push_button==2){regim2();} if (push_button>2){push_button=0;} // mySwitch.send(buttons[0],24); } delay (500); irrecv.resume(); } } void regim1() { mySwitch.send(buttons[0],24); } void regim2() { mySwitch.send(buttons[1],24); } void regim3() { mySwitch.send(buttons[2],24); }
Насколько отстает? Сам rtc, если ему обеспечить автономное питание, отсчитывает время несмотря на обвязку и код. Может с питанем что то не то или сам модуль неисправный?
Вот так еще не пробовал, т.к. когда подключал все было норм, потом сделал готовый проект и начались такие проблемы.
Если заливаю код например в 23:00 подаю напругу - все ок, начинают сбиваться в среднем за где-то 5 суток на 1-2 минуты, но как только отключаю напряжение с мк и если подождать немного (минут 5) - начинают отставать в среднем на 2-3 минуты. И так далее, чем дольше были выключен - тем больше отставание