Наверно никогда еще не попадал в такой ступор. Ардуино УНО. Библа - 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 !!!!!!!!!!!! итд Я понимаю что примеры упрощаются до предела, но не до такой же степени...Но это не главное - главное - никакой реакции на положение в пространстве. Вопрос - кто уже победил этого монстра. Поделитесь плиз гарантированно-рабочим кодом, библой и добрыми советами. С уважением.
Qmc - это же подделка оригинального hmc. Соответственно, библиотека и не обязана работать. Тут только читать даташит и снимать ЛА, что происходит на линии. Возможно, не верная инициализация или нет калибровок.
Почему это "не обязана" ? А название библиотеке дано - от балды ? И хрен бы с ними - с калибровками. Мне бы хоть сырые данные поиметь. Оригинальный HMC не выпускается 12 лет. Не сидели же программеры без дела !? Установил библу от "солидного автора" - DFRobot_QMC5883.h Загрузил ее штатный пример с сырыми данными getCompassdata.ino. Еще хуже - прога вообще не видит девайс. Пробовал в библе менять I2C адреса - без толку. Похоже легкого пути не видится. ПС. I2C сканер продолжает показывать адрес 0x2C... Значит чип жив. ППС. Почему я упулился в магнитометр. Летом хочу в лесах под Питером. использовать в роли металлодетектора и компаса для GPS-а. Цвет-мет не найдёшь, но чернуху должен брать.
самое действенное в такой ситуации - сесть ЛА на шину и сравнить с даташитом. В принципе, можно и самому написать по нему. Если лень, то можно попросить google ИИ. название никак не связано с содеожимым. программеры тоже люди. Пишут то, за что платят. это всё бесполезная трата времени.
Короче нашел подсказку. Магнетометр заработал. Во всех библах инициализация регистра 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КГц. Может я не знаю про тонкости библы. Всем спасибо. Проблема решена. Заказываю еще магнитометр - пригодится ))))))).
По обычаю соваться туда, куда собака не совала - Захотел считать из QMC5883 показания встроенного сенсора температуры. Получил нули. В принципе, от китайцев можно ожидать чего угодно, но и катить бочку не след.. Вопрос - кому-нибудь удавалось извлечь температуру ? С уважением.