求助:ADC模块TLC2543如何使用?

2019-07-20 19:53发布

打算用TLC2543来做为外接的AD采样,不过不是很清楚到底应该怎样设置,有没有用过这块芯片的呀?过来指点一二
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
HenryYam
1楼-- · 2019-07-20 20:52
本帖最后由 HenryYam 于 2016-9-22 19:55 编辑

终于找到我原来调通的代码了:


//定义TLC2543C各接口引脚
sbit SCLK=P1^3;
sbit DIN=P1^4;
sbit DOUT=P1^5; //NOKIA 5110 LCD "DC"
sbit SCS=P1^6;  //TLC2543C 片选

/*===============================================*/
//从TLC2543读取采样值,形参Port是采样的通道号
//================================================
unsigned int AD2543(unsigned char Port)
{
  unsigned int Data=0;
  unsigned char i;
  SCLK=0;
  SCS=0;
  Port<<=4;
  for(i=0;i<12;i++)
  {
    if(DOUT) Data|=0x01;      //读取AD转换数值
    DIN=(bit)(Port&0x80);     //输出通道号
    SCLK=1;   
    SCLK=0;   
    Port<<=1;
    Data<<=1;
  }
  SCS=1;

  Delay(300);                 //10US转换时间

  SCS=0;
  Data=0;
  for(i=0;i<12;i++)
  {
    if(DOUT) Data|=0x01;      //读取AD转换数值
    DIN=(bit)(Port&0x80);     //输出通道号
    SCLK=1;   
    SCLK=0;   
    Port<<=1;
    Data<<=1;
  }
  SCS=1;
  Data>>=1;                  //多移的一位移回来
  return (Data);
}
//差不多100个机器周期,55微秒左右。
airlovelj
2楼-- · 2019-07-20 21:02
 精彩回答 2  元偷偷看……
airlovelj
3楼-- · 2019-07-21 02:49
 精彩回答 2  元偷偷看……
HenryYam
4楼-- · 2019-07-21 04:30
以下是多年前用TLC2543C时参考的别人的代码(我的代码暂时没有找到):

/*我用KEILC调试2543的程序,
单步step into执行能够得到正确的结果,
但是step over执行时结果却总是0fff,
但根据执行时间来看,应该进入了子程序,为什么结果出不来呢?
在坛子上搜索时,发现madswan也遇到过这种情况,恳求各位大侠解惑
(2543控制口与MCU都接了反相器以增强驱动)
源程序如下:        */
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
//2543控制脚定义
sbit CLOCK=P1^4; //2543时钟
sbit D_IN=P1^5; //2543输入
sbit D_OUT=P1^7; //2543输出
sbit D_CS=P1^6; //2543片选

#define uint unsigned int
#define uchar unsigned char

/***************************
名称:delay
功能:延时模块
输入参数:n要延时的周期数
输出参数:无
****************************/

void delay(uchar n)
{
   uchar k;
   for(k=0;k<n;k++)
    {
          _nop_();
        }
}
/************************
名称:read2543
功能:TLC2543驱动模块
输入参数:port通道号
输出参数:AD转换值
************************/

uint read2543(uchar port)
{uchar data i;
uint ad_data;
ad_data=0;
port<<=4;
CLOCK=0;
D_CS=0;
D_IN=1;
D_OUT=1;
D_CS=1;
delay(5);  //延迟20us
for(i=0;i<12;i++)
{
  if((port&0x80)!=0)
    {D_IN=0;}
  else
    {D_IN=1;}
CLOCK=0;
port<<=1;
CLOCK=1;
}
D_CS=0;
delay(5);
D_CS=1;
delay(5);
for(i=0;i<12;i++)
{
  if(D_OUT==0){ad_data|=0x01;}
CLOCK=0;
CLOCK=1;
ad_data=ad_data<<1;
}
ad_data=ad_data>>1;
return(ad_data);
}

你参考一下吧。
HenryYam
5楼-- · 2019-07-21 06:22
这里还有一个:

/***************************************************************
;软 件 说 明:从TLC2543读取采样值,形参port是采样的通道号
***************************************************************/
/*==================================================================*/
uint ad_2543(uchar port) //从TLC2543读取采样值,形参port是采样的通道号
{
uint ad=0,i;
SCLK=0;
SCS=0;
port<<=4;
for(i=0;i<12;i++)
{
  if(DOUT) ad|=0x01;
  DIN=(bit)(port&0x80);
  SCLK=1;
  delay(30);
  SCLK=0;
  delay(30);
  port<<=1;
  ad<<=1;
}
SCS=1;
ad>>=1;
return (ad);
}
/*======================================================================*/
airlovelj
6楼-- · 2019-07-21 09:16
HenryYam 发表于 2016-9-22 19:53
终于找到我原来调通的代码了:

哇哇,还真有!先谢谢啦!我等下回去再仔细研究!!!

一周热门 更多>