微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > ADS1282读寄存器的问题

ADS1282读寄存器的问题

时间:10-02 整理:3721RD 点击:

这是ADS1282数据手册上的,那个Register mode(PIN=0)需要我们进行配置吗,是在哪里配置啊

貌似是不需要我们进行配置

我以前写的代码,给您参考下,希望对您有帮助。。

void ADS1248_LowLevel_Init(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  /*!< ADS1248_SPI Periph clock enable */
  
    
  /*!< ADS1248_SPI_SCL_GPIO_CLK, ADS1248_SPI_SDA_GPIO_CLK 
       and ADS1248_SPI_SMBUSALERT_GPIO_CLK Periph clock enable */
  RCC_APB2PeriphClockCmd(ADS1248_SPI_CLK_GPIO_CLK | ADS1248_SPI_STR_GPIO_CLK | ADS1248_SPI_RDY_GPIO_CLK, ENABLE);
  
  /*!< Configure ADS1248_SPI pins: CLK SDI */
  GPIO_InitStructure.GPIO_Pin = ADS1248_SPI_CLK_PIN  | ADS1248_SPI_SDI_PIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(ADS1248_SPI_CLK_GPIO_PORT, &GPIO_InitStructure);
  /*!< Configure ADS1248_SPI pins: SDO */
  GPIO_InitStructure.GPIO_Pin = ADS1248_SPI_SDO_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(ADS1248_SPI_SDO_GPIO_PORT, &GPIO_InitStructure);

  /*!< Configure ADS1248_SPI pins: START RESET */
  GPIO_InitStructure.GPIO_Pin = ADS1248_SPI_STR_PIN  | ADS1248_SPI_RET_PIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(ADS1248_SPI_STR_GPIO_PORT, &GPIO_InitStructure);
  /*!< Configure ADS1248_SPI pins: CS */
  GPIO_InitStructure.GPIO_Pin = ADS1248_SPI_CS_PIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(ADS1248_SPI_CS_GPIO_PORT, &GPIO_InitStructure);
  /*!< Configure ADS1248_SPI pins: READY*/
  GPIO_InitStructure.GPIO_Pin = ADS1248_SPI_RDY_PIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(ADS1248_SPI_RDY_GPIO_PORT, &GPIO_InitStructure);
}
void ADS1248_Init(void)
{
    ADS1248_LowLevel_Init();
    ADS1248_CS_H;
    ADS1248_RET_H;
    ADS1248_RET_L;
    delay(5000000);
    ADS1248_RET_H;
    delay(5000000);
    
    ADS1248_STR_L;
    delay(DELAY_T);
    ADS1248_STR_H;
}
/*******************************************************************************************************************
** 函数名称: void SPI_SendByte()    Name:   void SPI_SendByte()
** 功能描述: 通过SPI接口发送一个字节   Function: send a byte by SPI interface
** 输   入: INT8U byte: 发送的字节    Input:   INT8U byte: the byte that will be send
** 输   出: 无         Output:   NULL
** 说  明:
********************************************************************************************************************/
unsigned char SPI_SendByte(unsigned char byte)
{
    unsigned char i,j;
    j=0;
    ADS1248_CS_L;
    SPI_CLK_L;
    delay(DELAY_T);

    for(i=0;i<8;i++)           //"发数据
    { 
     
      SPI_CLK_H; 
      if(byte&0x80)SPI_SDI_H;
      else SPI_SDI_L;
      byte=byte<<1;
      delay(DELAY_T);


      j=j<<1;
      if(GPIO_ReadInputDataBit(ADS1248_SPI_SDO_GPIO_PORT,ADS1248_SPI_SDO_PIN))j=(j|0x01);     //"读数据

      SPI_CLK_L;//
      delay(DELAY_T);
    }
    //ADS1248_CS_H;
    return j;
}
/*******************************************************************************************************************
** 函数名称: INT8U SPI_RecByte()    Name:   INT8U SPI_RecByte()
** 功能描述: 从SPI接口接收一个字节    Function: receive a byte from SPI interface
** 输   入: 无         Input:   NULL
** 输   出: 收到的字节       Output:   the byte that be received
********************************************************************************************************************/

unsigned char SPI_RecByte(void)
{
    return SPI_SendByte(0XFF);
}ADS1248_Init();
            //while(aabb)
            //{
            // 
            // 
main()
{
        ADS1248_Init();
           
                SPI_SendByte(ADS1248_WREG|0X04);
                SPI_SendByte(0X01);
                SPI_SendByte(0XA3);
                SPI_SendByte(ADS1248_RREG|0X04);
                SPI_SendByte(0X01);
                data_Buf[3] = SPI_RecByte();
}

你好,首先谢谢你的回答,但是ADS1282并没有CS引脚啊,好像和ADS1248不一样啊

你好:问一下你这个程序时软件模拟SPI吗?

我的这个程序就是软件模拟SPI哦。

ADS1282确实是没有CS引脚。。ADS1282EVM是建立从早期硅例子,ADS1282EVM原理图从来都没有更新以反映的实际操作部分。你会发现25管脚始终被一个下拉电阻拉低,管理的都是拉低通过下拉电阻,本质上把这这个管脚拉低才是为正确的操作。楼主不妨可以试试。。这是代替CS引脚的。。

你确定这个是ADS1282datasheet上面的内容?我字ADS1282手册上怎么没有找到这段话?

ADS1282数据手册上的P30

我的ADS1282的25管脚是DGND啊,

我再P30也没有找到这段话。你的datasheet是TI网站上最新的datasheet吗?能不能附件发一份你用的datasheet?

ADS1282最新数据手册:http://www.ti.com.cn/cn/lit/ds/symlink/ads1282.pdf。

另外,25管脚确实是接地。请不要受到一些随意copy的回复的干扰。

你这个是2013的,我下的是2007版的,

3010.ADS18123数据手册.pdf

你好:问一下你,你现在可以对ADS1282进行读寄存器操作吗?我在对ADS1282进行读寄存器时出现了问题,读出来的都是0x00.

regisiter mode不用配置的,直接用SPI协议操作相关寄存器即可。

pin mode 主要是使用DIN和SYNC以及MCLK管脚配置modulator output mode和Filter Selection以及FIR Phase Selection。

你是上电之后就直接就读取寄存器吗?那样是不行的,需要首先初始化配置一下。

初始化有6个步骤,参见CONFIGURATION GUIDE。老版datasheet的34页,新版datasheet的40页。

 

不是说上电后,寄存器里都是默认值啊,还需要再配置?

你按照上述的6个步骤读取一下试试。

还有,读取出来的数据是二进制补码,需要进行转换。

你好:能不能发些你的程序,我参考下,多谢了!

你说的应该是读ADS1282的采集数据的过程,我现在只是在测试ADS1282是否正常工作(写读寄存器),但是我现在读出来的一直为0x00

你好:

       ADS1282一上电是不是就已经转换数据了?还有先写个复位程序,然后就是等待(while循环),这时候DRDY是不是有变化啊?

解决了吗我现在和你的问题一样。。。。好纠结。。。。难道不是复位就可以读出来了吗?

你好!你的问题现在解决了吗?

我这边上电复位后,能正常读取寄存器的值.配置采样率,也能输出相应的脉冲数.如配1000SPS,只要读正常,就可产生1000SPS个脉冲.

问题在于.读取转换值时,一直为零.

不知道你是否会看回这帖子:

还是写下过程,给后来者一些帮助吧.

1:上电后,是连续读模式.所以配置任何寄存器,都是要先停止连续读.流程是;SDATAC->配置->RDATAC,

2:写REG时,第一个参数是COMM | REG,第二参数是要写入的长度 -1.比如以下图为例.意思是从CFC0开始,连续写6个data,并不是只写CFCO.

若只写一个DATA到REG,正确流程是 COMM|REG->0x00(length 1-1)->DATA

3:CLK上升沿时写入,也是CLK上升沿读取

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top