簡體   English   中英

使用 C 從 ADXL343 加速度計讀取數據

[英]Read Data from ADXL343 Accelerometer using C

我正在嘗試從 ADXL343 加速度計讀取 x、y 和 z 值。 我正在使用 PIC16 微控制器。 我還有一個 Arduino 板,我可以使用 Arduino 板讀取值,但我似乎無法在 C 中設置正確的代碼來讀取值。 我正在使用 i2c 讀取值,並且正在使用 CCS C 編譯器。 這是我的代碼:

adxl343.h

enum {
  adxl343_IIC_ADDR1 = 0x53 , /* Normal Address */
  adxl343_I2C_WRITE = 0xa6,
  adxl343_I2C_READ  = 0xa7,
};

主.h

iic_power_enable();
delay_ms(1000);
adxl343_write_reg(adxl343_IIC_ADDR1,adxl343_REG_POWER_CTL,0x08);
delay_ms(2000);

errorReadData=0;
adxl343_t xyz;
int i = 0;
int8 lsb = 0;
int8 msb = 0;
int ack = 0;
i2c_custom_start();
ack = i2c_custom_write(iic_addr | adxl343_I2C_WRITE);
errorReadData+=i2c_ACK != ack;
assert(i2c_ACK == ack);
ack = i2c_custom_write(adxl343_OUT_X_MSB);
errorReadData+=i2c_ACK != ack;
assert(i2c_ACK == ack);
i2c_custom_start();
ack = i2c_custom_write(iic_addr | adxl343_I2C_READ);
errorReadData+=i2c_ACK != ack;
assert(i2c_ACK == ack);

msb = i2c_custom_read(TRUE);
lsb = i2c_custom_read(TRUE);
xyz.x = make16(lsb, msb);
msb = i2c_custom_read(TRUE);
lsb = i2c_custom_read(TRUE);
xyz.y = make16(lsb, msb);
msb = i2c_custom_read(TRUE);
lsb = i2c_custom_read(FALSE); /* End register reading. */
xyz.z = make16(lsb, msb);
i2c_custom_stop();

TRACE1("\r\nZ=%Lu", xyz.z);
TRACE1("\r\nX=%Lu", xyz.x);
TRACE1("\r\nY=%Lu", xyz.y);

i2c_custom.h

int i2c_custom_read(int ack) {return i2c_read(ack);}
int i2c_custom_write(int8 data) {return i2c_write(data);}
void i2c_custom_stop() {i2c_stop();}

Output 始終是:X=65535 Y-65535 Z=65535

我不確定我在這里做錯了什么。

值 65535 與位於高處的線相同。 我的猜測是您遇到了硬件問題,因為它適用於 Arduino 而不是 PIC。 I2C 線上有上拉電阻嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM