8通道AD芯片ADS7844,采用24-clocks方式,输出有一些问题,以第一通道AD1为例,程序如下,时序图参考附件,电路图参考附件,实际DA TLV5610输出为0.131V,具体问题如下.
1.在写control Byte的时候,尚未写完8个bits,ADS7844 Dout就开始拉高,与datasheet时序图不符合,为什么?
2.写完control Byte之后,读取ADS7844 Dout,一直为0,示波器抓取波形也显示如此,为什么?
3.写control Byte的时候,量测AD1电压为0.131V(实际DA TLV5610输出),一直到写完8个bit,0.131v电压不变,接下来读取ADS7844 Dout的时候,在第12个CLOCK结束后(实际是CLOCK=0步序),AD1从0.131v下降为0,之后一直为0,为什么?
user1479057:
ADCLK and ADDOUT(16 clocks)
user1479057:
ADCLK and ADDOUT(control Byte 8clocks)
user1479057:
电路图
user1479057:
回复 user1479057:
程式代码如下.
/* init */void adc_ads7844_init(){ ADCS = 1; _nop_(); ADCLK = 0; _nop_(); ADDIN = 0; _nop_();}
u_int adc_ads7844_write(u_char AD_ch){ u_char i; ADCS=0; _nop_(); _nop_();
for (i=0;i<8;i++) { ADDIN=(bit)(AD_ch&0x80); _nop_(); _nop_();
ADCLK=1; AD_ch<<=1; _nop_(); _nop_(); ADCLK=0; _nop_(); _nop_(); } ADDIN=0;}
u_int adc_ads7844_read(){ u_char i; u_int data_out=0;
for (i=0;i<16;i++) { ADCLK=1; data_out<<=1; data_out=data_out|ADDOUT; _nop_(); _nop_(); ADCLK=0; _nop_(); _nop_(); } _nop_(); _nop_();
ADCS=1; data_out>>=4; _nop_(); _nop_(); return(data_out);}
main(){ u_char i; u_int AD_channal1,AD_channal2;
dac_5610_init(); adc_ads7844_init(); delay(100);
for(i=1;i<=8;i++) { dac_5610(0x0000,i); delay(100); }
dac_5610(0x01ff,1); //2583.35mv delay(100);
adc_ads7844_write(0x8f); delay(100); AD_channal1=adc_ads7844_read(); delay(100);
}