专注电子技术学习与研究
当前位置:单片机教程网 >> 常用芯片 >> 浏览文章

TLC2543,TLC1543程序及仿真电路图中文资料

作者:huqin   来源:本站原创   点击数:  更新时间:2014年08月16日   【字体:

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的引脚图
 

   TLC25433引脚图
 A0~A10为11个模拟输入通道
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 protues仿真图
 
下面提供TLC1543.c文件,完整的代码及其仿真文件下载地址:http://www.51hei.com/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.51hei.com/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);
}
}  
 
关闭窗口

相关文章