Informatics Point

Информатика и проектирование

Работа по шине I2C

Рис.11. Подключенная плата с датчиком напрямую к микроконтроллеру

Давайте взглянем на первую часть кода:

#include <Wire.h> //I2C Arduino Library

#define address 0x1E //0011110b, I2C 7bit address of HMC5883setup(){

//Initialize Serial and I2C communications.begin(9600);.begin();

//Put the HMC5883 IC into the correct operating mode.beginTransmission(address); //open communication with HMC5883.send(0x02); //select mode register.send(0x00); //continuous measurement mode

Wire.endTransmission();

}

Код, который находится внутри Setup () функция запускается один раз в начале. Она инициализирует последовательное соединение со скоростью 9600 бод. Мы используем последовательное соединение для передачи данных, для каждой оси передавая обратно на компьютер. I2C также инициализируется. Затем мы делаем операцию «write» в HMC5883L. Цель этой операции 'записи' является для регулировки значения в регистре конфигурации от HMC5883L, задаем непрерывный режим работы. Это позволяет нам сделать непрерывное чтение данных оси. По умолчанию чип находится в одном режиме чтения, после первого прочтения, он будет идти в режиме ожидания для экономии энергии. После того, как в режиме ожидания, мы записываем в него, чтобы включить его, прежде чем мы сможем читать из него снова.

Двигаемся дальше, вот где мы фактически запрашиваем и получаем данные:

void loop(){x,y,z; //triple axis data

//Tell the HMC5883L where to begin reading data.beginTransmission(address);.send(0x03); //select register 3, X MSB register.endTransmission();

//Read data from each axis, 2 registers per axis.requestFrom(address, 6);(6<=Wire.available()){= Wire.receive()<<8; //X msb|= Wire.receive(); //X lsb= Wire.receive()<<8; //Z msb|= Wire.receive(); //Z lsb= Wire.receive()<<8; //Y msb|= Wire.receive(); //Y lsb

}

//Print out values of each axis.print("x: ");.print(x);.print(" y: ");.print(y);.print(" z: ");.println(z);

delay(250);

}

Функция loop() будет работать снова и снова до тех пор, пока есть мощность. Через промежуток времени, мы делаем быструю запись, чтобы передать функции, где мы хотим начать читать данные для осей. Регистр 3 выбран и, получается, что наиболее значимый байт оси Х.

Мы задаем чтение 6 байт один за другим. Чип авто-инкрементов это номер регистра, который мы считываем, поэтому мы не должны выбирать каждый регистр вручную, прежде чем мы будем считывать из него. Ось данных х, у, z отправлены обратно последовательно к компьютеру.

Мы можем увидеть эти значения с помощью 'Serial Monitor' среды разработки Arduino, как показано ниже (Рис.12).

Рис.12.Значения осей х, у, z

Перейти на страницу: 1 2 

Лучшие статьи по информатике

Проектирование линзовой афокальной насадки для маломощного лазера
Основой любого оптического прибора, в том числе и лазера, является оптическая система, которая представляет собой совокупность оптических деталей (линз, зер ...

Проектирование канала сбора аналоговых данных микропроцессорной системы
Применяя микропроцессоры и микро-ЭВМ для контроля за сложными производственными процессами, можно обрабатывать в реальном масштабе времени сигналы, поступаю ...

Приборы общего и специального назначения со встроенными микропроцессорами для измерения физических величин
Микропроцессорная техника получает все большее применение в приборостроении. Применение микропроцессоров (МП) преобразует измерительные приборы в «интеллект ...

Меню сайта