Я написал класс для Arduino, который читает данные компаса HiTechnic LEGO Mindstorms компас датчик.
Используя Wire-библиотеку, я очень хорошо могу получить данные из соответствующих регистров. В моей библиотеке для Arduino я адресую датчик по 0x01
который кто-то уже сделал на форумах Arduino. Но везде в сети (RobotC-форумы для LEGO Mindstorms или же в примере кода в самом низу этого документа) он говорит, что адрес I2C этого датчика был 0x02
,
Так почему я должен использовать адрес 0x01
для того, чтобы общаться с моим датчиком, пока он, кажется, 0x02
для других языков программирования?
Существуют разные форматы адресов I2C — 7 или 8 бит. Arduino использует 7-битный формат, поэтому для преобразования 8-битного адреса в 7-битный просто сдвиньте его на единицу. Вот так 8x-битный адрес 0x02 преобразуется в 7-битный адрес 0x01.
Источник: http://arduino.cc/en/reference/wire
«Заметка:
Существуют как 7-, так и 8-битные версии адресов I2C. 7 бит идентифицируют устройство, а восьмой бит определяет, записывается оно или читается с него. Библиотека Wire использует 7-битные адреса. Если у вас есть таблица данных или пример кода, который использует 8-битный адрес, вам нужно отбросить младший бит (то есть сдвинуть значение на один бит вправо), получив адрес от 0 до 127. «
Других решений пока нет …