Компас hmc5883l измеряет только один раз

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
NotoriousCoder)
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Вс июл 30, 2023 14:12:33

Компас hmc5883l измеряет только один раз

Сообщение NotoriousCoder) »

Добрый вечер, радиокоты!) Возникла проблемка с компасом hmc5883l. К слову, он стоит на плате gy85 и остальные устройства на ней работают нормально, проблема не в i2c. Короче, у компаса есть 2 режима работы: single и continious. В первом он замеряет единожды и после его заново нужно вручную заствлять измерять, во втором же случае он постоянно записывает результаты измерений в регистры. Вся проблема заключается в том, что у меня не получается заставить его измерять след.раз в режиме single. Т.е. первые замеры я получаю вполне адекватные, соответствующие действительности, однако в дальнейшем показания датчика никак не меняются. Уж как не пробовал я его переключать - бесполезно, либо он начинает выдавать бред, либо ничего не меняется и датчик все продолжает слать первые правильные показания, которые никак не меняются при изменении положения датчика. В даташите был пример для continious мода. Может подскажет кто-то как все таки заставить датчик измерять дальше? Спасибо!
phalanx
Нашел транзистор. Понюхал.
Сообщения: 158
Зарегистрирован: Сб апр 24, 2021 18:42:11

Re: Компас hmc5883l измеряет только один раз

Сообщение phalanx »

Так Вы напишите, как именно Вы его "переключаете". В даташите сказано: "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 измеряет только один раз

Сообщение NotoriousCoder) »

Переключаю я как раз вот эти биты. С даташита:
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);
	

Добавлено after 1 minute 53 seconds:
Т.е. после каждого замера я ставлю биты в этот режим. Если чо по дефайнам:
#define GY85_HMC5883L (0x1E)
#define HMC5883L_RA_MODE (uint8_t)0x02
Может напутал чо то с адресами, но это вряд ли
Ответить

Вернуться в «Периферия»