12位TLC2543模数转换总结
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TLC2543模数转换总结
——电信102龙树东
芯片特性说明
TLC2543是TI公司的12位串行模数转换器,使用开关电容逐次逼近技术完成A/D转换过程。由于是串行输入结构,能够节省51系列单片机I/O资源;且价格适中,分辨率较高,因此在仪器仪表中有较为广泛的应用。
TLC2543的特点
(1)12位分辩率A/D转换器;
}
temp1=temp1/SUM;
temp3=temp1*40960/4096;
temp1=0;
display(temp3);
Lcd_wcd(0,0x88+5);
Lcd_wcd(1,0x30+bai);
Lcd_wcd(1,0x2e);
Lcd_wcd(1,0x30+shi);
Lcd_wcd(1,0x30+ge);
//uchar code dis1[]={"采集电压:000 v"};
/*************延时**************/
void delay(uint z)
{//一毫秒
uint y;
for(;z>0;z--)
for(y=110;y>0;y--) ;
}
void delay_us(uchar n)//微秒
shi=x/1000%10;
ge=x/100%10;
xiao=x/10%10;
}
/****************主函数****************/
main()
{
uint i;
unsigned long int temp0,temp1;
unsigned long int temp2=0,temp3=0;
引脚号
名称
I/O
说明
1~9,11,12
AIN0~AIN10
I
模拟量输入端。11路输入信号由内部多路器选通。对于4.1MHz的I/OCLOCK,驱动源阻抗必须小于或等于50Ω,而且用60pF电容来限制模拟输入电压的斜率
15
I
片选端。在 端由高变低时,内部计数器复位。由低变高时,在设定时间内禁止DATAINPUT和I/O CLOCK
(2)在工作温度范围内10μs转换时间;
(3)11个模拟输入通道;
(4)3路内置自测试方式;
(5)采样率为66kbps;
(6)线性误差±1LSBmax;
(7)有转换结束输出EOC;
(8)具有单、双极性输出;
(9)可编程的MSB或LSB前导;
(10)可编程输出数据长度。
TLC2543的引脚排列及说明
TLC2543有两种封装形式:DB、DW或N封装以及FN封装,这两种封装的引脚排列如图1,引脚说明见表1。
psb=1;
rs=0;
rw=0;
en=0;
Lcd_wcd(0,0x30); //基本指令格式
Lcd_wcd(0,0x06); //设置显示格式,光标位置
Lcd_wcd(0,0x0c); //开显示,关光标
Lcd_wcd(0,0x01); //液晶清屏
Lcd_pst(0,0); //定位
Lcd_str(dis0,1); //向指定点输入数据
{
uchar i;
for(i=0;i<n;i++)
{
nop;
}
}
/**************液晶驱动程序***********/
void Lcd_wcd(bit com,uchar dat) //向12864液晶写数据或命令
{
rs=com;
rw=0;
en=0;
P0=dat;
delay(5);
en=1;
图1TLC2543的封装
接口时序
可以用四种传输方法使TLC2543得到全12位分辩率,每次转换和数据传递可以使用12或16个时钟周期。
一个片选()脉冲要插到每次转换的开始处,或是在转换时序的开始处变化一次后保持为低,直到时序结束。
图2显示每次转换和数据传递使用16个时钟周期和在每次传递周期之间插入的时序,图3显示每次转换和数据传递使用16个时钟周期,仅在每次转换序列开始处插入一次时序。
14
REF+
I
正基准电压端。基准电压的正端(通常为Vcc)被加到REF+,最大的输入电压范围由加于本端与REF-端的电压差决定
13
REF-
I
负基准电压端。基准电压的低端(通常为地)被加到REF-
20
Vcc
电源
表1 TLC2543引脚说明
图216时钟传送时序图(使用 ,MSB在前)
图316时钟传送时序图(不使用 ,MSB在前)
Lcd_wcd(1,0x30+xiao);
*/
}
}
参数测试
输入 /V 输出 /V
0.108 0.112
0.510 0.512
1.000 1.003
2.000 2.003
2.502 2.506
3.000 3.005
4.004 4.010
4.513 4.517
4.997 4.998
设计总结:
在设计过程中遇到了些硬件设计和软件设计的问题,第一次画板的时候把可调电阻的管脚画错了,导致在调试的过程中出现了短路。硬件是软件的平台,首先得要把硬件做好。在编写程序的时候把一个变量的类型定义错了,导致输出的都是0,再三检查才发现这个致命的错误。
sbit input=P2^1;
sbit out=P2^2;
sbit cs=P2^3;
sbit psb=P2^4;
sbit rs=P2^5;
sbit rw=P2^6;
sbit en=P2^7;
uchar xiao,ge,shi,bai;
uchar SUM=200;
uchar disdate[6];
uchar code dis0[]={"采集电压:000 v"};
17
DATAINPUT
I
串行数据输入端。由4位的串行地址输入来选择模拟量输入通道
16
DATA OUT
O
A/D转换结果的三态串行输出端。 为高时处于高阻抗状态, 为低时处于激活状态
19
EOC
O
转换结束端。在最后的I/OCLOCK下降沿之后,EOC从高电平变为低电平并保持到转换完成和数据准备传输为止
10
制作过程件
硬件:
TLC2543转接图
系统原理图
画电路图总结:使用TLC2543时一定要注意电路板的布线,电路板的布线要确保数字信号和模拟信号隔开,模拟线和数字线特别是时钟信号线不能互相平行,也不能在TLC2543芯片下面布数字信号线。
软件设计:
单片机程序主要是串行数据采集模块。TLC2543的通道选择和方式数据为8位,其功能为:D7,D6,D5和D4用来选择要求转换的通道;D3和D2用来选择输出数据长度,本设计选择输出12位数据长度,即D3D2=X0,D0,D1选择输入数据的导前位。TLC2543在每次读取的数据都是上次转换的结果,第一次读数由于内部调整,读取的转换数据可能不准确,应不要。
Lcd_init();
while(1)
{
for(i=0;i<SUM;i++)
{
temp0+=redad(0x00);//选择通道0,并读取AD转换的数
}
temp0=temp0/SUM;
temp2=(temp0*40960/4096)*3+100;
temp0=0;
display(temp2);
Lcd_wcd(0,0x80+5);
default :break;
}
Lcd_wcd(0,0x80+line+xx);
}
void Lcd_str(uchar *str,uchar z) //显示字符串和汉字
{
while(*str!='\0')
{
Lcd_wcd(z,*str);
str+Biblioteka Baidu;
}
}
void Lcd_init()//液晶初始化
{
GND
地。GND是内部电路的地回路端。除另有说明外,所有电压测量都相对GND而言
18
I/O CLOCK
I
输入/输出时钟端。I/OCLOCK接收串行输入信号并完成以下四个功能:(1)在I/O CLOCK的前8个上升沿,8位输入数据存入输入数据寄存器。(2)在I/OCLOCK的第4个下降沿,被选通的模拟输入电压开始向电容器充电,直到I/OCLOCK的最后一个下降沿为止。(3)将前一次转换数据的其余11位输出到DATA OUT端,在I/OCLOCK的下降沿时数据开始变化。(4)I/OCLOCK的最后一个下降沿,将转换的控制信号传送到内部状态控制位
delay(5);
en=0;
}
void Lcd_pst(uint xx,uint yy) //设置显示坐标
{
uint line;
switch(yy)
{
case 0:line=0x00;break;
case 1:line=0x10;break;
case 2:line=0x08;break;
case 3:line=0x18;break;
//Lcd_str(dis1,1);
}
/*************TLC2543驱动程序************/
uint redad(uchar port)//读ad port为通道号
{
uint i;
uint ad=0;
clock=0;
cs=0;
port<<=4;//通道号左移4位
for(i=0;i<12;i++)
{
if(out)
{
ad|=0x01;
}
input=(bit)(port&0x80);
clock=1;
delay_us(60);
clock=0;
delay_us(60);
port<<=1;
ad<<=1;
}
cs=1;
ad>>=1;
return(ad);
}
void display(uint x)
{
bai=x/10000;
Lcd_wcd(1,0x30+bai);
Lcd_wcd(1,0x2e);
Lcd_wcd(1,0x30+shi);
Lcd_wcd(1,0x30+ge);
Lcd_wcd(1,0x30+xiao);
/*for(i=0;i<SUM;i++)
{
temp1+=redad(0x01);//选择通道1,并读取AD转换的数
附件程序
#include<reg52.h>
#include<intrins.h>//适用nop延时要用这个函数
#define uchar unsigned char
#define uint unsigned int
#define nop _nop_()
#define lcd_data P0
sbit clock=P2^0;
——电信102龙树东
芯片特性说明
TLC2543是TI公司的12位串行模数转换器,使用开关电容逐次逼近技术完成A/D转换过程。由于是串行输入结构,能够节省51系列单片机I/O资源;且价格适中,分辨率较高,因此在仪器仪表中有较为广泛的应用。
TLC2543的特点
(1)12位分辩率A/D转换器;
}
temp1=temp1/SUM;
temp3=temp1*40960/4096;
temp1=0;
display(temp3);
Lcd_wcd(0,0x88+5);
Lcd_wcd(1,0x30+bai);
Lcd_wcd(1,0x2e);
Lcd_wcd(1,0x30+shi);
Lcd_wcd(1,0x30+ge);
//uchar code dis1[]={"采集电压:000 v"};
/*************延时**************/
void delay(uint z)
{//一毫秒
uint y;
for(;z>0;z--)
for(y=110;y>0;y--) ;
}
void delay_us(uchar n)//微秒
shi=x/1000%10;
ge=x/100%10;
xiao=x/10%10;
}
/****************主函数****************/
main()
{
uint i;
unsigned long int temp0,temp1;
unsigned long int temp2=0,temp3=0;
引脚号
名称
I/O
说明
1~9,11,12
AIN0~AIN10
I
模拟量输入端。11路输入信号由内部多路器选通。对于4.1MHz的I/OCLOCK,驱动源阻抗必须小于或等于50Ω,而且用60pF电容来限制模拟输入电压的斜率
15
I
片选端。在 端由高变低时,内部计数器复位。由低变高时,在设定时间内禁止DATAINPUT和I/O CLOCK
(2)在工作温度范围内10μs转换时间;
(3)11个模拟输入通道;
(4)3路内置自测试方式;
(5)采样率为66kbps;
(6)线性误差±1LSBmax;
(7)有转换结束输出EOC;
(8)具有单、双极性输出;
(9)可编程的MSB或LSB前导;
(10)可编程输出数据长度。
TLC2543的引脚排列及说明
TLC2543有两种封装形式:DB、DW或N封装以及FN封装,这两种封装的引脚排列如图1,引脚说明见表1。
psb=1;
rs=0;
rw=0;
en=0;
Lcd_wcd(0,0x30); //基本指令格式
Lcd_wcd(0,0x06); //设置显示格式,光标位置
Lcd_wcd(0,0x0c); //开显示,关光标
Lcd_wcd(0,0x01); //液晶清屏
Lcd_pst(0,0); //定位
Lcd_str(dis0,1); //向指定点输入数据
{
uchar i;
for(i=0;i<n;i++)
{
nop;
}
}
/**************液晶驱动程序***********/
void Lcd_wcd(bit com,uchar dat) //向12864液晶写数据或命令
{
rs=com;
rw=0;
en=0;
P0=dat;
delay(5);
en=1;
图1TLC2543的封装
接口时序
可以用四种传输方法使TLC2543得到全12位分辩率,每次转换和数据传递可以使用12或16个时钟周期。
一个片选()脉冲要插到每次转换的开始处,或是在转换时序的开始处变化一次后保持为低,直到时序结束。
图2显示每次转换和数据传递使用16个时钟周期和在每次传递周期之间插入的时序,图3显示每次转换和数据传递使用16个时钟周期,仅在每次转换序列开始处插入一次时序。
14
REF+
I
正基准电压端。基准电压的正端(通常为Vcc)被加到REF+,最大的输入电压范围由加于本端与REF-端的电压差决定
13
REF-
I
负基准电压端。基准电压的低端(通常为地)被加到REF-
20
Vcc
电源
表1 TLC2543引脚说明
图216时钟传送时序图(使用 ,MSB在前)
图316时钟传送时序图(不使用 ,MSB在前)
Lcd_wcd(1,0x30+xiao);
*/
}
}
参数测试
输入 /V 输出 /V
0.108 0.112
0.510 0.512
1.000 1.003
2.000 2.003
2.502 2.506
3.000 3.005
4.004 4.010
4.513 4.517
4.997 4.998
设计总结:
在设计过程中遇到了些硬件设计和软件设计的问题,第一次画板的时候把可调电阻的管脚画错了,导致在调试的过程中出现了短路。硬件是软件的平台,首先得要把硬件做好。在编写程序的时候把一个变量的类型定义错了,导致输出的都是0,再三检查才发现这个致命的错误。
sbit input=P2^1;
sbit out=P2^2;
sbit cs=P2^3;
sbit psb=P2^4;
sbit rs=P2^5;
sbit rw=P2^6;
sbit en=P2^7;
uchar xiao,ge,shi,bai;
uchar SUM=200;
uchar disdate[6];
uchar code dis0[]={"采集电压:000 v"};
17
DATAINPUT
I
串行数据输入端。由4位的串行地址输入来选择模拟量输入通道
16
DATA OUT
O
A/D转换结果的三态串行输出端。 为高时处于高阻抗状态, 为低时处于激活状态
19
EOC
O
转换结束端。在最后的I/OCLOCK下降沿之后,EOC从高电平变为低电平并保持到转换完成和数据准备传输为止
10
制作过程件
硬件:
TLC2543转接图
系统原理图
画电路图总结:使用TLC2543时一定要注意电路板的布线,电路板的布线要确保数字信号和模拟信号隔开,模拟线和数字线特别是时钟信号线不能互相平行,也不能在TLC2543芯片下面布数字信号线。
软件设计:
单片机程序主要是串行数据采集模块。TLC2543的通道选择和方式数据为8位,其功能为:D7,D6,D5和D4用来选择要求转换的通道;D3和D2用来选择输出数据长度,本设计选择输出12位数据长度,即D3D2=X0,D0,D1选择输入数据的导前位。TLC2543在每次读取的数据都是上次转换的结果,第一次读数由于内部调整,读取的转换数据可能不准确,应不要。
Lcd_init();
while(1)
{
for(i=0;i<SUM;i++)
{
temp0+=redad(0x00);//选择通道0,并读取AD转换的数
}
temp0=temp0/SUM;
temp2=(temp0*40960/4096)*3+100;
temp0=0;
display(temp2);
Lcd_wcd(0,0x80+5);
default :break;
}
Lcd_wcd(0,0x80+line+xx);
}
void Lcd_str(uchar *str,uchar z) //显示字符串和汉字
{
while(*str!='\0')
{
Lcd_wcd(z,*str);
str+Biblioteka Baidu;
}
}
void Lcd_init()//液晶初始化
{
GND
地。GND是内部电路的地回路端。除另有说明外,所有电压测量都相对GND而言
18
I/O CLOCK
I
输入/输出时钟端。I/OCLOCK接收串行输入信号并完成以下四个功能:(1)在I/O CLOCK的前8个上升沿,8位输入数据存入输入数据寄存器。(2)在I/OCLOCK的第4个下降沿,被选通的模拟输入电压开始向电容器充电,直到I/OCLOCK的最后一个下降沿为止。(3)将前一次转换数据的其余11位输出到DATA OUT端,在I/OCLOCK的下降沿时数据开始变化。(4)I/OCLOCK的最后一个下降沿,将转换的控制信号传送到内部状态控制位
delay(5);
en=0;
}
void Lcd_pst(uint xx,uint yy) //设置显示坐标
{
uint line;
switch(yy)
{
case 0:line=0x00;break;
case 1:line=0x10;break;
case 2:line=0x08;break;
case 3:line=0x18;break;
//Lcd_str(dis1,1);
}
/*************TLC2543驱动程序************/
uint redad(uchar port)//读ad port为通道号
{
uint i;
uint ad=0;
clock=0;
cs=0;
port<<=4;//通道号左移4位
for(i=0;i<12;i++)
{
if(out)
{
ad|=0x01;
}
input=(bit)(port&0x80);
clock=1;
delay_us(60);
clock=0;
delay_us(60);
port<<=1;
ad<<=1;
}
cs=1;
ad>>=1;
return(ad);
}
void display(uint x)
{
bai=x/10000;
Lcd_wcd(1,0x30+bai);
Lcd_wcd(1,0x2e);
Lcd_wcd(1,0x30+shi);
Lcd_wcd(1,0x30+ge);
Lcd_wcd(1,0x30+xiao);
/*for(i=0;i<SUM;i++)
{
temp1+=redad(0x01);//选择通道1,并读取AD转换的数
附件程序
#include<reg52.h>
#include<intrins.h>//适用nop延时要用这个函数
#define uchar unsigned char
#define uint unsigned int
#define nop _nop_()
#define lcd_data P0
sbit clock=P2^0;