Pmod CMPS Reference Manual

The Digilent Pmod CMPS (Revision A) features the popular Honeywell HMC5883L 3-axis digital compass and can add compass heading readings to any Digilent host board with an I²C interface.

Download This Reference Manual

Features

  • 3-axis digital compass
  • 2 milli-gauss Field Resolution in ±8 gauss fields
  • 160 Hz maximum data output rate
  • Optional pull-up resistors for SCL and SDA pins
  • 2×4-pin connector with I2C interface

Functional Description

The Pmod CMPS utilizes Honeywell's HMC5883L with Anisotropic Magnetoresistive (AMR) technology. In plain English, this means that the three sensors (one for each coordinate direction) have very little interference with each other so that accurate data can be retrieved from the Pmod.


Interfacing with the Pmod

The Pmod CMPS communicates with the host board via the I²C protocol. Jumpers JP1 and JP2 provide optional 2.2kΩ pull-up resistors to use for the Serial Data and Serial Clock lines. The 7-bit address for this on-board chip is 0x1E, making the 8-bit address for a read command 0x3D and 0x3C for a write command.

By default, the Pmod CMPS starts out in Single Measurement mode so that the compass takes a single measurement, sets the Data Ready pin high, and then places itself into Idle Mode. While in Idle Mode, major sources of power consumption are (not surprisingly) disabled, such as the internal ADC which collects the voltage measurements. However, you can still access all of the registers with their most recent data value through the I²C bus. To change the Pmod CMPS from idle mode back into Single Measurement or Continuous Measurement mode, the user must write to the Mode Register (0x02).

When reading data from the Pmod CMPS, all six data registers, corresponding to the upper and lower bytes of each Cartesian coordinate direction, must be read. Since the internal register address pointer automatically increments after a register has been successfully read, it is possible to read from all six registers with a single command. An example how this might look is given below:

Command byte Address byte
00111101(ACK)00000011(ACK)
MSB X LSB X
SXSXSXSXsbMSBb9b8(ACK)b7b6b5b4b3b2b1b0(ACK)
MSB Z LSB Z
SXSXSXSXsbMSBb9b8(ACK)b7b6b5b4b3b2b1b0(ACK)
MSB Y LSB Y
SXSXSXSXsbMSBb9b8(ACK)b7b6b5b4b3b2b1b0(STOP)

Note* SX stands for a sign extension of the sign bit (sb)

Pinout Description Table

Header J1 Header J2
Pins Signal Description Pin Signal Description
1 & 5 SCL Serial Clock 1 DRDY Data Ready
2 & 6 SDA Serial Data 2 GND Power Supply Ground
3 & 7 GND Power Supply Ground Jumper JP1
4 & 8 VCC Power Supply (3.3V) Loaded State SDA line uses a 2.2kΩ pull-up resistor
Jumper JP2
Loaded State SCL line uses a 2.2kΩ pull-up resistor

Table 1 Connector J1- Pin Descriptions as labeled on the Pmod

The Pmod CMPS also offers a self test mode to help calibrate any data that is being received from the module.

Any external power applied to the Pmod CMPS must be within 2.16V and 3.6V; therefore, when using Pmod headers on Digilent system boards, the supply voltage must be at 3.3V.


Physical Dimensions

The pins on the pin header are spaced 100 mil apart. The PCB is 0.8 inches long on the sides parallel to the pins on the pin header and 0.8 inches long on the sides perpendicular to the pin header.


Additional Information

The schematics of the Pmod CMPS are available here. Additional information about the on-board IC can be found from Honeywell's website here.

Example code demonstrating how to get information from the Pmod CMPS can be found here.

If you have any questions or comments about the Pmod CMPS, feel free to post them under the appropriate section (“Add-on Boards”) of the Digilent Forum.