qwasko1212 0 4 августа, 2015 Опубликовано 4 августа, 2015 (изменено) · Жалоба Написал прогу для инициализации и считывания данных с LIS3DH. Со значениями творится полная ерунда. На одно истинное значение приходится 1-5 ложных (лежащих в пределах -200 до 300). Если данные визуализировать, получается дёрганная кривая. Прерывания не использовал. В чём может быть проблема? Код main.rar Изменено 4 августа, 2015 пользователем AlexeyK Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stas00n 0 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба L и Н регистры не перепутаны часом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
qwasko1212 0 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба stas00n, Поменял, стало ещё хуже. Текущие значения близки к правде, но я совсем не понимаю почему кривая скачет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smalcom 0 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба вы неправильно про работу SPI прочитали /// \fn uint8_t RW(const uint8_t pData) /// Запись-чтение данных. /// Данная функция записывает значение в буфер отправки SPI. По окончанию /// отправки возвращает значение принятое по SPI. /// \param pData - значение отправляемое по SPI. /// \return значение принятое по SPI. uint8_t RW(const uint8_t pData) { SPI_I2S_SendData(mSPI, pData); while(SPI_I2S_GetFlagStatus(mSPI, SPI_I2S_FLAG_RXNE) == RESET); return SPI_I2S_ReceiveData(mSPI); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
qwasko1212 0 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба smalcom Обоснуйте почему я неправильно с SPI работаю. На всякий случай попробовал вариант с флагом SPI_I2S_FLAG_RXNE, но это не поменяло абсолютно ничего. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
veteq 0 4 августа, 2015 Опубликовано 4 августа, 2015 (изменено) · Жалоба Наверное косяк с L и H, я помню что они там хитро расчитываются, и вроде бы даже косяк в даташите был... Такая тема уже была на форуме Upd: там не должно быть нолей в плоскости паралелльной к земле должно быть 1g Изменено 4 августа, 2015 пользователем veteq Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
qwasko1212 0 4 августа, 2015 Опубликовано 4 августа, 2015 (изменено) · Жалоба veteq Не нашёл я тему где бы обсуждалась моя проблема, буду признателен если дадите ссылку. По поводу оси Z понятно, но не понятно это Притяжение земли явно просматривается, но по непонятным причинам появляются левые значение которые лежат около нуля как в большую так и в меньшую сторону. По поводу L и H вроде всё понятно и самое главное что оно работает кое как, значит косяк, как мне кажется, не в этом. Изменено 4 августа, 2015 пользователем AlexeyK Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smalcom 0 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба Обоснуйте почему я неправильно с 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); Ещё осталась "звонок другу"(цитата из даташита) )) и "помошь зала"(разжовка цитаты из даташита) зы. ванга подсказывает, что у вас нет логического анализатора Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
qwasko1212 0 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба smalcom Как я писал выше, я пробовал ваш вариант и он не помог. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smalcom 0 5 августа, 2015 Опубликовано 5 августа, 2015 · Жалоба получилось что-то? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
qwasko1212 0 5 августа, 2015 Опубликовано 5 августа, 2015 · Жалоба Пока нет. Сейчас буду пробовать настраивать работу по прерыванию и включу фильтр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
veteq 0 5 августа, 2015 Опубликовано 5 августа, 2015 · Жалоба Для начала попробовать проверить работу SPI, постоянно вычитывая WHO_AM_I - 0x0F У меня на пинах 5,6,7 подтяжка на землю стоит, и SPI SPI_CPHA_1Edge и SPI_CPOL_Low 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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aner 8 5 августа, 2015 Опубликовано 5 августа, 2015 · Жалоба LIS3DH сами паяли или готовый модуль использовали? Если паяли сами, как получится, то могли термо перекос обеспечить. Было уменя такое при первых экспериментах. Графики похожие, как у вас тогда получились. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
qwasko1212 0 5 августа, 2015 Опубликовано 5 августа, 2015 (изменено) · Жалоба veteq SPI работает корректно. WHO_AM_I возвращает значение 3F. B И данные из акселерометра приходят правильные, явно видно когда я перемещаю микросхему, только вот непонятно откуда берутся бредовые данные. Думал может в регистрах данные не успевают обновится, но когда увеличивал скорость обновления данных в акселерометре ситуацию это не меняло. Aner, Микруха эта установлена на отладочной плате stmf4 Discovery. По поводу микросхемы могу точно сказать что она рабочая, проверял её с другой прошивкой мк. Также просил друга на своей плате погонять, у него тоже самое происходит. Проблема однозначно в коде, а вот какая понять не могу. Изменено 5 августа, 2015 пользователем AlexeyK Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
veteq 0 6 августа, 2015 Опубликовано 6 августа, 2015 · Жалоба Как вариант попробовать еще в отладчике пошагать по кольцу функциям передачи по 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); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться