PCF8583 с задержкой Arduino в одну секунду?

Я пытаюсь соединить микросхему RTC : PCF8583 с Arduino Uno. Я использую точно такую же схему, как показано ниже, за исключением того, что вместо переменного конденсатора рядом с кварцевым генератором я использовал керамический конденсатор 22 Пф.

Что касается программирования, то я использовал библиотеку Arduino PCF8583

Код, который я использую, выглядит следующим образом :

#include <Wire.h> // необходимо, иначе приложение не будет строиться должным образом
#include <stdio.h>
#include <PCF8583.h>

/*
* последовательный интерфейс чтения/записи к PCF8583 RTC через интерфейс I2C
*
* Аналоговый вход Arduino 5 - I2C SCL (PCF8583 pin 6)
* Аналоговый вход Arduino 4 - I2C SDA (PCF8583 pin 5)
*
* Вы можете установить тип, отправив его YYMMddhhmmss;
* точка с запятой в конце говорит о том, что вы закончили...
*
*/

int correct_address = 0;
PCF8583 p (0xA0);   
void setup(void){
 Serial.begin(9600);
 Serial.print("booting...");
 Serial.println(" done");
}

void loop(void){
 if(Serial.available() > 0){
   p.year= (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48)) + 2000;
   p.month = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   p.day = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   p.hour  = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   p.minute = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   p.second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48)); 
   // Use of (byte) type casting and ascii math to achieve result.  

   if(Serial.read() == ';'){
     Serial.println("setting date");
     p.set_time();
   }
 }


 p.get_time();
 char time[50];
 sprintf(time, "%02d/%02d/%02d %02d:%02d:%02d",
  p.year, p.month, p.day, p.hour, p.minute, p.second);
 Serial.println(time);
 delay(3000);
}

При установке времени и даты все прошло нормально, но при получении даты/времени результат всегда равен ПОЛОВИНЕ периода истекшего времени, например, если я установил время 10:30 и проверяю его через 30 минут, я получаю 10:45 вместо 11:00.

Я действительно не знаю, является ли это аппаратной или программной проблемой. Если у кого-то есть какие-то идеи по этому поводу, это было бы очень заметно !

Заранее спасибо !

, 👍1

Обсуждение

Простите, но этот код последовательного считывания ужасен. Прочитайте это: https://hackingmajenkoblog.wordpress.com/2016/02/01/reading-serial-on-the-arduino/, @Majenko

Мне кажется, батарея 3 В не служит никакой полезной цели., @Edgar Bonet

Разве VCC (PCF8583 pin 8) не должен быть подключен? Вместе с диодами и резервным аккумулятором?, @Mikael Patel


1 ответ


-1
  1. Сверьте свою схему с таблицей данных и убедитесь, что это имеет смысл.

  2. Проверьте, чтобы убедиться, что ваш ввод верен. Вы можете сразу же распечатать его обратно или установить etc на известное время и посмотреть, будет ли оно сохраняться.

  3. Проверьте библиотеку, чтобы убедиться, что она хороша.

,