微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 可编程数字电位器与AVR单片机的通信说明

可编程数字电位器与AVR单片机的通信说明

时间:12-09 来源:互联网 点击:

表1是X9221所有指令说明,其中前4种指令的正常执行需要在串行数据线上至少有3个步骤:①通过数据线写从机地址;②写指令;③写数据。才能完成一个寄存器的读或写,这4种指令适用于X9221三字节时序格式操作。如果是写在WCR类型的寄存器中,掉电后数据丢失,写在DATA类型的寄存器中,掉电后数据存在其中;全局转换的4种指令的正常执行需要在串行数据线上至少有2个步骤:①通过数据线写从机地址、②写指令,才能完成所有寄存器之间的数据交换,适用于X9221两字节时序格式操作;最后一种"+/-"指令相当于"在线"上下调节电位器中间抽头,比较直观,很好理解。"+/-"指令仅访问WCR类型寄存器,且只是写操作,如果数据线SDA保持高电平,下一个时钟信号SCL周期到来,WCR寄存器数据"+1"。如果数据线SDA保持低电平,下一个时钟信号SCL周期到来,WCR寄存器数据"-1"。然而,不管哪种命令,只要写DATA类型的寄存器(芯片内的E2ROM存储单元),写操作要花费大约10 ms时间才能完成,在设计通信软件时一定要特别留意。

3 AVR系列单片机与数字电位器硬件和软件设计

3.1 X9221数字电位器与AVR系列单片机硬件接口

  X9221数字电位器与AVR系列单片机硬件接口如图3所示。硬件连接非常简单,只需将所有设备串行数据线SDA、串行时钟线SCL相连接并接10 kΩ左右的上拉电阻即可。连接在I2C总线上的逻辑电平为"线与"逻辑关系,只要有一个设备将其拉低,总线上即出现低电平,当所有设备总线都悬挂起时呈现高阻状态。主机发送模式就是向其中一个外设写入数据,首先产生一个启动信号"START","START"发送成功后才向外设发送设备地址,地址发送成功后,再发送数据,数据可以是1~N个字节,所有数据发送完成,最后发送"STOP"完成主机写的过程。主机接收模式也是一样的,过程类似。对X9221来说地址发送完成后,必须发送指令模式,告诉X9221目前将做什么,指令的含义上面已提到,指令模式后是一组数据,其它过程一样。

为了使I2C总线处于正常状态,所有总线上的设备必须加电,如果有一个设备没有加电,总线将处于不正常工作状态。在总线上有几个设备同时欲将发送数据时,竞争中某主机发现仲裁失败后,应立即回到从机状态或放弃总线请求,保证获取总线控制权的主机正常发送数据;不同的主机有不同的总线时钟频率,通过SCL信号"线与"来保证,即高电平为高电平中最短的,低电平为低电平中最长的,也就是说协议"照顾"了速度最慢的设备;集结在总线上所有的传送必须包含相同数目的数据包,否则,多主机系统中仲裁结果无法定义,这在设计上要特别注意。

3.2 X9221数字电位器与AVR系列单片机通信软件设计

  下面是一个通过查询由atmega16单片机向X9221发送数据的例程,在这个例程中需要注意的是TWINT标志利用软件写"1"进行清零(清除硬件置位标志),而当前发送完成后由硬件自动将TWINT标志置"1",TWINT标志是不能通过硬件清零的;每次通过检查TWINT标志判断当前发送是否完成,通过读取状态寄存器TWSR的值判断发送的数据是否正确。

START:
LDI R16,$A4;设置AVR单片机I2C总线控制寄存器
OUT TWCR,R16;软件清除TWINT标志WAIT1:
IN R16,TWCR;读取控制寄存器TWCR
SBRS R16,7;等待硬件置位TWINT标志
RJMP WAIT1;TWINT标志没置位,循环检查等待
IN R16,TWSR;读取状态寄存器TWSR
ANDI R16,$F8;屏蔽无效位
CPI R16,$08:检查"START"信号是否发送成功
BRNE ERROR;"START"信号发送未成功,转入出错处理
LDI R16,$56;发送X9221器件地址56="5"器件标识,"6"器件地址
OUT TWDR,R16
LDI R16,$84
OUT TWCR,R16;软件清除TWINT标志
IN R16,TWSR
ANDI R16,$F8
CPI R16,$18;检查X9221器件地址是否发送成功
BRNE ERROR;X9221器件地址发送未成功,转入出错处理
LDI R16,$2F;设置所发送的数据(0~63有效,例中为47)
OUT TWDR,R16;数据输出到数据寄存器TWDR
LDI R16,$84
OUT TWCR,R16;软件清除TWINT标志;检查数据"2F"是否发送完成,类似于上述循环继续
.
.
LDI R16,$94;发送"STOP"信号,一次'$2F'数据发送完成
OUT TWCR,R16
ERROR:···;出错处理过程
END

在此例程中,器件的地址对X9221来说为56,其中"5"是器件本身固有的以区别于其它类型的设备,而"6"是设计硬件时规定的,可以是"0~F"任何十六进制数值;例程中AVR单片机仅作为主机使用且向X9221发送数据,其实从X9221中读取当前数据也是一样的。本例程采用查询方式,程序显得繁琐,但是如果采用中断方式的话,程序就会显得简单多,只要标志SREG寄存器中"I"位和I2C总线控制寄存器中的"

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top