This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ADS1282读寄存器的问题

Other Parts Discussed in Thread: ADS1282, ADS1248

这是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版的,

  • 你好:问一下你,你现在可以对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上升沿读取