Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Компас HMC 5883L в режиме автоинкремента адреса
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Метрология, датчики, измерительная техника
Serj78
Проблема в следующем- пытаюсь работать с HMC 5883L в режиме автоинкремента адреса., софтовый i2C.
Cами функии i2с работают на аналогичном хонейвелловском компасе ( HMC 6352) без проблем.

Cудя по даташиту после инициализации ( или просто после включения- по умолчанию стоит режим работы по запросу)
надо просто подать адрес на чтение и потом 6 раз подряд прочитать данные.

то есть ST- DA- RD -RD-RD-RD-RD-RD-SP ( DA-divice adress, RD- read data, ST- start, SP- stop)

Однако после этого алгоритма устройство "не отпускает" шину SDA.. и дальнейшее считывание превращается в мешанину импульсов
Если перед этим принудительно командой записать адрес регистра (3), (ST-DA-RA-SP)
то происходть то же самое.

Если я делаю стоп после одной регистровой пары ( (ST-DA-RA-SP) - задали адрес, затем прочитали 2 регистра подряд (ST- DA- RD -RD-SP),
то устройство шину отпускает, но считанные данные в регистре не меняются . (они кажется и не должны меняться пока не прочитаешь подряд все регистры)
(хотя данные в регистре правдоподобны)
alexPec
Когда читаете данные, контроллером выдаете 9-й импульс ACK. Если хотите чтоб устройство отпустило шину, надо на 9-м бите последнего байта сделать NACK, т. е. не тянуть на землю SDA. Устройство должно отпустить шину. Это реализовано?
Serj78
Цитата(alexPec @ Apr 24 2013, 01:36) *
Когда читаете данные, контроллером выдаете 9-й импульс ACK. Если хотите чтоб устройство отпустило шину, надо на 9-м бите последнего байта сделать NACK, т. е. не тянуть на землю SDA. Устройство должно отпустить шину. Это реализовано?


Спасибо , это помогло! ( до этого я все все время передавал ask)
Странно, в даташите по этому поводу ничего не сказано..

Остается непонятным также почему с чтением регистровой пары устройство ведет себя по другому- при наличии ask все время- устройство отпускает шину.
alexPec
Цитата(Serj78 @ Apr 24 2013, 17:42) *
Спасибо , это помогло! ( до этого я все все время передавал ask)
Странно, в даташите по этому поводу ничего не сказано..

Остается непонятным также почему с чтением регистровой пары устройство ведет себя по другому- при наличии ask все время- устройство отпускает шину.


Сам вот-вот, позавчера узнал, когда читал доку на опенкоровский i2c контроллер. До этого думал что всегда ACK передавать надо... Оказывается это стандарт, там все написано...
Кстати да, в даташитах ни разу такого не видел, хотя пользую и флешки, и магнитомеры теже, и кодеки и т.д. Везде вроде информация дублируется по i2c, а этот момент нигде не отражен.
Serj78
Алекс, я видел в параллельной теме что вы писали про недостаточную емкость для set/reset.

У меня наблюдаются четкие провалы напряжения на ней( 2 иголки) с очень резким спадом и линейным фронтом. Длительность спада менее 1мкс, фронта -100мкс.
высота иголки (глубина "провала")- 350мв, общее напряжение на конденсаторе - 2.2в

Иголки идут парами с частотой измерений, между иголками 1800 мкс. Спады этих иголок совпадают с фронтами импульса на конденсаторе 0.22мкф (между ногами 8 и 12, SetP, SetC)

Компас работает корректно, по крайней мере показания не нулеые а от +600 до -600 примерно при дефолтном усилении (диапазон 1.3 гаусс)

На какую глубину были провалы напряжения у вас?
alexPec
Цитата(Serj78 @ Apr 25 2013, 14:41) *
Алекс, я видел в параллельной теме что вы писали про недостаточную емкость для set/reset.

У меня наблюдаются четкие провалы напряжения на ней( 2 иголки) с очень резким спадом и линейным фронтом. Длительность спада менее 1мкс, фронта -100мкс.
высота иголки (глубина "провала")- 350мв, общее напряжение на конденсаторе - 2.2в

Иголки идут парами с частотой измерений, между иголками 1800 мкс. Спады этих иголок совпадают с фронтами импульса на конденсаторе 0.22мкф (между ногами 8 и 12, SetP, SetC)

Компас работает корректно, по крайней мере показания не нулеые а от +600 до -600 примерно при дефолтном усилении (диапазон 1.3 гаусс)

На какую глубину были провалы напряжения у вас?


Да так не скажу, не помню, а железки той нет под рукой сейчас, 3 года назад делал. Помню что конденсатор ставил керамический на 4,7 или на 10 мкф (выпаял с винчестера дохлого). После этого сходу все заработало, разрешение по азимуту получал не хуже 0,5 градуса точно. Еще помню когда проседало питание некоторые биты (после измерения) сбрасывались в дефолт, хотя не должны были. После установки керамики как записывал, так и читались
Так что если точность нормальная, болтанки результатов нет, то значит все ОК. А что беспокоит то собственно?
Serj78
Цитата(alexPec @ Apr 25 2013, 16:07) *
Да так не скажу, не помню, а железки той нет под рукой сейчас, 3 года назад делал. *////
После установки керамики как записывал, так и читались
Так что если точность нормальная, болтанки результатов нет, то значит все ОК. А что беспокоит то собственно?


Беспокоит насколько близко подошел к пределу, ибо величина провалов не нормирована sm.gif.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.