求高手,摸了好长时间没搞好。快疯了。
根据AD7811/7812的datasheet,AD7811/7812可以通过DIN写入控制字,对AD7811/7812进行控制。然而,在datasheet中关于读写控制寄存器的只有一个7812的图,根据图中和网上可以查到的程序,7812需要先写入0x6040进行初始化,然后写入0x4040让7812进行工作。原则上就是通过设置PD1、PD0为11,然后为10,接下来7812开始工作(不知道我对这个的理解是不是正确,求高手指点)。
我的问题是AD7811的控制寄存器该如何设置呢,应该写入什么呢。因为网上找不到类似程序,datasheet上也没有明确说明,所以想请教下各位,有没有对7811比较熟悉的,或者对类似比较熟悉的。
注明:我像7812一样写入0x6040,0x4040;或者根据datasheet中7811控制寄存器的说明设为0x3040,0x2040;或者设为0x3000,0x2000,无论怎么改变输入电压,显示不变化。另外显示程序显示其他内容是正常的,所以应该还是ad方面的问题。此外为了确认ad芯片的问题,更换新的ad7811,现象一样。
硬件部分,使用的datasheet中推荐接法。vin1输入,tfs、rfs、convst相连,sclk控制时序,dout输出,din写入控制字。
输出部分,通过显示器进行显示。
附ad7811程序:
void InitAD7811()
{
CONVST=1;
CommAD7811(0x6040);
}
void Start_AD()
{
CONVST=0;
_nop_();
CONVST=1;
}
void CommAD7811(unsigned char cmd)
{
unsigned char ip;
unsigned char pbit;
unsigned char tempres;
AD7811_RES=0;
pbit=0x8000;
CONVST=0;
_nop_();
CONVST=1;
CLK=1;
CONVST=0;
for(ip=0;ip<16;ip++)
{
AD7811_RES<<=1;
DOUT=1;
DIN=(cmd&pbit)?1:0;
_nop_();
_nop_();
CLK=0;
tempres=DOUT;
AD7811_RES+=tempres;
_nop_();
_nop_();
CLK=1;
pbit>>=1;
}
}
void main()
{
unsigned int AD_Result; // AD转换值
InitAD7812(); // 启动AD7812
delay(50); // 启动时间约1.5us,延迟
while(1)
{
Start_AD(); // 启动一次转换
delay(100); // 转换时间约2.3us,延迟
CommAD7811(0x4040); // 设置下一次转换参数,读取AD转换值
AD_Result = AD7812_RES>>10; // 将转换值由左对齐变为右对齐
//********************主程序部分*********************//
}
}