Pull to refresh

Comments 14

>> каждое устройство на линии отозвалось дважды подряд, при чем, не на свой адрес

На свой, на свой. )
Восьмой бит — бит записи. Соответственно девайс отзывается только на первые семь бит собственно адреса, не зависимо от состояния восьмого бита(игнорируя его).
Таким образом, циклом for(i = 0; i<255; i++) {...} вы опросили 127 адресов, спрашивая каждый из них дважды.

P.S. Ну а за либу спасибо. Пригодится в качестве шпаргалки как минимум )
Абсолютно верно) имелось ввиду, не тот адрес, который в библиотеках указан либо в даташите. Это я больше с учебной целью описал, ведь даже на оф сайте ардуино сканируют без сдвига, просто 0-127.
А, ну с выводом в HEX без сдвига все понятно. Справедливости ради, в даташитах зачастую все-таки указывают адреса не в виде байта в HEX-представлении, а тупо в виде последовательности битов. Иногда и меньше, чем семь штук, с последующей простыней описания, как конфигурятся остальные биты…

>> ведь даже на оф сайте ардуино...
Ну ардуино, с их «lazy coding», это конечно показатель, ага )
Использование malloc — это очень не гуд, как будто бы не для микроконтроллера
Понимаю, но варианты какие? Держать большой буфер локальный и копировать туда, либо вручную слать байты, как в Wire. Второй вариант слабо совместим с идеей держать либу на HAL.
Вам временный буфер нужен только для того, чтобы туда еще и адрес вставить. Вполне возможно обойтись двумя вызовами HAL_I2C_Transmit. И кстати, не стоит забывать про многопоточность.
Два вызова transmit не работают, пробовал. BMP180 отказывался давать температуру. Я бы с радостью убрал malloc (
А вот чем можно обойтись — исправлениями в драйверах сенсоров при портировании. Прямо там складывать регистр и данные в один буфер. Как считаете?
К слову, вчера прочитал статью habrahabr.ru/post/255661 и с желанием потестить фильтр Маджвика — портировал HMC5883L. Сегодня пушну в репозиторий
Попробую использовать ваш порт :) Разбираюсь в stm32, уже через UART его к компу прикрутил (stm32vldiscovery), теперь подцепил датчик (gy-88), даже кажется пообщался с ним по i2c, но на входе данных с акселерометра чтот то странное идет. Делал все на колене, а тут нашлась ваша либа. Очень удачно на HAL, старые API изучать сначала не хочется, лучше сразу современные использовать, так что попробуем. Спасибо за труд, надеюсь действительно разобраться побыстрее за счет готового инструмента.
Спасибо, очень приятно узнать, что труд не пропадает! Немного запоздал я с ответом..)
Мои студенты с нулю подняли гиростабилизированную двухколесную платформу используя этот порт. Удалось даже запустить DMP на чипе MPU6050, правда там нашли ряд костылей и багов мейнстрим ветки.

Здравстуйте, а код с DMP для MPU6050 вы не публиковали? Сейчас тоже пытаюсь прицепить MPU6050 к STM32 , а у i2cdev DMP только на Ардуину. Собрался уже сам портировать на С, но наткнулся на вашу статью. Про костыли и баги мейнстрим ветки тоже очень интересно.

Sign up to leave a comment.

Articles