新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 12位A/D轉(zhuǎn)換器TLC2543

12位A/D轉(zhuǎn)換器TLC2543

作者: 時間:2016-11-13 來源:網(wǎng)絡 收藏
一、特性

(1)12位分辨率A/D轉(zhuǎn)換器;

本文引用地址:http://m.butianyuan.cn/article/201611/316092.htm

(2)在工作溫度范圍內(nèi)10μs轉(zhuǎn)換時間;

(3)11個模擬輸入通道;

(4)3路內(nèi)置自測試方式;

(5)采樣率為66kbps;

(6)線性誤差1LSB(max)

(7)有轉(zhuǎn)換結束(EOC)輸出;

(8)具有單、雙極性輸出;

(9)可編程的MSB或LSB前導;

(10)可編程的輸出數(shù)據(jù)長度。

二、引腳圖

TLC2543的引腳排列如圖所示。其中:

AIN0~AIN10:模擬輸入端;

CS:片選端;

DIN:串行數(shù)據(jù)輸入端;

DOUT:A/D轉(zhuǎn)換結果的三態(tài)串行輸出端;

EOC:轉(zhuǎn)換結束端;

CLK:I/O時鐘;

REF:正基準電壓端;

REF-:負基準電壓端;

VCC:電源;

GND:地。

三、程序

本程序使用C51編程,每隔250ms采集一次數(shù)據(jù),并通過串口發(fā)送出去,程序如下:

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitTCL2543_CLK=P3^2;

sbitTCL2543_ADIN=P3^3;

sbitTCL2543_DOUT=P3^4;

sbitTCL2543_CS=P3^5;

sbitEOC=P1^6;

//其中port為通道:通道0:port=0x01通道1:port=0x02通道2:port=0x04...

uintread2543(unsignedcharport)

{

unsignedinti;

uintad_value=0;

TCL2543_CLK=0;

TCL2543_CS=0;

EOC=1;

port<<=4;

for(i=0;i<12;i)

{

if(TCL2543_DOUT)ad_value|=0x01;

TCL2543_ADIN=(bit)(port&0x80);

TCL2543_CLK=1;

_nop_();

_nop_();

_nop_();

TCL2543_CLK=0;

_nop_();

_nop_();

_nop_();

port=port<<1;

ad_value=ad_value<<1;

}

TCL2543_CS=1;

ad_value=ad_value>>1;

returnad_value;

}

voidmain(void)

{

unsignedinti=0,a=0,result=0,j=0;

unsignedchartm_tm=5;

floattmp;

tm_tm=40;

SCON=0x50;//串口方式1,允許接收

TMOD=0x20;//定時器1定時方式2

TCON=0x40;//設定時器1開始計數(shù)

TH1=0xFD;//11.0592MHz9600波特率

//TH1=0xF8;//30MHz,9600Bps=248=0xF8

TL1=0xE8;

TI=1;

TR1=1;//啟動定時器

//使用定時器。30MHz晶振,0.4us周期,預置50000=20ms,計數(shù)50次=1秒

//使用定時器0。11.0592MHz晶振,1.0us周期,預置50000=50ms,計數(shù)20次=1秒

TH0=60;//(65536-50000)/256;

TL0=176;//(65536-50000)%256;

TMOD=0x200x01;//T1T0,工作方式1

TR0=1;//STARTT0

while(1)

{

if(TF0==1)

{

a;

if(a==tm_tm)//250ms

{

a=0;

result=read2543(1);

tmp=(result*60.0/4096.0);

printf("%d,%4.2fn",result,tmp);

}

TF0=0;

TH0=60;

TL0=176;

}

}

}


///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////

#include

#defineuintunsignedint
#defineucharunsignedchar

//**************************修改硬件時要修改的部分********************************

sbitclock=P0^0;//輸入、輸出時鐘端
sbitinput=P0^1;//數(shù)據(jù)輸入端
sbitoutput=P0^2;//數(shù)據(jù)輸出端
sbitCS=P0^3;//片選端,負電平有效

voiddelay(ucharN)
{
while(N--);
}

uintread2543(ucharCON_WORD)//CON_WORD為選擇的通道,為0--10
{
uintad=0;
uchari;
CON_WORD<<=4;
clock=0;
CS=0;
for(i=0;i<12;i++)
{
if(output==1)//讀取DATAOUT
ad=ad|0x01;
if(CON_WORD&0x80)//讀取控制字到INPUT
input=1;
else
input=0;
clock=1;
delay(10);
clock=0;
delay(10);
CON_WORD<<=1;
ad<<=1;
}
CS=1;
ad>>=1;
return(ad);
}

voidinit_serial()//初始化串口
{
TMOD=0x20;//定時器T1使用工作方式2
TH1=250;//設置初值
TH0=250;
TR1=1;//開始計時
PCON=0x80;//SMOD=1;
SCON=0x50;//工作方式1,波特率9600bit/s,允許接收
TI=1;
}

voidmain()
{
uintad=0;
floatfVoltage1;
ucharbuf[5],i;
init_serial();
IE=0;//屏蔽中斷
while(1)
{
ad=read2543(0);
fVoltage1=(float)ad/0x0fff*5;
buf[0]=(uchar)fVoltage1;
buf[0]=buf[0]+0x30;
buf[1]=.
buf[2]=(uchar)(fVoltage1*10)%10;
buf[2]=buf[2]+0x30;
buf[3]=(uchar)(fVoltage1*100-buf[0]*100)%10;
buf[3]=buf[3]+0x30;
buf[4]=(uchar)((fVoltage1*1000)-buf[0]*1000-buf[1]*100)%10;
buf[4]=buf[4]+0x30;
i=0;
while(i<5)
{
if(TI==1)
{
SBUF=buf[i];
TI=0;
i++;
}
}
}
}



評論


技術專區(qū)

關閉