Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 26.03.2017, 15:51  
vladmed
Прохожий
 
Регистрация: 26.03.2017
Сообщений: 7
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
vladmed на пути к лучшему
По умолчанию Адресация магнетометра 5883L

Добрый день!

Имеется магнитометр 5883L, на основе которого ребенок хочет сделать компас. Ребенок слишком рано увлекся электроникой и мне приходится помогать ему разбираться, хотя электроника и программирование - совсем не мои области, я биолог. Датчик нужно подключить к контроллеру из конструктора Fischertechnik по шине I2C. Язык программирования используется графический, есть два программных элемента для записи и чтения по I2C. Там указывается адрес устройства на шине, адрес регистра и значение, примерно как на картинке. Datasheet я изучил, но увы, в силу отсутствия базовых знаний просто не могу понять как правильно обращаться к датчику. Библиотеки Ardiuno изучал, но еще больше каши в голове.
Если можно, подскажите, как определить последовательность команд в формате HEX для переключения в режим Continuous measurment, а также адреса по которым считываются данные.
Миниатюры:
Нажмите на изображение для увеличения
Название: Снимок.PNG
Просмотров: 0
Размер:	6.6 Кб
ID:	112264  
Реклама:
vladmed вне форума  
Непрочитано 26.03.2017, 16:27  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,504
Сказал спасибо: 401
Сказали Спасибо 2,217 раз(а) в 1,315 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Адресация магнетометра 5883L

По графическому языку тут вам уж точно наврядли кто подскажет - тут форум более глубокого уровня "копания", так сказать
А вот по магнетометру... В даташите https://cdn-shop.adafruit.com/datash...Compass_IC.pdf , на стр.2 написано, что адрес магнетометра на I2C-шине - для чтения из датчика - 0x3D, для записи в датчик - 0x3C. Свойства шины I2C подразумевают, что каждое устройство (а их может быть подключено несколько) на шине имеет свой адрес, и при обращении к устройству надо передать вначале его адрес, затем уже либо принимать из устройства, либо передавать в него что-то.
На стр.18 даташита написано, какие команды надо передать в магнетометр для правильного его включения.
То есть, собственно говоря, и указаны последовательность посылаемых байтов.
Например, в "(power-on) initialization process for “continuous-measurement mode”:
пункты 1, 2, 3 - это посылаемые байты для включения и настройки магнетометра (первый байт является как раз адресом устройства на шине, второй байт - адресом регистра внутри магнетометра, а третий - значением, записываемым в тот регистр)
затем пункт 4 - задержка на 6 мс,
и затем пункт 5 - цикл посылки байт (первый байт - адрес устройства на шине, второй байт - команда) и затем сразу прием 6 байт ответа, последовательно друг за другом (это будут 2-байтные данные по трем осям), затем отправка какой-то команды, ожидание 67 мс и повтор цикла.
Либо второй вариант, для однократного измерения.

Последний раз редактировалось NewWriter; 26.03.2017 в 16:50.
NewWriter вне форума  
Непрочитано 26.03.2017, 16:53  
vladmed
Прохожий
 
Регистрация: 26.03.2017
Сообщений: 7
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
vladmed на пути к лучшему
По умолчанию Re: Адресация магнетометра 5883L

Дело не столько в графическом языке, а в моих знаниях, точнее в их отсутствии. Недавно мы подключили гироскоп BMI160, но в его datasheet были довольно четкие указания и мне удалось его запустить и настроить. Datasheet 5883 я изучил, но не могу разобраться с адресами. Само устройство имеет адрес 0x1e. Если я обращаюсь по нему, какие-то данные получить удается, если использую адреса 0x3C и 0x3D эффекта нет.
Еще прикреплю картинки, write - это попытка перехода в режим непрерывного чтения, read - получение данных по оси X (?). Если с записью, кажется, все в порядке, то чтение явно делается неправильно, также непонятно какие адреса отвечают за определенные оси. Кроме того, я весьма слабо представляю, что именно мне надо получать, LSB или MSB.
Миниатюры:
Нажмите на изображение для увеличения
Название: write.PNG
Просмотров: 0
Размер:	12.6 Кб
ID:	112265   Нажмите на изображение для увеличения
Название: read.PNG
Просмотров: 0
Размер:	9.8 Кб
ID:	112266  
vladmed вне форума  
Непрочитано 26.03.2017, 17:04  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,504
Сказал спасибо: 401
Сказали Спасибо 2,217 раз(а) в 1,315 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Адресация магнетометра 5883L

Я ж уже написал. У устройства два адреса НА ШИНЕ, раздельные для записи в магнетометр и для чтения из него. То есть, включая и настраивая магнетометр, вы используете передачу адреса для записи (на шине), а начиная чтение данных, вы должны передать адрес (на шине) для чтения.

При чтении, после передачи команды, данные (судя по всему) приходят последовательно друг за другом, 6 байт - по 2 байта в каждой оси.
LSB и MSB - в данном случае означает видимо младший (LSB) и старший (MSB) байты значения по оси.
Внутренние адреса регистров, в которых хранятся измеренные значения, приведены на стр.11 в табл.2
Более подробно даташит я не читал

Последний раз редактировалось NewWriter; 26.03.2017 в 17:10.
NewWriter вне форума  
Непрочитано 26.03.2017, 17:32  
dgrishin
Почётный гражданин KAZUS.RU
 
Регистрация: 12.02.2013
Сообщений: 1,015
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: Адресация магнетометра 5883L

ИМХО чтение данных происходит в 2 этапа:

1. Запись в магнитометр по I2C адресу(поле адрес устройства) команды на чтение осей X, Y и Z (поле данные) по внутреннему адресу соотв. регистра магнитометра(поле расширенный адрес)

2. Чтение магнитометра по I2C адресу(отличается от адреса записи на младший бит - должен быть 0x1F) - магнитометр знает что от него ходят благодаря п. 1 и выдаёт данные.

Последний раз редактировалось dgrishin; 26.03.2017 в 17:55.
dgrishin вне форума  
Непрочитано 26.03.2017, 17:55  
vladmed
Прохожий
 
Регистрация: 26.03.2017
Сообщений: 7
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
vladmed на пути к лучшему
По умолчанию Re: Адресация магнетометра 5883L

Не получается, по адресам чтения-записи блок просто висит, видимо не получая ответа. При обращении по 0x1e похож на работающий. Возможно блок записи сам добавляет нужный бит, не знаю.
Работая с BMI160 я привык к такой схеме, адрес - регистр - значение. На картинке в первом посте видно как сначала включается гироскоп (выход из сна), затем акселерометр, затем выбирается рабочий диапазон гироскопа. Да, я два месяца разбирался с гироскопом, но в этом случае я не могу найти соответствующих адресов. Табличку я конечно видел, верно ли, что для чтения X MSB надо читать по адресу 0x03 ?

Сообщение от dgrishin Посмотреть сообщение
ИМХО чтение данных данных происходит в 2 этапа:

1. Запись в магнитометр по I2C адресу(поле адрес устройства) команды на чтение осей X, Y и Z (поле данные) по внутреннему адресу соотв. регистра магнитометра(поле расширенный адрес)

2. Чтение магнитометра по I2C адресу(отличается от адреса записи на младший бит - должен быть 0x1F) - магнитометр знает что от него ходят благодаря п. 1 и выдаёт данные.
Звучит логично, вопрос только, соответствующий регистр это какой? А по пункту два мне вообще требуется перевод , не забывайте я биолог и влезаю в эту область только из-за ребенка...
vladmed вне форума  
Непрочитано 26.03.2017, 18:22  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,770 раз(а) в 5,896 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Адресация магнетометра 5883L

Сообщение от vladmed Посмотреть сообщение
При обращении по 0x1e похож на работающий
Естественно. Восьмибитный адрес 3C и 3D, а семибитный, без младшего, отвечающего за направление данных, будет как раз 1E. Причем, и для чтения, и для записи. Функции работы с ивасями сами добавят нужный младший.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 26.03.2017, 18:49  
dgrishin
Почётный гражданин KAZUS.RU
 
Регистрация: 12.02.2013
Сообщений: 1,015
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: Адресация магнетометра 5883L

Вот как он работает (мой предыдущий пост прошу считать неверным - навеяно I2C протоколом управления другой микросхемы)

To clock out the new data, send:
0x3D, and clock out DXRA, DXRB, DZRA, DZRB, DYRA, and DYRB located in registers 3 through 8. The HMC5883L will automatically re-point back to register 3 for the next 0x3D query.
Т. е. надо обратится по I2C адресу чтения (какой будет правильный ??) и прочитать 6 байт.

Последний раз редактировалось dgrishin; 26.03.2017 в 18:52.
dgrishin вне форума  
Непрочитано 26.03.2017, 21:01  
GarryZZ
Гражданин KAZUS.RU
 
Регистрация: 18.07.2010
Адрес: Днепр, Украина
Сообщений: 748
Сказал спасибо: 450
Сказали Спасибо 392 раз(а) в 276 сообщении(ях)
GarryZZ на пути к лучшему
По умолчанию Re: Адресация магнетометра 5883L

Сообщение от vladmed Посмотреть сообщение
Само устройство имеет адрес 0x1e.
если ваш конструктор автоматически преобразует базовый 7 бит адрес 0x1E в реальные адреса 0x3C (при чтении) и 0x3D (при записи) - в это можно поверить .
Чтобы микросхема заработала должны быть выполнены следующие условия: на микросхему должно быть подано питание, микросхема должна быть подключена к шине I2C с подтягивающими к питанию резисторами, на шине не должно быть конфликта адресов - адреса 0x3C и 0x3D (или 0х1Е) не должны пересекаться с другими подключенными к шине устройствами.
После подачи питания микросхема включается в режим однократного преобразования. То есть - прочитали ВСЕ 6 регистров данных (по осям), пнули микросхему - она выполнит еще один цикл преобразования.
При этом диапазон значений измеряемого магнитного поля, скорость обмена на шине I2C, количество усреднений данных установлены в значения по умолчанию!.

Впечатление такое, что те, кто писал пример в даташите, ориентировались на правила какого то языка программирования, или чтото вроде Ардуино.

Вот здесь есть пример использования датчика с программой на BASCOM-AVR. Как раз в виде компаса. Если ваш конструктор преобразует адреса , то последовательность должна быть такая:

запись (I2C)0x1Е (extI2C)0x00 (data)0x70 {выборка по 8, 15 раз в сек}
запись (I2C)0x1Е (extI2C)0x01 (data)0x20 {м/поле +/- 1.3 Гаусс}
запись (I2C)0x1Е (extI2C)0x02 (data)0x00 {повторяющееся преобразование}

затем, следует выполнять повторяющуюся последовательность :
запись (I2C)0x1Е (extI2C)0x03 {готовимся работать с внутренним регистром 03 (первый регистр данных)}
чтение (I2C)0x1Е {первый регистр данных, старшая половина Х}
чтение (I2C)0x1Е {второй регистр данных, младшая половина Х}
чтение (I2C)0x1Е {третий регистр данных, старшая половина Z}
чтение (I2C)0x1Е {четвертый регистр данных, младшая половина Z}
чтение (I2C)0x1Е {пятый регистр данных, старшая половина Y}
чтение (I2C)0x1Е {шестой регистр данных, младшая половина Y}

превратить куски данных в чтото удобоваримое, высчитать угол к северу, например, подождать еще немного (пока закончится цикл измерения)

вернуться к началу последовательности.

---------------------------------------------
а можно просто включить все и выполнить последовательность:
запись 0х1Е 0х0А
чтение 0х1Е
чтение 0х1Е
Чтение 0х1Е
- прочитать три байта идентификации микросхемы. если все работает - вы получите 0х48 0х34 0х33.

Последний раз редактировалось GarryZZ; 27.03.2017 в 08:33.
GarryZZ вне форума  
Непрочитано 26.03.2017, 21:12  
GarryZZ
Гражданин KAZUS.RU
 
Регистрация: 18.07.2010
Адрес: Днепр, Украина
Сообщений: 748
Сказал спасибо: 450
Сказали Спасибо 392 раз(а) в 276 сообщении(ях)
GarryZZ на пути к лучшему
По умолчанию Re: Адресация магнетометра 5883L

работа с автоинкрементом внутренних адресов на совести ооболочки, если вдруг она такое дело не понимает - можно попробовать
чтение (I2C)0x1Е (extI2C)0x03 {первый регистр данных, старшая половина Х}
чтение (I2C)0x1Е (extI2C)0x04 {второй регистр данных, младшая половина Х}
чтение (I2C)0x1Е (extI2C)0x05 {третий регистр данных, старшая половина Z}
чтение (I2C)0x1Е (extI2C)0x06 {четвертый регистр данных, младшая половина Z}
чтение (I2C)0x1Е (extI2C)0x07 {пятый регистр данных, старшая половина Y}
чтение (I2C)0x1Е (extI2C)0x08 {шестой регистр данных, младшая половина Y}

и соответственно,

чтение (I2C)0x1Е (extI2C)0x0А {первый байт идентификации}
чтение (I2C)0x1Е (extI2C)0x0В {второй байт идентификации}
чтение (I2C)0x1Е (extI2C)0x0С {третий байт идентификации}
сразу после включения
GarryZZ вне форума  
Сказали "Спасибо" GarryZZ
vladmed (26.03.2017)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Адресация к памяти I2C по адресу Lexil Proteus 2 12.12.2012 12:40
Косвеная адресация и указатели CERGEI1982 Микроконтроллеры, АЦП, память и т.д 7 08.09.2007 18:43
Косвенная адресация. bopohok Микроконтроллеры, АЦП, память и т.д 8 29.04.2007 00:38
Адресация RAM в PIC18 vasseff Микроконтроллеры, АЦП, память и т.д 0 20.04.2007 22:39
Адресация в CompactFlash xelos Микроконтроллеры, АЦП, память и т.д 3 13.10.2004 21:55


Часовой пояс GMT +4, время: 22:46.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot