TLC1543 是11通道10位串行A/D轉(zhuǎn)換器,TLC2543是11通道12位串行A/D轉(zhuǎn)換器.
TLC1543是美國(guó)TI公司生產(chǎn)的多通道、低價(jià)格的模數(shù)轉(zhuǎn)換器。采用串行通信接口,具有輸入通道多、性價(jià)比高、易于和單片機(jī)接口的特點(diǎn),可廣泛應(yīng)用于各種數(shù)據(jù)采集系統(tǒng)。 TLC1543為20腳DIP封裝的CMOS 10位開關(guān)電容逐次A/D逼近模數(shù)轉(zhuǎn)換器
TLC1543工作時(shí)序如圖所示,其工作過程分為兩個(gè)周期:訪問周期和采樣周期。工作狀態(tài)由CS使能或禁止,工作時(shí)CS必須置低電平。CS為高電平時(shí),I/O CLOCK、ADDRESS被禁止,同時(shí)DATA OUT為高阻狀態(tài)。當(dāng)CPU使CS變低時(shí),TLC1543開始數(shù)據(jù)轉(zhuǎn)換,I/O CLOCK、ADDRESS使能,DATA OUT脫離高阻狀態(tài)。隨后,CPU向ADDRESS端提供4位通道地址,控制14個(gè)模擬通道選擇器從11個(gè)外部模擬輸入和3個(gè)內(nèi)部自測(cè)電壓中選通1路送到采樣保持電路。同時(shí),I/O CLOCK端輸入時(shí)鐘時(shí)序,CPU從DATA OUT 端接收前一次A/D轉(zhuǎn)換結(jié)果。I/O CLOCK從CPU 接受10個(gè)時(shí)鐘長(zhǎng)度的時(shí)鐘序列。前4個(gè)時(shí)鐘用4位地址從ADDRESS端裝載地址寄存器,選擇所需的模擬通道,后6個(gè)時(shí)鐘對(duì)模擬輸入的采樣提供控制時(shí)序。模擬輸入的采樣起始于第4個(gè) I/O CLOCK的下降沿,而采樣一直持續(xù)6個(gè)I/O CLOCK周期,并一直保持到第10個(gè) I/O CLOCK的下降沿。轉(zhuǎn)換過程中,CS的下降沿使DATA OUT引腳脫離高阻狀態(tài)并起動(dòng)一次I/O CLOCK的工作過程。CS的上升沿終止這個(gè)過程并在規(guī)定的延遲時(shí)間內(nèi)使DATA OUT引腳返回到高阻狀態(tài),經(jīng)過兩個(gè)系統(tǒng)時(shí)鐘周期后禁止I/OCLOCK和ADDRESS端。
時(shí)序圖:
下降沿輸出數(shù)據(jù),上升沿輸入地址
CS片選拉低,一次轉(zhuǎn)換開始,同時(shí)輸出上次轉(zhuǎn)換的數(shù)據(jù)
時(shí)序使用方法:
1、CS片選拉高,EOC拉高,CLK時(shí)鐘拉低
2、CS片選拉低,開始讀出第一位數(shù)據(jù)
3、在第一個(gè)時(shí)鐘上升沿,輸入一個(gè)地址數(shù)據(jù)
4、之后在每個(gè)時(shí)鐘的下降沿輸出AD轉(zhuǎn)換數(shù)據(jù),在上升沿輸入地址數(shù)據(jù)
5、TLC1543是10位AD,因此有10個(gè)時(shí)鐘,TLC2543是位AD,因此有12個(gè)時(shí)鐘
6、一個(gè)操作過程結(jié)束后,片選CS拉高,EOC會(huì)在最后第10個(gè)時(shí)鐘的下降沿觸發(fā)拉低,開始AD轉(zhuǎn)換,此時(shí),輸出被禁止,等到轉(zhuǎn)換結(jié)束后EOC置位1,代表轉(zhuǎn)換結(jié)束。等到CS片選再次拉低,開始第二次操作。
TLC1543的電路圖(與單片機(jī)連接)
TLC15433的引腳圖

TLC25433引腳圖
A0~A10為11個(gè)模擬輸入通道
REF-通常接地
REF+接+5v
則輸入可測(cè)電壓為0~5v
cs位片選段,低電平有效,不用時(shí)置1,用時(shí)保持為0
DATAOUT為AD轉(zhuǎn)換數(shù)據(jù)輸出端(10位)
ADDRESS為地址輸入端,可輸入相關(guān)的命令,前四位用于選擇不同的輸入通道,如:0000位選擇0通道,0001位選擇1通道,及數(shù)據(jù)輸出的格式(高位先出還是低位先出)。
TLC1543的三個(gè)控制輸入端CS、I/O CLOCK、ADDRESS和一個(gè)數(shù)據(jù)輸出端DATA OUT遵循串行外設(shè)接口SPI協(xié)議,要求微處理器具有SPI接口。但大多數(shù)單片機(jī)均未內(nèi)置SPI接口(如目前國(guó)內(nèi)廣泛采用的MCS51和PIC系列單片機(jī)),需通過軟件模擬SPI協(xié)議以便和TLC1543接口。TLC1543芯片的三個(gè)輸入端和一個(gè)輸出端與51系列單片機(jī)的I/O口可直接連接,具體連接方式可參見圖3。軟件設(shè)計(jì)中,應(yīng)注意區(qū)分TLC1543的11個(gè)模擬輸入通道和3個(gè)內(nèi)部測(cè)試電壓地址。附表為模擬通道和內(nèi)部電壓測(cè)試地址。程序軟件編寫應(yīng)注意TLC1543通道地址必須為寫入字節(jié)的高四位,而CPU讀入的數(shù)據(jù)是芯片上次A/D轉(zhuǎn)換完成的數(shù)據(jù)。在本文后附的程序中對(duì)此有詳細(xì)的說明。模擬輸入通道選擇 輸入寄存器地址(2進(jìn)制)。
A0 0000
A1 0001
A2 0010
A3 0011
A4 0100
A5 0101
A6 0110
A7 0111
A8 1000
A9 1001
A10 1010
內(nèi)部測(cè)試電壓選擇 輸入地址 輸出結(jié)果(16進(jìn)制)
(Vref++ Vref-)/2_ 1011 200
Vref- 1100 000
Vref+ 1101 3ff
注:Vref+為加到TLC1543 REF+端的電壓,Vref-是加到REF-端的電壓
TLC1543子函數(shù)
uint read1543(void)
{
uchar i=0;
uint ad_value=0;
TCL2543_CLK=0; //一次轉(zhuǎn)換開始前,CS片選置1,EOC置1,時(shí)鐘置0
TCL2543_CS=1;
EOC=1;
delay_1ms(); //保持一段時(shí)間,拉低CS片選
TCL2543_CS=0;
delay_1ms(); //保持一段時(shí)間,等數(shù)據(jù)穩(wěn)定后再讀取第一位數(shù)據(jù)A9(最高位)
for(i=0;i<10;i++)
{
if(TCL2543_DOUT) ad_value|=0x0001; //讀取第一位數(shù)據(jù)
TCL2543_DIN=0; //將通道選擇數(shù)據(jù)準(zhǔn)備好,上升沿鎖存進(jìn)TLC1543
TCL2543_CLK=1; //上升沿
delay_1ms(); //保持一段時(shí)間
TCL2543_CLK=0; //下降沿保持一段時(shí)間,在讀取數(shù)據(jù)
delay_1ms();
ad_value=ad_value<<1; //移位,將最低位空出,以裝入第2位數(shù)據(jù)(A8)
}
TCL2543_CS=1; //一次轉(zhuǎn)換結(jié)束后將CS片選拉高
ad_value=ad_value>>1; //由于多左移了1位,所以
return ad_value;
}

tlc1543 protues仿真圖
/*----File Description----
- File Name : TLC5615.H
- Functions : 初使化:TLC1543_init(void)
讀ADC :uint16 ReadADC_TLC1543(uchar ain)
- Description : 先調(diào)用初使化函數(shù),再調(diào)用讀ADC函數(shù),形參ain
為模擬通道,其值為 0 ~ 10. 注意:返回值為
上一次轉(zhuǎn)換結(jié)果。
- Author : Mason 別名:小菜
- Create Date : 2013/7/26
- Performance : Finished
- Global Variable : None
- File static Variable : None
- -------------------------------------------
- Revision History
- No. Date Revised by Item Description
-
-------------------------------------------------------------------------*/
/*----------------------------Head---------------------------------------*/
#include <reg52.h>
#include "TLC1543.h"
#include "MICRO.h"
#include "delay.h"
/*----------------------------Code---------------------------------------*/
void TLC1543_init(void)
{
CS_1543 = 1;
SCLK_1543 = 0;
}
/*----Important Function Description----
- Function Name : uint16 ReadADC_TLC1543(uchar ain)
- Description : None
- Author : Mason 別名:小菜
- Create Date : 2013/7/27
- Parameters/Arguments : uchar ain :下一次轉(zhuǎn)換選通的ADC通道。
- Return Code : uint16 adc_value:上一次ADC轉(zhuǎn)換的結(jié)果。
- Global Variable : None
- static Variable : None
- -------------------------------------------
- Revision History
- No. Date Revised by Item Description
-
-------------------------------------------------------------------------*/
uint16 ReadADC_TLC1543(uchar ain)
{
uchar temp;
uint16 adc_value = 0;
ain <<= 4;
CS_1543 = 0;
for(temp = 0;temp < 10;temp ++) // 將判斷語句改為 temp<12
{ // 程序可移殖至 TLC2543.
adc_value <<= 1;
ain <<= 1;
ADDR_1543 = CY;
if(DOUT_1543) adc_value += 1;
SCLK_1543 = 1;
delayus(1);
SCLK_1543 = 0;
}
CS_1543 = 1;
return adc_value;
}
/*TLC2543驅(qū)動(dòng)程序(dhd0)*/
/**************************************
TLC2543驅(qū)動(dòng)程序
*************************************/
#include <reg51.h>
#include <intrins.h>
/**************************************
2543控制引腳宏定義
*************************************/
#define CLOCK p17 /*2543時(shí)鐘*/
#define D_IN p16 /*2543輸入*/
#define D_OUT p14 /*2543輸出*/
#define _CS p15 /*2543片選*/
#define uint unsigned int
#define uchar unsigned char
/**************************************
名稱:delay
功能:延時(shí)模塊
輸入?yún)?shù):n要延時(shí)的周期數(shù)
輸出參數(shù):無
*************************************/
void delay(uchar n)
{
uchar i;
for(i=0;i<n;i++)
{
_nop_();
}
}
/**************************************
名稱:read2543
功能:TLC2543驅(qū)動(dòng)模塊
輸入?yún)?shù):port通道號(hào)
輸出參數(shù):ad轉(zhuǎn)換值
*************************************/
uint read2543(uchar port)
{
uint ad=0,i;
CLOCK=0;
_CS=0;
port<<=4;
for(i=0;i<12;i++)
{
if(D_OUT) ad|=0x01;
D_IN=(bit)(port&0x80);
CLOCK=1;
delay(3);
CLOCK=0;
delay(3);
port<<=1;
ad<<=1;
}
_CS=1;
ad>>=1;
return(ad);
}
/**************************************
名稱:main
功能:主函數(shù)
輸入?yún)?shù):無
輸出參數(shù):無
*************************************/
void main()
{uint ad;
while(1)
{
ad=read2543(0);
}
}