Получение данных от датчика MMA7455L i2c - PullRequest
0 голосов
/ 27 июня 2018

Я успешно подключил датчик MMA-7455L и получаю от него данные. Хотя у меня есть один вопрос, может ли кто-нибудь мне помочь.

Может кто-нибудь помочь мне понять этот кусок кода? Что я использую для получения данных.

i2cbuf[1] = 0x00;
HAL_I2C_Master_Receive(&hi2c1, 0x1D<<1, &i2cbuf[1], 6, 10);

ax = -(i2cbuf[1]<<8 | i2cbuf[2]);
ay = -(i2cbuf[3]<<8 | i2cbuf[4]);
az = -(i2cbuf[5]<<8 | i2cbuf[6]);

Я получаю данные, и выход в 8 бит. Я понимаю, что я комбинирую два 8-битных ответа, чтобы сделать его 16-битным ответом. Но что я не понимаю, так это минус.

Заранее спасибо

1 Ответ

0 голосов
/ 28 июня 2018

Я предполагаю, что возвращаемые значения представляют собой 16-битные целые числа со знаком (int16_t), поэтому вы будете иметь значения от -32767 до 0 до +32767. Кто бы ни проектировал плату с помощью примера кода акселерометра, который вы используете, хотел, чтобы значения правильно читались в обычной ориентации плат, поэтому они отрицали результаты

Например: -(i2cbuf[1]<<8 | i2cbuf[2]); Если оба значения i2c равны 0xFF, вы получите 0xFFFF, что равно -1 (если тип int16)

Отрицайте это, и вы получите +1, что должно указывать на положительное ускорение для приложения

...