Я только что завершил успешное считывание с акселерометра ADXL345 с микроконтроллера PIC (dsPIC33) с использованием i2c. Все, чего я добился до сих пор, - это правильное чтение идентификатора устройства, который представляет собой один байт.
Любой, кто раньше использовал ADXL345, знает, что чтение данных с любой оси, X, Y или Z, разбито на два байта, например, «DATAX0» и «DATAX1». В таблице данных также прямо говорится: «Для обеспечения согласованности данных рекомендуется использовать многобайтовые операции чтения для извлечения данных из ADXL345», поэтому два байта на каждую ось должны собираться вместе.
Мой вопрос: с i2c, как мне это сделать, когда два байта на ось представлены двумя разными регистрами?
На изображении выше показан процесс, необходимый для передачи i2c. Чтобы считывать данные с акселерометра, мы смотрим на два нижних графика, и цитата из таблицы, которую я вставил выше, предполагает, что я использовал нижний график (многобайтовый), но, как я уже сказал, два байта имеют два разных регистра значения (0x32 и 0x33 для DATAX0 и DATAX1 соответственно).
Как получить данные с одной оси за один прием? Единственный способ, которым я вижу это, - это однобайтовое чтение с одним адресом регистра, затем повторение этого со вторым адресом регистра, а затем объединение двух вместе, чтобы получить данные по одной оси.
Этот вопрос также относится к сбору данных с множества разных устройств на одной шине i2c, которые также будут иметь разные регистры.
Ваше здоровье!