Now that I have Linux and bare metal running on the same ARM chip, I can interact with any HW in a bare metal application and expose the HW to Linux application in an appropriate manner. I have already discussed digital interface to various chips in another blog entry, but have not yet discussed bare metal code to interact with such chips, nor have I gone into analog interface to peripheral chips. I want to do explore real-time signal processing on FPGA and on ARM chip, and I just came by an accelerometer (MXR9500MZ), so I am going to start looking into some motion analysis on Zedboard with it. Originally, I was going to buy an Analog Devices PMOD accelerometer because the Zedboard supports PMOD, but I might use MXR9500MZ at work, so I began there.
MXR9500MZ is particularly convenient because an eval board is available: MXR9500MZ-B, shown below:
Even though the chip supports a low power mode (pull up DI1 and DI2 pins) where the chip draws only a uW, for the evaluation, I can just always run it, by pulling down DI1 and DI2 pins, exposed on the P1.2 and P1.3 pins in the schematic shown below:
I connected Vdd to the 3.3 V available on my Zedboard, and put the scope on P2.1 and P2.2 on the eval board. When I shake the chip laterally (because I cannot see Z with my 2 channel scope), I see the following:
Note that at rest, the output is half of Vdd, and the output reflects either + or - values with deviation from Vdd/2. The sensor maxes out at +/- 1.5 g, so the above excursion in x corresponds to slightly less than 0.5 g.
Zynq ADC is differential, so I would have to use 6 pins to read the acceleration in x, y, z. For I/O pin strapped application, sensor vendors have I2C or SPI digital interface as well. But for the purpose of learning to read the Znyq XADC, this sensor is perfect!