Компас hmc5883l измеряет только один раз
-
NotoriousCoder)
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Вс июл 30, 2023 14:12:33
Компас hmc5883l измеряет только один раз
Добрый вечер, радиокоты!) Возникла проблемка с компасом hmc5883l. К слову, он стоит на плате gy85 и остальные устройства на ней работают нормально, проблема не в i2c. Короче, у компаса есть 2 режима работы: single и continious. В первом он замеряет единожды и после его заново нужно вручную заствлять измерять, во втором же случае он постоянно записывает результаты измерений в регистры. Вся проблема заключается в том, что у меня не получается заставить его измерять след.раз в режиме single. Т.е. первые замеры я получаю вполне адекватные, соответствующие действительности, однако в дальнейшем показания датчика никак не меняются. Уж как не пробовал я его переключать - бесполезно, либо он начинает выдавать бред, либо ничего не меняется и датчик все продолжает слать первые правильные показания, которые никак не меняются при изменении положения датчика. В даташите был пример для continious мода. Может подскажет кто-то как все таки заставить датчик измерять дальше? Спасибо!
Re: Компас hmc5883l измеряет только один раз
Так Вы напишите, как именно Вы его "переключаете". В даташите сказано: "After the measurement is complete and output data registers are updated, the device is placed in idle mode, and the Mode Register is changed to idle mode by setting MD[n] bits." Вы этот регистр перенастраиваете после однократного измерения?
-
NotoriousCoder)
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Вс июл 30, 2023 14:12:33
Re: Компас hmc5883l измеряет только один раз
Переключаю я как раз вот эти биты. С даташита:
MD1 to MD0 Mode Select Bits. These bits select the operation mode of this device. 01 - это single режим. Я делаю вот так:
Добавлено after 1 minute 53 seconds:
Т.е. после каждого замера я ставлю биты в этот режим. Если чо по дефайнам:
#define GY85_HMC5883L (0x1E)
#define HMC5883L_RA_MODE (uint8_t)0x02
Может напутал чо то с адресами, но это вряд ли
MD1 to MD0 Mode Select Bits. These bits select the operation mode of this device. 01 - это single режим. Я делаю вот так:
Код: Выделить всё
void IMU_Get_Compass_XYZ(float *X, float *Y, float *Z){
uint8_t values[6];
GY85_Read(GY85_HMC5883L_READ, HMC5883L_RA_DATA_X_H, values, 6);
// тут обработка показаний идет, это я уберу
GY85_Write(GY85_HMC5883L << 1, HMC5883L_RA_MODE, 0x01);
Т.е. после каждого замера я ставлю биты в этот режим. Если чо по дефайнам:
#define GY85_HMC5883L (0x1E)
#define HMC5883L_RA_MODE (uint8_t)0x02
Может напутал чо то с адресами, но это вряд ли