微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > ads1158数据读取

ads1158数据读取

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

你好,我想请教一下:

 

我使用ads1158的时候,采用寄存器命令的方式读取数据,但是我不知道怎么去判断独到的数据是否正确?以下是我的源代码:

always @(posedge clk or negedge rst_n)begin  

if(!rst_n)begin   

num_reset_cmd<=8'd0;   

num_reg_wr<=8'd0;  

 num_reg_rd<=8'd0;   

num_dat_rd<=8'd0;   

state <=reset_spi;   

cs <=1'd1;  

 flag <=2'd0;  

 start <=1'd0;  

 cscnt <=8'd0;

 end

 else case(state )   

reset_spi: begin //reset_spi;   //

 if(cscnt == 8'd200)begin    

 cs <=1'd0;    

 state <=reg_wr;    

end     

else begin    

cs <=1'd1;     

cscnt <=cscnt+1'd1;    

end    end //reset_spi  

 reg_wr: begin // reg_wr; //配置寄存器,打开i通道0、1和8

  cs <=1'd0;  

  flag <=2'd1;   

 if(SCK_risingedge)begin   

 num_reg_wr<=num_reg_wr+1'd1;    

 case (num_reg_wr)   

   //cmd for config0      

8'd0: mosi <=1'd0;      

8'd1: mosi <=1'd1;      

8'd2: mosi <=1'd1;     

 8'd3: mosi <=1'd0;     

 8'd4: mosi <=1'd0;      

8'd5: mosi <=1'd0;      

8'd6: mosi <=1'd0;     

 8'd7: mosi <=1'd0;     

 //config0      

8'd8: mosi <=1'd0;      

8'd9: mosi <=1'd0;      

8'd10: mosi <=1'd0;     

 8'd11: mosi <=1'd0;      

8'd12: mosi <=1'd0;     

 8'd13: mosi <=1'd0;      

8'd14: mosi <=1'd1;     

 8'd15: mosi <=1'd0;

     //cmd for muxsg0     

 8'd16: mosi <=1'd0;    

  8'd17: mosi <=1'd1;      

8'd18: mosi <=1'd1;     

 8'd19: mosi <=1'd0;      

8'd20: mosi <=1'd0;     

 8'd21: mosi <=1'd1;    

  8'd22: mosi <=1'd0;     

 8'd23: mosi <=1'd0;     

 //muxsg0     

 8'd24: mosi <=1'd0;    

  8'd25: mosi <=1'd0;     

 8'd26: mosi <=1'd0;    

  8'd27: mosi <=1'd0;      

8'd28: mosi <=1'd0;    

  8'd29: mosi <=1'd0;     

 8'd30: mosi <=1'd1;      

8'd31: mosi <=1'd1;                

  //cmd for muxsg1    

  8'd32: mosi <=1'd0;   

   8'd33: mosi <=1'd1;    

  8'd34: mosi <=1'd1;    

  8'd35: mosi <=1'd0;     

 8'd36: mosi <=1'd0;     

 8'd37: mosi <=1'd1;  

    8'd38: mosi <=1'd0;   

   8'd39: mosi <=1'd1;         

   //muxsg1   

   8'd40: mosi <=1'd0;    

  8'd41: mosi <=1'd0;    

  8'd42: mosi <=1'd0;//     

 8'd43: mosi <=1'd0;   

   8'd44: mosi <=1'd0;    

  8'd45: mosi <=1'd0;     

 8'd46: mosi <=1'd0;    

  8'd47: mosi <=1'd1;   

  default: begin    

  start <=1'd1;     

 state <=dat_rd;  

   end

    endcase  

  end  

 end

 dat_rd: begin // dat_rd;   //写入命令00100000,开始读取通道数据

 cs <=1'd0;  

  flag <=2'd2;    

start <=1'd1;   

 if(SCK_risingedge)begin     

num_dat_rd=num_dat_rd+1'd1;   

  case (num_dat_rd)      //cmd    

  8'd0: mosi <=1'd0;    

  8'd1: mosi <=1'd0;  

    8'd2: mosi <=1'd1;   

   8'd3: mosi <=1'd0;    

  8'd4: mosi <=1'd0;   

   8'd5: mosi <=1'd0;    

  8'd6: mosi <=1'd0;   

   8'd7: mosi <=1'd0;    

  default: ;       //num_dat_rd<=8'd0;//

    endcase

   end   

end //dat_rd;  

endcase  

  end

//以下为在每个下降沿读取数据的代码:

always @(posedge clk or negedge rst_n)begin

  if(!rst_n)begin   

data_num <=8'd0;   

//datacnt <=1'd0;  

end  

else if(SCK_fallingedge)begin  

 if(flag==2'd2)begin   //flag的标志为当命令为0010000的时候,开始读取数据,

 data_num=data_num+1'd1;  

  case (data_num)     

8'd0,8'd1,8'd2,8'd3,8'd4,8'd5,8'd6,8'd7: ;//datacnt <=1'd0;   //不管前八个周期的数据

  8'd8: data[0]<=miso;     //以下读取24位,带status

 8'd9: data[1]<=miso;   

  8'd10: data[2]<=miso;  

   8'd11: data[3] <=miso ;

    8'd12: data[4] <=miso ;  

   8'd13: data[5] <=miso;  

   8'd14: data[6] <=miso;    

 8'd15: data[7] <=miso ;//     

8'd16: data[8]<=miso; 

 8'd17: data[9]<=miso;  

 8'd18: data[10]<=miso;    

 8'd19: data[11] <=miso ;    

 8'd20: data[12] <=miso ;     

8'd21: data[13] <=miso;     

8'd22: data[14] <=miso;    

 8'd23: data[15] <=miso ; //    

 8'd24: data[16]<=miso;      

8'd25: data[17]<=miso;    

 8'd26: data[18]<=miso;    

 8'd27: data[19] <=miso ;    

 8'd28: data[20] <=miso ;     

8'd29: data[21] <=miso;    

 8'd30: data[22] <=miso;     

8'd31: data[23] <=miso ;     

8'd32: begin     

 dataout<={8'h55,8'h55,data};     //读取玩数据发送出来,加两个55便于辨识

 data_num<=8'd0;     

end   

 default: begin    

 //data_num<=8'd0;    

 //datacnt <=1'd0;    

end    

 endcase    

end  

 

end  

 end

上面便是主要代码,我现在读出来的数据很怪。在两个55后面。照例说应该是状态字节,在状态字节里应该有通道号,我现在读到的数据没有我预期的那样的通道号,比如我打开了通道0,那么状态字节的数据应该是08h,我现在读到的是各种数据,

 

求解答!

对于你自己输入的不同信号, 合理的寄存器数据应该是多少, 应该能知道吗?

直接用信号和结果进行验证, 这是最终的验证方法

 但是,对于多个通道来说,我想我肯定线通过状态字节来判断是哪个通道的数据,这样才能验证数据。不然对于多个通道,你也不能确定你接收的数据是哪个通道的。

请问你是基于什么样的硬件做实验的?输入 的是什么样的信号? MUX out 跟ADC in之间有加运放吗?

建议先测试其中的一个通道;

测量输入信号,计算理论输出结果,并与实际输出结果做比较,看看是否正常!

 现在的问题是我还不知道怎么去判断获取的数据是哪个通道的?我现在只打开一个通道(channel 2),根据数据手册上说的,我用直接读的模式应该第一个字节状态字节为0A或者8A,但是我现在状态字节能读到各种数据。

附件里有我的程序,原理图和波形。Martin帮我分析分析,谢谢。

你好,现在我在读取数据的时候,通道号可以读到,但是后面的数据不变,new位也是0。我测试不同的输入信号,数据都不变。这是为什么?

你好,我遇到一个问题

发现CLKIO无输出,晶振工作正常,看了手册,默认是用了外部晶振的话就会在CLKIO口的引脚输出,可是用示波器测不到

是我的芯片没有正常工作吗?

求指出问题

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

网站地图

Top