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

ADS1246读寄存器问题

 各位TI大神:

  在操作ADS1246的时候,发现可以正常的读转换结果的数据,读不出寄存器数据,也不能把数据写入寄存器。在读写寄存器的时候有哪些需要注意的设置啊,请各位指点一下。

 写数据函数:
       ADS1246_START_DATA=Low;
          DelayUS(20);
          ADS1246_CS2_DATA=High;
            DelayUS(20);
           ADS1246_CS2_DATA     =Low;     //
        // __asm nop;                    //ÑÓʱ1/20M =50ns  ±£Ö¤Ê±Ðò
               // ADS1246_SCK_DATA=Low;
               DelayUS(20);
               DisableInterrupts;
           for(i=0;i<8;i++)              {
                ADS1246_SCK_DATA    =High;    //data on din are shifted into the device on the falling edge of sclk
                 // ADS1246_SCK_DATA     =Low;
                                if(TxBuffer&0x80)            //È¡×î¸ßλ
                  {
                    ADS1246_DIN_DATA=High;   //дÊý¾Ý
                  }
                else                  {
                   ADS1246_DIN_DATA=Low;    //дÊý¾Ý
                  }
              // DelayUS(5);
                ADS1246_SCK_DATA     =Low;
                 // ADS1246_SCK_DATA    =High;
                TxBuffer<<=1;
                // DelayUS(5);
              }
              EnableInterrupts;
           DelayUS(40);
           ADS1246_CS2_DATA  =High;//
           ADS1246_START_DATA=High;

 

读数据函数

  ADS1246_START_DATA=Low;
        DelayUS(20);
      ADS1246_CS2_DATA   =High;
      DelayUS(20);        ADS1246_CS2_DATA   =Low;
       //ADS1246_SCK_DATA  =Low;       DelayUS(10);
      DisableInterrupts;
    for(i=0;i<8;i++)     {
      ADS1246_DIN_DATA=High;  //nop
      ADS1246_SCK_DATA  =High;
       //ADS1246_SCK_DATA   =Low;    //ʱÖÓµÍ
              data|=ADS1246_DOUT2_DATA&0x01;
       data<<=1;
           //  DelayUS(5);
      ADS1246_SCK_DATA  =Low;
     //ADS1246_SCK_DATA  =High;
     // DelayUS(5);
     }
      ADS1246_DIN_DATA=Low;
       EnableInterrupts;
    //ADS1246_SCK_DATA   =Low;    //ʱÖÓµÍ
     //ADS1246_SCK_DATA  =High;
     DelayUS(40);
    ADS1246_CS2_DATA   =High;   //Ƭѡ¸ß
      ADS1246_START_DATA=High;

 

附件为在读第一个寄存器(BCS)时的波形  ,在DOUT上没有发现读取数据的波形。

Decapton Wang:

需要注意的有两点:

1. 手册第10页图1,其中注意一下tSCCS和tCSPW,时间要给够。

2. 手册53页"USER REGISTER READ AND WRITE COMMANDS”。读数据和写数据都需要先写进去两条指令,指定读哪个地址的值以及读几个Byte。另外,读/写寄存器时,不能再发送除读写外的其他指令。

tian zhang:

回复 Decapton Wang:

你好!

    tSCCS  SCLK=LOW 延时大于7个时钟周期 然后CS=HIGH  程序里面已经这样执行了,

   tCSPW  完成一个字节操作后CS=HIGH  然后延时大于5个时钟周期,程序里面也是这样执行的。

 

关于写寄存器操作

   发送数据为0x40  ,0x00    ,0x81

   读寄存器操作:

    发送数据位0x20 ,0x00    ,0xff(nop)

 

按照上述的东西,DOUT 上面还是没有数据。

Decapton Wang:

回复 tian zhang:

从测试图来看,似乎是想写入0x10,0x00,然后读0x00寄存器的值。但是SCLK只有8个,如果想读一个寄存器的值,是不是应该给24个SCLK?16个用来写指令,8个用来读?

tian zhang:

回复 Decapton Wang:

写入数据为0x20  0x00  0x00   意思是读地址为0的寄存器的值,另外最上面的截图是完整的波形,有24个SCLK.

tian zhang:

回复 Decapton Wang:

感谢Decapton Wang 的支持,按照你的办法,连续给24个时钟,然后CS在此过程中为,就可以读写寄存器了,谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » ADS1246读寄存器问题
分享到: 更多 (0)