TLC1543 是11通道10位串行A/D轉換器,TLC2543是11通道12位串行A/D轉換器.
TLC1543是美國TI公司生產的多通道、低價格的模數轉換器。采用串行通信接口,具有輸入通道多、性價比高、易于和單片機接口的特點,可廣泛應用于各種數據采集系統。 TLC1543為20腳DIP封裝的CMOS 10位開關電容逐次A/D逼近模數轉換器
TLC1543工作時序如圖所示,其工作過程分為兩個周期:訪問周期和采樣周期。工作狀態由CS使能或禁止,工作時CS必須置低電平。CS為高電平時,I/O CLOCK、ADDRESS被禁止,同時DATA OUT為高阻狀態。當CPU使CS變低時,TLC1543開始數據轉換,I/O CLOCK、ADDRESS使能,DATA OUT脫離高阻狀態。隨后,CPU向ADDRESS端提供4位通道地址,控制14個模擬通道選擇器從11個外部模擬輸入和3個內部自測電壓中選通1路送到采樣保持電路。同時,I/O CLOCK端輸入時鐘時序,CPU從DATA OUT 端接收前一次A/D轉換結果。I/O CLOCK從CPU 接受10個時鐘長度的時鐘序列。前4個時鐘用4位地址從ADDRESS端裝載地址寄存器,選擇所需的模擬通道,后6個時鐘對模擬輸入的采樣提供控制時序。模擬輸入的采樣起始于第4個 I/O CLOCK的下降沿,而采樣一直持續6個I/O CLOCK周期,并一直保持到第10個 I/O CLOCK的下降沿。轉換過程中,CS的下降沿使DATA OUT引腳脫離高阻狀態并起動一次I/O CLOCK的工作過程。CS的上升沿終止這個過程并在規定的延遲時間內使DATA OUT引腳返回到高阻狀態,經過兩個系統時鐘周期后禁止I/OCLOCK和ADDRESS端。
時序圖:
下降沿輸出數據,上升沿輸入地址
CS片選拉低,一次轉換開始,同時輸出上次轉換的數據
時序使用方法:
1、CS片選拉高,EOC拉高,CLK時鐘拉低
2、CS片選拉低,開始讀出第一位數據
3、在第一個時鐘上升沿,輸入一個地址數據
4、之后在每個時鐘的下降沿輸出AD轉換數據,在上升沿輸入地址數據
5、TLC1543是10位AD,因此有10個時鐘,TLC2543是位AD,因此有12個時鐘
6、一個操作過程結束后,片選CS拉高,EOC會在最后第10個時鐘的下降沿觸發拉低,開始AD轉換,此時,輸出被禁止,等到轉換結束后EOC置位1,代表轉換結束。等到CS片選再次拉低,開始第二次操作。
TLC1543的電路圖(與單片機連接)
TLC15433的引腳圖
REF-通常接地
REF+接+5v
則輸入可測電壓為0~5v
cs位片選段,低電平有效,不用時置1,用時保持為0
DATAOUT為AD轉換數據輸出端(10位)
ADDRESS為地址輸入端,可輸入相關的命令,前四位用于選擇不同的輸入通道,如:0000位選擇0通道,0001位選擇1通道,及數據輸出的格式(高位先出還是低位先出)。
TLC1543的三個控制輸入端CS、I/O CLOCK、ADDRESS和一個數據輸出端DATA OUT遵循串行外設接口SPI協議,要求微處理器具有SPI接口。但大多數單片機均未內置SPI接口(如目前國內廣泛采用的MCS51和PIC系列單片機),需通過軟件模擬SPI協議以便和TLC1543接口。TLC1543芯片的三個輸入端和一個輸出端與51系列單片機的I/O口可直接連接,具體連接方式可參見圖3。軟件設計中,應注意區分TLC1543的11個模擬輸入通道和3個內部測試電壓地址。附表為模擬通道和內部電壓測試地址。程序軟件編寫應注意TLC1543通道地址必須為寫入字節的高四位,而CPU讀入的數據是芯片上次A/D轉換完成的數據。在本文后附的程序中對此有詳細的說明。模擬輸入通道選擇 輸入寄存器地址(2進制)。
A0 0000
A1 0001
A2 0010
A3 0011
A4 0100
A5 0101
A6 0110
A7 0111
A8 1000
A9 1001
A10 1010
內部測試電壓選擇 輸入地址 輸出結果(16進制)
(Vref++ Vref-)/2_ 1011 200
Vref- 1100 000
Vref+ 1101 3ff
注:Vref+為加到TLC1543 REF+端的電壓,Vref-是加到REF-端的電壓
TLC1543子函數
uint read1543(void)
{
uchar i=0;
uint ad_value=0;
TCL2543_CLK=0; //一次轉換開始前,CS片選置1,EOC置1,時鐘置0
TCL2543_CS=1;
EOC=1;
delay_1ms(); //保持一段時間,拉低CS片選
TCL2543_CS=0;
delay_1ms(); //保持一段時間,等數據穩定后再讀取第一位數據A9(最高位)
for(i=0;i<10;i++)
{
if(TCL2543_DOUT) ad_value|=0x0001; //讀取第一位數據
TCL2543_DIN=0; //將通道選擇數據準備好,上升沿鎖存進TLC1543
TCL2543_CLK=1; //上升沿
delay_1ms(); //保持一段時間
TCL2543_CLK=0; //下降沿保持一段時間,在讀取數據
delay_1ms();
ad_value=ad_value<<1; //移位,將最低位空出,以裝入第2位數據(A8)
}
TCL2543_CS=1; //一次轉換結束后將CS片選拉高
ad_value=ad_value>>1; //由于多左移了1位,所以
return ad_value;
}
下面提供TLC1543.c文件,完整的代碼及其仿真文件下載地址:http://www.zg4o1577.cn/f/TLC1543c51.rar
/*----File Description----
- File Name : TLC5615.H
- Functions : 初使化:TLC1543_init(void)
讀ADC :uint16 ReadADC_TLC1543(uchar ain)
- Description : 先調用初使化函數,再調用讀ADC函數,形參ain
為模擬通道,其值為 0 ~ 10. 注意:返回值為
上一次轉換結果。
- 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 :下一次轉換選通的ADC通道。
- Return Code : uint16 adc_value:上一次ADC轉換的結果。
- 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中文資料下載地址:http://www.zg4o1577.cn/f/串行12位A_DTLC2543及其應用.pdf
/*TLC2543驅動程序(dhd0)*/
/**************************************
TLC2543驅動程序
*************************************/
#include <reg51.h>
#include <intrins.h>
/**************************************
2543控制引腳宏定義
*************************************/
#define CLOCK p17 /*2543時鐘*/
#define D_IN p16 /*2543輸入*/
#define D_OUT p14 /*2543輸出*/
#define _CS p15 /*2543片選*/
#define uint unsigned int
#define uchar unsigned char
/**************************************
名稱:delay
功能:延時模塊
輸入參數:n要延時的周期數
輸出參數:無
*************************************/
void delay(uchar n)
{
uchar i;
for(i=0;i<n;i++)
{
_nop_();
}
}
/**************************************
名稱:read2543
功能:TLC2543驅動模塊
輸入參數:port通道號
輸出參數:ad轉換值
*************************************/
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
功能:主函數
輸入參數:無
輸出參數:無
*************************************/
void main()
{uint ad;
while(1)
{
ad=read2543(0);
}
}