EVE 1.0
accelerometer-mma8652fc.h
Go to the documentation of this file.
1 #ifndef DRIVER_ACCELEROMETER_MMA8652FC_H
2 #define DRIVER_ACCELEROMETER_MMA8652FC_H
3 /**********************************************************************/
4 /**
5  * @file
6  * @brief Driver for accelerometer MMA8652FC
7  *
8  * @author AMO, Jetro as
9  ***********************************************************************/
10 #include <dev/i2c-master.h>
11 #include <sys/clock.h>
12 
13 /**
14  * \defgroup mma8652fc MMA8652FC accelerometer
15  * \ingroup extdrv
16  * \{
17  *
18  * Functionality included:
19  * - Reset accelerometer
20  * All registers in the accelerometer is set to default value
21  * - Enable or disable accelerometer
22  * - Read Acceleration x, y and z value
23  */
24 
25 /***********************************************************************
26  Global definitions
27 ***********************************************************************/
28 /**
29  * accel_gravity_t structure defines the X, Y Z result
30  *
31  */
33 {
34  int16_t GravityX; // Resolution 1m g
35  int16_t GravityY; // Resolution 1m g
36  int16_t GravityZ; // Resolution 1m g
37 };
38 
39 enum accel_odr_t {ODR_800_HZ, ODR_400_HZ, ODR_200_HZ, ODR_100_HZ, ODR_50_HZ, ODR_12_5_HZ, ODR_6_25_HZ, ODR_1_56_HZ};
40 
41 // > 2/ODR + 1 ms (0.5 ms = extra time)
42 #define DELAY_800_HZ MS_TO_TICKS((clock_time_t)((float)2*1000/800 + 1 + (float)0.5) + 1)
43 #define DELAY_400_HZ MS_TO_TICKS((clock_time_t)((float)2*1000/400 + 1 + (float)0.5) + 1)
44 #define DELAY_200_HZ MS_TO_TICKS((clock_time_t)((float)2*1000/200 + 1 + (float)0.5) + 1)
45 #define DELAY_100_HZ MS_TO_TICKS((clock_time_t)((float)2*1000/100 + 1 + (float)0.5) + 1)
46 #define DELAY_50_HZ MS_TO_TICKS((clock_time_t)((float)2*1000/50 + 1 + (float)0.5) + 1)
47 #define DELAY_12_5_HZ MS_TO_TICKS((clock_time_t)((float)2*1000/12.5 + 1 + (float)0.5) + 1)
48 #define DELAY_6_25_HZ MS_TO_TICKS((clock_time_t)((float)2*1000/6.25 + 1 + (float)0.5) + 1)
49 #define DELAY_1_56_HZ MS_TO_TICKS((clock_time_t)((float)2*1000/1.56 + 1 + (float)0.5) + 1)
50 
51 /**
52  * accel_gravity_t structure defines the configuration og the accelerometer
53  *
54  */
56 {
57  const struct i2c_t *I2c;
58  uint8_t SlaveAddress;
59  enum accel_odr_t ODR;
60  clock_time_t Delay; // > 2/ODR + 1 ms Warning: The delay time will be longer for lower ODR
61 };
62 
63 
64 /**********************************************************************/
65 /**
66  * @brief Name: AccelerometerInterruptCb\n
67  * The callback is called in soft irq context by the framework when
68  * a hardware interrupt from the accelerometer is received.
69  *
70  * @param Config Pointer to configuration of accelerometer
71  ***********************************************************************/
72 extern void AccelerometerInterruptCb(const struct accel_config_t *Config);
73 
74 
75 /**********************************************************************/
76 /**
77  * @brief Name: ResetAccelerometer\n
78  * Reset accelerometer, all registers in the accelerometer is set to
79  * default value
80  *
81  * @param Config Pointer to configuration of accelerometer
82  * @return true if OK, else false
83  ***********************************************************************/
84 extern bool ResetAccelerometer(const struct accel_config_t *Config);
85 
86 
87 /**********************************************************************/
88 /**
89  * @brief Name: EnableAccelerometer\n
90  * Output data is not high pass filtered
91  * ±2 g mode, sensitivity = 1024 counts/g
92  * Sleep mode rates 50 Hz
93  * System output data rate (ODR) defined in Board.c
94  *
95  * @param Config Pointer to configuration of accelerometer
96  * @param Enable if true then enable, if false then disable
97  * @return true if OK, else false
98  ***********************************************************************/
99 bool EnableAccelerometer(const struct accel_config_t *Config, bool Enable);
100 
101 
102 /**********************************************************************/
103 /**
104  * @brief Name: ReadAccelerometer\n
105  * Read Acceleration x, y and z value
106  *
107  * @param Config Pointer to configuration of accelerometer
108  * @param Result pointer for the result
109  * @return true if OK and false if error or if data is not ready
110  ***********************************************************************/
111 extern bool ReadAccelerometer(const struct accel_config_t *Config, struct accel_gravity_t *Result);
112 
113 /** \} */
114 
115 #endif // DRIVER_ACCELEROMETER_MMA8652FC_H
116 
bool ResetAccelerometer(const struct accel_config_t *Config)
Name: ResetAccelerometer Reset accelerometer, all registers in the accelerometer is set to default va...
bool EnableAccelerometer(const struct accel_config_t *Config, bool Enable)
Name: EnableAccelerometer Output data is not high pass filtered ±2 g mode, sensitivity = 1024 counts...
bool ReadAccelerometer(const struct accel_config_t *Config, struct accel_gravity_t *Result)
Name: ReadAccelerometer Read Acceleration x, y and z value.
Driver for I2C in nRF52 uC.
void AccelerometerInterruptCb(const struct accel_config_t *Config)
Name: AccelerometerInterruptCb The callback is called in soft irq context by the framework when a har...