TLC549是 TI公司生產(chǎn)的一種低價位、高性能的8位 A/D轉(zhuǎn)換器,采用了CMOS工藝,它以8位開關(guān)電容逐次逼近的方法實現(xiàn) A/D轉(zhuǎn)換,其轉(zhuǎn)換速度小于 17us,最大轉(zhuǎn)換速率為 40000HZ,4MHZ典型內(nèi)部系統(tǒng)時鐘,電源為 3V至 6V。它能方便地采用三線串行接口方式與各種微處理器連接,構(gòu)成各種廉價的測控應(yīng)用系統(tǒng)。
TLC549均有片內(nèi)系統(tǒng)時鐘,該時鐘與I/O CLOCK是獨立工作的,無須特殊的速度或相位匹配。其工作時序如圖2所示。 當CS為高時,數(shù)據(jù)輸出(DATA OUT)端處于高阻狀態(tài),此時I/O CLOCK不起作用。這種CS控制作用允許在同時使用多片TLC549時,共用I/O CLOCK,以減少多路(片)A/D并用時的I/O控制端口。
TLC549 單片機程序
#include 《TLC549.h》
#include 《Mydefine.h》
//------------------------------------------------------------------------
#define N 8
unsigned char count;//濾波函數(shù)的計數(shù)值
/*unsigned char bdata dat; //dat是可位尋址的變量
sbit dat7=dat^7;
sbit dat6=dat^6;
sbit dat5=dat^5;
sbit dat4=dat^4;
sbit dat3=dat^3;
sbit dat2=dat^2;
sbit dat1=dat^1;
sbit dat0=dat^0; //取出dat的各個位*/
//------------------------------------------------------------------------
unsigned char TLC549_ReadByte(void)
{ //讀一個字節(jié)函數(shù)
unsigned char value=0,i=0;
TLC549_DOUT=1;//51單片機讀數(shù)據(jù)時得先把管腳置1
for(i=0;i《8;i++)
{
if(TLC549_DOUT==1)
value|=(0x80》》i);//獲取數(shù)據(jù)線的位放到相應(yīng)位上
//(有1時寫1,無1時保持0)
TLC549_CLK=1;
TLC549_CLK=0;
delayus(50);//根據(jù)datasheet,下降沿產(chǎn)生后,
//400ns后新的位被寫到數(shù)據(jù)線上,所以這里進行延時
}
return value;
}
unsigned char TLC549_GetValue(void)
{
unsigned char ConvertValue;
TLC549_CS=0; //打開片選
ConvertValue=TLC549_ReadByte(); //讀取轉(zhuǎn)換后的8位AD值
TLC549_CS=1; //關(guān)閉片選
delayus(50); //等待轉(zhuǎn)換結(jié)束 最長17us
return ConvertValue; //返回轉(zhuǎn)換結(jié)果
}
unsigned char TLC549_Filter() //濾波函數(shù)
{
char count,i,j;
unsigned char value_buf[N],temp;
int sum=0;
for (count=0;count《N;count++)
{
value_buf[count] = TLC549_GetValue();
delayus(300);
}
for (j=0;j《N-1;j++)
{
for (i=0;i《N-j;i++)
{
if ( value_buf[j]》value_buf[i+j] )
{
temp = value_buf[j];
value_buf[j] = value_buf[i+j];
value_buf[i+j] = temp;
}
}
}
for(count=1;count《N-1;count++)
sum += value_buf[count];
return (unsigned char)(sum/(N-2));
}
unsigned char AD_Convert(void)
{
unsigned char AD_Value;
AD_Value=TLC549_Filter();
return AD_Value;
}
/*
//濾波函數(shù):算數(shù)平均濾波
/* A、方法:
連續(xù)取N個采樣值進行算術(shù)平均運算
N值較大時:信號平滑度較高,但靈敏度較低
N值較小時:信號平滑度較低,但靈敏度較高
N值的選取:一般流量,N=12;壓力:N=4
B、優(yōu)點:
適用于對一般具有隨機干擾的信號進行濾波
這樣信號的特點是有一個平均值,信號在某一數(shù)值范圍附近上下波動
C、缺點:
對于測量速度較慢或要求數(shù)據(jù)計算速度較快的實時控制不適用
比較浪費RAM
unsigned char TLC549_Filter(void)
{
unsigned int sum=0;
for(count=0;count《N;count++)
{ //連續(xù)采8個數(shù)據(jù),相加,放到sum中
sum+=TLC549_GetValue();
delayus(300);
}
return (unsigned char)(sum》》3);//求平均值,左移三位相當于除以8
} */
評論
查看更多