Магнитометр qmc5883- заставить работать.

Тема в разделе "Arduino & Shields", создана пользователем Ariadna-on-Line, 16 фев 2026.

  1. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Наверно никогда еще не попадал в такой ступор.
    Ардуино УНО. Библа - QMC5883LCompass.h
    Сканер I2C шины видит его по адресу 0х2С. Значит микра живая. Больше ничего добиться не получается. Загрузил скетч из штатных примеров библы - xyz.ino. Получение сырых данных в монитор порта, только и всего. Запускаем ардуино НЕ ПОДКЛЮЧАЯ линий I2c от QMC - имеем
    X: 0 Y: 0 Z: 0
    X: 0 Y: 0 Z: 0 итд
    Втыкаем на горячую линии I2C - имеем (Вывести из строя этим не возможно)
    X: 128 Y: 0 Z: 0
    X: 128 Y: 0 Z: 0 итд
    Выдергиваем на горячую линии I2C - имеем (Вывести из строя этим не возможно)
    X: 128 Y: 0 Z: 0 !!!!!!!!!!!!
    X: 128 Y: 0 Z: 0 !!!!!!!!!!!! итд
    Я понимаю что примеры упрощаются до предела, но не до такой же степени...Но это не главное - главное - никакой реакции на положение в пространстве.
    Вопрос - кто уже победил этого монстра. Поделитесь плиз гарантированно-рабочим кодом, библой и добрыми советами. С уважением.
     
    Последнее редактирование: 17 фев 2026
  2. parovoZZ

    parovoZZ Гуру

    Qmc - это же подделка оригинального hmc. Соответственно, библиотека и не обязана работать. Тут только читать даташит и снимать ЛА, что происходит на линии. Возможно, не верная инициализация или нет калибровок.
     
  3. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Почему это "не обязана" ? А название библиотеке дано - от балды ? И хрен бы с ними - с калибровками. Мне бы хоть сырые данные поиметь. Оригинальный HMC не выпускается 12 лет. Не сидели же программеры без дела !?

    Установил библу от "солидного автора" - DFRobot_QMC5883.h Загрузил ее штатный пример с сырыми данными getCompassdata.ino. Еще хуже - прога вообще не видит девайс. Пробовал в библе менять I2C адреса - без толку.
    Похоже легкого пути не видится. ПС. I2C сканер продолжает показывать адрес 0x2C... Значит чип жив. ППС. Почему я упулился в магнитометр. Летом хочу в лесах под Питером. использовать в роли металлодетектора и компаса для GPS-а. Цвет-мет не найдёшь, но чернуху должен брать.
     
    Последнее редактирование: 17 фев 2026
  4. parovoZZ

    parovoZZ Гуру

    самое действенное в такой ситуации - сесть ЛА на шину и сравнить с даташитом.
    В принципе, можно и самому написать по нему. Если лень, то можно попросить google ИИ.

    название никак не связано с содеожимым.

    программеры тоже люди. Пишут то, за что платят.

    это всё бесполезная трата времени.
     
  5. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Короче нашел подсказку. Магнетометр заработал. Во всех библах инициализация регистра 0x0A - Wire.write(0x0A); Wire.write(0x00); А надо - Wire.write(0x0A); Wire.write(0x01); !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! и всех делов.
    Адрес девайса на шине - 0x2C. Во всех библах он - 0x0D. По отзывам, он у всех именно - 2С.
    ПС.
    1. Из первого поста видим, что код ШТАТНОГО примера от библиотеки - не только не инициалит микру, но и тупо шпарит не проверяя наличие девайса !!! Ну куда это годится для серьёзной библиотеки ?
    2. Осциллографом наткнулся на неожиданное поведение библиотеки Wire.h -
    Wire.setClock(25000) - даёт частоту - 100КГц (!!!). Wire.setClock(50000) - 50КГц. Wire.setClock(100000) - 100КГц. Может я не знаю про тонкости библы.
    Всем спасибо. Проблема решена. Заказываю еще магнитометр - пригодится ))))))).
     
    Последнее редактирование: 20 фев 2026
  6. Ariadna-on-Line

    Ariadna-on-Line Гуру

    По обычаю соваться туда, куда собака не совала - Захотел считать из QMC5883 показания встроенного сенсора температуры. Получил нули. В принципе, от китайцев можно ожидать чего угодно, но и катить бочку не след.. Вопрос - кому-нибудь удавалось извлечь температуру ? С уважением.
     
    Последнее редактирование: 21 фев 2026