打印
[牛人杂谈]

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

[复制链接]
3140|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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仿真图


沙发
zhuotuzi|  楼主 | 2017-6-9 10:21 | 只看该作者
下面提供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);
}
}  


使用特权

评论回复
板凳
zhuotuzi|  楼主 | 2017-6-9 10:22 | 只看该作者
其实,新唐的51内置了ADC,根本不用这么费劲,所以如果用51,还是选新唐的比较好,要不然你买一个外置ADC模块的钱都够买俩新唐单片机了。

使用特权

评论回复
地板
zhuomuniao110| | 2017-6-9 22:48 | 只看该作者
12BIT精度,4096的分辨率。

使用特权

评论回复
5
gejigeji521| | 2017-6-10 15:06 | 只看该作者
我去,我以为看错了,呢,还真没看错。

使用特权

评论回复
6
捉虫天师| | 2017-6-11 19:27 | 只看该作者
以前听说过2543,没听过1543.。刚开始以为楼主写错了呢。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

197

主题

3263

帖子

7

粉丝