AVR 单片机学习(九)iic总线及TWI模块的使用方法

发布者:bluepion最新更新时间:2015-02-06 来源: 51hei关键字:AVR  单片机  iic总线  TWI模块 手机看文章 扫描二维码
随时随地手机看文章
  • IIC总线定义与特点
  • I2C总线的工作原理
  • AVR的TWI模块的使用方法
  • AT24C02IIC inter integrated circuit  总线是一种由PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如:电源和系统风扇,可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。
    TWI:ATMega 系列单片机内集成两线制串行接口模块,ATmegl文档称为TWI接口事实上TWI与PHILIOS的I2C总线是同一回事,之所以叫它TWI是因为这样命名可使ATmel避免交术语版税。所以,TWI是兼容I2C的一种说法。
    I2C总线最只要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10KPS的最大传输率支持40个组件,I2C总线的另一个优点是,它支持多主控(MULTIMASTERING),其中任何能够进行发送和接受的设备都可以称为主总线,一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
     
    由于AVR 有上拉电阻所以 R1 R2 可以不要。其实还的共地应该是3根线。在多主控上有个总线总裁的知识可以参阅相关文档学习。呵呵、初学者不用了解。
    I2C总线是由数据线SDA和时钟线SCL构成的串行总线,可发送和接受数据。在CPU与被控IC之间、IC与IC之间进行双向传送、最高传送速率100KBPS.各种被控制电路均并联在这条总线上,最高传送速率100KBPS.各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能,CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定调整的类别(如对比度、亮度等)及需要调整的量。这样各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。
    oI2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
    o开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
    o结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
    o应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
    o这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。
     
    发送地址跟上面右边那个两个发送数据 0   是一样的由时钟来锁存相应的数据位,地址共七位,第8位是读还是写状态,读的话置1  写 置0 。第9位是应答为,切记应答位不是单片机发出的,而是I2C器件发出的。应答位是这样产生的,I2C器件在接收到完整的8位数据之后,I2C器件判定接受成功,它会向总线发送一个应答信号,可以看到就是在一个时钟脉冲期间,数据线SDA保持低电平就是0,当然发送完地址位之后呢?就发送数据,长度可能是可能1个字节或多个字节。数据的个数跟器件是有关系的。比如AT24C02 EEPROM芯片对他进行读写操作 如写可以进行1  8 字节,当地址数据结束后来一个结束信号。表示这一帧结束了。
    下面说下ATmega 16 的TWI模块。下图 (由于ATmega 16 的技术文档讲的比较详细了,所以我们也结合atmege 16 的数据手册说了)。
     
    这是两线的一些特点:(自己翻一下吧)
    一、简单,但是强大而灵活的通讯接口,只需两根线
    二、支持主机和从机的操作
    三、器件可以工作于发送或接受
    四、7位地址空间允许128个从机
    五、高达400KHZ的数据传输率
    六、斜率受控制的输出驱动器
    七、可以抑制总线的尖峰噪声控制器
    八、完全可变成的从机地址以及公共地址
    九、睡眠时地址匹配可以唤醒AVR
    首先看下数据传输和帧格式下图(传输 数据 (位))(TWI总线上数据位的传送与时钟脉冲同步。时钟线为高时,数据线电压必须保持稳定,除非在启动与停止的状态下。官方的解释)
    其实这个图说明在SCL为高电平期间 SDA 数据必须稳定0 或1
    当然还有起始位与停止位如下图
    (翻译如下)
    {
    主机启动与停止数据传输。主机在总线上发出START信号以启动数据传输;在总线上发出STOP信号以停止数据传输。在START与STOP 状态之间,需要假定总线忙,不允许其它主机控制总线。特例是在START与STOP 状态之间发出一个新的START状态。这被称为REPEATED START状态,适用于主机在不放弃总线控制的情况下启动新的传送。在REPEATED START之后,直到下一个STOP,需要假定总线处于忙的状态。这与START是完全一样的,因此在本手册中,如果没有特殊说明,START与REPEATEDSTART均用START表述。如下所示,START与STOP状态是在SCL线为高时,通过改变SDA电平来实现的。[page]
    }
    开始停止时序图


     
     像这个图中间的一些开始停止和从新开始在绝大数都是用不到的。就不细说了。
    下图是地址数据包格式(好好看看是 地址数据的讲解)
    翻译下:所有在TWI总线上传送的地址包均为9位,包括7位地址位、1位READ/WRITE控制
    位与1位应答位。如果READ/WRITE为1,则执行读操作;否则执行写操作。从机被寻
    址后,必须在第九个SCL (ACK)周期通过拉低SDA作出应答。若该从机忙或有其它原因
    无法响应主机,则应该在ACK周期保持SDA为高。然后主机可以发出STOP状态或
    REPEATED START 状态重新开始发送。地址包包括从机地址与分别称为SLA+R或
    SLA+W的READ或WRITE位。
    地址字节的MSB首先被发送。从机地址由设计者自由分配,但需要保留地址0000 000
    作为广播地址。
    当发送广播呼叫时,所有的从机应在ACK周期通过拉低SDA作出应答。当主机需要发送
    相同的信息给多个从机时可以使用广播功能。当Write位在广播呼叫之后发送,所有的从
    机通过在ACK周期通过拉低SDA作出响应。所有的从机接收到紧跟的数据包。注意在整
    体访问中发送Read位没有意义,因为如果几个从机发送不同的数据会带来总线冲突。
    所有形如1111 xxx格式的地址都需要保留,以便将来使用。
    地址包格式图下图:
    这个图从右边往左边看先发送的最高位 最后发的是低位。 从 1---9 最后一位 ACK 响应。
    下面是数据包下图


    官方解释


    可见数据包是8位数据加一个应当位。
    下图是地址和数据包一个完整的传输。组合一起
     
     


    SLA +RW 就是地址数据 的传送的字节数由应用程序的协议决定。 1个字节   4 8 个字节数据。
    下图是多主机总线系统如图(这个大部分场合用不到所以不用看 以后可以了解下)
    解释




    下面讲解下TWI 模块的使用方法:如图构成
    首先看下SCL  SDA 有两个引脚   是在22  与23 脚 PC0 PC1 下面是这两脚的说明




    还有一个波特率发声单元与USART相似 他控制SCL 的时钟周期,当然这个比特率有两个寄存器决定,TWBR  TWPS 有SCL frequency 公式的。CPU的单片机晶振频率 除以 16加上2倍的TWBR  乘以4的TWPS它的次数注意:如果工作在主机模式不应该小于10 下面有解释[page]


    下面是总线的接口单元主要包括一些寄存器总线总裁。我们没必要关心然后又一个地址匹配单元看下啊(只有在多级通讯时候多个单片机进行I2C通讯时候我们给每个单片机设置一个本机地址如果匹配了表示发给自己的,初学者一般也不看)最下面是控制器有图都复制上来吧!还有官方中文解释。







     
    解释有下图







    其实都不重要我们要TWI 寄存器它的使用是重要的。呵呵开始讲吧!最终我们的应用都是对这些寄存器操作。
    首先是比特率上面有公式第一个寄存器

    这个是控制寄存器非常重要。
    第二个寄存器 TWCR 


     
     
    首先是第7位 TWINT: TWI 中断标志
    在什么时候产生中断呢?当发送完 地址包 数据包 ,注意这一位清0呢。必须手动清0 必须通过软件写1,不像其他的中断能够自动置1.

    第6位 (使能TWI 应答)这个TWEA 在多级通讯时候,就是有其他的I2C器件向AVR单片机发送数据,这时候AVR 单片机在接受到一帧数据之后,它会发送一个应答位,也就是使能这位后,向发送放返回一个应答位这种信息。
    官方解释
    第5位(是一个状态标志位,TWSTA它表示的是TWI START 这个信号。第4位 和第5位都是多级通讯用的到的。)[page]


    官方解释

     
    第3位:TWWC   是TWI 的写碰撞标志。
    就是标志出TWDR 数据寄存器是否可以写。如果为低的时候可以写数据
    第2位:TWI 使能。置位此位TWI 。如果使用TWI模块此位必须模块激活。
    第1位:是保留位没有作用的。
    第0位:TWIE 使能TWI 中断。 (要中断方式使用TWI 总线的的话就要使能这个位 置位)
     


    第3个寄存器:状态寄存器
    它的第7位到第3位 5位反应TWI逻辑总线的状态,不同的状态的状态代码会在后面部分描述,所以我们在读取这5位状态代码的时候,读取方法就是先读取这个寄存器然后通过与这个0b11111000将最后两位屏蔽掉因为TWPS是预分频位,在比特率发生器里面是有作用的,有公式的 4的指数
     

     






    第四个寄存器:TWDR (类似于USART SPI 的数据寄存器差不多的)
    发送模式包含 字节,接受模式包含接受到的数据。



    第五个寄存器:TWAR 从机地址寄存器
    (多级通讯用的到)
     


    如何使用TWI






    其实这个图跟一次完整数据传输类似的。所有的不同在这第 3个阶段结束的时候有一个TWI中断触发也就是TWINT这一位被置位,可以用于触发中断。[page]
    第一步 :向TWCR 写一个1 使能一个START 信号。就是通过TWCR 寄存器的内容进行一个发START信号的操作。发送成功之后会有一个TWINT中断,在中断里面SCL时钟不采取任何动作的。
    第二步:在中断里面通过查询 status code 就是那五位数据看是何种状态,来确定是start 发送完成中断。
    第三步:发送一个地址包,就是程序将SLA(从机地址) +W (读写位)就是7位从机地址加1位读写位,写入到TWDR 数据寄存器对这些寄存器进行一些确认操作。
    第四步:在数据包发送完成和接受到ACK信号之后继续等待第2个中断。接收到ACK信号之后呢TWINT会置位 
    第五步:再处理一次中断,在这个中断里写入数据字节,也是8位数据
    第六步:8位数据发送成功接受到ACK  TWINT 会再次置位,那么这个 status code 会指示出发送完成。当然这只是发送一个字节数据,如果发送多个数据这个过程会持续多次,一直到数据发送完成。
    第七步:接受完成之后且接收到ACK 我们这里会发送一个STOP信号,也是通过写TWCR寄存器来实现的。当然STOP发送成功之后不会触发中断。值得注意的是中间如果进行多字节的读或写的话发送的字节数是由编程来把握的,也就是说AVR单片机不会知道你要发多少个字节。所以这个处理相当于在第7步这里。如果我们程序判断我们程序已经发送完毕,我们就发一个STOP信号若如果,没有就重复一下第五步。这就是ATmega 16的TWI总线的使用方法。下面我们结合24c02一个实际的程序来给大家吹吹牛。
     
    oAT24C02是由ATMEL公司提供的,I2C总线串行EEPROM,其容量为2Kbit(256B),工作电压在2.7V~5.5V之间,生产工艺是CMOS工艺。
    各引脚功能如下。
    A2~A0:器件地址选择引脚。将这3个引脚配置成不同的编码值,在同一串行总线上最多可扩充8片同一容量或不同容量的24系列串行EEPROM芯片。
    SDA:串行数据输入输出口,是一个双向的漏极开路结构的引脚,容量扩展时可以将多片24系列的SDA引脚直接相连。
    SCL:串行移位时钟控制端。写入时上升沿起作用,读出时下降沿起作用。
    WP:硬件写保护控制引脚。当其为低电平时,正常写操作,高电平时,对EEPROM部分存储区域提供硬件写保护功能,即对被保护区域只能读不能写。
    GND:接地。
    VCC:接+5V电压
     
    2k位   256*8 = 2K    等于256b
    地址值相当于低三位 0 1 2  组合 8个数字
    7 硬件写保护 低电平 可以正常写操作 高  的话只能读 所以我们接地OK了
    它的相关电路设计如下图
    我们设置的时候都会将他的地址值变为0 0 1 2 全接地线 ,5 6  PC0  PC1  因为第2功能是TWI 总线
    0.1uf进行电源退耦,一般数字芯片 高速的数字时钟对所在电源产生干扰。净化电源。
    容量计算方法
    AT24Cxx:01~1024
    容量=xx X 1Kbit
    型号系列列表
    AT24C01 1K(128X8) AT24C02 2K(256X8)
    AT24C04 4K(512X8)
    AT24C08 8K(1KX8)
    AT24C16 16K(2KX8)
    AT24C512 512K(64KX8)
    AT24C1024 1M(128KX8)
    值得一提是AVR单片机片上自带EEPROM 芯片,而且是1K字节相当于24C08这个容量。而我们24c02实际应用并不大。当然有一些应用场合必须外置的。因为是学习板,因为这个芯片比较常见,学习I2C总线的作用。
    下图为总体的操作流程
    写   与读的操作流程和上面的7步可以对比下。器件地址的表示方法等下讲一下。器件地址的高4位是0xa0   1010 低四位   前3位就是 a0 a1 a2  第4位是  读写地址   然后等待ACK 。
    数据地址相当于数据 在256字节的 存储器里面的编址,它处于数据包的一部分是8位的。
    所以这个是写是 地址一个    数据2 个  数据1是数据所处的地址   第2是数据的内容
     
    这就是写一字节的操作流程。
    右边是读类似。
    读出的是多个字节 循环判断是否是最后一个字节,而24c02是 ACK 就是ACK 来产生的,最后产生一个停止位
    所以这个读操作相当于是 地址包1个字节 数据包是多个字节。
    下面结合程序来大家讲解AT24C02应用。
    打开整体测试板程序 我没有哦
    # 需要此头文件
关键字:AVR  单片机  iic总线  TWI模块 引用地址:AVR 单片机学习(九)iic总线及TWI模块的使用方法

上一篇:AVR单片机多路ADC转换程序
下一篇:AVR单片机学习(七)异步串行口UART

推荐阅读最新更新时间:2024-03-16 13:53

基于单片机的万用表设计
摘要:本万用表通过采集电压值与频率值等物理量反推出相应的电阻、电容、电感以及频率值,利用DDS芯片发生任意频率波形,采用STC89C52通过外部按键选择与设置系统的工作状态,外部各个开关配合使表笔选通不同硬件电路从而产生相应元件的电压或频率信号供软件处理,外设12864液晶屏显示系统工作结果,可实现结果的调回。 关键词:万用电表;STC89C52;波形发生器 1 工作原理     万用表是电气、电子行业中常用的仪器之一,本文通过对MCS-51单片机进行电路及软件开发,实现电阻、电感、电容的精确测量,同时利用DDS芯片发生任意频率波形。其系统整体结构框图如图1所示。     单片机取得按键值,从而判断工作模式,具体测量不同
[单片机]
基于<font color='red'>单片机</font>的万用表设计
说一说STM32启动过程
STM32上电后是怎么启动的? main函数之前单片机都做了些什么? 带着这些疑问我们开始进入游戏。。。。。 首先,开局一张图,过程全靠编,如有说错的地方望能指正 启动大致流程 1- 上电启动或者硬件复位 2- 单片机从0x00地址开始执行程序,在执行程序前,单片机会根据BOOT引脚设置,将对应的存储器重映射到0x00处,如设置为BOOT0 = 0 ,BOOT1 = X 时,单片机将内部FLASH映射到0x00处,即将0X8000 0000地址映射到0X00处,单片机从FLASH中的程序启动,其他启动方式原理类似,相应的BOOT引脚设置如图 3- 跳转到存储有代码的存储介质(如FLASH)以后,单片机首先找到的是一
[单片机]
avr异步中断接收和发送通信程序
;******************************************************************************* ;* ;* 子程序名: USART_AINT.asm ;* 程序名称: 通用同步和异步串行接收器和转发器(USART) ;* 异步中断接收和发送通信程序 ;* 版本: 1.0 ;* 适用 MCU 型号: AVR所有型号 ;* 使用资源: r5,r6,r16,r17,r18,r19,r20,r28,r29,r30,r31 ;* 定时器/计数器0(溢出中断) ;* ;* 程序功能: ;*  
[单片机]
51单片机学前基础知识
一.单片机的概念: 在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成了单芯片微型计算机,即单片机。 二.单片机的用途: 工业自动化:数据采集,测控技术; 智能仪器仪表:数字示波器、数字信号源、数字万用表、感应电流表等; 消费类电子产品:洗衣机、电冰箱、空调机、手机等; 凡是与控制或简单计算有关的电子设备都可以用单片机来实现,再根据具体实际情况选择不同性能的单片机,如:atmel,stc,pic,avr,凌阳,80C51,arm等。 三.怎么学单片机: 实践第一;补充必要的理论知识,即缺什么补什么;做工程项目积累经验。(可在网络上搜索些题目,也可自己有什么想法大胆的去试验。)。
[单片机]
基于PIC单片机步进电机自适应控制技术的应用研究
摘要 :步进电机作为一个驱动执行单元,广泛地使用于工业领域和民用领域。本文对将自适应控制技术应用于步进电机的驱动控制进行了讨论和研究,构建了以PIC16F877单片机为核心的微机控制系统,并对步进电机控制的不同的技术方案进行了分析、比较和讨论。 关键词 :步进电机;PIC单片机;自适应控制技术;位置控制 中图分类号:TD679;TP273;TP368.1 文献标识码:A Application Study of Adaptive Control of Stepping Motor Based on PIC MCU HU Jun-da HU Hui HUANG Wang-jun (Hunan Institute of Engine
[单片机]
基于PIC<font color='red'>单片机</font>步进电机自适应控制技术的应用研究
单片机上操作系统的好处
自己在上学的时候,搞过2年的单片机STM32编程,当时还记得一心想在上面跑个操作系统,UCOS操作系统,但是当时自己为什么要上这个操作系统,不是特别的清楚,后来自己在实际工作中,做了应用软件,感觉有了一些深刻的体会。 1.上操作系统有很多资源可以利用,系统的内存管理,线程进程的使用。文件系统的使用,图形系统的使用,这个是你在没有上操作系统的时候不能使用的。 2.对于多任务的处理更加简单了,原来比方说我了个机器人的程序,用裸机进行的,我有5个传感器,我还有一个液晶屏,还有1个按键,我就得用定时器来进行,进一个定时器,我就做一件事,主程序里只能做一件事,而如果我上了操作系统,我在主进程里就可以开多个线程,来同时做这样的事,不用我自己去
[单片机]
ColdFire单片机在 Clinux上的应用
ColdFire系列处理器介绍 飞思卡尔32位处理器分为PowerPC系列、ColdFire系列以及DragonBall系列等。ColdFire系列是重要的组成部分之一,它可以应用于工业控制、仪器仪表、民用产品、网络产品等领域。ColdFire系列具有很好的性价比,它的价格从2美金到20美金不等。ColdFire系列处理器拥有许多开发工具并为使用者提供了一些现成的解决方案,这使得使用者能够快速地开发出自己的应用产品。 ColdFire处理器有V2核和V4核之分,52系列为V2核架构,54系列为V4架构。下面以V2核为例介绍其性能: V2核拥有变长的RISC指令集;有2个独立的流水线;用3个长字的FIFO缓冲区将流水线彼此分离
[单片机]
基于PIC16F877单片机的电子秤包装机控制系统
    摘要: 基于单片微处理器PIC16F877研制成功了六嘴回转式电子秤水泥包装机的智能控制器,给出控制系统的硬件电路和软件的设计思想,并阐述了控制器的工作原理。该控制器设计的高精度是本系统的重要性能。中断嵌套是设计软件中的难点。本系统还成功实现了与上位机的通信。     关键词: PIC单片机 A/D转换 中断 通信 包装机系统可用于粉末东颗粒物料(如水泥、化肥、粮食等)的定时包装,自动化程度、计量精度要求越来越高。针对用户的要求,本系统设计了一种基于PIC16F877单片机控制的电子秤水泥包装机控制系统。 控制系统包括调零、调满、设定粗细流阈值、插袋、喂料、压袋、推包、破袋处理等控制功能。另外,对检
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved