upm  1.7.1
Sensor/Actuator repository for libmraa (v2.0.0)
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
Public Member Functions | Protected Attributes

API for the BMG160 16 bit Triaxial Gyroscope. More...

Detailed Description

The BMG160 is a 3-axis angular rate sensor that is made of a surface micro machined sensing element and an evaluation ASIC. Both parts are packed into one single LGA 3.0mm x 3.0mm x 0.95mm housing. The BMG160 is designed to meet requirements for consumer applications such as image stabilization (DSC and camera-phone), gaming and pointing devices. It is capable to measure angular rates in three perpendicular room dimensions, the x-, y- and z-axis, and to provide the corresponding output signals. The BMG160 is fitted with digital bi-directional SPI and I2C interfaces for optimum system integration.

Not all functionality of this chip has been implemented in this driver, however all the pieces are present to add any desired functionality. This driver supports both I2C (default) and SPI operation.

This device requires 3.3v operation.

// Instantiate an BMG160 using default I2C parameters
upm::BMG160 sensor;
// For SPI, bus 0, you would pass -1 as the address, and a valid pin
// for CS: BMG160(0, -1, 10);
// now output data every 250 milliseconds
while (shouldRun) {
float x, y, z;
sensor.update();
sensor.getGyroscope(&x, &y, &z);
cout << "Gyroscope x: " << x << " y: " << y << " z: " << z << " degrees/s" << endl;
// we show both C and F for temperature
cout << "Compensation Temperature: " << sensor.getTemperature() << " C / "
<< sensor.getTemperature(true) << " F" << endl;
cout << endl;
upm_delay_us(250000);
}

Public Member Functions

 BMG160 (int bus=BMG160_DEFAULT_I2C_BUS, int addr=BMG160_DEFAULT_ADDR, int cs=-1)
 
 ~BMG160 ()
 
void update ()
 
uint8_t getChipID ()
 
void getGyroscope (float *x, float *y, float *z)
 
std::vector< float > getGyroscope ()
 
float getTemperature (bool fahrenheit=false)
 
void init (BMG160_POWER_MODE_T pwr=BMG160_POWER_MODE_NORMAL, BMG160_RANGE_T range=BMG160_RANGE_250, BMG160_BW_T bw=BMG160_BW_400_47)
 
void reset ()
 
void setRange (BMG160_RANGE_T range)
 
void setBandwidth (BMG160_BW_T bw)
 
void setPowerMode (BMG160_POWER_MODE_T power)
 
void enableFIFO (bool useFIFO)
 
void fifoSetWatermark (int wm)
 
void fifoConfig (BMG160_FIFO_MODE_T mode, BMG160_FIFO_DATA_SEL_T axes)
 
uint8_t getInterruptEnable0 ()
 
void setInterruptEnable0 (uint8_t bits)
 
uint8_t getInterruptMap0 ()
 
void setInterruptMap0 (uint8_t bits)
 
uint8_t getInterruptMap1 ()
 
void setInterruptMap1 (uint8_t bits)
 
uint8_t getInterruptSrc ()
 
void setInterruptSrc (uint8_t bits)
 
uint8_t getInterruptOutputControl ()
 
void setInterruptOutputControl (uint8_t bits)
 
void clearInterruptLatches ()
 
BMG160_RST_LATCH_T getInterruptLatchBehavior ()
 
void setInterruptLatchBehavior (BMG160_RST_LATCH_T latch)
 
uint8_t getInterruptStatus0 ()
 
uint8_t getInterruptStatus1 ()
 
uint8_t getInterruptStatus2 ()
 
uint8_t getInterruptStatus3 ()
 
void enableRegisterShadowing (bool shadow)
 
void enableOutputFiltering (bool filter)
 
void installISR (BMG160_INTERRUPT_PINS_T intr, int gpio, mraa::Edge level, void(*isr)(void *), void *arg)
 
void uninstallISR (BMG160_INTERRUPT_PINS_T intr)
 
uint8_t readReg (uint8_t reg)
 
int readRegs (uint8_t reg, uint8_t *buffer, int len)
 
void writeReg (uint8_t reg, uint8_t val)
 

Protected Attributes

bmg160_context m_bmg160
 

Constructor & Destructor Documentation

BMG160 ( int  bus = BMG160_DEFAULT_I2C_BUS,
int  addr = BMG160_DEFAULT_ADDR,
int  cs = -1 
)

BMG160 constructor.

This device can support both I2C and SPI. For SPI, set the addr to -1, and specify a positive integer representing the Chip Select (CS) pin for the cs argument. If you are using a hardware CS pin (like edison with arduino breakout), then you can connect the proper pin to the hardware CS pin on your MCU and supply -1 for cs. The default operating mode is I2C.

Parameters
busI2C or SPI bus to use.
addrThe address for this device. -1 for SPI.
csThe gpio pin to use for the SPI Chip Select. -1 for I2C or for SPI with a hardware controlled pin.
Exceptions
std::runtime_erroron initialization failure.
~BMG160 ( )

BMG160 Destructor.

Here is the call graph for this function:

Member Function Documentation

void update ( void  )

Update the internal stored values from sensor data.

Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

Here is the caller graph for this function:

uint8_t getChipID ( )

Return the chip ID.

Returns
The chip ID (BMG160_CHIPID).

Here is the call graph for this function:

void getGyroscope ( float *  x,
float *  y,
float *  z 
)

Return gyroscope data in degrees per second. update() must have been called prior to calling this method.

Parameters
xPointer to a floating point value that will have the current x component placed into it.
yPointer to a floating point value that will have the current y component placed into it.
zPointer to a floating point value that will have the current z component placed into it.

Here is the call graph for this function:

Here is the caller graph for this function:

std::vector< float > getGyroscope ( )

Return gyroscope data in degrees per second in the form of a floating point vector. update() must have been called prior to calling this method.

Returns
A floating point vector containing x, y, and z in that order.
float getTemperature ( bool  fahrenheit = false)

Return the current measured temperature. Note, this is not ambient temperature. update() must have been called prior to calling this method.

Parameters
fahrenheittrue to return data in Fahrenheit, false for Celicus. Celsius is the default.
Returns
The temperature in degrees Celsius or Fahrenheit.

Here is the call graph for this function:

void init ( BMG160_POWER_MODE_T  pwr = BMG160_POWER_MODE_NORMAL,
BMG160_RANGE_T  range = BMG160_RANGE_250,
BMG160_BW_T  bw = BMG160_BW_400_47 
)

Initialize the device and start operation. This function is called from the constructor so will not typically need to be called by a user unless the device is reset.

Parameters
pwrOne of the BMG160_POWER_MODE_T values. The default is BMG160_POWER_MODE_NORMAL.
rangeOne of the BMG160_RANGE_T values. The default is BMG160_RANGE_250.
bwOne of the filtering BMG160_BW_T values. The default is BMG160_BW_400_47.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

Here is the caller graph for this function:

void reset ( )

Reset the device as if during a power on reset. All configured values are lost when this happens. You should call init() afterwards, or at least perform the same initialization init() does before continuing.

Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void setRange ( BMG160_RANGE_T  range)

Set the gyroscope detection scaling range. This device supports 125, 250, 500, 1000, and 2000 degree/s ranges.

Parameters
rangeOne of the BMG160_RANGE_T values.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void setBandwidth ( BMG160_BW_T  bw)

Set the output filtering bandwidth of the device.

Parameters
bwOne of the BMG160_BW_T values.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void setPowerMode ( BMG160_POWER_MODE_T  power)

Set the power mode of the device. Care must be taken when setting a low power or suspend mode. See the datasheet for details. I ncertain power modes, register write must be drastically slowed down. which we cannot support.

Parameters
powerOne of the POWER_MODE_T values.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void enableFIFO ( bool  useFIFO)

Enable update() to read from the FIFO rather than the gyroscope axis registers directly. init() enables this mode by default. An advantage to this mode that all axis data is sampled from the same timeslice. When reading directly from the gyroscope output registers, it's possible for one axis to be updated while another is being read, causing a temporal inconsistancy..

Using the FIFO removes this problem.

Parameters
useFIFOtrue to enable update() to read from the FIFO. When false, update will read from the gyroscope output registers directly.

Here is the call graph for this function:

void fifoSetWatermark ( int  wm)

Set the FIFO watermark. When the watermark is reached an interrupt (if enabled) will be generated.

Parameters
wmThe FIFO watermark to use. The maximum value is 63.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void fifoConfig ( BMG160_FIFO_MODE_T  mode,
BMG160_FIFO_DATA_SEL_T  axes 
)

Set the FIFO configuration. init() uses the BMG160_FIFO_MODE_BYPASS mode with axes set to BMG160_FIFO_DATA_SEL_XYZ by default.

Parameters
modeOne of the BMG160_FIFO_MODE_T values.
axesOne of the BMG160_FIFO_DATA_SEL_T values.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

uint8_t getInterruptEnable0 ( )

Return the Interrupt Enables 0 register. These registers allow you to enable various interrupt conditions. See the datasheet for details.

Returns
A bitmask of INT_EN_0_BITS_T bits.

Here is the call graph for this function:

void setInterruptEnable0 ( uint8_t  bits)

Set the Interrupt Enables 0 register. See the datasheet for details.

Parameters
bitsA bitmask of BMG160_INT_EN_0_BITS_T bits.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

uint8_t getInterruptMap0 ( )

Return the Interrupt Map 0 register. These registers allow you to map specific interrupts to the interrupt 1 or interrupt 2 pin. See the datasheet for details.

Returns
A bitmask of INT_MAP_0_BITS_T bits.

Here is the call graph for this function:

void setInterruptMap0 ( uint8_t  bits)

Set the Interrupt Map 0 register. These registers allow you to map specific interrupts to the interrupt 1 or interrupt 2 pin. See the datasheet for details.

Parameters
bitsA bitmask of BMG160_INT_MAP_0_BITS_T bits.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

uint8_t getInterruptMap1 ( )

Return the Interrupt Map 1 register. See the datasheet for details.

Returns
A bitmask of BMG160_INT_MAP_1_BITS_T bits.

Here is the call graph for this function:

void setInterruptMap1 ( uint8_t  bits)

Set the Interrupt Map 1 register. See the datasheet for details.

Parameters
bitsA bitmask of BMG160_INT_MAP_1_BITS_T bits.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

uint8_t getInterruptSrc ( )

Return the Interrupt source register. This register allows determining where data comes from (filtered/unfiltered) for those interrupt sources where this is selectable. See the datasheet for details.

Returns
A bitmask of INT_1A_BITS_T bits.

Here is the call graph for this function:

void setInterruptSrc ( uint8_t  bits)

Set the Interrupt source register. This register allows determining where data comes from (filtered/unfiltered) for those interrupt sources where this is selectable. See the datasheet for details.

Parameters
bitsA bitmask of INT_1A_BITS_T bits.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

uint8_t getInterruptOutputControl ( )

Return the Interrupt output control register. This register allows determining the electrical characteristics of the 2 interrupt pins (open-drain/push-pull and level/edge triggering). See the datasheet for details.

Returns
A bitmask of INT_EN_1_BITS_T bits.

Here is the call graph for this function:

void setInterruptOutputControl ( uint8_t  bits)

Set the Interrupt output control register. This register allows determining the electrical characteristics of the 2 interrupt pins (open-drain/push-pull and level/edge triggering). See the datasheet for details.

Parameters
bitsA bitmask of INT_EN_1_BITS_T bits.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void clearInterruptLatches ( )

Clear all latched interrupts. See the datasheet for details.

Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

BMG160_RST_LATCH_T getInterruptLatchBehavior ( )

Return the current interrupt latching behavior. See the datasheet for details.

Returns
One of the RST_LATCH_T values.

Here is the call graph for this function:

void setInterruptLatchBehavior ( BMG160_RST_LATCH_T  latch)

Set the current interrupt latching behavior. See the datasheet for details.

Parameters
latchOne of the RST_LATCH_T values.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

uint8_t getInterruptStatus0 ( )

Return the interrupt status 0 register. These registers indicate which interrupts have been triggered. See the datasheet for details.

Returns
a bitmask of INT_STATUS_0_BITS_T bits.

Here is the call graph for this function:

uint8_t getInterruptStatus1 ( )

Return the interrupt status 1 register. See the datasheet for details.

Returns
a bitmask of INT_STATUS_1_BITS_T bits.

Here is the call graph for this function:

uint8_t getInterruptStatus2 ( )

Return the interrupt status 2 register. See the datasheet for details.

Returns
a bitmask of INT_STATUS_2_BITS_T bits.

Here is the call graph for this function:

uint8_t getInterruptStatus3 ( )

Return the interrupt status 3 register. See the datasheet for details.

Returns
a bitmask of INT_STATUS_3_BITS_T bits.

Here is the call graph for this function:

void enableRegisterShadowing ( bool  shadow)

Enable shadowing of the gyroscope output registers. When enabled, a read of an axis LSB register automatically locks the MSB register of that axis until it has been read. This is usually a good thing to have enabled. init() enables this by default. If disabled, then it becomes possible for part of an axis value to change while another part is being read, causing inconsistent data.

Parameters
shadowtrue to enable axis register shadowing, false otherwise.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void enableOutputFiltering ( bool  filter)

Enable filtering of the gyroscope axis data. init() enables this by default. If disabled, then gyroscope data that is read will be raw and unfiltered (rated R). See the datasheet for details.

Parameters
filtertrue to enable filtering, false to disable.

Here is the call graph for this function:

void installISR ( BMG160_INTERRUPT_PINS_T  intr,
int  gpio,
mraa::Edge  level,
void(*)(void *)  isr,
void *  arg 
)

install an interrupt handler.

Parameters
intrOne of the BMG160_INTERRUPT_PINS_T values specifying which interrupt pin you are installing.
gpioGPIO pin to use as interrupt pin.
levelThe interrupt trigger level (one of the mraa::Edge values). Make sure that you have configured the interrupt pin properly for whatever level you choose.
isrThe interrupt handler, accepting a void * argument.
argThe argument to pass the the interrupt handler.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void uninstallISR ( BMG160_INTERRUPT_PINS_T  intr)

uninstall a previously installed interrupt handler

Parameters
introne of the INTERRUPT_PINS_T values specifying which interrupt pin you are removing.

Here is the call graph for this function:

uint8_t readReg ( uint8_t  reg)

Read a register.

Parameters
regThe register to read.
Returns
The value of the register.

Here is the call graph for this function:

int readRegs ( uint8_t  reg,
uint8_t *  buffer,
int  len 
)

Read contiguous registers into a buffer.

Parameters
bufferThe buffer to store the results.
lenThe number of registers to read.
Returns
The number of bytes read.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

void writeReg ( uint8_t  reg,
uint8_t  val 
)

Write to a register

Parameters
regThe register to write to.
valThe value to write.
Exceptions
std::runtime_erroron failure.

Here is the call graph for this function:

Collaboration diagram for BMG160:
Collaboration graph
[legend]

The documentation for this class was generated from the following files: