专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
求助:ADC模块TLC2543如何使用?
2019-07-20 19:53
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
13546
7
1303
打算用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
终于找到我原来调通的代码了:
哇哇,还真有!
先谢谢啦!我等下回去再仔细研究!!!
加载中...
1
2
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
终于找到我原来调通的代码了:
//定义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微秒左右。
/*我用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);
}
你参考一下吧。
/***************************************************************
;软 件 说 明:从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);
}
/*======================================================================*/
哇哇,还真有!先谢谢啦!我等下回去再仔细研究!!!
一周热门 更多>