max187使用外部基准电压,上电以后,DIN居然有4V多的电压,那里来的啊,都测过电路,没有短路的地方啊?
程序加进去总是读出4095这个数字,换了时序,不行,换AD也不行,没有示波器,只能靠数字判断,换了几次的程序逻辑,都是4095,程序如下,崩溃中请救救~
uint MAX187read(void)
{
uchar H,L,i;
uint count; //16位变量
MAX187_CS=0; //低电平有效,开始转换
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
MAX187_SK=1;
MAX187_SK=0;
H=0; //高位变量清零
for(i=0;i<4;i++) //高4位
{
MAX187_SK=1;
if(MAX187_DO) H|=0x01; //位标量,如为1则H加1,如为0则跳过
MAX187_SK=0;
if(i<3)H<<=1;
}
L=0;
for(i=0;i<8;i++) //低8位
{
MAX187_SK=1;
if(MAX187_DO) L|=0x01; //位标量,如为1则L加1,如为0则跳过
MAX187_SK=0;
if(i<7) L<<=1;
}
delay(1);
MAX187_CS=1;
H&=0X0F; //屏蔽高四位
count=H*256+L;//高低八位合并
// count=H;
// count=(count<<8)|L;
return count;
}
------解决方案--------------------
1 参考电压是否对?
2 时序上可能有问题, CLK拉低 CS拉低后检测DOUT直至高电平, 详见器件参考手册
------解决方案--------------------
楼上有道理。max187有内部参考源,如果外接,需要把shutdown悬空来关掉内部的。
很大可能是转换没完成就开始读了。你的时钟多少?几个nop可能不够8.5uS吧。还是按建议检测到Dout变高再开始读比较好