12位串行AD转换器TLC2543与单片机的接口设计与编程
来源:互联网 发布:js中的window.onload 编辑:程序博客网 时间:2024/04/30 07:23
第一次做光学仪器的小项目中的一部分是数据采集后经过模数转换,把采集到的电压用数字量输入到单片机中进行处理。此处总结下TLC2543的相关资料和与单片机接口方面的编程。主要的参考资料是TLC2543的datasheet,其中的电路是自己做的项目中的接口电路,部分程序是参考网上和自己的实际情况改的。
先介绍下TLC2543芯片的一些基本资料。(1)12位分辨率,10us转换时间 (2)11路模拟输入通道,3路内置自测模式 (3)固有取样和保持功能,线性误差最大为1LSB(4)片上系统时钟,转换结束(EOC)输出(5)单级或双极输出操作 (6)可设计的输出数据最高位或最低位在前,可设计的电源中断,可设计输出数据长度。TLC2543的引脚如下图所示
其中(1)AIN0~AIN10:11路模拟输入引脚(2)CS:片选引脚(3)DATA INPUT:串行数据输入引脚(4)DATA OUT:串行输出引脚(5)EOC:为转换结束引脚(6)I/O CLOCK:时钟引脚(7)REF+:基准电压正引脚,通常为VCC(8)REF-:基准电压负引脚,通常为GND (9)VCC:正电源引脚(10)GND:地信号引脚。
TLC2543的转换操作分为I/O周期和实际转换周期两个步骤。
(1)I/O周期:
I/O周期由外部提供的I/O CLOCK来定义,延续8,12或16个时钟周期,主要取决于被选择的数据长度。在I/O周期内,下列两种操作同时进行。
在CLK时钟的前8个脉冲的上升沿,以MSB前导方式从串行数据输入引脚读取8位数据到输入寄存器,其中前4位为模拟通道地址,控制14路模拟多路器从11个模拟输入通道和3个内部自测通道中选通一路连接到采样保持器,该电路从第4个CLK时钟脉冲的下降沿开始,对所选通路的信号进行采样,知道最后一个CLK脉冲下降沿。I/O周期的时钟脉冲个数与输出数据长度(位数)有关,输出数据长度由D3,D2位选择为8,12,16位,当TLC2543处于12或16位工作状态时,在前8个时钟脉冲之后,DATA INPUT引脚的电平无效。
在DATA OUT引脚上串行输出8,12,16位数据,当CS引脚保持低电平时,第一位数据出现在EOC的上升沿;若转换由CS引脚控制,则第一个输出数据发生在CS引脚电平的下降沿,此数据为前一次转换的结果(很重要,值得注意)。在第一个输出数据位后每一位均由后续的CLK脉冲下降沿输出。
(2)实际转换周期:
TLC2543进入转换周期工作方式之后在I/O周期最后一个CLK脉冲的下降沿来到之后EOC变为低电平,采样值保持不变,转换周期开始;片内的转换模块对采样值进行逐次逼近式A/D转换,其工作由与CLK同步的内部时钟控制。当转换结束之后EOC引脚变高,转换结果被锁存在输出数据寄存器中,等待在下一个I/O周期输出(此处注意)。
TLC2543的I/O周期和转换周期交替进行,从而可以减少外部的数字噪声对转换精度的影响。其工作时序如下图所示:
每次进行A/D转换时都必须向TLC2543写入命令字以便确定其工作状态,命令字格式:D7~D4:输入通道地址选择,D3~D2:输出数据长度选择,D1:输出数据顺序选择,D0:输出数据格式选择。
(1)输入通道地址选择位:用于选择TLC2543的输入通道,二进制数0000~1010是11个模拟量AIN0-AIN10的通道地址,1011~1101分别是自测试电压和掉电的通道地址。地址1011,1100和1101所选择的的自测电压分别是(VREF(+)-VREF(-))/2、VREF(-)、VREF(+)。当选择掉电后TLC2543处于休眠状态,此时耗电电流小于20uA。
(2)输出数据长度选择位:用于选择A/D转换结果的位数,当D3~D2为“x0”,A/D转换的结果为12位输出;当D3~D2为“01”,A/D转换的结果为8位输出;当D3~D2为“11”,A/D转换的结果为16位输出。
(3)输出数据顺序选择位:用于选择数据输出的顺序,如果D1=0,则高位在前;否则低位在前。
(4)输出数据格式选择位:用于选择输出数据的属性,如果D0=0,采样数据是无符号数,否则是有符号数。
编写的程序如下:
各引脚的定义:
sbit ADEOC = P0^6; //AD转换芯片的引脚
sbit ADCLK = P0^5;
sbit ADDATAIN = P0^4;
sbit ADDATAOUT = P0^3;
sbit ADCS = P0^2;
读TLC2543数据的程序:
uint Get_ADData(uchar CHN)//读取AD值
{
uchar i, temp;
uint read_ad_data = 0;
ADDATAOUT = 1;
CHN = CHN<<4; //12位格式,选择高位在前,单极性. 注:CHN为通道数,并非DATAIN控制字。0~13:0x00~0x0d。所以前四位舍弃,左移的后四位表示通道数
ADCLK = 0;
ADCS = 1;
ADCS = 0;
temp = CHN;
for(i = 0; i<12; i++)
{
read_ad_data = read_ad_data <<1;
if((temp&0x80) != 0)
{
ADDATAIN = 1;
}
else
{
ADDATAIN = 0;
}
if(ADDATAOUT)
{
read_ad_data = read_ad_data + 1;
}
_nop_();
_nop_();
ADCLK = 1;
_nop_();
_nop_();
ADCLK = 0;
_nop_();
_nop_();
temp = temp <<1;
}
ADCS = 1;
_nop_();
_nop_();
read_ad_data = read_ad_data & 0X0FFF;
return (read_ad_data);
}
- 12位串行AD转换器TLC2543与单片机的接口设计与编程
- 12位A/D转换器ADS7804与51单片机的接口及程序设计
- 12位A/D转换器ADS7804与51单片机的接口及程序设计
- 单片机AD转换程序 TLC2543
- PIC单片机入门_8位AD转换器
- PC机与单片机串行通信的硬件设计
- 单片机与LED,开关,的接口设计
- 大容量NOR Flash与8位单片机的接口设计
- 大容量NOR Flash与8位单片机的接口设计
- TQ2440 GPIO模拟SPI读取AD转换器TLC2543芯片
- 单片机系统与标准PC键盘的接口模块设计
- Matlab与单片机的串行通信及数据处理
- Zynq高速串行CMOS接口设计与实现
- 单片机系统设计与C51编程实践
- 单片机系统设计与C51编程实践
- 基于Zynq的数据采集系统设计与调试(二) —— AD接口
- 接口转换器故障与解决办法
- AD站台与站点的规划与设计(AD规划与设计连载之四)
- ListView滑动时 item出现黑色背景的问题的解决方法
- HESSIONPHP2.2 double类型bug解决
- Microsoft Deployment Toolkit (MDT) 2012 Update 1现在可用了
- Android退出应用程序的六种方法
- 小玩随机验证码
- 12位串行AD转换器TLC2543与单片机的接口设计与编程
- PLSQ连接数据库报ORA-12514错误的解决办法
- 基于XMPP协议的手机多方多端即时通讯方案
- Oracle单行函数聚会
- HDU1421--搬寝室
- 用sql查询当天,一周,一个月的数据 .
- Linux redhat中文字体安装
- HT68F30控制5150 IIC控制总线
- Android 自定义 View 中 onKeyDown监听 没反应