- 最近在利用FPGA读取ADXL参考网络上的一些资源后,使用345数据IIC将ADXL读取345数据,并通过串口发送到串口助手显示。关键是要把它读出来ADXL在345数据读取过程中,将读取的负原始数据转换为正值,便于处理。
- 因为在负数转换为正数的过程中FPGA中负数以补码的形式存储,因此在转换为正数的过程中,首先将数据扩展到n 1位,n表示要转换的数据的位数,1是扩展的符号位。然后取反加1将数据转换为正数,或直接在扩展数据之前添加-。代码如下:
reg [16:0] x_data; reg [16:0] y_data; reg [16:0] z_data; always@(posedge sys_clk or negedge sys_rst_n)begin if(!sys_rst_n)begin x_data<=17'b0; y_data<=17'b0; z_data<=17'b0; end else begin if(ACC_X_DATA[15]==1'b1)begin x_data<=-{
ACC_X_DATA[15],ACC_X_DATA};end else begin x_data<={
ACC_X_DATA[15],ACC_X_DATA};end if(ACC_Y_DATA[15]==1'b1)begin y_data<=-{
ACC_Y_DATA[15],ACC_Y_DATA};end else begin y_data<={
ACC_Y_DATA[15],ACC_Y_DATA};end if(ACC_Z_DATA[15]==1'b1)begin z_data<=-{
ACC_Z_DATA[15,ACC_Z_DATA};end
else begin z_data<={
ACC_Z_DATA[15],ACC_Z_DATA};end
end
end
- 数据处理之后,利用signalTap抓取的数据如下,此时ADXL345模块处于静止平放状态。
从图中可以看出采集的数据X轴的为0X0010,Y轴的数据为0X0000,Z轴的数据为0X00E8。因为静止平放状态,所以X轴,Y轴的加速度基本为0g,而Z轴的加速度由于地球重力加速度的影响约为1g。 串口助手显示的数据如图所示 工程文件传送门