OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8221|回复: 7

F4读ADS1247转换值错误的问题

[复制链接]

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
发表于 2014-11-11 14:41:24 | 显示全部楼层 |阅读模式
5金钱

最近在搞ADS1247,双通道,接两个铂电阻,这个是原理图:


现在读写控制寄存器都是可以的,但是读转换值一直不对,我先尝试的初始化一个通道,读一个通道


//使用到两个差分通道,初始化选择的通道
void InitADS1247(unsigned char channelx)
 { 

    ADS_START_0;
    ADS_RESET_0;
    delay_ms(10);
    ADS_RESET_1;
    delay_ms(20);
 
   ADS1247WREG(ADS1247_REG_MUX0,channelx);
  // ADS1247WREG(ADS1247_REG_MUX0,0x01);    //AIN0+     AIN1-
   //ADS1247WREG(ADS1247_REG_MUX0,0x13);   //AIN2+     AIN3-

    delay_ms(20);
   ADS1247WREG(ADS1247_REG_MUX1,0x38);      // 00111000,bit7:启用内部晶振;bit6-5:内部参考电压一直打开;bit4-3:输入基准为片上基准,并且连接到REFP0;bit2-0:普通模式    (查看是否有1.5mA电流)
    delay_ms(20);
 ADS1247WREG(ADS1247_REG_VBIAS,0);   //偏置电压关闭(默认)

   delay_ms(20);
   if(channelx==0x01)  ADS1247WREG(ADS1247_REG_IDAC1,0x01);         // 选择内部恒流源输出引脚    AIN0  AIN1
     else   ADS1247WREG(ADS1247_REG_IDAC1,0x23);            // 选择内部恒流源输出引脚    AIN2  AIN3
     delay_ms(20);
   //ADS1247WREG(ADS1247_REG_IDAC0,0x0f);     // DOUT/DRDY pin function both data out and data ready  并且1.5mA
     ADS1247WREG(ADS1247_REG_IDAC0,0x07);        //DOUT/DRDY pin functions only as Data Out (default)   并且1.5mA
  
   delay_ms(20);
   q=ADS1247RREG(ADS1247_REG_IDAC1);
   printf("测试:%x\r\n",q);
   printf("测试:%d\r\n",channelx);
   ADS1247WREG(ADS1247_REG_SYS0,0x79);  //128,2000sps
   delay_ms(20);
   //GPIO_SetBit(GPIOB,GPIO_Pin_15); //DIN拉高
  
 }


void ADS1247_getonechannel(void)
{
     u8 count=0;
     u8 a=1;
     k3=0;
      while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)&&a)     //PB14为 DRDY复用
   {
       count++;
       printf("B14:%d\r\n",1);
          if(count>200){printf("B14超时\r\n"); a=0;};

          
      }    
     SPI_ADS1247_SendByte(ADS1247_CMD_RDATA);
      delay_ms(10);

     ADH=SPI_ADS1247_SendByte(ADS1247_CMD_NOP);
     ADM=SPI_ADS1247_SendByte(ADS1247_CMD_NOP);
     ADL=SPI_ADS1247_SendByte(ADS1247_CMD_NOP);

      k3|=ADH<<16|ADM<<8|ADL;
      printf("温度:%x\r\n",k3); 
}


我在主程序中是初始化一次,读一个通道:

#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"
#include "mygpio.h"
#include "ads1247.h"


int main(void)
{
 //u32 t=0;
 uart_init(115200);   //串口波特率
  printf("串口OK\r\n");
 delay_init(168);
  Control_Init();
 ADS1247_GPIO_init();
  SPI_ADS1247_Init(); 
  InitADS1247(channel1);          //初始化通道一,channel1=0x01
  ADS1247_getonechannel();            //读单通道       
 InitADS1247(channel2);     //初始化通道二,channel2=0x13
   ADS1247_getonechannel();          //读单通道
 
 ADS1247_Convdataget();    // 读两个通道

  while(1)
  {
   GPIO_SetBits(GPIOD,GPIO_Pin_3|GPIO_Pin_2|GPIO_Pin_1|GPIO_Pin_0); 
  printf("t:%d\r\n",1);
    ADS1247_Convdataget();
  delay_ms(2000);
  GPIO_ResetBits(GPIOD,GPIO_Pin_3|GPIO_Pin_2|GPIO_Pin_1|GPIO_Pin_0);
  printf("t:%d\r\n",2);
    ADS1247_Convdataget();
  delay_ms(2000);
  }
}


但是读出来的数不正确,不知道哪边不对,麻烦原子哥帮看看。下面是读的时序:



另外,我还想连续读两个通道,但是看了这个时序图,有个地方不明白:

这边WREG是写控制寄存器的意思,但是这边又没说写哪个寄存器,ads1247有15个控制寄存器。 //初始化通道一,channel1=0x01 //初始化通道一,channel1=0x01

最佳答案

查看完整内容[请看2#楼]

回复【6楼】八度空间: --------------------------------- 原来是pin7 、8间要加个电容(对地),我加的是47uF。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2014-11-11 14:41:25 | 显示全部楼层
回复【6楼】八度空间:
---------------------------------
原来是pin7 、8间要加个电容(对地),我加的是47uF。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-11-11 15:44:18 | 显示全部楼层
帮顶。。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2014-11-11 16:09:07 | 显示全部楼层
原子哥,顺便帮看看撒。。。。好几天了,领导一直催我进度,我却卡在这里。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-11-11 21:00:08 | 显示全部楼层
回复【3楼】善良的二哥:
---------------------------------
没用过哦,呵呵
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2014-11-11 22:34:03 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
好的吧,不知道有没有其他兄弟姐妹用过的,指点一下,感谢!
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-11-11 23:10:30 | 显示全部楼层
老规矩,抓波分析
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-8-12
在线时间
0 小时
发表于 2015-8-12 11:11:53 | 显示全部楼层
回复【7楼】善良的二哥:
---------------------------------
我加了电容怎么还不行?
努力,奋进...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 03:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表