|
Работа акселерометра LIS3DH с STM32 |
|
|
|
Aug 4 2015, 14:04
|
Частый гость
 
Группа: Участник
Сообщений: 77
Регистрация: 11-04-15
Пользователь №: 86 181

|
Написал прогу для инициализации и считывания данных с LIS3DH. Со значениями творится полная ерунда. На одно истинное значение приходится 1-5 ложных (лежащих в пределах -200 до 300). Если данные визуализировать, получается дёрганная кривая. Прерывания не использовал. В чём может быть проблема? Код
main.rar ( 1.72 килобайт )
Кол-во скачиваний: 102
Сообщение отредактировал AlexeyK - Aug 4 2015, 14:05
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 17)
|
Aug 4 2015, 20:06
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 160

|
Наверное косяк с L и H, я помню что они там хитро расчитываются, и вроде бы даже косяк в даташите был... Такая тема уже была на форуме Upd: там не должно быть нолей в плоскости паралелльной к земле должно быть 1g
Сообщение отредактировал veteq - Aug 4 2015, 20:10
|
|
|
|
|
Aug 4 2015, 20:27
|
Частый гость
 
Группа: Участник
Сообщений: 77
Регистрация: 11-04-15
Пользователь №: 86 181

|
veteq Не нашёл я тему где бы обсуждалась моя проблема, буду признателен если дадите ссылку. По поводу оси Z понятно, но не понятно это
Притяжение земли явно просматривается, но по непонятным причинам появляются левые значение которые лежат около нуля как в большую так и в меньшую сторону. По поводу L и H вроде всё понятно и самое главное что оно работает кое как, значит косяк, как мне кажется, не в этом.
Сообщение отредактировал AlexeyK - Aug 4 2015, 20:31
|
|
|
|
|
Aug 4 2015, 20:53
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
Цитата Обоснуйте почему я неправильно с SPI работаю. Эммм. У меня хорошее настроение, подсказка 50 на 50 )) Как вы записываете Код while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET); SPI_I2S_SendData(SPI1, data); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET); return SPI_I2S_ReceiveData(SPI1); Как надо Код SPI_I2S_SendData(mSPI, pData); while(SPI_I2S_GetFlagStatus(mSPI, SPI_I2S_FLAG_RXNE) == RESET); return SPI_I2S_ReceiveData(mSPI); Ещё осталась "звонок другу"(цитата из даташита) )) и "помошь зала"(разжовка цитаты из даташита) зы. ванга подсказывает, что у вас нет логического анализатора
|
|
|
|
|
Aug 5 2015, 13:49
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 160

|
Для начала попробовать проверить работу SPI, постоянно вычитывая WHO_AM_I - 0x0F У меня на пинах 5,6,7 подтяжка на землю стоит, и SPI SPI_CPHA_1Edge и SPI_CPOL_Low CODE signed short value; unsigned char *valueL = (unsigned char *) (&value); unsigned char *valueH = ((unsigned char *) (&value) + 1);
*valueL = SPI.CommandReceived[5]; *valueH = SPI.CommandReceived[6];
if ((value & (1 << 15)) != 0) { MEMS.Z = (value >> 4) | 0xF000; } else { MEMS.Z = value >> 4; }
|
|
|
|
|
Aug 6 2015, 12:34
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 160

|
Как вариант попробовать еще в отладчике пошагать по кольцу функциям передачи по SPI , а то ощущение создается что SPI как-то не так работает
вот по этим функциям пройтись отладчиком, каждый шаг и постоянно,(т.е. на каждую функцию будет уходить около секунды) будут ли всплывать нули?
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET); SPI_I2S_SendData(SPI1, data); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET); return SPI_I2S_ReceiveData(SPI1);
|
|
|
|
|
Apr 8 2016, 00:45
|
Группа: Новичок
Сообщений: 4
Регистрация: 8-04-16
Пользователь №: 91 195

|
Пример кода работы с Акселерометром STM32. Работа с акселерометром
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|