新闻  |   论坛  |   博客  |   在线研讨会
第三十三课 AD转换之TLC549
0750long | 2009-06-18 12:49:44    阅读:2411   发布文章

第三十三课 AD转换之TLC549


TLC549是TI公司生产的一种性价比非常高的8位A/D转换器,它以8位开关电容逐次逼近的方法实现A/D转换,

其转换速度小于17us,它能方便地采用三线串行接口方式与各种微处理器连接,构成各种廉价的测控应用系统.
      1 主要特性
      ● 8位分辨率A/D转换器,总不可调整误差≤±0.5LSB。 
      ● 采用三线串行方式与微处理器接口。
      ● 片内提供4MHz内部系统时钟,并与操作控制用的外部I/O CLOCK相互独立。
      ● 有片内采样保持电路,转换时间≤17us,包括存取与转换时间转换速率达40000次/秒。
      ● 差分高阻抗基准电压输入,其范围是:1V≤差分基准电压≤Vcc+0.2V。
      ● 宽电源范围:3V-6.5V,低功耗,当片选信号/CS为低,芯片选中处于工作状态

器件手册:pdf

 

TLC549头文讲解:

/*-------------------------------------------------------------*/
//File: TLC549驱动程序
//Time: 9:06
//Date: 2009-4-30 
//OSC: 12MHz
/*-------------------------------------------------------------*/
//防止头文件被重复调用
#ifndef __TLC549_ADC_H__
#define __TLC549_ADC_H__


/*-------------------------------------------------------------*/
//包含头文件
#include<intrins.h>


/*-------------------------------------------------------------*/
//TLC549管脚定义 与开发板硬件对应
sbit CLK = P2^5;    //时钟
sbit DO  = P2^4;     //数据输出
sbit CS  = P2^3;      //片选


/*-------------------------------------------------------------*/
//数据定义
unsigned int  Volt;             //电压换算并扩大1000倍
//unsigned char LCD[7];   //电压数据转化成液晶字符显示
unsigned char LED[4];     //电压数据转换成数码管数字

 

/*-------------------------------------------------------------*/
//函数声明
unsigned char TLC549_ADC(void);   //获得数据
void Data_Conversion(void);              //电压换算并扩大1000倍
//void Volt_To_LCD(void);                //数据转化成液晶字符显示
void Volt_To_LED(void);                  //数据转换成数码管显示数字

 

/*-------------------------------------------------------------*/
//获得数据
unsigned char TLC549_ADC(void)
{
 unsigned char i, tmp;
 
 CS  = 1;                     //CS置高,片选无效
 CLK = 0;

 CS  = 0;                     //CS置低,片选有效 ,同时DO输出最高位
 _nop_();
 _nop_();                     //适当延迟时间1.4us Setup Time

 for(i = 0; i < 8; i++) //串行数据移位输入
 { 
  tmp <<= 1;
  tmp |=  DO;
  
  CLK = 1;        //0.4us
  _nop_();          //CLK transition time Max 0.1us
  CLK = 0;        //0.4us
  
 }
 CS = 1;            //CS置高,片选无效
 for(i = 17; i != 0; i--) _nop_();  //Next Coversion需要延迟时间17us
 return (tmp);
}


/*-------------------------------------------------------------*/
//电压换算并扩大1000倍
void Data_Conversion(void)
{
 unsigned char AD_Data;
 AD_Data = TLC549_ADC();
 Volt = 5.0 / 256 * AD_Data * 1000;
}


/*-------------------------------------------------------------*/
//数据转化成液晶字符显示
/*
void Volt_To_LCD(void)

 Data_Conversion();                     //电压换算并扩大1000倍
 LCD[0] = Volt / 1000 + '0';         //千位
 LCD[1] = '.';                                //小数点
 LCD[2] = Volt / 100 % 10 + '0';  //百位
 LCD[3] = Volt / 10 % 10 + '0';    //十位
 LCD[4] = Volt % 10 + '0';           //个位
 LCD[5] = 'V';                              //字符V 
 LCD[6] = '\0';                              //字符串结束标志符
}
*/


/*-------------------------------------------------------------*/
//数据转换成数码管显示数字
void Volt_To_LED(void)
{
 Data_Conversion();                      //电压换算并扩大1000倍
 LED[0] = Volt / 1000 ;//& 0x7f;   //千位加小数点
 LED[1] = Volt / 100 % 10;           //百位
 LED[2] = Volt / 10 % 10;             //十位
 LED[3] = Volt % 10;                    //个位 
}


/*-------------------------------------------------------------*/
#endif

 

本节重点

1、工作时序图:

点击开大图

当/CS变为低电平后,TLC549芯片被选中,同时前次转换结果的最高有效位MSB(A7)自DATA OUT端输出,接着要求自I/O CLOCK端输入8个外部时钟信号,前7个I/O CLOCK信号的作用,是配合TLC549输出前次转换结果的A6-A0 7位,并为本次转换做准备:在第4个I/O CLOCK信号由高至低的跳变之后,片内采样/保持电路对输入模拟量采样开始,第8个I/O  
     CLOCK信号的下降沿使片内采样/保持电路进入保持状态并启动A/D开始转换。转换时间为36个系统时钟周期,/CS保持高电平,或者I/O CLOCK时钟端保持36个系统时钟周期的低电平。
      由此可见,在自TLC549的I/O CLOCK端输入8个外部时钟信号期间需要完成以下工作:读入前次A/D转换结果;对本次转换的输入模拟信号采样并保持;启动本次A/D转换开始。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客