Перепробовал кучу библиотек (DFRobot_QMC5883, QMC5883L-master, Adafruit_HMC5883_Unified, QMC5883LCompass-master, Grove_3-Axis_Digital_Compass_HMC5883L ) ни одна не может получить данные с модуля.
проблема в том, что микросхемы в модуле GY-273 обычно имеют адреса по умолчанию такие:
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
Wait 6 ms or monitor status register or DRDY hardware interrupt pin
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
/**
* 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;
Не пугай меня)
Как ты говоришь “логический уровень” задают резисторы подтяжки, а open drain тянет выводы I2C только на землю.
Вот куда эти резисторы подключены, такой логический уровень и будет.
Ты меня не слышиш
Ардуино 5 вольт, модуль 3,3
Резисторы на модуле притягиваю его выводы к 3,3 вольтам, тобишь лог единица, все что надо Ардуино, это притянуть своим выходом ОК к земле, для получения лог нуля для модуля.
Это работает и в обратную сторону, когда Ардуино 3 вольта, а модуль 5,