tag 标签: i2c总线

相关博文
  • 热度 18
    2015-4-1 09:36
    2265 次阅读|
    0 个评论
    I2C 只是用两条双向的线,一条 Serial Data Line (SDA) ,另一条Serial Clock (SCL)。 SCL:上升沿将数据输入到每个EEPROM器件中;下降沿驱动EEPROM器件输出数据。(边沿触发) SDA:双向数据线,为OD门,与其它任意数量的OD与OC门成"线与"关系。 为了加深对I2C总线的理解,用C语言模拟IIC总线,边看源代码边读波形: 如下图所示的写操作的时序图:                                                   读时序的理解同理。对于时序不理解的朋友请参考“ I2C总线概述及时序总结 ” 完整的程序 如下: #include #define uchar unsigned char #define uint unsigned int #define write_ADD 0xa0 #define read_ADD 0xa1 uchar a; sbit SDA=P2^0; sbit SCL=P2^1; void SomeNop(); //短延时 void init(); //初始化 void check_ACK(void); void I2CStart(void); void I2cStop(void); void write_byte(uchar dat); //写字节 void delay(uint z); uchar read_byte(); //读字节 void write(uchar addr,uchar dat); //指定地址写 uchar read(uchar addr); //指定地址读 bit flag; //应答标志位 void main() { init(); write_add(5,0xaa); //向地址5写入0xaa delay(10); //延时,否则被坑呀!!! P1=read_add(5); //读取地址5的值 while(1); } //*************************************************************************** void delay() //简单延时函数 { ;; } //*************************************************************************** void start() //开始信号 SCL在高电平期间,SDA一个下降沿则表示启动信号 { sda=1; //释放SDA总线 delay(); scl=1; delay(); sda=0; delay(); } //*************************************************************************** void stop() // 停止 SCL在高电平期间,SDA一个上升沿则表示停止信号 { sda=0; delay(); scl=1; delay(); sda=1; delay(); } //*************************************************************************** void respons() //应答 SCL在高电平期间,SDA被从设备拉为低电平表示应答 { uchar i; scl=1; delay(); //至多等待250个CPU时钟周期 while((sda==1)(i250))i++; scl=0; delay(); } //*************************************************************************** void init() //总线初始化 将总线都拉高一释放总线 发送启动信号前,要先初始化总线。即总有检测到总线空闲才开始发送启动信号 { sda=1; delay(); scl=1; delay(); } //*************************************************************************** void write_byte(uchar date) //写一个字节 { uchar i,temp; temp=date; for(i=0;i8;i++) { temp=temp1; scl=0; //拉低SCL,因为只有在时钟信号为低电平期间按数据线上的高低电平状态才允许变化;并在此时和上一个循环的scl=1一起形成一个上升沿  delay(); sda=CY; delay(); scl=1; //拉高SCL,此时SDA上的数据稳定 delay(); } scl=0; //拉低SCL,为下次数据传输做好准备 delay(); sda=1; //释放SDA总线,接下来由从设备控制,比如从设备接收完数据后,在SCL为高时,拉低SDA作为应答信号 delay(); } //*************************************************************************** uchar read_byte()//读一个字节 { uchar i,k; scl=0; delay(); sda=1; delay(); for(i=0;i8;i++) { scl=1; //上升沿时,IIC设备将数据放在sda线上,并在高电平期间数据已经稳定,可以接收啦 delay(); k=(k1)|sda; scl=0;//拉低SCL,使发送端可以把数据放在SDA上 delay(); } return k; } //*************************************************************************** void write_add(uchar address,uchar date) //任意地址写一个字节 { start(); //启动 write_byte(0xa0); //发送从设备地址 respons(); //等待从设备的响应 write_byte(address); //发出芯片内地址 respons(); //等待从设备的响应 write_byte(date); //发送数据 respons(); //等待从设备的响应 stop();//停止 } //*************************************************************************** uchar read_add(uchar address) //读取一个字节 { uchar date; start(); //启动 write_byte(0xa0); //发送发送从设备地址 写操作 respons(); //等待从设备的响应 write_byte(address); //发送芯片内地址 respons(); //等待从设备的响应 start(); //启动 write_byte(0xa1); //发送发送从设备地址 读操作 respons(); //等待从设备的响应 date=read_byte(); //获取数据 stop(); //停止 return date; //返回数据 }
  • 热度 24
    2015-3-31 17:25
    2439 次阅读|
    0 个评论
    一.概述: I2C 是Inter-Integrated Circuit的缩写,发音为"eye-squared cee" or "eye-two-cee" , 它是一种两线接口。 I2C 只是用两条双向的线,一条 Serial Data Line (SDA) ,另一条Serial Clock (SCL)。 SCL:上升沿将数据输入到每个EEPROM器件中;下降沿驱动EEPROM器件输出数据。(边沿触发) SDA:双向数据线,为OD门,与其它任意数量的OD与OC门成"线与"关系。 二.输出级 每一个I2C总线器件内部的SDA、SCL引脚电路结构都是一样的,引脚的输出驱动与输入缓冲连在一起。其中输出为漏极开路的场效应管,输入缓冲为一只高输入阻抗的同相器,这种电路具有两个特点: 1)由于SDA、SCL为漏极开路结构(OD),因此它们必须接有上拉电阻,阻值的大小常为 1k8, 4k7 and 10k ,但1k8 时性能最好;当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线"与"关系。 2)引脚在输出信号的同时还将引脚上的电平进行检测,检测是否与刚才输出一致,为"时钟同步"和"总线仲裁"提供了硬件基础。 三. 主设备与从设备 系统中的所有外围器件都具有一个7位的"从器件专用地址码",其中高4位为器件类型,由生产厂家制定,低3位为器件引脚定义地址,由使用者定义。主控器件通过地址码建立多机通信的机制,因此I2C总线省去了外围器件的片选线,这样无论总线上挂接多少个器件,其系统仍然为简约的二线结构。终端挂载在总线上,有主端和从端之分,主端必须是带有CPU的逻辑模块,在同一总线上同一时刻使能有一个主端,可以有多个从端,从端的数量受地址空间和总线的最大电容 400pF的限制。   ● 主端主要用来驱动SCL line; ● 从设备对主设备产生响应; 二者都可以传输数据,但是从设备不能发起传输,且传输是受到主设备控制的。 四.速率: ● 普通模式:100kHz; ● 快速模式:400kHz; ● 高速模式:3.4MHz; 没有任何必要使用高速SCL,将SCL保持在100k或以下,然后忘了它吧。 【分页导航】 第1页: I2C总线概述 第2页: I2C总线时序总结:协议 第3页: I2C总线时序总结:工作过程 五.时序: 1、协议 (1)空闲状态 I2C总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。 (2)起始位与停止位的定义: 起始信号:当SCL为高期间,SDA由高到低的跳变;启动信号是一种电平跳变时序信号,而不是一个电平信号。 停止信号:当SCL为高期间,SDA由低到高的跳变;停止信号也是一种电平跳变时序信号,而不是一个电平信号。 (3)ACK 发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。 应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。 对于反馈有效应答位ACK的要求是,接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平。 如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放SDA线,以便主控接收器发送一个停止信号P。 如下图逻辑分析仪的采样结果:释放总线后,如果没有应答信号,sda应该一直持续为高电平,但是如图中蓝色虚线部分所示,它被拉低为低电平,证明收到了应答信号。 这里面给我们的两个信息是:1)接收器在SCL的上升沿到来之前的低电平期间拉低SDA;2)应答信号一直保持到SCL的下降沿结束;正如前文红色标识所指出的那样。 (4)数据的有效性: I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。 我的理解:虽然只要求在高电平期间保持稳定,但是要有一个提前量,也就是数据在SCL的上升沿到来之前就需准备好,因为在前面I2C总线之(一)---概述一文中已经指出,数据是在SCL的上升沿打入到器件(EEPROM)中的。 (5)数据的传送: 在I2C总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。数据位的传输是边沿触发。 【分页导航】 第1页: I2C总线概述 第2页: I2C总线时序总结:协议 第3页: I2C总线时序总结:工作过程 2、工作过程 总线上的所有通信都是由主控器引发的。在一次通信中,主控器与被控器总是在扮演着两种不同的角色。 (1)主设备向从设备发送数据   主设备发送起始位,这会通知总线上的所有设备传输开始了,接下来主机发送设备地址,与这一地址匹配的slave将继续这一传输过程,而其它slave将会忽略接下来的传输并等待下一次传输的开始。主设备寻址到从设备后,发送它所要读取或写入的从设备的内部寄存器地址; 之后,发送数据。数据发送完毕后,发送停止位: 写入过程如下:   发送起始位 ● 发送从设备的地址和读/写选择位;释放总线,等到EEPROM拉低总线进行应答;如果EEPROM接收成功,则进行应答;若没有握手成功或者发送的数据错误时EEPROM不产生应答,此时要求重发或者终止。 ● 发送想要写入的内部寄存器地址;EEPROM对其发出应答; ● 发送数据 ● 发送停止位. ● EEPROM收到停止信号后,进入到一个内部的写入周期,大概需要10ms,此间任何操作都不会被EEPROM响应;(因此以这种方式的两次写入之间要插入一个延时,否则会导致失败,博主曾在这里小坑了一下) 详细: 需要说明的是:①主控器通过发送地址码与对应的被控器建立了通信关系,而挂接在总线上的其它被控器虽然同时也收到了地址码,但因为与其自身的地址不相符合,因此提前退出与主控器的通信; (2)主控器读取数据的过程: 读的过程比较复杂,在从slave读出数据前,你必须先要告诉它哪个内部寄存器是你想要读取的,因此必须先对其进行写入(dummy write): ● 发送起始位; ● 发送slave地址+write bit set; ● 发送内部寄存器地址; ● 重新发送起始位,即restart; ● 重新发送slave地址+read bit set; ● 读取数据 主机接收器在接收到最后一个字节后,也不会发出ACK信号。于是,从机发送器释放SDA线,以允许主机发出P信号结束传输。 ● 发送停止位 详细: 【分页导航】 第1页: I2C总线概述 第2页: I2C总线时序总结:协议 第3页: I2C总线时序总结:工作过程
  • 热度 25
    2015-3-24 13:51
    1174 次阅读|
    0 个评论
       1 引言   自动测试设备在军事及工业领域的应用越来越广泛,然而在电路单元尤其是电路板测试中,由于被测单元种类多,被测通道数量大,传统的开关矩阵体积大、切换速度慢、电气性能差。已不能满足现代测试仪器高速、便携的要求。本文介绍了一种采用USB接口,利用I2C总线传输数据,由CPLD控制多路复用器件的大型开关矩阵结构,具有较高的切换速度及较好的电气性能,并满足了小型化的要求。    2 系统结构及功能   开关矩阵主要实现自动测试设备与被测电路单元之间的信息交换,功能如下:   (1)将程控电源系统输出的电源自动加至被测电路单元要求的引脚上;   (2)将自动测试设备信号源分系统输出的信号转接至被测电路单元要求的引脚上;   (3)将被测电路单元输出的信号转接至自动测试设备的适当测量通道上;   (4)为被测电路单元提供必要的外接元件,如负载、调整旋钮、大体积器件等。   不同的被测电路单元其连接器定义不同,每个插针都可能被定义为电源、输入信号、输出信号、外接元件端子之一。并且现代电子设备的电路单元通道数很多,大量的信号通道对ATE的开关矩阵设计提出了严峻的挑战。本文所设计的开关矩阵采取针床连接方式,可有效连接多种接插件。通过单片机控制的多路复用器,可将信号加至所需的被测通道,系统结构框图如图l所示。    3 硬件设计   3.1 测试电路结构   测试电路结构组成如图2所示。系统采用上、下位机的结构,上位机由计算机及控制软件组成,下位机由USB总线接口及控制板组成,USB模块通过I2C总线将控制数据传送给控制板上各个测试模块。控制板上各测试模块收到总线发送来的串行码流,译码后提取地址值,控制模块中的多路复用器选取相应通道。I2C是一种串行总线的外设接口,它采用同步方式串行接收或发送信息,主从设备在同一个时钟下工作,I2C由数据线SDA和时钟线SCL构成双向串行总线,由于I2C只有一根数据线,因此信息的发送和接收只能分时进行。各模块组件均并联在总线上,每一个模块都有唯一的地址。因此系统可在允许范围内增加或减少被测板数量,I2C总线上各节点模块支持热插拔,所以采取该方案可以有效减小测试系统体积,使用操作方便,可同时连接多个被测单元。    3.2 控制电路组成   本系统中,控制板上各测试模块均通过I2C总线与测试主机进行通讯,各模块地址由板上I2C芯片地址唯一确定,主机首先确定各板卡地址进行板选,与相应板卡建立通讯后,发送串行控制数据SDA。在同一时刻,I2C总线上只能有一个模块处于活动状态,利用多路复用器状态的“保持”特性,即可实现测试模块上及测试模块之间探针的切换。控制板电路结构组成如图3所示。   PCA9501是一款带中断的8位I2C和SMBus总线器件,用于接收总线发送的数据并与本地地址进行比较,若结果相同则将数据转换成并行地址信号送至CPLD器件EMP7128,CPLD用来接收PCA9501发送的并行数据,并分析数据内容,将不同的串行数据转换成相应的并行控制数据并通过I/O端口送出,从而控制32路多路复用器件ADG732的通道选择。    4 系统软件设计   系统软件包括主机控制程序和下位机测试程序,主机控制程序可以采用通用编程工具如VisualC++或者C++Builder等来进行编写。下位机测试程序包括USB控制程序、I2C发送程序、CPLD控制程序,其中USB控制程序及I2C发送程序是对USB控制器CY7C68013进行编程,采用Keil C51编译器开发,CPLD控制程序采用MAX PLUSⅡ进行开发,Verilog HDL硬件描述语言编写。    4.1 主机控制程序设计   主机控制程序设计取决于下位机控制流程,下位机控制流程如图4所示。   (1)打开USB设备并进行初始化,然后复位设备,将所有ADD732芯片内部开关打开。   (2)主机下达命令进行被测板选择,被测板地址由被测板上的PCA9501确定,对被测板进行选择只需向所需地址发送数据即可,所有被测板对接收到的地址数据进行比较,只有通过比较的被测板才会通过PCA9501将数据发送给CPLD。   (3)选取被测板,选择测试芯片,即多路复用器阵列中多路复用器件的选择,CPLD解析接收到的芯片选择数据,将该数据转换成对多路复用器的片选信号,并禁用多路复用器件。   (4)主机程序将测试点地址发送到USB端点缓冲区,由CPLD解析发送的端点选择数据,将该数据转换成对多路复用器的通道选择信号,并使能多路复用器件,将板选、片选及测试点选择数据同时送出,则相应被测板上的多路复用器将导通,从而实现测试点的选择。   (5)每个芯片上所有点测试完毕后,在进行下一个芯片测试之前,需要将该芯片复位。同样在所有测试点测试完毕后,将整个开关矩阵复位。   主控程序数据发送部分程序如下:    4.2 下位机测试程序设计   下位机测试程序包括USB单片机CY7C68013接收主机发送的控制数据,并解释主机数据,然后通过该单片机的I2C接口将数据送至测试板上的I2C数据转换器件PCA9501,PCA9501将接收的被测板地址同自身地址相比较,如相同将自动把串行数据转成并行数据送CPLD,CPLD解析发送的并行数据,然后在使能信号的作用下(通过USB控制器件CY7C68013的PB7口)将数据同时送出。   单片机接收/发送数据程序如下:   CPLD用来接收PCA9501发送的并行数据,并对接收的数据进行解释,然后将其转化成对多路复用器件ADG732的控制信号,程序如下:    5 结束语   本系统采用USB接口技术及I2C数据传输方式,有效缩小了系统体积,为多通道开关矩阵的小型化做出了有益的探索。所研制的开关矩阵可挂接多个测试模块,并支持热插拔,具有很强的通用性和可扩展性,与传统的固定式测试针床相比,无需针对每个被测电路板制作专门的通道板,减小了体积,降低了成本,为低成本、便携化、通用化、多通道测试方案提供了一种新的实现手段。
  • 热度 21
    2014-7-21 10:11
    1192 次阅读|
    0 个评论
    早期的数字FM处理芯片TEA5767由Philips公司开发并被广泛地使用,但该芯片需要外加音频放大电路才能驱动耳机。鉴于此,国内锐迪科微电子公司独立开发了一颗具备高接收灵敏度的FM立体声数字芯片RDA5807P,具有自动搜台、重低音、静音、休眠、直接驱动耳机等优异的性能。本文介绍用RDA5807P芯片设计和制作了一款带遥控功能的收音机。 1 收音机总体设计方案 收音机的总体设计框图如图1所示。本收音机采用单节3.7 V、容量1500 mAh的锂电池作力电源,在使用寿命期内可以用手机充电器反复对它进行充电,使用非常方便。采用低功耗的AVR单片机ATmega8L作为微控制器,负责处理和协调各模块电路的工作,ATmega8L的工作电压为2.7~5.5 V,片内有512字节的EEPROM,不用专门外接EEPROM芯片就可以将掉电前接收电台的频道和音量信息保存起来,重新开机后又可以恢复原来的信息。调频收音机模块采用国产芯片RDA5807P加上少量的外围元件组成,由微控制器通过I2C总线接口对芯片内部寄存器进行写/读操作。通过键盘或红外遥控发射器可以进行自动搜台、手动选台、音量调节、静音操作。LCD用于显示当前收听电台的频率、音量等级等信息。音频功率放大器放大当前收听电台的音频信号,驱动扬声器发出声音。 图1 收音机的总体设计框图 【分页导航】 第1页: 收音机总体设计方案 第2页: 系统硬件电路设计(1) 第3页: 系统硬件电路设计(2) 第4页: 软件程序设计:搜台程序设计 第5页: 软件程序设计:红外遥控解码程序设计 2 系统硬件电路设计 2.1 电源管理模块电路设计 电源管理模块电路如图2所示。LM2054是一款单节锂电池恒流、恒压线性充电芯片,最大充电电流可达到800 mA。它只需外接极少的外部元件,预设4.2 V充电电压,精度达到±1%。充电时,若锂电池电压低于4.2V,充电指示灯D101亮,充电达到预设值4.2 V后指示灯D101熄灭。 图2 电源管理模块电路 2.2 微控制器及键盘、显示、红外遥控接收电路设计 微控制器及键盘、显示、红外遥控接收电路如图3所示。 图3 微控制器及键盘、显示、红外遥控接收电路 键盘K1~K6用于选频、音量调节等。红外遥控接收头连接到单片机ATmega8L的PB0,用单片机的输入捕获功能进行解码。为了减少液晶显示器LCD1602A占用单片机过多的I/O口,数据接口只使用高4位,在写入命令或数据时,分两次写入,先写高4位,再写低4位。为了降低LCD的用电量,LCD的背光灯用单片机的PD3和PC1进行控制,当用户设置好想收听的电台,5 s后LCD背光灯自动熄灭。 【分页导航】 第1页: 收音机总体设计方案 第2页: 系统硬件电路设计(1) 第3页: 系统硬件电路设计(2) 第4页: 软件程序设计:搜台程序设计 第5页: 软件程序设计:红外遥控解码程序设计 2.3 调频收音模块电路设计 调频收音模块电路如图4所示。RDA5807P是国产的FM立体声收音机接收芯片,加上极少的外围元件且基本不需要校准,通过程序设定即可接收欧洲、美国和日本的调频波段。单片机通过I2C总线SCL和SDA将访问RDA5807P芯片所需的地址、命令、数据写入内部的寄存器中,也可以通过该总线读出芯片内部寄存器中的数据,取得接收频道的数据和音量值,供显示使用。RDA5807P的输出经磁珠F301、F302及电容器C30 3、C304抑制高频干扰后,可以直接驱动32 Ω的耳机发出声音,也可以接到下级音频功放进行放大,推动扬声器发出声音。 图4 调频收音模块电路 2.4 音频功率放大电路设计 音频功率放大电路如图5所示。PAM8403是一块D类音频功率放大器芯片,它具有谐波失真低、噪声串扰小、可直接驱动喇叭的特点。用它制作的音频功放,电路简单,工作可靠。在5 V电源和4 Ω负载条件下,能输出3 W的功率。效率可达90%以上,非常适合于用电池供电的便携式电子产品。电路中 引脚可通过单片机输出低电平控制其进行静音和关闭功放系统。 图5 音频功率放大电路 2.5 红外发射模块电路设计 红外遥控发射器电路如图6所示。BA5104是一块红外遥控编码芯片,内接有上拉电阻,无键按下时,电路中无电流流通,振荡电路不起振,无遥控编码信号输出。当有某一键按下时,电路产生455 kHz的振荡信号,由BA5104内部电路进行12分频,获得38 kHz的载波信号。此时按键的编码信息和C1、C2引脚的状态信息对38 kHz载波进行编码调制,经15引脚串行输出,由三极管Q501、Q502构成的达灵顿驱动电路放大,经外发射管向空间发射,同时14引脚输出高电平,发射状态指示灯D501点亮。 图6 红外遥控发射器电路 【分页导航】 第1页: 收音机总体设计方案 第2页: 系统硬件电路设计(1) 第3页: 系统硬件电路设计(2) 第4页: 软件程序设计:搜台程序设计 第5页: 软件程序设计:红外遥控解码程序设计 3 系统软件程序设计 软件程序设计主要包括读写RDA5807P芯片相关的模块程序、频率及音量显示模块程序、按键检测与功能设定模块程序、遥控解码及功能设定模块程序等。本设计选用CodeVisionAVR作为开发软件,软件中集成有LCD1602、I2C总线驱动程序,不用再编写相应的底层函数,使用非常方便。故在此仅介绍RDA5807P芯片工作在RDA5807P模式及采用I2C总线接口进行搜台的程序设计和红外遥控解码程序的设计。 3.1 搜台程序设计 搜台程序可用硬件模式进行搜台,也可以采用软件模式进行搜台。本文着重介绍硬件模式搜台,软件模式搜台可参照硬件搜台模式进行编程。 I2C总线接口是由START、命令字节、数据字节及每个字节后的ACK及NACK比特、STOP组成。RDA58027P芯片写器件地址为0x20,读器件地址为0x21。RDA5807P芯片内部的I2C总线接口有4个写数据寄存器,其地址分别是0x02、0x03、0x04、0x05。2个读数据寄存器,其地址分别为0x0A、0x0B,每个数据寄存器又分为高字节和低字节。这些数据寄存器的地址是不可见的,不能通过单片机直接对指定地址的数据寄存器进行读/写操作。因此,单片机在发出读/写命令字节后,接下来必须对数据寄存器进行连续地读/写操作。其子程序如下: 硬件模式搜台程序设计主要是通过调用连续写和连续读操作子程序来对收音模块寄存器进行读/写,其程序流程图如图7所示。 图7 硬件模式搜台程序流程图 根据该流程图编写的子程序如下: 【分页导航】 第1页: 收音机总体设计方案 第2页: 系统硬件电路设计(1) 第3页: 系统硬件电路设计(2) 第4页: 软件程序设计:搜台程序设计 第5页: 软件程序设计:红外遥控解码程序设计 3.2 红外遥控解码程序设计 由BA5104的编码格式可知;遥控码的一帧长度为12位,其中包括3位起始码、2位用户码、7位指令码。遥控码的每一帧时间间隔为4T,T=1.6879 ms为一位遥控码的周期。一帧完整的遥控码如图8所示。 图8 一帧遥控码 遥控码中“1”用3T/4的高电平与T/4的低电平表示,“0”用T/4的高电平与3T/4的低电平表示,一位遥控码的波形如图9所示。 图9 一位遥控码 由图9可见,要用单片机来判断遥控发射器发出的是“0”还是“1”,关键是要判断接收脉冲下降沿至上升沿之间的时间。可以采用外部中断法,也可以采用输入捕获功能法,本文采用后一种方法。解码的思路是:初始化时,将ATmcga8L的ICP1引脚设置为输入状态,下降沿触发,当红外接收头接收到红外遥控信号时,产生下降沿,单片机自动将TCNT1寄存器中的值保存至ICR1寄存器中,在捕获中断服务程序中将ICR1中的值保存至T1中;然后将ICP1设置为上升沿触发,当再次产生捕获中断时,将ICR1中的值保存至T2中,将ICP1设置为下降沿触发,并将TCNT1置0。之后计算出T2-T1的时间并保存至事先开辟的数组中,要注意的是,T2-T1有可能出现负值,此时要将(T2-T1+0xffff)再保存,直到接收完12位数据。 保存在数组中的数据,当其值为3/4×1.687 9ms≈1266μs时,被认为接收到“1”,当其值为1/4×1.687 9 ms≈422 μs时,被认为接收到“0”。由于遥控发射器和单片机所使用的晶振频率与标称值会有一定的偏差,所以在程序中要留有一定的余量。 结语 经过多次比对测试,该收音机可以清晰、稳定地收听省府及本地所发射的调频电台信号。 【分页导航】 第1页: 收音机总体设计方案 第2页: 系统硬件电路设计(1) 第3页: 系统硬件电路设计(2) 第4页: 软件程序设计:搜台程序设计 第5页: 软件程序设计:红外遥控解码程序设计
  • 热度 22
    2012-8-13 09:49
    922 次阅读|
    0 个评论
      1.简介 I 2 C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。这篇文档主要介绍如何使用iMCU7100EVB模拟I 2 C总线。在本文档中还用到了EEPROM 24C02。 注意:本文是基于100引脚封装的W7100A芯片,由于W7100A 64引脚封装的GPIO口的数目有限,所以这篇应用手册可能不会正确地用于64引脚封装的W7100A芯片。详细信息,请查阅W7100A 64引脚封装的GPIO引脚介绍。   2.I 2 C I 2 C总线的特点如下: -两路总线线路:串行数据线(SDA)和串行时钟线(SCL) -可使用标准模式(100kbit/s),低速模式(10kbit/s)和高速模式   3.硬件配置 这一章将介绍EVB和EEPRORM(24C02)之间的电路。 (更多关于MCU封装信息:32引脚(8pin*4) 2.54mm间距,请参考附录) 注意 由于本文使用24C02 EEPROM,如果用户使用的是不同的芯片,需要修改相关电路。 在本例中,EEPROM地址(A0~A2)被设置为‘000’,同时WP处于无效状态。iMCU7100EVB的P3_0和P3_1口分别设置为SDA和SCL。这些端口内部已经具有上拉寄存器,因此不需要外部上拉。 4.软件 4.1 初始化 4.2 读字节(Byte READ) 如图2所示为I 2 C总线的读(READ)时序。设备地址一共有8位,高4位为0x0A。在低4位中,其中3位用于地址线,余下的一位为写(WRITE)(0)/读(READ)(1)标志位。 I 2 C总线的读(READ)函数如下程序3所示。第一个eep_writedata是虚拟的(DUMY)。因为EEPROM的地址为‘000’,所以第二个eep_wirtedata的设备地址也为‘0000’。关于此单元函数的详细信息,请参考I 2 C相关代码。 4.3 写字节(Byte Write) 如图3所示为I 2 C总线的写(WRITE)时序。为了能够写入设备地址,将W位置为0,程序4给出了如何在I 2 C-bus使用写(WRITE)程序的代码。   5.模拟I 2 C总线读/写(READ/WRITE)演示   终端机设置 设置超级终端机(Hyper terminal)来演示和执行I 2 C总线的读/写功能,具体过程如下:   6.附录  iMCU7100开发板布局   这就是本文的全部内容,谢谢大家的访问浏览,如果想更深刻的了解WIZnet的产品和技术,请随时与我们联系。 可以直接留言或登录WIZnet官方网站:http://www.iwiznet.cn 或者来电:86-10-84539974(转166),QQ:2377211388, 邮箱:wiznetbj@wiznettechnology.com 联系人:Jerry ,谢谢! 公司微博是: http://weibo.com/wiznet2012 公司博客是:http://blog.iwiznet.cn/  
相关资源
  • 所需E币: 4
    时间: 2019-12-25 21:58
    大小: 267.73KB
    上传者: 微风DS
    本文首先简要介绍了视频解码芯片SAA7113的特点与应用,然后介绍了初始化时的寄存器配置,用51单片机控制7113的方法,最后给出了初始化7113的汇编程序及控制方法。……
  • 所需E币: 4
    时间: 2019-12-25 21:17
    大小: 23.5KB
    上传者: 238112554_qq
    将操作系统和相应硬件设备连接起来,编写联系硬件和软件的驱动程序至关重要。本文主要讨论在WinCE操作系统下,如何设计实现S3C2410芯片具有I2C接口的驱动程序;详细介绍WinCE下,流驱动程序的编写方法,同时将驱动通过PlatformBuilder编译进操作系统,最后用动态链接库的方式提供给用户使用。……
  • 所需E币: 4
    时间: 2019-12-25 21:17
    大小: 51KB
    上传者: 微风DS
    FM31256是一种基于I2C总线、采用铁电体技术的多功能存储芯片。除了非易失存储器外,该器件还具有实时时钟、低电压复位、看门狗计数器、非易失性事件计数器、可锁定的串行数字标识等多种功能。文章主要介绍了FM31256的基本功能、原理,并结合实例给出了其在电磁铸轧电源控制装置中的具体应用方法。……
  • 所需E币: 5
    时间: 2019-12-25 21:17
    大小: 68.5KB
    上传者: givh79_163.com
    串行扩展总线技术是新一代单片机技术发展的一个显著特点,其中Philips公司推出的I2C总线最为著名。ST9+系列是意法半导体公司的单片机产品,能够很好地支持I2C总线协议。本文以ST9+单片机为例阐述I2C总线协议,并给出在ST9+单片机上实现I2C总线驱动程序的流程和方法。……
  • 所需E币: 5
    时间: 2019-12-25 21:09
    大小: 55KB
    上传者: 微风DS
    TSL256x是TAOS公司推出的一种高速、低功耗、宽量程、可编程灵活配置的光强传感器芯片。本文简要介绍了TSL256x的基本特点、引脚功能、内部结构和工作原理,给出了TSL2561的实用电路、软件设计流程以及核心程序。……
  • 所需E币: 5
    时间: 2019-12-25 17:21
    大小: 46.35KB
    上传者: wsu_w_hotmail.com
    用VerilogHDL实现I2C总线功能……
  • 所需E币: 5
    时间: 2019-12-28 23:32
    大小: 31KB
    上传者: 238112554_qq
    在某些应用中要求多个DS1859器件挂接在同一条I2C总线上。本应用笔记阐述了在一条I2C总线上同时接两个DS1859器件时,如何改变其中一个器件的I2C从地址。所给出的方法可推广应用于一条I2C总线接多个DS1859的情况。本应用笔记还讨论了如何访问器件的辅助从地址……
  • 所需E币: 5
    时间: 2019-12-30 10:16
    大小: 140.26KB
    上传者: quw431979_163.com
    文中介绍了PCF8563的结构、功能及工作原理。结合其在8051系统中的应用实例,给出了PCF8563与8051单片机的硬件接口电路和C语言软件编程程序。……
  • 所需E币: 4
    时间: 2019-12-30 10:18
    大小: 49KB
    上传者: 2iot
    介绍了I2C总线的特点及数据通信的基本协议,并以AT89C51单片机与美国MAXIM公司的8位电压输出DAC数模转换器MAX517之间的通信为例,详细介绍了通过I2C总线进行数据通信的具体硬件电路连接和其通信子程序的编程方法。……
  • 所需E币: 4
    时间: 2019-12-30 10:21
    大小: 220.37KB
    上传者: 978461154_qq
    介绍基于PCF8563设计户外侄计时系统的硬件接口电路及PCF8563软件编程。该系统在强日光下显示屏的字符清晰可见,能够长时间连续稳定地工作。……
  • 所需E币: 4
    时间: 2019-12-25 15:11
    大小: 177.51KB
    上传者: givh79_163.com
    随着嵌入式产品应用的普及,如何有效地保护开发者的科研成果不被非法仿制变得越来越重要.本文从逻辑加密存储芯片AT88SC25616C的内部结构出发,详细介绍该芯片的功能、特点、工作原理和使用方法;讨论了基于嵌入式系统的AT88SC25616C在IC卡加油机中的具体应用,并给出AT88SC25616C与嵌入式系统芯片ATmega128的硬件接口和软件编程.……
  • 所需E币: 5
    时间: 2019-12-25 01:56
    大小: 1.71MB
    上传者: wsu_w_hotmail.com
    摘要:本文介绍了I2C总线的工作过程,使用图形化设计工具,采用HDL-Verilog高级硬件描述语言按照自顶向下的设计方法完成了I2C从器件模式的IP核设计。通过特殊的设计思路,可实现高速数据传输。对此IP核用FPGA进行了验证,最终把它作为一个独立IP成功的应用于ASIC芯片设计中。关键词:I2C总线;IP核;FPGA;HDL-VerilogDOI:10.3969/j.issn.1005-5517.2011.06.012……
  • 所需E币: 5
    时间: 2019-12-24 23:18
    大小: 37.52KB
    上传者: 16245458_qq.com
    通过I2C总线来识别HMP8156A和HMP8154IdentifyingtheHMP8154andHMP8156AviatheI2CBusTMTechnicalBriefSeptember1997TB352.1Author:StevenMartinIntroductionThefunctionrequiresoneargumentwhichindicatesthestateoftheencoder’sI2Caddressselectinput,SA.TheTheHMP8154andHMP8156Aar……
  • 所需E币: 4
    时间: 2020-1-6 14:48
    大小: 121.07KB
    上传者: 978461154_qq
    TA8776N东芝公司I2C总线控制的环绕声处理专用集成电路……
  • 所需E币: 1
    时间: 2019-7-26 10:22
    大小: 452.13KB
    I2C总线(InterIntegratedCircuit)是飞利浦公司于上个世纪80年代开发的一种“电路板级”的总线结构。与其它串行接口相比,无论从硬件结构、组网方式、软件编程都有很大的不同。在AT89C51系统上使用汇编语言模拟I2C总线的各种信号及编程原理,为自主开发、设计具有I2C总线接口的系统打下一个良好的基础,也为其它串口的模拟编程创造一个好的思路和可行的方法。I2C总线的主要特点1.二线制结构。即双向的串行数据线SDA、串行同步时钟线SCL。总线上的所有器件其同名端都分别挂在SDA、SCL线上
  • 所需E币: 1
    时间: 2019-7-26 10:09
    大小: 9.32MB
    目录前言第一章绪论1.18位单片机(MCU)的新浪潮1.1.18位机的巨大市场前景1.1.28位单片机的新天地1.1.3单片机的总线与非总线应用1.2应用系统设计中的串行扩展技术1.3芯片间串行接口与串行总线1.3.1串行外围接口SPI1.3.2串行通讯接口MICROWIRE/PLUS1.3.3I2C串行扩展总线1.3.4串行扩展总线的模拟传送1.4常用的I2C总线接口器件1.4.1带I2C总线接口的单片机1.4.2Philips公司I2C总线接口的通用外围器件第二章I2C总线的结构与工作原理2.1概述2.1.1I2C总线在单片机应用系统设计中的意义2.1.2I2C总线的一般应用特性2.1.3I2C总线系统中的几个名词、术语2.2I2C总线的基本原理2.2.1I2C总线的接口电路2.2.2I2C总线的信号及时序定义2.2.3I2C总线上的数据传送格式2.2.4I2C总线的寻址约定2.38×C552的I2C接口的结构与工作原理2.3.1I2C总线接口SIO1的结构2.3.2I2C总线的特殊功能寄存器2.3.3I2C总线的工作方式2.3.4SIO1的特殊情况及其处理方法2.3.5SIO1总线状态处理模块2.4I2C总线规约的扩展2.4.1高速数据传输模式2.4.210位寻址方式的扩展第三章I2C总线应用系统硬件设计3.1概述3.1.1I2C总线系统中的节点3.1.2I2C总线的通用系统与专用系统3.1.3ACCESSBUS系统3.2I2C总线及器件的电气特性3.2.1I2C总线及器件的电气规范3.2.2I2C总线器件的供电3.2.3总线上RP、RS的取值3.2.4总线的走线结构3.3I2C总线的通用器件演示系统3.3.1I2C-87C×××评估板结构3.3.2I2C-87C×××评估板的单元电路3.3.3I2C-87C×××评估板应用指南3.3.4BOL的I2C总线学习实验板3.4I2C总线接口的扩展3.4.1PCF8584的结构及工作原理3.4.2PCF8584的工作方式3.4.3PCF8584的时序及电气特性3.4.4典型接口扩展的硬件电路3.4.5应用实例3.5I2C总线的驱动扩展3.5.182B715的基本结构及特性3.5.2带82B715驱动的最小总线系统3.5.382B715的测试系统第四章常用I2C总线接口通用器件的结构与工作原理4.1概述4.1.1器件的种类、型号及寻址字节4.1.2I2C接口器件的一般数据操作原理4.1.3器件的软、硬件界面4.1.412C总线与模拟I2C总线的选择4.2静态RAMPCF8570/8570C/85714.2.1概述4.2.2结构与特性参数4.2.3工作原理及数据操作格式4.2.4PCF8570/8570C/8571的节电方式4.2.5应用指南4.3E2PROMAT24C系列4.3.1概述4.3.2结构与特性参数4.3.3工作原理与数据操作格式4.3.4其它系列E2PR0M产品简介4.3.5应用指南4.4I/O口扩展器件PCF85744.4.1概述4.4.2结构与特性参数4.4.3工作原理及数据操作格式4.4.4应用指南4.5A/D及D/A转换器PCF85914.5.1概述4.5.2结构与特性参数4.5.3工作原理及数据操作格式4.5.4应用指南4.6日历时钟、SRAMPCF85834.6.1概述4.6.2结构与特性参数4.6.3工作原理及数据操作格式4.6.4应用指南4.7LED驱动控制器SAA10644.7.1概述4.7.2结构与特性参数4.7.3工作原理及数据操作格式4.7.4应用指南4.8160段LCD驱动/控制器PCF85764.8.1概述4.8.2结构与特性参数4.8.3工作原理及数据操作格式4.8.4PCF8576的系统硬件构成与操作方式第五章I2C总线的应用程序设计原理5.1概述5.2I2C总线的数据操作过程及总线状态处理5.2.1I2C总线数据传送过程5.2.2I2C总线状态处理的有关SFR5.2.3I2C总线数据操作的有关内存单元5.3I2C总线数据传送的通用软件包5.3.1I2C总线状态处理模块5.3.2I2C中断及状态处理散转程序5.3.3I2C总线的初始化及通用读、写子程序5.3.4I2C总线通用软件包(IIC)5.4主方式下I2C总线数据传送的通用软件包5.4.1主方式下的状态处理模块5.4.2主方式下的通用软件包MIIC5.5I2C总线应用程序设计5.5.1应用程序设计界面5.5.2应用程序设计实例第六章I2C总线数据传送的模拟6.1概述6.2I2C总线数据传送的典型信号模拟6.2.1I2C总线数据传送的时序要求6.2.2I2C总线数据传送的典型信号模拟6.2.3典型信号模拟子程序6.2.4I2C总线模拟传送的通用子程序6.3模拟I2C总线的通用软件包6.3.1模拟I2C总线通用软件包组成6.3.2通用软件包应用指南6.4模拟I2C总线应用程序设计6.4.1应用程序设计界面6.4.2应用程序设计实例附录:I2C总线接口器件
  • 所需E币: 1
    时间: 2019-7-26 10:25
    大小: 622.98KB
    1.概述:I²C是Inter-IntegratedCircuit的缩写,发音为"eye-squaredcee"or"eye-two-cee",它是一种两线接口。I²C只是用两条双向的线,一条SerialDataLine(SDA),另一条SerialClock(SCL)。SCL:上升沿将数据输入到每个EEPROM器件中;下降沿驱动EEPROM器件输出数据。(边沿触发)SDA:双向数据线,为OD门,与其它任意数量的OD与OC门成"线与"关系。
  • 所需E币: 1
    时间: 2019-7-26 10:24
    大小: 221.23KB
    I2C总线接口技术详细介绍
  • 所需E币: 0
    时间: 2019-7-26 10:23
    大小: 1.08MB
    I2C总线的定义简单地说,就是用于连接到总线的器件传递信息的通道。它支持任何IC生产过程(NMOS,CMOS,双极性),是一个多主机的总线,可以连接多于一个能控制总线的器件到总线。是一种双向两线总线,包括一条串行数据线(SDA),一条串行时钟线(SCL),总线空闲时这两条线路都是高电平。