tlc4545驱动不起来,感觉时序没错,硬件也没问题
读出来显示一直是0.00
#include<reg52.h>
#include<intrins.h>
#include<51_12864.h>
#define uchar unsigned char
#define uint unsigned int
sbit AD_CS=P1^3;
sbit AD_SCLK=P1^1;
sbit AD_SDO=P1^2;
uchar table[]="0123456789jk";
uchar str[3];
//************初始化tlc4545****************************************
void init_tlc4545()
{
AD_CS=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_CS=1;//拉高复位初始化结束
_nop_();
_nop_();
}
//***********读取AD转化结果*********************************************************
unsigned int read_tlc4545()
{
uint i,temp,j;
AD_SCLK=1;
AD_CS=1;
_nop_();
AD_CS=0;
for(i=0;i<16;i++) //16个时钟周期
{
AD_SCLK=0;
if(AD_SDO)
{
temp=(temp<<1)|0x0001;
}
else
temp=temp<<1;
AD_SCLK=1;
}
AD_SCLK=0; //8个时钟周期
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
//总共24个时钟周期
AD_CS=1;
Delay_ms(10); //延时保证转换时间足够
return temp;
}
void main()
{
unsigned int temp;
unsigned int value;
lcdinit(); //12864初始化
init_tlc4545();// tlc4545初始化
disply_string(0x80,"电压采集测试");//液晶显示默认字符
while(1)
{
value=read_tlc4545(); //读取AD转换值
temp=(value*5/65535)*100; //AD值处理
str[0]=temp/100+0x30;
str[1]=(temp/10)%10+0x30;
str[2]=temp%10+0x30;
disply_string(0x90,str);
}
}
你好,
从硬件的角度来说,你的MCU是5V的I/O口么?请检查你的MCU与ADC之间是否共地,+5,+12以及参考电源输出是否正常?
软件接口方面,你的SCLK大概有多快?AD_SCLK=0; 与 AD_SCLK=1; 之间应该需要加一点延迟,不然应该无法满足数据手册第6页时序的要求,比如说tw1,tw2的要求。
我用的C51单片机,速度不是很快,我用逻辑分析仪实测SCLK—低电平持续时间有2us,高电平时间有2us,数据手册最大SCLK高低电平都是5us,最小是27ns,够了啊
硬件方面也测试过了,输出全是正确的,都可以但是电压显示一直是0V,实测1.5v ,5v都是这样
你的意思是TLC4545的输出是正常的,但是MCU采集不到有效信号吗
嗯,不知道是什么问题,对了我的VREF是5V参考由REF5050输出提供,和电源直接接一起了,这个 有影响吗?
电源使用的也是REF5050的输出?你把原理图发一下看看吧,不是很明白你说的意思啊
附件中电路更改过了,原来的电路图,是把6脚的+5也接到REF那里去了,做出来的板子怎么调,lcd12864上总是显示00.0,附件的图是改过的,电源VDD已经不再连接REF脚,当初贪图布线方便,而且,ref输出不是也是5V吗,那我想就接一起了,结果悲剧了,这个倒底是什么问题,为什么这样接不行
你的意思是说 将TLC4545的电源VDD 独立给+5V的电源,板子就可以正常工作了?
因为REF的输出能力有限