历史上的今天
今天是:2024年10月18日(星期五)
2019年10月18日 | 24C02在PIC单片机系统中的应用
2019-10-18 来源:eefocus
MICROCHIP公司的PIC16系列单片机以其精简的指令和较强的端口驱动能力在各个领域得到广泛的应用。在需要储存较大数量数据的控制领域,24C02可以解决PIC16C8×系列单片机片内EEPROM不足的问题,用以保存诸如用户设置参数、采集到的数据等。
由于部分PIC单片机不具备I2C总线接口,在应用时必须用软件法加以解决。
在软件编制时应当严格遵循I2C总线规则,并注意24C02的片内读写周期时间,调整好程序流程,以避免写不进、读不出的问题。
下面将笔者在实际工作中遇到的问题和解决的方法进行简单的介绍,希望可以给同行一些帮助。
首先约定,数据由微处理器发送到24C02称“写”、“发”,反之称“读”、“收”。24C02支持顺序读写和随机读写,文中以随机读写方式为例进行介绍。
一、硬件电路(如图1所示)。
使用微处理的任意两个通用I/O端口(图中用RA2、RA3)作为与24C02的连接,其中一个作为时钟SCL线,另外一个作为数据SAD线。两个端口均接22kΩ上拉电阻。
二、软件设计
首先简要介绍一下用EEPROM的I2C总线的规则。
初始状态时,SCL、SDA两线都为高。
当SCL为高电平时,如果SDA线跌落,认为是“起始位”。
当SCL为高电平时,如果SDA线上升,认为是“停止位”。
除此之外,在发送数据的过程中当SCL为高电平时,SDA应保持稳定。
ACK应答位指在此时钟周期内由从器件(EEPROM)把SDA拉低,表示回应。这时主器件(PIC16微处理器)的SDA口的属性应该变为输入以便检测。
1. 在写数据周期应该依次执行以下过程:
1)发“起始位”。2)发“写入代码”(8bit),1010(A1A2A3)0,其中的A1、A2、A3三位是片地址,由24C02的硬件决定,文中采用000。3)收“ACK”应答(1bit)。4)发EEPROM片内地址(即要写入EEPROM的什么位置)(8bit)。从00到FF中的任意一个,对应EEPROM中的相应位。5) 收“ACK”应答(1bit)。6)发要发送的数据(8bit),即要存储到EEPROM中的数据。7)发“停止位”。
接下来,如图2所示,进入轮询程序以便检验24C02片内写周期是否完成。如果已经完成则进入下一个字节的写操作过程。如果没有完成则继续等待,直到完成。
2. 在读数据周期,依次执行以下过程:
1)发“起始位”。2)发“写入代码”(8bit),1010(A1A2A3)0,其中A1、A2、A3三位是片地址,由24C02的硬件决定,文中采用000。3)收“ACK”应答(1bit)。4)发“EEPROM”片内地址(即要读出EEPROM的位置)(8bit)。从00到FF中的任意一个,对应EEPROM中的相应位。5)收“ACK”应答(1bit)。6)发“起始位”(1bit)。7)发“读出代码”(8bit),1010(A1A2A3)1,其中A1、A2、A3三位是片地址,由24C02的硬件接线决定,文中采用000。8)接收。9)发ACK应答。10)发“停止位”。
要特别注意的两个问题是:1)24C02有一个约10ms的片内写周期。在这个周期内,24C02是不对外界的操作作出反应的。2)在发送数据的过程中,要确保当SCL为高电平时,SDA保持稳定。
解决第一个问题的常见方法有两个,其一为采用延时等待,确保在写过程中,在一个字节完成发送了停止位之后,微处理器等待足够的时间,通常应该超过10ms,再送下一个字节,这段时间用来等待EEPROM完成片内写周期。另一个是采用轮询的方式,判断EEPROM是否完成了片内写周期。这种方式的主导思想是,当向EEPROM发送写标志后,正常情况下,EEPROM应该有ACK应答。但是当EEPROM在进行片内写周期的时候,则不会产生这样的应答。程序据此判断,EEPROM是否完成了片内的写周期程序。如果完成,则可以继续写入下一个要写的内容,否则继续等待。
第一种方法编程较为简单,但是会浪费大量的机器时间,并且程序的延时时间不好确定。第二种方法的优点在于,虽然编程较为复杂,但是较为快速,对其余的程序模块影响较少,便于完成程序的模块化设计。
对于在发送数据的过程中,要确保当SCK为高电平时,SDA必须保持稳定,应该在程序中利用软件给予保证。
如果可以很好的解决以上两个问题,数据的写入和读出是方便快捷和可靠的。
史海拾趣
|
秀偶的STM32-3.2寸TFT-ADS830-IDT7205示波器完工!完全开源!60M采样速率!! 最近一直在玩STM32和LCD屏,从字符到TFT,从1.8到3.5寸,挨个都摸了个摸,公司产品出来了,可一直想用这些东东来作点什么. 示波器上班用公司的,虽说也是便携的,但也不好带回家去用呵,看看市场上动辙千元以上,唉,还是自己动手来DIY方便自己,也造福网友 ...… 查看全部问答> |
|
需要选择一款数字I/O卡,主要是用来进行信号的延时,输入的是光电开关转换的数字量,经过I/O卡的延时处理,输出触发信号去驱动摄像机进行数据采集,延迟大约0.5秒,速度不需要很快,希望用过类似性价比比较高的高手推荐一款,价格在1000元以内。… 查看全部问答> |
|
vxworks目标机运行一段时间后就失去一切网络连接了,有可能是什么原因造成的呢? 我的基于vxworks5.5(tornado2.2)的嵌入式系统负责计费,并及时将信息通过网络(ftp功能)传到服务器上。 可是经常在运行一段时间后(例如几个小时,或者一天以后)发现失去了网络连接。 ftp, telnet都无法连到目标机上,但是系统其他功能还正常, ...… 查看全部问答> |
|
近期准备学习DSP,现在手头有一块2812芯片,想买块板子自己焊接(最小系统),于是上淘宝转了转,发现淘宝卖2812最小系统板的商家特别少。 目前在淘宝上看中了两块板子,可是同样是最小系统这两块板子差价惊人:一块20元、另一块130多(板子整体质 ...… 查看全部问答> |
|
在工程simpleapp工程文件中有个sapi.c文件中有个API专门指定某个设备是否可以入网/****************************************************************************** * @fn zb_PermitJoiningRequest ...… 查看全部问答> |
|
李想老师讲解的STM32单片机视频,讲的通俗易懂,上去看看吧。 https://download.eeworld.com.cn/detail/zhangdaijinqf/551611 … 查看全部问答> |




