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 

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

Расчет цифровой радиорелейной линии связи
Линии радиорелейной связи - современный и перспективный для дальнейшего развития, способ передачи информации на большие расстояния. Применение радиорелейных ...

Разработка автоматизированной системы контроля процессов пайки топливных коллекторов
На современном этапе развития промышленности, обеспечение стабильной работы предприятий по выпуску конкурентоспособной продукции, является задачей первостеп ...

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

Меню сайта