所有提交的EM系统将被重定向到网上投稿系统.作者被要求将文章直接提交给网上投稿系统各自的日志。

基于I2C协议检查的实时时钟实现

NajibGhatte1,维尼特·佩雷拉2, MadurDattaprasad3., TusharSurwadkar4
康西卡·罗德里格斯工程学院电子系研究生[电子学]。班德拉,孟买,印度
有关文章载于Pubmed,谷歌学者

更多相关文章请访问国际电气、电子和仪器工程高级研究杂志

摘要

本文讨论了实时时钟(RTC)在各种具体应用中维持实时约束的不足。实时时钟技术被广泛应用于各种电子设备中,从而使跟踪轨迹的安全性变得灵活多样。数码相机在其中使用了RTC,因此当图像被捕获时,它将有细节,在哪一天和日期被捕获,以供将来参考。当涉及到安全、有说服力的证据和调查的需要时,这种rtc非常有用。单片机AT89C55采用I2C编程协议采用Dallas RTC IC,以保持实时,并在LCD上显示。参数可以通过矩阵键盘来改变。

关键字

清债信托公司,我2C, LCD,键盘,89C55。

介绍

整个设计简要介绍了采用I2C协议实现实时时钟与AT89C55单片机的接口,采用主从配置。实时时钟基本上就像手表一样,它靠电池运行,即使停电也能保持时间。使用RTC,即使微控制器被重新编程或从串行总线或电源插头断开,也可以跟踪长时间线。大多数微控制器,包括Arduino,都有一个内置的计时器,称为millis(),芯片中也有内置的计时器,可以跟踪更长的时间周期,如分钟或天。好吧,最大的原因是millis()只跟踪Arduino上次供电以来的时间。这意味着当电源打开时,毫秒计时器被设置回0。Arduino不知道今天是“周二”还是“3月8日”,它只知道“距离上次开机已经有14000毫秒了”。
它成为强制性的程序在日期和时间,你将有计数从这一点上。但如果它失去了动力,就会导致时间再次重置。就像非常便宜的闹钟:每次停电时,它们都会在12:00点闪烁。虽然这种基本的计时对某些项目来说是可以的,但有些项目(如数据记录器、时钟等)需要具有一致的计时,当Arduino电池耗尽或重新编程时不会重置。因此,包含了一个单独的RTC。RTC芯片是一种专门用来记录时间的芯片。它可以计算闰年,知道一个月有多少天,但它不关心日光节约时间(因为它在不同的地方都是变化的)[1]

设计

DS1307串行实时时钟是一种低功耗;全二进制编码十进制(BCD)时钟/日历加上56字节的NV SRAM。地址和数据通过2线双向总线串行传输。时钟/日历提供秒、分、小时、日、日、月和年信息。对于少于31天的月份,月末日期会自动调整,包括闰年的修正。时钟运行在24小时或12小时格式与AM/PM指示器。DS1307内置功率检测电路,可检测电源故障并自动切换到电池供电[2]。
I2C协议只需要两个信号:时钟信号和数据信号。时钟被称为SCL或SCK(串行时钟),而数据被称为SDA(串行数据)。I2C的独特之处在于使用了信号条件和变化的特殊组合。基本上,只有两个:开始和停止。还有一些其他的条件是由这两个的存在或不存在而产生的,但它们是使这个总线独特的核心。
一个I2C总线可能有多个主设备和许多“从”设备共享同一总线,尽管在现实世界中很少看到多个主设备。信号争用是通过一个开放的收集器驱动方案来避免的,在那里没有设备会驱动一个高信号,它只驱动低信号;对于高压,总线被一个电阻器拉起。寻址方案允许设备确定主机是否正在查询它。当从设备通过发送一个确认位(驱动SDA低)来响应它的地址时,主设备看到一个从设备存在;如果没有这样的寻址设备存在,SDA线被拉高,这被Master解释为不确认。
IDLE总线条件定义为SDA和SCL都高。(此条件可以存在于总线事务中,但通常是暂时的。)Master生成一个'START"条件,后面跟着7位地址,然后是一个读写位。如果从设备检测到地址匹配,它将在下一个时钟周期通过驱动SDA低发送一个ACK;如果没有slave识别该地址,则SDA行将被单独拉高。在一个成功的ACK之后,数据将被发送到从设备或从从设备读取(取决于读/写位所指示的内容)。因此,每个字节是9位:7个地址加1个R/W加1个ACK/NAK,或者8个数据加1个ACK/NAK。事务的最后一个数据字节通常应该跟在NAK后面,以表明它将是最后一个字节。在此之后,裁判长应发出停止或重新启动。[

实现

设计通过Labcenter Electronics提供的Proteus ISIS v7.6 sp4进行模拟。该设计是使用原理图捕获创建的,并进行了模拟。

A.矩阵键盘

这是一个键的矩阵,响应于特定的行和列。在矩阵键盘的情况下,开关的两端都连接到端口引脚。本设计需要一个4 × 4矩阵键盘,即四行四列,共16个键,其中10个键用于数字输入,其余6个键用于实时参数调整。因此,8行代码可以使用16个按键。图1示出矩阵键盘及其与所述控制器的接口的示意图。
图像

B.达拉斯DS1307 RTC

DS1307是一款低功耗时钟/日历,具有56字节的电池支持SRAM。时钟/日历提供秒、分、小时、日、日、月和年信息。对于少于31天的月份,月末的日期会自动调整,包括闰年的修正。DS1307在I2C总线上作为从设备工作。访问是通过实现START条件并提供设备识别码后跟寄存器地址来获得的。后续寄存器可以依次访问,直到执行STOP条件为止。当VCC低于1.25 × VBAT时,设备终止正在进行的访问,并重置设备地址计数器。此时设备的输入将不会被识别,以防止错误的数据从超出容差的系统写入设备。当VCC低于VBAT时,设备切换到低电流电池备份模式。上电后,当VCC大于VBAT +0.2V时,设备从电池切换到VCC,当VCC大于1.25 × VBAT时,设备能识别输入。 Fig. 2 shows the interfacing of the DS1307 with the microcontroller.
图像
通过读取适当的寄存器字节来获得时间和日历信息。表I显示了RTC寄存器。时间和日历通过写入适当的寄存器字节来设置或初始化。时间寄存器和日历寄存器的内容采用BCD格式。星期数在午夜注册增量。与星期几对应的值是用户自定义的,但必须是连续的(例如,如果1等于星期日,那么2等于星期一,等等)。不合逻辑的时间和日期条目将导致未定义的操作。寄存器0的第7位是时钟停止(CH)位。当这个位被设置为1时,振荡器被禁用。当清除为0时,振荡器被启用。 On first application of power to the device the time and date registers are typically reset to 01/01/00 01 00:00:00 (MM/DD/YY DOW HH:MM:SS). The CH bit in the seconds register will be set to a 1. The clock can be halted whenever the timekeeping functions are not required, which minimizes current (IBATDR).
图像
DS1307可以在12小时或24小时模式下运行。小时寄存器的第6位被定义为12小时或24小时模式选择位。高时,选择12小时模式。在12小时模式中,第5位是AM/PM位,逻辑高为PM。24小时模式下,第5位是第二个10小时位(20 ~ 23小时)。当改变12/24小时模式位时,必须重新输入小时值。当读取或写入时间和日期寄存器时,次要(用户)缓冲区用于防止内部寄存器更新时出现错误。当读取时间和日期寄存器时,用户缓冲区被同步到任何I2C START上的内部寄存器。当时钟继续运行时,从这些辅助寄存器读取时间信息。这消除了在读取过程中内部寄存器更新时重新读取寄存器的需要。 The divider chain is reset whenever the seconds register is written. Write transfers occur on the I2C acknowledge from the DS1307. Once the divider chain is reset, to avoid rollover issues, the remaining time and date registers must be written within one second.
DS1307支持I2C协议。将数据发送到总线上的设备定义为发射机,接收数据的设备定义为接收机。控制消息的设备称为主机。由主机控制的设备称为从机。总线必须由主控设备控制,主控设备生成串行时钟(SCL),控制总线访问,并生成START和STOP条件。DS1307在I2C总线上作为从机运行。
只有当总线不繁忙时,才可以发起数据传输。
在数据传输过程中,当时钟线为HIGH时,数据线必须保持稳定。当时钟线处于高位时,数据线的变化将被解释为控制信号。
因此,定义了以下总线条件:
1)总线不忙:数据和时钟线都保持高。
2) START数据传输:当时钟为HIGH时,数据线状态从HIGH到LOW的变化定义了一个START条件。
3)停止数据传输:数据线状态的变化,从低到高,而时钟线是高,定义了停止条件。
4)数据有效:数据线的状态表示有效数据,在START条件之后,数据线在时钟信号的HIGH周期期间保持稳定。必须在时钟信号的LOW期间更改线路上的数据。每位数据有一个时钟脉冲。每次数据传输都以START条件开始,并以STOP条件结束。在START和STOP条件之间传输的数据字节数不受限制,由主设备决定。信息按字节传输,每个接收方用第九个比特表示确认。在I2C总线规范中定义了标准模式(100 kHz时钟速率)和快速模式(400 kHz时钟速率)。DS1307仅在标准模式(100 kHz)下工作。
5)确认:每个接收设备,当寻址时,有义务在接收到每个字节后生成一个确认。主设备必须生成一个额外的时钟脉冲,该脉冲与该确认位相关联。确认设备必须在确认时钟脉冲期间拉下SDA线,使SDA线在确认相关时钟脉冲的HIGH期间稳定在LOW。当然,设置和保持时间必须考虑在内。主服务器必须通过不在从服务器上打卡的最后一个字节上生成确认位来向从服务器发出数据结束的信号。在这种情况下,从服务器必须保持数据线为HIGH,以使主服务器能够生成STOP条件。图3所示为SDA和SCL使用I2C协议进行数据传输的时序图
图像

C.字母数字液晶

液晶显示器是非常简单的接口与控制器以及成本效益。本文设计中使用的字母数字显示为4× 20(4行,每行20个字符),如图4所示。LCD需要3条控制线(RS, R/W和EN)和8(或4)条数据线。数据线上的数量取决于操作模式。如果在8位模式下操作,则需要8条数据线+ 3条控制线,即总共需要11条线。如果在4位模式下操作,则需要4条数据线+ 3条控制线,即7条线。我们如何决定使用哪种模式?这很简单,如果你有足够的数据线,你可以使用8位模式,如果有时间限制,即显示应该更快,那么我们必须使用8位模式,因为基本上4位模式比8位模式需要多两倍的时间。
图像
当RS值为低(0)时,数据将被视为命令。当RS值高(1)时,认为发送的数据是文本数据,应该显示在屏幕上。当R/W为低值(0)时,数据总线上的信息正在写入LCD。当RW高(1)时,程序有效地从LCD读取。大多数情况下,不需要从LCD读取,因此这条线可以直接连接到GND,从而节省一条控制器线。ENABLE引脚用于锁存数据引脚上的数据。高-低信号需要锁存数据。LCD在EN线降低的瞬间解释并执行命令。如果EN没有实例化,指令将永远不会被执行。[5]

D.单片机AT89C55

AT89C55WD是一款低功耗;高性能CMOS 8位微控制器,20K字节的Flash可编程只读存储器和256字节的RAM。该器件采用Atmel高密度非易失性存储器技术制造,并兼容行业标准80C51和80C52指令集和引脚。片上闪存允许程序存储器由传统的非易失性存储器程序员进行用户编程。Atmel AT89C55WD是一款功能强大的微型计算机,通过在单片芯片上结合多功能8位CPU和Flash,为许多嵌入式控制应用提供了高度灵活和成本效益的解决方案。采用Keil交叉编译器,用嵌入式C语言对单片机进行编程,生成Intel-hex文件并嵌入到控制器中进行仿真。5为嵌入式代码流程图。将生成的十六进制文件嵌入单片机中,并对设计进行仿真,得到最优结果。
图像

结果

在仿真平台上对所提出的设计进行仿真。字母数字液晶显示时间,日期,日期外包的RTC。通过矩阵键盘可以改变参数,从而得到最佳结果。图6显示了按预期显示的LCD。
图像

结论

成功实现了I2C协议与RTC的实时编程,为手机、医院等各种实时运行系统提供了必要的实时时钟维护。它甚至满足了军事应用的需要,提供了一些根据需要更改时间和日期的功能。

参考文献

  1. (2012) DS1307 RTC实时时钟迷你突破。(在线)。可用:http://www.ladyada.net/learn/breakoutplus/ds1307rtc.html。
  2. “DS1307 64 x 8串行实时时钟数据表,”达拉斯半导体。
  3. (2010) I2C协议-它是如何工作的,以及要注意什么[在线]。可用:http://www.i2cprotocol.com/。
  4. AT89C55WD数据表,Atmel Corporation。
  5. (2011)液晶显示器接口到8051。(在线)。可用:http://www.dnatechindia.com/tutorial/8051 - tutorial/interfacing lcd - 8051. - html。
  6. (2001) DS1307与8051兼容微控制器的接口[在线]。可用地址:http://www.maximintegrated.com/appnotes/ index.mvp/id/95。
  7. Muhammed Ali Mazidi, Janice GillispieMazidi, Rolin D. Mcklinlay, 8051微控制器和使用汇编和C的嵌入式系统,第2版,Pearson Prentice Hall, 407-429页,2009。
全球科技峰会