基于AVR单片机TWI的模块化检测系统设计

发布者:CrystalSparkle最新更新时间:2011-11-09 关键字:TWI  I2C  BUS  模块化  容错处理 手机看文章 扫描二维码
随时随地手机看文章
引言
    随着设备信息化和智能化程度的不断提高,设备间的通信变得愈加重要。目前,设备间的通信,尤其是多个设备间的通信,大多数都是依靠各种不同标准的总线实现的。通过总线实现设备间的通信减少了物理连线,简化了硬件设计工作,同时也便于扩展。因此,总线,尤其是各种工业总线,得到了广泛的应用。在智能化嵌入式系统设计中,有时由于各种外围设备较多,也会应用总线解决通信的问题。当今最为常见的是由Philips公司开发的I2C总线,它用于连接微控制器及其外围设备,增加了系统的安全性,方便了管理。而Atmel公司的TWI接口是I2C总线基础上的继承和发展,它定义了自己的功能模块和寄存器,其寄存器各位功能的定义与I2C总线并不相同。另外TWI总线引入了状态寄存器,使得TWI总线在操作和使用上比I2C总线更加灵活。本文主要利用TWI总线强大的灵活性,设计了基于该总线的模块化检测系统,巧妙利用TWI状态寄存器,大大提高了TWI总线在该检测系统中的稳定性和可靠性。

1 TWI模块简介
    TWI通信接口简单灵活,功能强大,非常适合应用于微控制器系统。它支持主机和从机操作;器件可以工作于发送器模式或接收器模式;7位地址空间允许有128个从机;支持多主机仲裁;高达400 kHz的数据传输率;输出驱动器斜率受控;噪声抑制器可以抑制总线尖峰;从机地址以及公共地址完全可编程;睡眠时地址匹配可以唤醒AVR。
    如图1所示,TWI模块包括控制单元、比特率发生器单元、地址匹配单元、总线接口单元和SCL和SDA引脚,位于粗线之中的寄存器都可以通过AVR数据总线进行访问。其中TWAR寄存器的高7位为从机地址。工作于从机模式时,TWI总线将根据这个地址进行响应。

a.jpg


    TWI的两根线在工作时必须有上拉电阻,上拉电阻的实现既可以通过内部的上拉电阻使能,也可以通过在硬件设计时增加上拉电阻。在实际应用时最好在外部硬件上增加上拉电阻,以防止程序遗漏使能上拉电阻。
    TWI可以工作于4种不同的模式,即主机发送模式(MT)、主机接收模式(MR)、从机发送模式(ST)和从机接收器模式(SR)。当TWI上出现多个主机时,就会发生多主机仲裁。TWI多主机仲裁相对I2C总线的多主机仲裁,其特点就是除了依靠自身硬件的监测之外,还可以通过软件读取TWSR状态寄存器来判断自己在总线中的精确状态,以便为下一步动作提供更精确的诊断依据。在编写TWI总线驱动程序时,需要注意,只有当时钟信号为高电平时,信号线SDA上的电平信息才有意义。[page]

2 模块化检测系统设计
    模块化检测系统主要功能是检测各设备所采集到的相关信息,以便主机通过处理这些信息,给出相应的控制策略。如图2所示,主机使用的是ATmega128,从机使用的是ATmegal6。这种模块化检测系统的设计不仅简化了硬件设计,也在一定程度上简化了软件的设计,使得各个检测功能的程序在不同的设备上同时运行。

b.jpg



3 TWI总线驱动程序
3.1 主机驱动程序
    在程序设计时,为了实现准确判断TWI工作状态,需要在一定情况下,尤其是在总线出现传输错误时,读取TWSR状态寄存器。同时为了增加程序的可读性,将各种模式所需的TWI总线状态进行宏定义。
    图3是主机发送(MT)模式程序的流程。图4为主机接收(MR)模式程序流程。

c.jpg

[page]

    为了保证TWI总线的稳定运行,只有发送模式(MT)和接收模式(MR)程序是不够的,还必须有一定的容错处理程序,以防止TWI总线在受到外界干扰时出现故障。考虑本文所设计的系统是主机与从机不会实时发生变化的总线网络系统,所以对于主机而言还要有容错处理程序,主要是MT、MR以及MT和MR之间切换时的容错处理程序。其具体代码如下:
d.jpg
e.jpg
    容错处理主要是通过读取当前TWI总线的状态,针对不同的状态做出不同的处理。这个程序中对TWI总线处于错误状态时的处理最为重要,可以防止TWI总线进入死锁。容错处理程序同时也包含了MT和MR模式,在使用TWI总线时主机只需要调用该程序就可实现MT或MR模式。[page]

 

3.2 从机驱动程序
    由于对于主机而言,等待TWINT置位在任何情况下都能在很短的时间内完成,所以对于MT和MR模式的程序都是通过软件查询TWINT位实现。但是对于从机而言,由于首先要接收主机发送的从机地址,并且主机并不是总是在访问同一个从机,所以从机在接收主机发送的地址时,如使用软件查询方法,势必要等待很长时间,这样就浪费了大量的时间。因此在从机ST和SR模式程序的设计时,需要使用TWI中断,这样在等待TWINT置位期间可以执行其他程序,有效地提高了程序的运行效率。图5为从机ST和SR模式程序流程,具体的ST和SR处理程序可以参考相关的设计手册,这里给出的只是ST和SR切换以及容错处理程序。当TWINT置位时,进入TWI中断服务程序。

f.jpg


    在从机TWI总线程序设计时,在等待TWINT置位期间TWI总线可能因为外界干扰出现一些故障,所以容错处理程序不仅在TWI中断服务程序得到调用,在等待TWINT置位期间也要调用该程序。从机的容错处理程序代码如下:
g.jpg

4 系统测试
    在模块化检测系统测试时,主要使用了以下从机检测模块:3个超声波模块、电子罗盘、红外距离检测模块以及温度检测模块。在系统测试时针对TWI总线,主要测试了总线的传输速度、实时响应、出错率、抗干扰能力。测试时为便于观察各个观测量的状态,使用了LCD显示。测试过程中总线的比特率设定为100 kbps,通过观测LCD显示的变量,TWI总线实时响应速度比较快。在外加电磁干扰的条件下,总线只有在极少数开机时出现错误,主要原因是开机时出现的浪涌电流。

结语
    本文设计的模块化检测系统,利用TWI总线作为各个器件通信的媒介,并以此为基础构建总线式拓扑网络,简化了硬件和软件设计,缩短了系统的开发周期。在TWI总线驱动程序设计上,增加容错处理程序,使总线运行更加稳定和可靠,提高了系统的抗干扰能力。同时在从机TWI总线驱动程序设计时使用TWI中断,合理安排各个功能程序的执行时间,有效地提高了程序的运行效率。

 

 

关键字:TWI  I2C  BUS  模块化  容错处理 引用地址:基于AVR单片机TWI的模块化检测系统设计

上一篇:AVR单片机JTAG调试快速入门
下一篇:双口RAM在PCI总线与AVR接口设计中的应用

推荐阅读最新更新时间:2024-03-16 12:45

联想Moto Z3 Play真机现身:模块化+双摄
    昨天,摩托罗拉宣布,Aymar de Lencquesaing已辞去联想控股公司总裁职务。塞尔吉奥·布尼亚克(Sergio Buniac)将接管de Lencquesaing的工作。在宣布上述消息的同时,摩托罗拉方面还表示,它的第一批2018年新手机将于下个月推出。Moto G6 Plus已经得到台湾NCC监管机构的认证,暗示Moto G6,Moto G6 Plus和Moto G6 Play马上发布。   当然,除了新一代的G系列以外,Moto的旗舰Z系列也蓄势待发了。   来自slashleaks的消息,日前Moto Z3?Play手机就现身了,和前辈们一样,尽管模块化设计叫座不叫好,但Moto Z3?Play还
[手机便携]
I2C总线规范
  1.硬件组成:时钟线:SCL。数据线:SDA。 2.硬件要求:由于I2C的设备为OD(Open Drain,开漏),故在总线上需要加上拉电阻。5V电路中一般使用5.1K的上拉电阻,3.3V电路中可以使用4.7K的上拉电阻。 3.数据速率:100kbps,400kbps,3.4Mbps。 4.通信起始条件:SCL高电平时,SDA发生下降沿跳转。 5.通信终止条件:SCL高电平时,SDA发生上升沿跳转。 6.ACK:在一个字节发送完成后,如果需要ACK,则在第9个时钟周期,发送设备释放SDA,由接受设备控SDA产生低电平的ACK。 6.数据主→从正常传输:①主寻址从,发送地址和写
[嵌入式]
模拟I2C总线多主通信研究与软件设计
摘要 介绍模拟I2C总线的多主节点通信原理,并提出一种新的实现方法。这种采用延时接收比较来实现仲裁的方法,可使不具有I2C接口的普通微控制器(MCU)能够实现模拟I2C总线的多主通信,同时对I2C总线的推广起到了积极作用。 关键词 模拟I2C总线 仲裁 多主通信 I2C总线(Inter IC BUS)是Philips公司推出的双向两线串行通信标准。由于它具有接口少、通信效率高等优点,现已得到广泛的应用 。它除了可以进行简单的单主节点通信外,还可以应用在多主节点的通信系统中。在多主节点通信系统中,如果两个或者更多的主节点同时启动数据传输,总线具有冲突检测和仲裁功能,保证通信正常进行并防止数据破坏。现在许多微控制器(MCU)都
[应用]
基于I2C接口的LED驱动器优势探讨
引人的眼球。在当前众多的LED控制器面前,如何选择一款功能丰富且性价比又高的产品来迎合自己的设计,无疑是摆在每个设计师面前的问题。 最简单的LED驱动,我们可以用普通的I/O来实现。但I/O控制只能实现LED的ON与OFF,无法用来进行混光、闪烁等功能,而且每个LED都需要占用一个单独的I/O资源,无疑性价比很低。我们也可以用专用的大电流LED控制器来设计,但昂贵的成本首先会成为问题,而且设计复杂,程度也会跟着各种干扰的出现相应地提高。基于这些,恩智浦(NXP)推出一系列使用I2C接口的LED驱动器,它可以通过I2C接口的两根线,去同时控制从4个到24个不等LED的ON/OFF、闪烁及RGB混光。在混光方案里,每个LED都是
[电源管理]
基于<font color='red'>I2C</font>接口的LED驱动器优势探讨
程序逐渐加入模块化练习-
四、前期习题练习: (一).流水灯1s闪烁流动 #include reg52.h #include “instrins.h//左移函数头文件 #define uchar unsigned char//这是宏定义,以后再用char直接输入ucahr不用再声明! #defne uint unsigned int uchar=temp;//定义一个八位的变量 void delay(uint z);//主函数调用子函数,先声明函数,有参数的函数! void main() { temp=0xfe;//0xfe即:1111 1110把P1口定义 P1=temp;//先使p1口亮 while(1)//
[单片机]
普通IO口模拟实现I2C通信及应用解析
根据I2C通信规范(具体可以参考“ 浅谈I2C总线 ”),通过普通IO端口模拟可以实现单片机(主设备)与从设备的I2C通信,其中SCL通过IO口延时高低电平变化实现,SDA根据SCL状态变化产生开始信号,结束信号,以及实现发送接收数据等,以下是相关代码 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @Purpose: I2C Communication driver(By IO) * @Author: Purple * @Version: 1.0 * @Date: Create By Purple 20
[单片机]
使用BUS端口保护阵列实现有源ESD保护
  许多便携式应用需要超过8kV的ESD保护,同时将电容保持在5pF以下。Z二极管能够单独满足这一要求,但当与开关或结型二极管等低电容PN二极管相结合时,它们可同时满足该应用的以下两种要求:低电容,以及高ESD和浪涌抗扰性。   Z二极管与小型PN二极管的这种结合提供了单向保护器件。箝位电流只能朝一个方向流动——PN二极管的正向——因为反向通道被阻塞(图1)。      添加另一个PN二极管可打开反向通道,从而使该保护器件实现双向保护。当正向和反向的箝位电压电平不同时,这种器件具有双向及不对称的箝位行为 (BiAs)(图1)。   在初始时,当所有三个二极管完全放电时(二极管电容为空),具有0.5V幅度的第一个信号脉冲将在正向驱动
[电源管理]
使用<font color='red'>BUS</font>端口保护阵列实现有源ESD保护
AVR TWI读写范例程序(AT24C02)
本程序简单的示范了如何使用ATMEGA16的TWI 读写AT24C02 IIC EEPROM TWI协议 (即IIC协议,请认真参考IIC协议的内容,否则根本就不能掌握) 一主多从的应用,M16作主机 (M16做从机和多主多从的应用不多,请自行参考相关文档) 中断模式 (因为AVR的速度很高,而IIC的速度相对较低, 采用查询模式会长时间独占CPU,令CPU的利用率明显下降。 特别是IIC速度受环境影响只能低速通讯时,对系统的实时性产生严重的影响。 查询模式可以参考其它文档和软件模拟IIC的文档) AT24C02/04/08的操作特点 出于简化程序考虑,各种数据没有对外输出,学习时
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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