原创 第三十三课 AD转换之TLC549

2009-6-6 19:49 5673 9 12 分类: MCU/ 嵌入式

第三十三课 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转换开始。

 


演示视频(数码管显示):


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


 


 


 


 

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户377235 2013-10-24 22:15

proteus仿真没有结果

用户360698 2011-4-24 22:50

仿真成功.谢谢老师~

用户217274 2009-7-24 17:13

太需要了!!!学习
相关推荐阅读
用户222124 2010-12-08 22:18
台达PLC监控
台达PLC监控网上有很多例子,自己也照着弄了个,挺方便的,分享下串口数据格式:COM1,9600,8,N,1  ...
用户222124 2010-06-27 16:36
基于NIOS II和FPGA无线小车控制系统的设计
   主控制台以Cyclone II系列的EP2C8Q208C8为核心,通过nRF24L01进行无线通讯,来控制以ATmega8为微处理器的两轮小车,可以实现小车按控制平台发送的控制信息来准确运动。所...
用户222124 2009-11-13 15:58
51开发板已经销售完了,谢谢大家的支持!
51开发板已经销售完了,谢谢大家的支持!...
用户222124 2009-09-28 16:13
51开发板十一大放送!!!赶快行动吧!!!
  51开发板十一大放送!  赶快行动吧!!!   开发板硬件介绍: http://group.ednchina.com/2031/24972.aspx  开发板实物图片总汇: http://grou...
用户222124 2009-09-13 19:02
nios II 实验五 数码管显示数字钟(定时器实现 外部中断调节)
#include "system.h"                      //包含基本的硬件描述信息#include "altera_avalon_timer_regs.h"    //定义内...
用户222124 2009-09-13 18:57
nios II 实验四 PIO外部中断
#include "system.h"                      //包含基本的硬件描述信息#include "altera_avalon_timer_regs.h"    //定义内...
我要评论
3
9
关闭 站长推荐上一条 /3 下一条