TLV5614的AVRGCC程序与调试心得

之所以采用TLV5614是因为项目中需要用到4通道DA,TLV5614价格适中,资料也很多,SPI的接口操作起来也很简单。

调试过程中需要注意以下几点:

1、TLV5614是双电源供电,区分数字电源和模拟电源,因此为了通信方便数字电源最好和使用的控制器使用同一电源,这样就不存在电平转换问题,我的设计中就设计到AVR和STM32两种,AVR是5V,STM32是3.3V,虽然也兼容5V电平,但是在设计的时候需要注意一下。

2、注意LOAD引脚,低电平的时候才会刷新DA数据

3、PD引脚,低电平时是掉电模式,这两个引脚电平要连接正确。

4、参考电压选择,四个通道使用两个参考电压,参考电压时满量程的二分之一,因此需要输出5V满量程的话就需要使用2.5V参考电压,这一点和普通的单端ADDA不同,需要注意。便宜又好买的基准源推荐TL431,接起来方便还超级准。

5、FS,这个是帧同步信号,和片选CS一样,片子必须检测到一个下降沿才开始第一帧的数据同步,这个信号在通用的SPI接口中是没有的,需要软件产生。

6、最后就是为了增强输出驱动能力,可以输出加电压跟随,注意运放需要使用双电源,如LM324.

 

好了,下面就是程序,使用GCC写的,模拟SPI的方式实现,需要的拿去改改。

 

 

 

/***************TLV5614的相关引脚定义********************/ #define TLV5614_Port PORTC //设置使用的端口 #define TLV5614_DDR DDRC #define TLV5614_PIN PINC #define TLV5614_CS 3 //设置每个信号对应的引脚 #define TLV5614_MOSI 7 #define TLV5614_FS 1 #define TLV5614_CLK 5 #define TLV5614_CS_H (TLV5614_Port|=(1<<TLV5614_CS)) #define TLV5614_CS_L (TLV5614_Port&=~(1<<TLV5614_CS)) #define TLV5614_MOSI_H (TLV5614_Port|=(1<<TLV5614_MOSI)) #define TLV5614_MOSI_L (TLV5614_Port&=~(1<<TLV5614_MOSI)) #define TLV5614_FS_H (TLV5614_Port|=(1<<TLV5614_FS)) #define TLV5614_FS_L (TLV5614_Port&=~(1<<TLV5614_FS)) #define TLV5614_CLK_H (TLV5614_Port|=(1<<TLV5614_CLK)) #define TLV5614_CLK_L (TLV5614_Port&=~(1<<TLV5614_CLK)) unsigned char DA_delay; //设置信号的持续时间,相当于设置SPI的速度 /******************************************************************************* 名称:void TLV5614_Init() 功能:模拟SPI时序的端口初始化工作 参数:无 时间:2011.1.17 版本:1.0 注意:无 *******************************************************************************/ void TLV5614_Init() { TLV5614_Port|=((1<<TLV5614_CS)|(1<<TLV5614_FS)|(1<<TLV5614_MOSI)|(1<<TLV5614_CLK)); TLV5614_DDR|=((1<<TLV5614_CS)|(1<<TLV5614_FS)|(1<<TLV5614_MOSI)|(1<<TLV5614_CLK)); TLV5614_CS_H; TLV5614_CLK_L; TLV5614_FS_L; //初始设为低电平 DA_delay=20; } /******************************************************************************* 名称:TLV5614_Send(unsigned int data) 功能:发送SPI数据 参数:unsigned int data 时间:2011.1.17 版本:1.0 注意:一次发送16位数据,从高位开始传输 *******************************************************************************/ void TLV5614_Send(unsigned int data) { unsigned char i; TLV5614_FS_H; //拉高帧同步信号 TLV5614_CLK_H; TLV5614_CS_L; //拉低片选信号,开始启动一次数据传输 TLV5614_MOSI_L; _delay_us(DA_delay); TLV5614_FS_L; //FS产生下降沿,表示串行数据帧开始传送 for(i=0;i<16;i++) { if(data&(0x8000>>i))//高位在前,低位在前改为(0x01<<i) TLV5614_MOSI_H; else TLV5614_MOSI_L; _delay_us(DA_delay); TLV5614_CLK_L; //在下降沿更新数据 _delay_us(DA_delay); TLV5614_CLK_H; } TLV5614_FS_H; //帧同步信号拉高,更新DA数据 _delay_us(DA_delay); TLV5614_CS_H; //拉高片选,完成一次数据传输 } /******************************************************************************* 名称:Write_DA(unsigned char chan,unsigned int data) 功能:向指定DA通道写入数据 参数:chan 写入的通道,取值0-3,chan>=4时设置为掉电方式 data写入的数据 取值 0x0000-0x0FFF 时间:2011.1.17 版本:1.0 注意:无 *******************************************************************************/ void Write_DA(unsigned int chan,unsigned int data) { unsigned int Send_data=0x1000; //具体参照TLV5614数据手册,SPD位设置为1,设置为快速方式 if(chan>=4) TLV5614_Send(0x2000); else Send_data|=(chan<<14); data&=0x0FFF; Send_data|=data; TLV5614_Send(Send_data); } 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值