Created
学习笔记
for
redesigned
2012-09-08
versions:12_09_01
All
TLC2543是TI的12
1)12
2)在作业温度规模内10us转化时刻;
3)11个模仿输入通道;
4)3路内置自测试办法;
5)采样率为66
6)线性差错+1LSB(max);
7)有转化完毕(EOC)输出;
8)具有单、双极性输出;
9)可编程的MSB或LSB前导;
10)可编程的输出数据长度.
���
���
Temperature
���
���
���
���
���
���
���
(Signed
Applied
���
���
���
���
���
我用的tlc2543是直插的,引脚图如下:
各引脚的具体阐明如下:
引脚号 |
称号 |
I/O |
阐明 |
1~9,11,12 |
AIN0~AIN10 |
I |
模仿量输入端。11路输入信号由内部多路器选通。关于4.1MHz的I/OCLOCK,驱动源阻抗有必要小于或等于50Ω,而且用60pF电容来约束模仿输入电压的斜率 |
15 |
|
I |
片选端。在端由高变低时,内部计数器复位。由低变高时,在设定时刻内制止DATAINPUT和I/O |
17 |
DATAINPUT |
I |
串行数据输入端。由4位的串行地址输入来挑选模仿量输入通道 |
16 |
DATA |
O |
A/D转化成果的三态串行输出端。为高时处于高阻抗状况,为低时处于激活状况 |
19 |
EOC |
O |
转化完毕端。在最终的I/OCLOCK下降沿之后,EOC从高电平变为低电平并坚持到转化完结和数据预备传输中止 |
10 |
GND |
|
地。GND是内部电路的地回路端。除还有阐明外,一切电压丈量都相对GND而言 |
18 |
I/O |
I |
输入/输出时钟端。I/OCLOCK接纳串行输入信号并完结以下四个功用:(1)在I/O |
14 |
REF+ |
I |
正基准电压端。基准电压的正端(一般为Vcc)被加到REF+,最大的输入电压规模由加于本端与REF-端的电压差决议 |
13 |
REF- |
I |
负基准电压端。基准电压的低端(一般为地)被加到REF- |
20 |
Vcc |
|
电源 |
写程序时,要参阅对应的时序图,严厉依照时序进行操作就能够了,我用到的时序图如下:
是16时钟的,运用CS,MSB
对tlc2543进行操作的时分,尤其是要用到它的多通道作业时,要特别留意各个通道的操作,由于假如操作不妥,就有或许读出的不是想要通道的数据(我就遇到过相似的问题)。下面我就这个问题介绍一下我自己的经历和处理办法。
首要先看一下数据手册上的输入寄存器的指令介绍:
在进行操作之前,有必要要看清楚上面的指令表格。要特别留意,通道挑选的指令的方位在8位输入指令的高8位D7~D4,清楚了这一点,就能够了解程序中对tlc2543进行操作的函数中为什么会有一句port<<=4;
还要留意一点是:对TLC2543进行操作函数的原型是uint
假如想在调用tlc_read(uchar
上面是通道挑选的时分要留意的问题。可是还有一个问题是通道挑选正确,留意了上面的问题,可是读出的数据就不是咱们想要的通道的数据。这就涉及到下面的问题了。
从给2543送入挑选的通道数,到它AD转化完结了,输出数据这一进程需求一段时刻,时刻很短,可是就产生了一个问题。问题是这样的:我上面所写的函数uint
有很多人的程序都是运用了上面的榜首种办法,我自己完成的是第二种办法,这两种办法的实质其实是相同的,都是用屡次采样的办法来保证输出成果和挑选通道是相对应的。
上面我依据自己的了解,对tlc2543进行了大约了介绍,侧重介绍了一些简单犯错,较难了解的当地。我也在网上查了一些材料,但一般都是只要程序,而没有较具体的阐明,假如自己再渐渐揣摩的话,就比较浪费时刻了,而且比较简单犯错,而上面的值得留意的当地也比较难以了解。我身边也有同学在网上找来了程序就直接用,而不对它进行仔细的分析研究,这样的话肯定是犯错的概率是比较高的,而且也不能真实的把握它的运用办法。所以我就把我自己的了解写了出来,期望对你有所协助。
当然更具体,更威望的材料当然是对应的数据手册了,所以要常常查阅,而且以它为准。
好了下面是我写的程序,比较好用,我一直都在用,没有发现有什么大的问题,完成了操控多通道的转化。
单片机运用的是TI的msp430g2553
注释的也比较具体:
#include
#include
#define
#define
#define
#define
#define
#define
#define
#define
//这是针对tlc2543进行IO口装备的函数
void
{
P2DIR
P2DIR
P1DIR
}
//称号:read2543
//功用:TLC2543驱动模块
//输入参数:port通道号
//输出参数:ad转化值
uint
{
uint
uchar
CLR_CLOCK;
CLR_CS;
port<<=4;
for(i=0;i<12;i++)
{
{
}
//
//
}
SET_CS;
//while(P1IN&BIT7);
while((P1IN&BIT7)==0);
ad>>=1;
return(ad);
}
void
{
uint
uint
uchar
//
//
//
}
//本程序是用msp430操控12位的串行AD
//现在能够完成操控通道0进行转化,读取转化值,查验正确,
//可是操控多个通道一次进行转化,输出成果,还没有完成,需求进一步了解ltc2543,改善程序
//for(;;)
//
//
//
//
//
//
//
//
////
//
//
//
//
////
////
//
//
//
//
//如上面的一段程序,我本来是想让tlc别离选用通道6和通道8,然后再读出采样值,可是试验的成果是:我读出的成果通道6和通道8的刚好相反
//现在还没有彻底清楚原因。我想有或许是采样时序的问题没有搞清楚,有或许是榜首次送入通道6的地址,让通道6进行转化,可是得比及下一次才干读出
//成果。而这一次读的成果是上一次送入的地址转化的成果。这样的话便是这一次转化的成果,下一次才干读出,而这一次读出的成果是上一次
//转化的值,其对应的转化通道也是上一次确认的
//如上面源程序中,选用这种办法能够处理这个问题,由于输入一次新的地址后,让tlc多转化几回,这样就能够保证是本次的成果和本次的通道
//相对应了,一般循环3次以上就能够了