原创 基于TLC549的ADC转换的简单电压表设计

2010-10-13 16:30 2091 13 13 分类: 电源/新能源

TLC549是TI公司的一款串行8位串行ADC模数转换芯片,该芯片有一个模拟输入端口,3态的数据串行输出接口可以方便的和微处理器或外围设备连接。 TLC549仅仅使用输入/输出时钟(I/O CLOCK)和芯片选择(/CS)信号控制数据。最大的输入输出时钟(I/O CLOCK)为1.1MHz。


产品特点:



CMOS技术低功耗数据采集系统
8位转换结果电池供电系统
与微处理器或外围设备接口工业控制
差分基准电压输入工厂自动化系统等
转换时间:最大17us
每秒访问和转换次数:达到40000
片上软件控制采样和保持功能
全部非校准误差:±0.5LSB
宽电压供电:3~6V 封装及引脚
低功耗:最大15mW
5V供电时输入范围:0~5V
输入输出完全兼容TTL和CMOS电路
全部非校准误差:±1LSB
工作温度范围:0℃~70℃(TLC549); -40℃~85℃(TLC549I)

以下是TLC549的引脚图:



各引脚功能如下:





 


以下是TLC549的51单片机程序,仅供参考!!!


/********************************************************
程序:TLC549 AD转换演示程序(基于TLC549的数字电压表设计)
制作:威智普电子
日期:2010年9月11日
功能:通过TLC549 AD转换芯片进行电压采集,将采集到的信号
      以电压的形式通过数码显示出来。
备注:STC89C52RC 11.0592M晶振
说明:学习TLC549 AD转换芯片的和51内部定时器的使用
********************************************************/


/*   头文件和必要声明及数码管的值   */
#include<reg52.h>
#include<intrins.h>


#define led   P0
#define uchar unsigned char
#define uint unsigned int


uint Volt;             //电压换算并扩大1000倍
uchar num;


uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
/**               0    1    2   3     4    5    6    7    8    9 */
uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
/**                0.   1.   2. 3.    4.   5.   6.   7.   8.   9. */


/*   TLC549和数码管为选声明   */
sbit CLK = P2^6;    //时钟
sbit DO = P2^5;     //数据输出
sbit CS = P2^4;      //片选
sbit w1 = P2^0;
sbit w2 = P2^1;
sbit w3 = P2^2;
sbit w4 = P2^3;


/*   延时1ms函数   */
void delay(uint z) // 延时函数
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 110; y > 0; y--);
}


/*   串口初始化函数   */
void init()
{
TMOD=0x01;      //设置定时器0为工作方式1(0000 0001)
TH0=(65536-45872)/256;   //装初值50ms一次中断
TL0=(65536-45872)%256;
EA=1;        //开总中断
ET0=1;        //开定时器0中断
TR0=1;       //启动定时器0
}


/*   TLC549芯片AD转换模块   */
uchar TLC549_ADC(void)   //TLC549转换函数


{
uchar i, tmp;
CS = 1;                     //CS置高,片选无效
CLK = 0;
CS = 0;                     //CS置低,片选有效 ,同时DO输出最高位
_nop_();
_nop_();                     //适当延迟时间1.4us 等待启动(大概需要内部系统时钟的两个上升沿和其后的下降沿)
for(i = 0; i < 8; i++) //串行数据移位输入
{
    tmp <<= 1;
    tmp |= DO;
    CLK = 1;        //在CLK的下降沿读取数据
    _nop_();          //CLK保持低电平一段时间等待数据读出
    CLK = 0;
   }
CS = 1;            //CS置高,DO处于高阻状态,且CLK禁止 (转换完成系统必须马上把CS置高
for(i = 17; i != 0; i--) _nop_(); //转换周期最大17us
return (tmp);


}


/*   AD 读数转十进制函数   */
void Data_Conversion(void)
{
uchar AD_Data;
AD_Data = TLC549_ADC();
Volt = 5.0 / 256 * AD_Data * 1000;   //扩大1000倍以输出小数
}


/*   数码管显示函数   */
void display()
{
uchar i,j,k;
i = Volt / 1000 ;      //个位加小数点
j = Volt / 100 % 10;           //十分位
k = Volt / 10 % 10;             //百分位
//l = Volt % 10;                    //个位
w1=0;
led=table1;
delay(1);
w1=1;
w2=0;
led=table[j];
delay(1);
w2=1;
w3=0;
led=table[k];
delay(1);
w3=1;
w4=0;
led=0xc1;     //V符号,电压单位
delay(1);
w4=1;
}


/*   主函数   */
void main()
{
init();
while(1)
{
   display();
}
}


/*   定时器0服务函数   */
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;   //重装初值
TL0=(65536-45872)%256;
num++;
if(num==10)      //0.5进行一次采样
{
   num=0;      //然后把num清0重新计时
   Data_Conversion();   
}  
}


 


深圳市威智普电子有限公司


销售热线: 0755-83675696 / 83566110-818


传    真: 0755-83675696


QQ:      41540050


地    址: 深圳市福田区滨河大道9003号湖北大厦北座24楼A2


更多产品信息请登录http://www.wellchips.com

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
13
关闭 站长推荐上一条 /3 下一条