Document Number: AN4071 Rev 1, 10/2011 Freescale Semiconductor Application Note High-Pass Filtered Data and Transient Detection Using the MMA8451, 2, 3Q by: Kimberly Tuck Applications Engineer 1.0 Introduction The acceleration readings from the sensor couple both static and dynamic accelerations. Many tilt based applications such as orientation detection, scrolling and tilt based gaming apps use the accelerometer analyzing the change in static acceleration due to gravity only. These functions are often best when they’ve been low-pass filtered because the highfrequency data is considered noise. There are many functions where the accelerometer must analyze the dynamic acceleration. Functions such as taps, flicks, shakes and step counting are based on the analysis of the change in the acceleration with no regard for the static acceleration. These functions interpret the acceleration threshold change and direction of motion. It is simpler to interpret the dynamic acceleration data when the static component has been removed. The MMA8451, 2, 3Q has a built-in high-pass filter. In the MMA8451, 2Q the output data can go through the high-pass filter, eliminating the offset (DC) and low frequencies (well below the cutoff). Note that the MMA8453Q does not have the capability to read out data from the high-pass filter. The highpass filter cutoff frequency can be set by the user to four different frequencies which are dependent on the Output Data Rate (ODR) and the oversampling mode. A higher cutoff frequency ensures the DC data or slower moving data will be filtered out, allowing only the higher frequencies to pass. The MMA8451, 2, 3Q contain an embedded transient function which analyzes the high-pass filtered data allowing the user to set a preset threshold with an added debounce counter to ensure the event happens for a set duration. The threshold represents a change in acceleration to be exceeded. This embedded function can be routed to an interrupt pin to detect jolts on different axes and will display the direction of the jolt. © 2010, 2011 Freescale Semiconductor, Inc. All rights reserved. TABLE OF CONTENTS 1.0 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 Key Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.0 MMA8451, 2, 3Q Consumer 3-axis Accelerometer 3 by 3 by 1 mm . . . . . 2 2.1 Output Data, Sample Rates and Dynamic Ranges of all Three Products . . . 3 2.1.1 MMA8451Q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1.2 MMA8452Q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1.3 MMA8453Q Note: No HPF Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3.0 Comparison of Motion Detection and Transient Detection . . . . . . . . . . . 3 3.1 Use Case 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3.2 Use Case 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4.0 Transient Settings and Interpretation of the Data . . . . . . . . . . . . . . . . . . 5 4.1 High-Pass Filter Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5.0 Using the HPF Data to Write Algorithms such as Directional Shake . . . 7 6.0 Configuring the Embedded Transient Detection . . . . . . . . . . . . . . . . . . . 9 6.1 Register 0x1D:TRANSIENT_CFG Transient Configuration Register . . . . . . . 9 6.2 Register 0x1F: TRANSIENT_THS Transient Threshold Register . . . . . . . . 10 6.3 Register 0x20: TRANSIENT_COUNT Transient Debounce Register . . . . . . 10 6.4 Register 0x1E:TRANSIENT_SRC Transient Source Register . . . . . . . . . . . 11 6.5 Configuring the Transient Detection to an Interrupt Pin. . . . . . . . . . . . . . . . . 11 6.6 Reading the System Interrupt Status Source Register . . . . . . . . . . . . . . . . . 11 7.0 Details for Configuring the MMA8451, 2, 3Q for Transient Detection . 12 Table 11.Registers of Importance for Setting up the Transient Detection and Using the HPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 7.1 Example Steps for Configuring Transient Detection . . . . . . . . . . . . . . . . . . . 13 1.1 Key Words Accelerometer, Static Acceleration, Image Stabilization, HighPass Filter (HPF), Transient, HPF Data, 3-Axis Accelerometer, Embedded Motion Detection, Embedded Transient Detection, Vibration, Shake, Directional Shake, Displacement, Velocity, Sensor, Interrupt, DBCNTM Bit, Jolt 1.2 Summary A. The high-pass filter is used to eliminate the static acceleration when the HPF_OUT bit is set. B. Different cutoff frequencies from the high-pass filter affect the output data and the embedded functions using the high-pass filter. C. The high-pass filtered data is useful for writing algorithms which require an analysis of the change in acceleration and simplifies the data analysis by eliminating the static acceleration. D. The transient function is interrupt driven and saves on current consumption and unnecessary processing because the logic is internal to the sensor. E. An algorithm for directional shake can be reliably detected by analyzing the (high-pass filter) data. F. The high-pass filter data can be used for image stability applications, compensating for the jitter of the user’s hands and/or from the environment. G. The transient function can be used to detect a change in acceleration that exceeds a set threshold. This is slightly different than the motion detection function. H. The transient threshold and debounce counter can be changed in either standby or active mode to allow for adjustments after the part has transitioned from wake to sleep mode. I. Note the MMA8453Q does not have the option for high-pass filtered data, although it does contain the transient function and the tap function uses the high-pass filter. 2.0 MMA8451, 2, 3Q Consumer 3-axis Accelerometer 3 by 3 by 1 mm 2 NC 3 SCL 4 GND 5 NC VDD 14 MMA845xQ 16-Pin QFN (Top View) 6 7 13 NC 12 GND 11 INT1 10 GND 9 INT2 8 NC BYP 15 SA0 1 16 SDA VDDIO NC The MMA8451, 2, 3Q has a selectable dynamic range of ±2g, ±4g, ±8g. The device has 8 different output data rates, selectable high-pass filter cutoff frequencies, and high-pass filtered data. The available resolution of the data and the embedded features is dependant on the specific device. Note: The MMA8450Q has a different memory map and has a slightly different pinout configuration. Figure 1. MMA8451, 2, 3Q Consumer 3-axis Accelerometer 3 by 3 by 1 mm AN4071 2 Sensors Freescale Semiconductor, Inc. 2.1 2.1.1 Output Data, Sample Rates and Dynamic Ranges of all Three Products MMA8451Q 1. 14-bit data 2g (4096 counts/g = 0.25 mg/LSB) 4g (2048 counts/g = 0.5 mg/LSB) 8g (1024 counts/g = 1 mg/LSB) 2. 8-bit data 2g (64 counts/g = 15.6 mg/LSB) 4g (32 counts/g = 31.25 mg/LSB) 8g (16 counts/g = 62.5 mg/LSB) 3. Embedded 32 sample FIFO (MMA8451Q) 2.1.2 MMA8452Q 1. 12-bit data 2g (1024 counts/g = 1 mg/LSB) 4g (512 counts/g = 2 mg/LSB) 8g (256 counts/g = 3.9 mg/LSB) 2. 8-bit data 2g (64 counts/g = 15.6 mg/LSB) 4g (32 counts/g = 31.25 mg/LSB) 8g (16 counts/g = 62.5 mg/LSB) 2.1.3 MMA8453Q Note: No HPF Data 1. 10-bit data 2g (256 counts/g = 3.9 mg/LSB) 4g (128 counts/g = 7.8 mg/LSB) 8g (64 counts/g = 15.6 mg/LSB) 2. 8-bit data 2g (64 counts/g = 15.6 mg/LSB) 4g (32 counts/g = 31.25 mg/LSB) 8g (16 counts/g = 62.5 mg/LSB) 3.0 Comparison of Motion Detection and Transient Detection The transient function (with HPF enabled) is different from the motion detection embedded function in MMA8451, 2, 3Q. Refer to Freescale application note AN4070 for details on the motion detection. The intended use of these functions is different. A. The embedded motion function triggers an interrupt when any of the enabled axes has exceeded a set acceleration threshold. • Motion detection is useful when the device may be tilted in an orientation and the interest is to know if the acceleration in one axis has crossed a specified threshold amount measured from 0g.The motion detection analyzes change in threshold considering both static and dynamic acceleration. B. The transient detection embedded function compares whether any of the enabled axes has exceeded a set change in acceleration disregarding the static acceleration. The data that is compared to the threshold to be exceeded is high-pass filtered data. • Transient detection is useful when the device may be tilted in an orientation (i.e., there is some non-zero reading on one or more of X, Y and Z) and the interest is more on the dynamic acceleration crossing a specified threshold amount in a short amount of time (frequency being the reciprocal of time) regardless of what the current value is. Example If a change in acceleration of 0.5g in any axes was the target for an application, then it would be challenging to use the embedded motion detection function for detecting this change. The reason for this can be better understood with an example: Assume that the device was oriented such that X = 0.24g, Y = 0.44g and Z = 0.82g; it would be challenging to detect a 0.5g change in acceleration in any of the axes using the motion detect function since the new readings have to be outside the range X = -0.26g to 0.74g, Y = -0.06g to 0.94g and Z = 0.32g to 1.32g. Because only a single threshold setting can be chosen for each axes when using the motion detect embedded function and because of the need to detect acceleration outside a range, it would, therefore, be seen as impossible to choose a threshold that would detect a 0.5 change in acceleration for any of the axes. 3.1 Use Case 1 Use Case 1 Transient: Unknown Orientation with Specific Acceleration Change for Detection A use case example for transient detection may be when the device containing the accelerometer is in an environment of an unknown orientation or changing orientation and a small amplitude, but quick disturbance must be detected, e.g., when the device is accelerating through 0g to +1g to -1g and a subtle impact force (change in acceleration of 0.5g) is used as an indication to wake the device or as a motion signature of an event. The accelerometer reading combines the gravity and the linear acceleration reading. It is much simpler to decouple the two by eliminating the effect of gravity. Using the example above, assume that the device was oriented such that at given time T, X = 0.24g, Y = 0.44g and Z = 0.82g. If transient detection is enabled on all 3 axes with a threshold of 0.5g and an ODR of 100 Hz, any time that X goes outside of the range -0.26g to 0.74g within T + 10 ms, a transient detect interrupt would be generated. Eliminating the static acceleration on the device simplifies the condition to focus on the change in acceleration only, since the orientation is of no consequence in this situation. Figure 2 demonstrates that the sensor detects both the static and the dynamic acceleration. Decoupling the static from the dynamic acceleration can simplify the analysis. AN4071 Sensors Freescale Semiconductor, Inc. 3 Δ Δ DC Δ Figure 2. Device in an Unknown Orientation While Detecting Change in Acceleration 3.2 Use Case 2 Use Case 2: Image Stabilization Another use case example for using data processed by the high-pass filter is for users viewing their PDA while in a car/bus or on a train to provide image stabilization in a shaky environment. Small motions/vibrations can be compensated for with the change in X, Y and Z movement through a stabilization routine, while a large change in motion could change the mode of the device. As shown in Figure 3, an image on a PDA that appears to be shaking can dynamically be compensated by shifting the screen content in the opposite direction of the shake. The data must first be filtered to eliminate the gravity component to analyze the change in acceleration of the axes. A mass spring damper model is a reasonable way to analyze the system to reduce display shaking since the spring allows the mass to move in the opposite direction of the shake and dampers would prevent oscillation of the mass. This type of model only requires the acceleration to compensate for the shaking. The parameters of the model can be tuned based on the amplitudes and frequency of the oscillations in the environment since different environments may affect the usability of the stabilization capabilities. For more information on this type of image stabilization technique there have been various publications written for example, Rahmati et al1. ΔY ? y ΔX ?x Screen Image Figure 3. PDA Image Stabilization in a Train, Bus, Car, or Vibrating Environment 1. A. Rahmati, C. Shepard, L. Zhong, “No Shake: Content Stabilization for Shaking Screens of Mobile Device”, in Proc. IEEE Int. Conf. Pervasive Computing and Communication (PerCom), March 2009. AN4071 4 Sensors Freescale Semiconductor, Inc. 4.0 Transient Settings and Interpretation of the Data Figure 4 is a display of the 8-bit high-pass filtered data in 8g mode. The high-pass filter is set to 4 Hz with the sampling rate at 400 Hz. The sensitivity is 16 counts/g. The embedded block is set to detect when the HPF data exceeds 0.5g. This shows that the device can be vibrating, or bouncing at a low acceleration level and the event will not be detected until the change in acceleration exceeds 0.5g. Figure 4. HPF Data in the Embedded Transient Function with Threshold ±0.5g 4.1 High-Pass Filter Values The high-pass filter values available scale with the output data rate in the MMA8451, 2, 3Q. Table 1 and Table 2, list the output high-pass filter register where the cutoff frequency values are stored for every corresponding data rate. The values for SEL1 and SEL0 refers to the cutoff frequency on the high-pass filter. Note that the oversampling mode also changes the cutoff frequency options. It is expected that the customer will choose one or perhaps two oversampling modes and stay with those. Note that it doesn’t make sense to use the High-Pass Filter in the High-Resolution Mode for output data rates of 12.5 Hz and below. Table 1. High-Pass Filter Register 0x0F (Read/Write) Bit 7 Bit 6 0 0 Bit 5 Bit 4 Pulse_HPF_BYP Pulse_LPF_EN Bit 3 Bit 2 Bit 1 Bit 0 0 0 SEL1 SEL0 Table 2. HP_FILTER_CUTOFF Setting Options Oversampling Mode = Normal SEL1 SEL0 800 Hz 400 Hz 200 Hz 100 Hz 50 Hz 12.5 Hz 6.25 Hz 1.56 Hz 0 0 16 Hz 16 Hz 8 Hz 4 Hz 2 Hz 2 Hz 2 Hz 2 Hz 0 1 8 Hz 8 Hz 4 Hz 2 Hz 1 Hz 1 Hz 1 Hz 1 Hz 1 0 4 Hz 4 Hz 2 Hz 1 Hz 0.5 Hz 0.5 Hz 0.5 Hz 0.5 Hz 1 1 2 Hz 2 Hz 1 Hz 0.5 Hz 0.25 Hz 0.25 Hz 0.25 Hz 0.25 Hz Oversampling Mode = Low Noise Low Power 0 0 16 Hz 16 Hz 8 Hz 4 Hz 2 Hz 0.5 Hz 0.5 Hz 0.5 Hz 0 1 8 Hz 8 Hz 4 Hz 2 Hz 1 Hz 0.25 Hz 0.25 Hz 0.25 Hz 1 0 4 Hz 4 Hz 2 Hz 1 Hz 0.5 Hz 0.125 Hz 0.125 Hz 0.125 Hz 1 1 2 Hz 2 Hz 1 Hz 0.5 Hz 0.25 Hz 0.063 Hz 0.063 Hz 0.063 Hz Oversampling Mode = High Resolution 0 0 16 Hz 16 Hz 16 Hz 16 Hz 16 Hz 16 Hz 16 Hz 16 Hz 0 1 8 Hz 8 Hz 8 Hz 8 Hz 8 Hz 8 Hz 8 Hz 8 Hz 1 0 4 Hz 4 Hz 4 Hz 4 Hz 4 Hz 4 Hz 4 Hz 4 Hz 1 1 2 Hz 2 Hz 2 Hz 2 Hz 2 Hz 2 Hz 2 Hz 2 Hz AN4071 Sensors Freescale Semiconductor, Inc. 5 Table 2. HP_FILTER_CUTOFF Setting Options Oversampling Mode = Low Power 0 0 16 Hz 8 Hz 4 Hz 2 Hz 1 Hz 0.25 Hz 0.25 Hz 0.25 Hz 0 1 8 Hz 4 Hz 2 Hz 1 Hz 0.5 Hz 0.125 Hz 0.125 Hz 0.125 Hz 1 0 4 Hz 2 Hz 1 Hz 0.5 Hz 0.25 Hz 0.063 Hz 0.063 Hz 0.063 Hz 1 1 2 Hz 1 Hz 0.5 Hz 0.25 Hz 0.125 Hz 0.031 Hz 0.031 Hz 0.031 Hz Figure 5 shows a 0.8 Hz -1.5 Hz Z-axis only motion at 400 Hz ODR with the filter set at 4 Hz. Much of the motion at 1 Hz is filtered out and the accelerometer reading remains between 0 to -1 counts. Figure 5. 4 Hz High-Pass Filtered Transient Data with approximately 1 Hz Motion Figure 6 shows 1 Hz of motion, 50 Hz ODR with no high-pass filter, with fairly controlled Z-axis only motion. The part is held in the X = 0g, Y = 0g, Z = -1g configuration since the Z-axis is bouncing with the center around -16 counts (16 counts/g), while X and Y are close to 0 counts. Figure 6. XYZ Output Data with no High-Pass Filter Showing Approximately 1 Hz Motion AN4071 6 Sensors Freescale Semiconductor, Inc. 5.0 Using the HPF Data to Write Algorithms such as Directional Shake Refer to Figure 7, “Directional Shake Showing Position, Velocity, Acceleration”. The high-pass filtered data can be used to write algorithms such as for directional shake. This application could be used in a motion based game on a cell phone for detecting the direction of the motion. Directional shake is an application that requires a change in acceleration with the direction of the acceleration change indicated by the initial change sign, followed by a “rebound”, which is a change in acceleration in the opposite direction. This occurs because the proof mass moves in the opposite direction of the package. Therefore as the hand accelerates in the positive direction, the proof mass accelerates in the negative direction. Next, as the hand decelerates and stops (Velocity = 0), the proof mass accelerates in the opposite (positive) direction. By analyzing the output acceleration from the directional shake signature, one can use the HPF data to write a very simple algorithm. In the MMA8451Q the high-pass filtered data can be accessed as either 14-bit or 8-bit data through the FIFO. The FIFO helps to minimize the amount of transactions required for algorithm analysis by the application processor. Figure 7. Directional Shake Showing Position, Velocity, Acceleration AN4071 Sensors Freescale Semiconductor, Inc. 7 Figure 8 shows the Z-axis while shaking in the downward direction. The device was shaken 8 times, consecutively, in the direction of gravity. Note that the deceleration was followed by a larger positive acceleration each time. This is very repeatable. Repeatability of a motion with distinct characteristics is another important factor that can be leveraged while writing an algorithm to detect a condition such as directional shake. This algorithm would look for a change in acceleration above a threshold. Next, it would check the sign of the acceleration, followed by another change in acceleration above a threshold of opposite sign. The algorithm would have to choose appropriate thresholds based on sensor placement and based on how the user is expected to flick the device. Sometimes these algorithms require a bit of usability testing under various conditions with different users to analyze the range of thresholds, and the timing required. Figure 8. Z-Axis Directional Shake with Downward Motion The graph in Figure 9 shows the accelerometer shaken upward producing the opposite results of the graph in Figure 8. Acceleration initially increases (positive) and then rebounds with a larger negative acceleration each time. Directional shake has a very distinct signature which is very repeatable. This is an ideal application using the transient data that is obtained from the ac celerometer. Figure 9. Z-Axis Directional Shake with Upward Motion AN4071 8 Sensors Freescale Semiconductor, Inc. As seen in Figure 10, the same applies in the X and Y direction. Below are the graphed results of a shake on the Y-axis in the positive direction. In this case the Y-axis is at zero g’s to start and then is accelerated toward the positive direction. This produces similar results to the Z-axis, with a negative initial acceleration followed by positive rebound acceleration. Figure 10. Y-Axis Positive Directional Shake Acceleration Output The high-pass filtered XYZ data is available by reading registers 0x01 through 0x06 (the data registers), when the HPF_OUT bit is set in Register 0x0E. Note it is not possible to read out the regular data and the high-pass filtered data at the same time. This is only possible in the MMA8450Q device. Note: The MMA8451, 2, 3Q devices all have embedded directional shake. The directional information is updated every time the event is detected. This saves the user from writing an algorithm to detect the direction unless the user wants to develop a very specific customized algorithm. 6.0 Configuring the Embedded Transient Detection There are four (4) registers associated with the embedded transient detection function. These are registers 0x1D to 0x20. 1. Register 0x1D Transient_CFG - Transient Configuration 2. Register 0x1F Transient_THS - Setting the Threshold 3. Register 0x20 Transient_COUNT - Setting the Debounce Counter 4. Register 0x1E Transient_SRC - Transient Source Detection This embedded function is used to detect a change in acceleration greater than a set threshold for a determined period of time. The function can be routed to one of the two interrupt pins on the accelerometer. 6.1 Register 0x1D:TRANSIENT_CFG Transient Configuration Register The transient detection mechanism can be configured to raise an interrupt when the magnitude of the high-pass filtered acceleration is greater than the set threshold. The TRANSIENT_CFG register is used to enable the transient interrupt generation mechanism for the 3 axes (X, Y, Z) of acceleration. The transient configuration register and descriptions are shown below in Table 3. Table 3. Register 0x1D TRANSIENT_CFG Register (Read/Write) and Description Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 — — — ELE ZTEFE YTEFE XTEFE HPF_BYP Note that if ELE = 1, the latch is enabled and the status will remain until it is read. The status register does not need to be read immediately upon assertion since the status values can be latched until it is read. Also note if the HPF_BYP bit is set then the Transient function will behave like the Motion function. This will bypass the high-pass filter and will compare the regular data to the set threshold. Example: X or Y > 6g with Latch enabled for time period of 60 ms at 50 Hz ODR Code Example: IIC_RegWrite(0x1D, 0x16); //This enables the X-axis and the Y-axis only with the Latch AN4071 Sensors Freescale Semiconductor, Inc. 9 6.2 Register 0x1F: TRANSIENT_THS Transient Threshold Register The TRANSIENT_THS register shown in Table 4 sets the threshold limit for the detection of the transient acceleration. The value in the TRANSIENT_THS register corresponds to a g value which is compared against the values of the high-pass filtered data. If the high-pass filtered acceleration exceeds the threshold limit, an event flag is raised and an interrupt is generated assuming the interrupts have been configured and enabled. Table 4. Register 0x1F TRANSIENT_THS Register (Read/Write) and Description Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 DBCNTM THS6 THS5 THS4 THS3 THS2 THS1 THS0 The threshold THS[6:0] is a 7-bit unsigned number. The minimum threshold resolution is 0.063g and the threshold register has a range of 0 to 127counts. The maximum threshold is 8g. The threshold range is not dependent on the set Full Scale in Register 0x0E. Example: X or Y > 6g with Latch enabled for time period of 60 ms at 50 Hz ODR Since the minimum time step is 0.063g per count, the calculation is as follows: 6g/ 0.063g = 95.2 counts, round to 96 counts Code Example: IIC_RegWrite(0x1F, 0x60); //Threshold set to 96 counts (6.048g) 6.3 Register 0x20: TRANSIENT_COUNT Transient Debounce Register The TRANSIENT_COUNT shown inTable 5 sets the number of debounce counts (timing) required for the condition to persist. Note that the timer for the transient as well as for all the other embedded functions is dependent on the oversampling mode of the system. Table 5. Register 0x20 TRANSIENT_COUNT Register (Read/Write) and Description Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 D7 D6 D5 D4 D3 D2 D1 D0 The time step for the debounce counter is set by the value of the system ODR as shown in Table 6. Table 6. TRANSIENT_COUNT Relationship with the ODR Max Time Range (s) Time Step (ms) ODR (Hz) Normal LPLN HighRes LP Normal LPLN HighRes LP 800 0.319 0.319 0.319 0.319 1.25 1.25 1.25 1.25 400 0.638 0.638 0.638 0.638 2.5 2.5 2.5 2.5 200 1.28 1.28 0.638 1.28 5 5 2.5 5 100 2.55 2.55 0.638 2.55 10 10 2.5 10 50 5.1 5.1 0.638 5.1 20 20 2.5 20 12.5 5.1 20.4 0.638 20.4 20 80 2.5 80 6.25 5.1 20.4 0.638 40.8 20 80 2.5 160 1.56 5.1 20.4 0.638 40.8 20 80 2.5 160 Example: X or Y > 6g with Latch enabled for time period of 60 ms at 50 Hz ODR 60 ms total time/ 20 ms (at 50 Hz) = 3 counts Code Example: IIC_RegWrite(0x20, 0x03); AN4071 10 Sensors Freescale Semiconductor, Inc. 6.4 Register 0x1E:TRANSIENT_SRC Transient Source Register The transient event source flag register shown in Table 7 contains bit fields which can be used to determine which event has occurred when a bit is set. Reading this register will clear the interrupt and status if it has been latched. The axis of the event and the direction of the acceleration is given in the source register. Table 7. Register 0x1E TRANSIENT_SRC Register (Read Only) and Description 6.5 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 — EA ZTRANSE Z_Trans_Pol YTRANSE Y_Trans_Pol XTRANSE X_Trans_Pol Configuring the Transient Detection to an Interrupt Pin In order to set up the system to route to a hardware interrupt pin, the System Interrupt (bit 5 in Reg 0x2D) must be enabled in Table 8. The MMA8451, 2, 3Q allows for seven (7) separate types of interrupts. One (1) of these is reserved for transient detection. To configure the Transient function, the following two step procedure should be followed. Step 1: Enable the Interrupt in Register 0x2D shown in Table 8. Table 8. Register 0x2D CTRL_REG4 Register (Read/Write) Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 INT_EN_ASLP INT_EN_FIFO INT_EN_TRANS INT_EN_LNDPRT INT_EN_PULSE INT_EN_FF_MT — INT_EN_DRDY The corresponding interrupt enable bit allows the function to route its event detection flag to the interrupt controller of the system. The interrupt controller routes the enabled function to the INT1 or INT2 pin. To enable the Transient function, set bit 5 in register 0x2D as follows: Code Example: IIC_RegWrite(0x2D, 0x20); Step 2: Route the interrupt to INT1 or to INT2 shown in Table 9. Table 9. 0x2E CTRL_REG5 Register (Read/Write) and Description Bit 7 Bit 6 INT_CFG_ASLP INT_CFG_FIFO Bit 5 Bit 4 Bit 3 Bit 2 INT_CFG_TRANS INT_CFG_LNDPRT INT_CFG_PULSE INT_CFG_FF_MT Bit 1 Bit 0 — INT_CFG_DRDY To set the Transient function to INT 1, set bit 5 in register 0x2E. Code Example: IIC_RegWrite(0x2E,0x20); 6.6 Reading the System Interrupt Status Source Register In the interrupt source register shown in Table 10, the status of the various embedded functions can be determined. • The bits that are set (logic ‘1’) indicate which function has asserted an interrupt. • Conversely, the bits that are cleared (logic ‘0’) indicate which function has not asserted or has deasserted an interrupt. The interrupts are rising edge sensitive. The bits are set by a low to high transition and are cleared by reading the appropriate interrupt source register. Table 10. 0x0C INT_SOURCE: System Interrupt Status Register (Read Only) Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 SRC_ASLP SRC_FIFO SRC_TRANS SRC_LNDPRT SRC_PULSE SRC_FF_MT — SRC_DRDY AN4071 Sensors Freescale Semiconductor, Inc. 11 7.0 Details for Configuring the MMA8451, 2, 3Q for Transient Detection The registers of importance for configuring the MMA8451, 2, 3Q for transient detection are listed below in Table 11. Table 11. Registers of Importance for Setting up the Transient Detection and Using the HPF Reg Name Definition Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 0E XYZ_DATA_CFG Data Cfg R/W 0 0 0 HPF_OUT 0 0 FS1 FS0 0C INT_SOURCE Interrupt Status SRC_ASLP SRC_FIFO SRC_TRANS SRC_LNDPRT SRC_PULSE SRC_FF_MT_1 SRC_FF_MT_2 SRC_DRDY 0F HP_FILTER_CUTOFF HP Filter Setting R/W — 0 0 0 0 0 SEL1 SEL0 1D TRANSIENT_CFG Transient Config R/W — — — ELE ZTEFE YTEFE XTEFE HPF_BYP 1E TRANSIENT_SRC Transient Source R — EA ZTRANSE Z_Trans_Pol YTRANSE Y_Trans_Pol XTRANSE X_Trans_Pol 1F TRANSIENT_THS Transient Threshold R/W DBCNTM THS6 THS5 THS4 THS3 THS2 THS1 THS0 20 TRANSIENT_COUNT Transient Debounce R/W D7 D6 D5 D4 D3 D2 D1 D0 2D CTRL_REG4 Control Reg4 R/W (Interrupt Enable Map) INT_EN _ASLP INT_EN _FIFO INT_EN _TRANS INT_EN _LNDPRT INT_EN _PULSE INT_EN _FF_MT — INT_EN_DRDY 2E CTRL_REG5 Control Reg5 R/W (Interrupt Config Map) INT_CFG _ASLP INT_CFG_FIFO INT_CFG_TRANS INT_CFG_LNDPRT INT_CFG_PULSE INT_CFG _FF_MT — INT_CFG_DRDY AN4071 12 Sensors Freescale Semiconductor, Inc. 7.1 Example Steps for Configuring Transient Detection Change in X or Y > 0.5g for 50 ms at 100 Hz ODR, Normal mode Step 1: Put the device in Standby Mode: Register 0x2A CTRL_REG1 IIC_RegWrite(0x2A, 0x18); //Set device in 100 Hz ODR, Standby Step 2: Enable X and Y Axes and enable the latch: Register 0x1D Configuration Register IIC_RegWrite (0x1D, 0x16); Enable Latch, Enable X and Enable Y Step 3: Set the Threshold: Register 0x1F Note: Step count is 0.063g per count 0.5g / 0.063g = 7.93. Therefore set the threshold to 8 counts IIC_RegWrite(0x1F, 0x08); Step 4: Set the Debounce Counter for 50 ms: Register 0x20 Note: 100 Hz ODR, therefore 10 ms step sizes IIC_RegWrite(0x20, 0x05); Step 5: Enable Transient Detection Interrupt in the System (CTRL_REG4) IIC_RegWrite(0x2D, 0x20); Step 6: Route the Transient Interrupt to INT 1 hardware pin (CTRL_REG5) IIC_RegWrite(0x2E, 0x20); Step 7: Put the device in Active Mode: Register 0x2A CTRL_REG1 CTRL_REG1_Data = IIC_RegRead(0x2A); //Read out the contents of the register CTRL_REG1_Data| = 0x01; //Change the value in the register to Active Mode. IIC_RegWrite(0x2A, CTRL_REG1_Data); //Write in the updated value to put the device in Active Mode Step 8: Write Interrupt Service Routine Reading the System Interrupt Status and the Transient Status Interrupt void isr_KBI (void) { //clear the interrupt flag CLEAR_KBI_INTERRUPT; //Determine source of interrupt by reading the system interrupt register Int_SourceSystem = IIC_RegRead(0x0C); //Set up Case statement here to service all of the possible interrupts if ((Int_SourceSystem&0x20)==0x20) { //Perform an Action since Transient Flag has been set //Read the Transient to clear system interrupt and Transient Int_SourceTrans = IIC_RegRead(0x1E); //Can parse out the data to perform a specific action based on the //axes or direction that made the condition true } } AN4071 Sensors Freescale Semiconductor, Inc. 13 Related Documentation The MMA845xQ device features and operations are described in a variety of reference manuals, user guides, and application notes. To find the most-current versions of these documents: 1. Go to the Freescale homepage at: http://www.freescale.com/ 2. 3. In the Keyword search box at the top of the page, enter the device number MMA845xQ. In the Refine Your Result pane on the left, click on the Documentation link. How to Reach Us: Home Page: www.freescale.com Web Support: http://www.freescale.com/support USA/Europe or Locations Not Listed: Freescale Semiconductor, Inc. Technical Information Center, EL516 2100 East Elliot Road Tempe, Arizona 85284 1-800-521-6274 or +1-480-768-2130 www.freescale.com/support Europe, Middle East, and Africa: Freescale Halbleiter Deutschland GmbH Technical Information Center Schatzbogen 7 81829 Muenchen, Germany +44 1296 380 456 (English) +46 8 52200080 (English) +49 89 92103 559 (German) +33 1 69 35 48 48 (French) www.freescale.com/support Japan: Freescale Semiconductor Japan Ltd. Headquarters ARCO Tower 15F 1-8-1, Shimo-Meguro, Meguro-ku, Tokyo 153-0064 Japan 0120 191014 or +81 3 5437 9125 [email protected] Asia/Pacific: Freescale Semiconductor China Ltd. Exchange Building 23F No. 118 Jianguo Road Chaoyang District Beijing 100022 China +86 10 5879 8000 [email protected] For Literature Requests Only: Freescale Semiconductor Literature Distribution Center 1-800-441-2447 or +1-303-675-2140 Fax: +1-303-675-2150 [email protected] AN4071 Rev. 1 10/2011 Information in this document is provided solely to enable system and software implementers to use Freescale Semiconductor products. There are no express or implied copyright licenses granted hereunder to design or fabricate any integrated circuits or integrated circuits based on the information in this document. Freescale Semiconductor reserves the right to make changes without further notice to any products herein. Freescale Semiconductor makes no warranty, representation or guarantee regarding the suitability of its products for any particular purpose, nor does Freescale Semiconductor assume any liability arising out of the application or use of any product or circuit, and specifically disclaims any and all liability, including without limitation consequential or incidental damages. “Typical” parameters that may be provided in Freescale Semiconductor data sheets and/or specifications can and do vary in different applications and actual performance may vary over time. All operating parameters, including “Typicals”, must be validated for each customer application by customer’s technical experts. Freescale Semiconductor does not convey any license under its patent rights nor the rights of others. Freescale Semiconductor products are not designed, intended, or authorized for use as components in systems intended for surgical implant into the body, or other applications intended to support or sustain life, or for any other application in which the failure of the Freescale Semiconductor product could create a situation where personal injury or death may occur. Should Buyer purchase or use Freescale Semiconductor products for any such unintended or unauthorized application, Buyer shall indemnify and hold Freescale Semiconductor and its officers, employees, subsidiaries, affiliates, and distributors harmless against all claims, costs, damages, and expenses, and reasonable attorney fees arising out of, directly or indirectly, any claim of personal injury or death associated with such unintended or unauthorized use, even if such claim alleges that Freescale Semiconductor was negligent regarding the design or manufacture of the part. Freescale and the Freescale logo are trademarks of Freescale Semiconductor, Inc., Reg. U.S. Pat. & Tm. Off. The Energy Efficiency Solutions Logo and Xtrinsic are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. © 2011 Freescale Semiconductor, Inc. All rights reserved.