首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

AD7705校准和读Data register有关问题

2012-03-21 
AD7705校准和读Data register问题下面是我的程序,希望大侠帮我分析一下。AD7705_Start()执行的是写Clock re

AD7705校准和读Data register问题
下面是我的程序,希望大侠帮我分析一下。
AD7705_Start()执行的是写Clock reg和Setup reg,进行自动校准模式。
我曾经把AD7705_Start里面的 “写Setup reg,进行自动校准模式”程序注释掉,只写Clock reg,写入和读出都正确。
肯定是校准或读Data register出了问题。
另而且执行完程序段2或3后,DRDY引脚一直保持高,我用示波器测了,不解。
希望有人指点!
==============================================================
主程序段1

C/C++ code
reset_AD7705();    read_ad7705();    read_ad7705();

主程序段2
C/C++ code
reset_AD7705();    read_ad7705();    AD7705_Start();    read_ad7705();

主程序段3
C/C++ code
reset_AD7705();    read_ad7705();    AD7705_Start();    read_ad7705();    reset_AD7705();    read_ad7705();
说明:read_ad7705()里调用的SendOneByte,SenTwodByte为输出到串口函数。
其他:晶振2.4576。AIN1+接输入电压,AIN1-接地。
结果(串口输出):
结果1
分隔符, comm reg, Setup reg, Clock reg, Data reg(16bits).
00 00 88 01 05 
00 00 88 01 05 
结果2
00 00 88 01 05 4A DD 
00 00 FF 19 FF 
结果3
00 00 88 01 05 4A DB 
00 00 FF 19 FF 
00 00 FF 19 FF 
================================================================
函数
C/C++ code
#define NUM_SAMPLES 1     //每次采样次数void reset_AD7705(void) {  unsigned char i;    AD7705_DIN = 1;;  for( i=0; i<36; i++ )  {      AD7705_CLK = 0;      _nop_();      _nop_();      _nop_();        AD7705_CLK = 1;      _nop_();      _nop_();      _nop_();    }    delay_ms(1); }void AD7705_Start(void){        char i,j;        unsigned int new = 0;        unsigned int get_value[NUM_SAMPLES] = {0};         AD7705_Write_1_BYTE(0x20);  // Active Channel Ain1(+)/Ain1(-),Next Opraton Write to CLK REG.                for(i=0;i<=10;i++)                                                                                      {_nop_();}                                                                                  AD7705_Write_1_BYTE(0x04);  // Master Clk Enable, 2.4576 MHz Clk , O/P Update rate 50Hz (20 mSec).           for(i=0;i<=10;i++)                                                                                      {_nop_();}                                                                                  for (i = 0; i < NUM_SAMPLES; i++)        {            AD7705_Write_1_BYTE(0x10);  // Active Channel Ain1(+)/Ain(-),Next Opraton Write to SETUP REG                         for(j=0;j<=10;j++)        // Clearing  FSYNC bit Starts sampling.                                             {_nop_();}                                                                                          AD7705_Write_1_BYTE(0x44);  // Gain = 1, Bipolar Mode, Buffer Off, Clear FSYNC, Perform Self                for(j=0;j<=10;j++)                                                                                                  {_nop_();}                   while(AD7705_DRDY);                        AD7705_Write_1_BYTE(0x38);            get_value[i] = AD7705_Read_2_BYTE();            SendTwoByte(get_value[i]);        }}void read_ad7705(void){    unsigned char c;    unsigned int i;        SendTwoByte(0);                AD7705_Write_1_BYTE(0x08);  // read Communication register        for(i=0;i<=10;i++)                                                                                      {_nop_();}           c = AD7705_Read_1_BYTE();    SendOneByte(c);                AD7705_Write_1_BYTE(0x18);  // read Setup register                for(i=0;i<=10;i++)                                                                                      {_nop_();}                                  c = AD7705_Read_1_BYTE();    SendOneByte(c);                AD7705_Write_1_BYTE(0x28);  // read Clock register                for(i=0;i<=10;i++)                                                                                      {_nop_();}          c = AD7705_Read_1_BYTE();      SendOneByte(c);//只有在有数据时(DRDR变低),才可以读(Data, Offset, Gain reg)。} 



[解决办法]
木有用过,帮你顶
[解决办法]
你的程序搞定了没有?

热点排行