3 模块化智能机器人系统的TWI总线结构
TWI可以工作于4种不同的模式:主机发送器(MT)、主机接收器(MR)、从机发送器(ST)及从机接收器(SR)。同一应用程序可以使用几种模式。本机器人系统中,ATmega128为主机,其他单片机均为从机设备。目的是实现主机与多片从机之间的双向通信,即主机可以发送多字节数据给从机设备,从机也可以发送多字节数据给主机。TWI的两根线在工作时必须有上拉电阻,既可以通过相关程序使能内部的上拉电阻,也可以在硬件设计时增加上拉电阻。实际应用中,最好软硬件的方法同时使用,双重保障。图2为TWI总线的硬件结构接线图。
4 TWI通信的软件设计
4.1 主机的软件设计
本系统中,主机ATmega128采用轮询TWINT位的方式。主机主程序中的系统初始化主要包括定时器初始化和TWI总线初始化。主机主程序中写函数TWI_write()的详细流程如图3所示,读函数TWI_read()的详细流程如图4所示。一次传输过程包括一个START信号、一个SLA+R/W信号、一个或多个数据包、一个STOP信号。每发送一个信号或一个数据包,均要检验状态寄存器TWSR中的状态码,如果状态码正确,才发下一个信号,若不正确则转出错处理。通过软件编程技巧,可以在一次TWI通信中,实现主机与从机之间的多字节数据传输。同时,在主机主程序流程图中可以看到,在一个循环内,可以实现主机与从机之间的双向数据传输。
4.2 从机的软件设计
对于所有从机,均采用中断方式。采用中断方式时,当TWINT位置位(硬件置位),则程序会自动跳到中断向量,执行中断服务程序。在等待TWINT置位期间,从机可以执行数据采集工作或执行其他程序,从而有效地提高了程序的运行效率。中断服务程序中,只需检验TWSR的状态码,读取或写入数据寄存器TWDR,这样来完成与主机的数据通信。从机TWI中断服务程序流程图如图5所示。
对于不同的从机,硬件方面需要注意的是SCL、SDA两根线位于单片机的I/O端口不同,例如ATmega16的SCL、SDA分别位于PC0、PC1;ATmega8的SCL、SDA则分别位于PC5、PC4。软件方面,需要给不同从机的TWAR赋予各自的从机地址。[page]
4.3 TWI总线的部分程序
为了增强程序的可读性,将各种模式所需的TWI总线状态进行宏定义。对于主机,省略一些数据处理和其他功能程序,最简化的主程序如下:
5 TWI通信的注意问题
由于TWI通信存在主机与从机模块,在单独对主机程序单步调试时,主机单步运行,而从机处于全速运行,主从机步调不一致,单步调试结果显示TWINT位不置位或者TWSR状态码不正确,误认为程序有问题。实际上,程序在全速运行时是可以实现通信的。
另外,根据功能要求,在一次TWI通信中,例如要求主机给从机发送数据的字节数是1字节或2字节,此时,在从机中断接收中,需增加相应接收标志位flag1、flag2,通过各自的标志位分清接收的不同字节的数据,避免产生不必要的混淆与错误。
编程中,要严格按照TWI说明手册中的内容,不同的TWSR状态码时,对TWDR执行相应的操作,对TWCR写入相应的数值。否则,有一点出入,都会造成TWI通信的失败。
结语
本智能机器人系统采用TWI总线构建了模块化架构,优点是系统灵活、扩展性强。TWI通信方法是主机ATmega128器件程序采用查询方式,其他多片从机器件程序则采用中断方式。本文介绍了在一次TWI传输过程中,传送多字节数据的编程方法,并且建立了主机与多从机之间的双向多字节数据通信,可以将机器人各传感器模块采集到的数据实时发送至主控制器进行处理,有效地提高了程序的运行效率。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』