第三十三课 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为低,芯片选中处于工作状态
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转换开始。
演示视频(数码管显示):
http://v.youku.com/v_show/id_XOTI0MTQwNjQ=.html
相关程序(数码管显示):https://static.assets-stash.eet-china.com/album/old-resources/2009/6/6/bbd910c6-f02e-4b7a-a29f-e2e5ecdff5be.rar
用户377235 2013-10-24 22:15
用户360698 2011-4-24 22:50
用户217274 2009-7-24 17:13