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.
Я действительно не знаю, является ли это аппаратной или программной проблемой. Если у кого-то есть какие-то идеи по этому поводу, это было бы очень заметно !
Заранее спасибо !
@Mohamed Mbarki, 👍1
Обсуждение1 ответ
Сверьте свою схему с таблицей данных и убедитесь, что это имеет смысл.
Проверьте, чтобы убедиться, что ваш ввод верен. Вы можете сразу же распечатать его обратно или установить etc на известное время и посмотреть, будет ли оно сохраняться.
Проверьте библиотеку, чтобы убедиться, что она хороша.
- Не удается обновить время в RTC через I2c
- Попытка понять узкое место частоты дискретизации датчика
- Интерфейс Ардуино PC8563
- DS1337 с общим подтягиванием I2C
- Нужно сделать кнопку, чтобы выключить будильник на часах
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
- Отправка и получение различных типов данных через I2C в Arduino
- Как работают функции вне цикла void?
Простите, но этот код последовательного считывания ужасен. Прочитайте это: https://hackingmajenkoblog.wordpress.com/2016/02/01/reading-serial-on-the-arduino/, @Majenko
Мне кажется, батарея 3 В не служит никакой полезной цели., @Edgar Bonet
Разве VCC (PCF8583 pin 8) не должен быть подключен? Вместе с диодами и резервным аккумулятором?, @Mikael Patel