GY-273 не получается получить данные с модуля

Продавец прислал такой модуль (Микросхема HP5883 5102):

Подключил его по схеме:


Перепробовал кучу библиотек (DFRobot_QMC5883, QMC5883L-master, Adafruit_HMC5883_Unified, QMC5883LCompass-master, Grove_3-Axis_Digital_Compass_HMC5883L ) ни одна не может получить данные с модуля.
проблема в том, что микросхемы в модуле GY-273 обычно имеют адреса по умолчанию такие:

#define HMC5883L_ADDRESS             (0x1E)
#define QMC5883_ADDRESS              (0x0D)
#define VCM5883L_ADDRESS             (0x0C)

Мне же сканер отдаёт такой адрес:

Scanning...
I2C device found at address 0x2C  !
done

Пробовал вставлять этот I2C 0x2C во все библиотеки, всё равно модуль не отдаёт данные.

Дел с этим модулем не имел, но если питание 3.3в, то и логика должна быть 3.3в ИМХО.
А у вас логика 5в.

1 лайк

Судя по этой странице, GitHub - mprograms/QMC5883LCompass: QMC5883L Compass is a Arduino library for using QMC5583L series chip boards as a compass. Supports: - Getting values of XYZ axis. - Calculating Azimuth. - Getting 16 point Azimuth bearing direction (0 - 15). - Getting 16 point Azimuth bearing Names (N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW) - Smoothing of XYZ readings via rolling averaging and min / max removal. - Optional chipset modes
Вполне неплохо и 5V кушает.

VCC  O ---- O +5v
GND  O ---- O GND
SCL  O ---- O A5
SDA  O ---- O A4
DRDY O ---- X NOT CONNECTED

На модуле вроде стабилизатор стоит.

Ну так подключите к 5в

3-axis magnetometer compass using the HMC5883L IC.
Features high-resolution magneto-resistive sensors
Data Ready pin (DRDY) makes for more efficient
communication).
Includes on-board pull-up resistors on the I2C lines
Power: 3.3 to 6 VDC
Heading Accuracy: 1° to 2° (Internal 12-bit ADC converter)
Magnetic Field Range: -+ 1.3 -8 Gauss
Output: I2C Serial (3.3V)
Data Rate: 160 Hz max
Address: 0x1E (7-bit address)
L: 3/4" W: 9/16" H: 1/8" (No Header) WT: .02

https://dosya.motorobit.com/pdf/HMC5883L.pdf

Для I2C по барабану, open drain.

у него без буквы L, я запускал и те и другие, есть разница по библиотекам

А у него на схеме на 3.3 В. - падение на стабе = не работает.

1 лайк

Адрес то сканится

Это утверждение или вопрос?

Он же написал

1 лайк

“Девачки, не ссорьтесь”(с) Пусть подключит как надо, а потом уж и … @МелкоМягкий ?

0x3C?

Below is an example of a (power-on) initialization process for “continuous-measurement mode”:

  1. Write CRA (00) – send 0x3C 0x00 0x70 (8-average, 15 Hz default, normal measurement)
  2. Write CRB (01) – send 0x3C 0x01 0xA0 (Gain=5, or any other desired gain)
  3. Write Mode (02) – send 0x3C 0x02 0x00 (Continuous-measurement mode)
  4. Wait 6 ms or monitor status register or DRDY hardware interrupt pin
  5. Loop
    Send 0x3D 0x06 (Read all 6 bytes. If gain is changed then this data set is using previous gain)
    Convert three 16-bit 2’s compliment hex values to decimal values and assign to X, Z, Y, >respectively.
    Send 0x3C 0x03 (point to first data register 03)
    Wait about 67 ms (if 15 Hz rate) or monitor status register or DRDY hardware interrupt pin
    End_loop

Не знаю, что там за стаб, думается low drop, но самой микрухе 2,6 хватает.

/**
 * The HMC5883L 3-Axis Digital Compass IC
 */
class HMC5883L {

public:

	/**
	 * As stated in datasheet (P11), the I2C address of the compass is of 7 bits and is 0x1E. The mbed API uses 8 bit addresses,
	 *  so we need to make sure to left-shift 7 bit address by 1 bit before passing the address.
	 *  0x1E << 1 = 0x3C
	 */
	static const int I2C_ADDRESS = 0x3C;

https://github.com/acabarbaye/HMC5883L-GY-273/blob/master/HMC5883L.h

Как open drain связан с чтением микросхемой логического уровня?

Не пугай меня)
Как ты говоришь “логический уровень” задают резисторы подтяжки, а open drain тянет выводы I2C только на землю.
Вот куда эти резисторы подключены, такой логический уровень и будет.

Это про выход. А вход идёт относительно питания микросхемы.
С изменением напряжения питания изменяются и напряжения логики.
Или не так?

Ты меня не слышиш
Ардуино 5 вольт, модуль 3,3
Резисторы на модуле притягиваю его выводы к 3,3 вольтам, тобишь лог единица, все что надо Ардуино, это притянуть своим выходом ОК к земле, для получения лог нуля для модуля.

Это работает и в обратную сторону, когда Ардуино 3 вольта, а модуль 5,

1 лайк

Исходя из твоей логики, и 1.8в и 5в уровни так же совместимы?

Я о том, что при разном питании устройств могут быть и разные границы HIGH/LOW. И отсюда косяки в чтении

Screenshot_283 - копия