TI中文支持网
TI专业的中文技术问题搜集分享网站

ADS1247驱动程序

下面一段关于ADS1247的驱动程序,不知道是否正确,还请各位大神指点一下,,,

 

 

 

void ADS_WriteByte(unsigned char WriteData)       //写一个字节数据
{
  unsigned char i;    ADS_CS_0;
 ADS_SCLK_0;
 Delay(10);
  for(i = 0 ; i < 8 ;i++)    {      if (WriteData & 0x80)
      ADS_Din_1;      else      ADS_Din_0;  ADS_SCLK_1;            Delay(1);
    WriteData = WriteData << 1 ;        ADS_SCLK_0;
 
  }       ADS_CS_1;}

 

void ADS_Reset()                           //复位ADS1247
{
  ADS_WriteByte(Reset);
  delay_AD(30000);//延时大于0.6ms
}

 

void ADS_Init(void)                      //AD初始化
{

 ADS_Reset();                                        //首先复位AD,其次向指定寄存器写操作命令
 
 //Multiplexer Control Register 0
  WriteReg_S(Reg_MUX0 | 0x40 , 0x00 , 0x01);          // 设置AD0(9脚)为+,AD1(10脚)为-
   //Bias Voltage Register
  WriteReg_S(Reg_VBias | 0x40 , 0x00 , 0x00);          //默认值

  //Multiplexer Control Register 1
  WriteReg_S(Reg_MUX1 | 0x40 , 0x00 , 0x00);  //     //Bit7:启用内部晶振,Bit6-5:外部基准2.5V,Bit2-0:普通模式

 
 //System Control Register 0
  WriteReg_S(Reg_SYS0 | 0x40 , 0x00 ,0x09);   //     //Bit7:必须设置为0,Bit6-4:选择1倍增益,Bit3-0:选择2000SPS测量速度

 
 //IDAC Control Register 0
  WriteReg_S(Reg_IDAC0 | 0x40 , 0x00 , 0x08); //Bit7-4:只读,Bit3:DRDY/DOUT功能复用Dout线 ,Bit2-0:关闭内部恒流源

}
 

 

 

signed long ReadAds1247Data(void)   //读AD数据
{    unsigned char i;
 unsigned char WriteData=0x12;//读一次数据命令
  unsigned long r=0;
 signed long rr=0;

  while ((rP2_IN & ADS_Dout) == 0x02);

  ADS_CS_0;
 ADS_SCLK_0;
 
  for(i = 0 ; i < 8 ;i++)    //发送读一次数据命令(发送读数据命令)     {      if (WriteData & 0x80)
      ADS_Din_1;      else      ADS_Din_0;  ADS_SCLK_1;  Delay(1);     //延时1uS
    WriteData = WriteData << 1 ;        ADS_SCLK_0;
   }            ADS_Din_1;  for(i=0;i<24;i++)//在24个工作时钟的作用下,DOUT输出24位数据高位在前,即读取DOUT数据,同时对DIN进行空操作(拉高)
    {          ADS_SCLK_1;
   Delay(1);//延时1uS
      r=r<<1;
      if (rP2_IN&ADS_Dout)    r++;       ADS_SCLK_0;
 
  }        ADS_CS_1;       

  // 转换输出格式为直接二进制,有符号位
  if(r & 0x800000)         //判断是正数还是负数  {                     
   r =(r-0x000001)^ 0xffffff;
    fushu=1;
     } 
   else
   {
   fushu=0;
   }  rr=r;
    return rr;//返回数据
}

 

void ADC_initPort() //AD端口初始化    CS:P2^4片选(4脚)   DIN:P2^3向AD发送数据(5脚), SCK:P2^2时钟口(6脚),  DOUT:P2^1来自AD的数据(7脚)
{

 
 rP2_CFG = P21_IO|P22_IO|P23_IO|P24_IO;//端口配置成I/o模式
 rP2_DIR = P22_OUT|P23_OUT|P24_OUT;//P2^2输出,P2^3输出,P2^4输出 ,P2^1输入(默认)
 rP2_OUT = BIT2|BIT3|BIT4;//第2位,第3位,第4位置1
 
}

 

user151383853:

写得挺规范, 建议找 bug 还是请你的调试器帮忙吧

Martin:

回复 user151383853:

有去实验过么?  建议用示波器观察接口时序跟数据手册里面的想比较

hang yang:

回复 Martin:

我用示波器看了,没有采样开始到采样结束的时间间隔不是很固定

还有我想问ADS1247可以连续读取数据的,如何实现,,,

Martin:

回复 hang yang:

肯定可以连续读取数据的,具体实现请参考数据手册 Figure 76. Read Data Continuously 示意图

Martin:

回复 hang yang:

可以酌情参考以下链接中的例程:

http://www.deyisupport.com/question_answer/analog/data_converters/f/58/t/68454.aspx

hang yang:

回复 Martin:

恩,我就是参考数据手册的,搞了半天都没有搞出来

hang yang:

回复 Martin:

这个例程早些时候我就下载过了。里面写的很全面,就是太多了,看不过来!!!

赞(0)
未经允许不得转载:TI中文支持网 » ADS1247驱动程序
分享到: 更多 (0)