使用Arduino开发板连接PCF8563实时时钟模块

admin|
2802

在本篇文章中,我们将学习如何将PCF8563实时时钟模块与Arduino开发板进行连接,并在1602 LCD显示屏上显示当前时间和日期。在市场上有很多种实时时钟模块,如DS1307和DS3231等。但是在功耗方面,它们的功耗略高一些,如果我们使用电池供电的设备应用程序,它们会很快耗尽电池。所以如果需要选择功耗极低的实时时钟模块,那么可以采用PCF8563模块。该模块也是一个I2C模块。


PCF8563是针对低功耗优化的CMOS实时时钟和日历芯片。还提供可编程时钟输出、中断输出和低电压检测器。所有地址和数据都通过两线双向I2C总线串行传输。最大总线速度为400kbit/s。


所需的组件

●    Arduino UNO开发板

●    1602 LCD显示屏

●    PCF8563实时时钟模块

●    连接跳线

●    面包板


PCF8563实时时钟模块

该实时时钟模块基于NXP公司的PCF8563T,该芯片可编程,其I2C通信高达400KHz,并附带高精度实时时钟芯片组。



它提供多种功能,例如外部可编程时钟输出、闹钟、定时器和备用电池。它比DS1302 或DS1307更稳定、更精确。PCF8563实时时钟模块提供实时时钟/日历功能,可以由板载电池驱动,即使在微控制器关闭的情况下也可以独立工作。它是一种低成本、极其精确的I2C实时时钟模块。


PCF8563的主要特性

1.  基于32.768kHz石英晶体提供年、月、日、星期、小时、分钟和秒

2.  世纪标志

3、时钟工作电压:室温下1.0 V至5.5 V

4、后备电流低;在VDD = 3.0 V 和 Temp = 25C 时典型值为 0.25A

5.  400kHz 两线 I2C 总线接口

6.  外围设备的可编程时钟输出(32.768 kHz、1.024 kHz、32 Hz 和 1 Hz)

7.  报警和定时器功能

8.  集成振荡器电容

9.  内部上电复位 (POR)

10.  I2C-bus从机地址:读A3h,写A2h

11.  开漏中断输出引脚


PCF8563的引脚排列

PCF8563实时时钟模块是一个I2C模块,即它工作在2线协议上。它具有SDA和SCL引脚,可轻松与任何微控制器连接。I2C总线的读取地址是A3h,写入地址是A2h。


它包含4个引脚,分别是:

引脚 1.  VCC — 1V 至 5.5V

引脚 2.  GND — GND

引脚 3. SDA — 串行数据

引脚 4. SCL — 串行时钟


PCF8563实时时钟模块与Arduino的硬件连接

以下是用于将PCF8563实时时钟模块与Arduino UNO开发板连接的电路图。本文在面包板上组装了电路。



将PCF8563模块的SDA和SCL引脚分别连接到Arduino开发板的A4和A5 引脚。将其VCC连接到5V或3.3V,将其GND连接到Arduino的GND引脚。同样,将LCD显示屏的引脚1、5、16连接到GND,引脚2、15连接到VCC。在LCD显示屏的3脚连接一个10K电位器来调节对比度。LCD显示屏的引脚4、6、11、12、13、14分别连接到Arduino开发板的数字引脚12、11、5、4、3、2。


代码

以下是将PCF8563实时时钟模块与Arduino连接并获取时间和日期的代码。但在此之前,您需要为它安装一个库。从以下链接下载库文件:PCF8563 RTC 库


现在从下面复制代码并将其上传到Arduino开发板。请更改代码中的日期和时间以匹配当前时间/日期。

  1. #include <Wire.h>

  2. #include <Rtc_Pcf8563.h>

  3. #include <LiquidCrystal.h>


  4. //init the real-time clock

  5. Rtc_Pcf8563 rtc;


  6. LiquidCrystal lcd(12 ,11 ,5 ,4 ,3 ,2);


  7. void setup()

  8. {

  9.   // set up the LCD's number of rows and columns:

  10.   lcd.begin(16, 2);

  11.   lcd.setCursor(4, 0);

  12.   lcd.print("PCF8563");

  13.   lcd.setCursor(0, 1);

  14.   lcd.print("Real Time Clock");

  15.   delay(4000);

  16.   lcd.clear();

  17.   

  18.   //clear out all the registers

  19.   rtc.initClock();

  20.   //set a time to start with.

  21.   //day, weekday, month, century, year

  22.   rtc.setDate(20, 3, 1, 20, 20);

  23.   //hr, min, sec

  24.   rtc.setTime(16, 38, 48);

  25. }


  26. void loop()

  27. {

  28.   lcd.setCursor(0, 0);

  29.   lcd.print("Time:");

  30.   lcd.setCursor(6, 0);

  31.   //lcd.print(rtc.formatTime(RTCC_TIME_HM));

  32.   lcd.print(rtc.formatTime());


  33.   lcd.setCursor(0, 1);

  34.   lcd.print("Date:");

  35.   lcd.setCursor(6, 1);

  36.   //lcd.print(rtc.formatDate(RTCC_DATE_ASIA));

  37.   lcd.print(rtc.formatDate());

  38.   

  39. // delay(1000);

  40.    

  41. }

复制代码


运行结果

上传代码后,LCD显示屏将开始显示当前时间和日期。