Microchip® Advanced Software Framework

s_accelerometer.c File Reference
#include <stdio.h>
#include "s_accelerometer.h"
#include "board.h"
#include "gpio.h"
#include "pm.h"
#include "adc.h"

Data Structures

struct  S_acc_conv_t
 

Functions

static void acc_get_value (volatile avr32_adc_t *adc, unsigned char adc_channel_x, unsigned char adc_channel_y, unsigned char adc_channel_z, xyz_t *val)
 
static char acc_slow ()
 
static void accelerometer_action_x (char *buf)
 
static void accelerometer_action_y (char *buf)
 
void accelerometer_init (void)
 Init the accelerometer driver. More...
 
void accelerometer_measure (U32 angle, char *buf)
 Measures the accelerometer values and converts them to X and Y angles. More...
 
static void xyz_diff (xyz_t p, xyz_t q, xyz_t *r)
 
static int xyz_sumsq (xyz_t p)
 

Variables

Avr32_acc_t acc
 
struct S_acc_conv_t acc_table []
 
volatile avr32_adc_t * adc = (volatile avr32_adc_t *) &AVR32_ADC
 
unsigned char adc_channel_x = 1
 
unsigned char adc_channel_y = 2
 
unsigned char adc_channel_z = 3
 
xyz_t g_angle
 

static void acc_get_value ( volatile avr32_adc_t *  adc,
unsigned char  adc_channel_x,
unsigned char  adc_channel_y,
unsigned char  adc_channel_z,
xyz_t val 
)
static
static char acc_slow ( )
static
static void accelerometer_action_x ( char *  buf)
static
static void accelerometer_action_y ( char *  buf)
static
void accelerometer_init ( void  )

Init the accelerometer driver.

References adc, adc_configure(), and gpio_enable_module_pin().

Referenced by device_full_custom_task_init().

void accelerometer_measure ( U32  angle,
char *  buf 
)

Measures the accelerometer values and converts them to X and Y angles.

Parameters
angleBoolean (0 for X-angle, 1 for Y-angle)
bufchar buffer in which the light sensor value is stored.

References acc_get_value(), accelerometer_action_x(), accelerometer_action_y(), adc, adc_channel_x, adc_channel_y, adc_channel_z, Avr32_acc_t::ak, Avr32_acc_t::ak2, Avr32_acc_t::g, Avr32_acc_t::k, Avr32_acc_t::m, xyz_t::x, xyz_diff(), xyz_sumsq(), xyz_t::y, and xyz_t::z.

Referenced by device_full_custom_task().

static void xyz_diff ( xyz_t  p,
xyz_t  q,
xyz_t r 
)
static

References xyz_t::x, xyz_t::y, and xyz_t::z.

Referenced by accelerometer_measure().

static int xyz_sumsq ( xyz_t  p)
static

References xyz_t::x, xyz_t::y, and xyz_t::z.

Referenced by accelerometer_measure().

Initial value:
= {
.m = { .x=0 , .y=0 , .z=0 } ,
.left = 0 ,
.right = 0 ,
.up = 0 ,
.down = 0 ,
.topdown = 0 ,
.k = { .x=ACC_ZERO_X , .y=ACC_ZERO_Y , .z=ACC_ZERO_Z } ,
.ak = { .x=0 , .y=0 , .z=0 } ,
.ak2 = 0 ,
.g = { .x=ACC_ZERO_X , .y=ACC_ZERO_Y , .z=ACC_MIN } ,
.ag = { .x=0 , .y=0 , .z=0 } ,
.ag2 = 0 ,
.s = { .x=0 , .y=0 , .z=0 } ,
.s2 = 0
}
#define ACC_ZERO_Z
Definition: s_accelerometer.h:87
#define ACC_ZERO_X
Definition: s_accelerometer.h:85
#define ACC_ZERO_Y
Definition: s_accelerometer.h:86
#define ACC_MIN
Definition: s_accelerometer.h:58
struct S_acc_conv_t acc_table[]
Initial value:
=
{ { .sin=(U16)(SIN90 * ACC_1G), .angle=90}
, { .sin=(U16)(SIN85 * ACC_1G), .angle=85}
, { .sin=(U16)(SIN80 * ACC_1G), .angle=80}
, { .sin=(U16)(SIN75 * ACC_1G), .angle=75}
, { .sin=(U16)(SIN70 * ACC_1G), .angle=70}
, { .sin=(U16)(SIN65 * ACC_1G), .angle=65}
, { .sin=(U16)(SIN60 * ACC_1G), .angle=60}
, { .sin=(U16)(SIN55 * ACC_1G), .angle=55}
, { .sin=(U16)(SIN50 * ACC_1G), .angle=50}
, { .sin=(U16)(SIN45 * ACC_1G), .angle=45}
, { .sin=(U16)(SIN40 * ACC_1G), .angle=40}
, { .sin=(U16)(SIN35 * ACC_1G), .angle=35}
, { .sin=(U16)(SIN30 * ACC_1G), .angle=30}
, { .sin=(U16)(SIN25 * ACC_1G), .angle=25}
, { .sin=(U16)(SIN20 * ACC_1G), .angle=20}
, { .sin=(U16)(SIN15 * ACC_1G), .angle=15}
, { .sin=(U16)(SIN10 * ACC_1G), .angle=10}
, { .sin=(U16)(SIN5 * ACC_1G), .angle=5 }
, { .sin=(U16)(SIN0 * ACC_1G), .angle=0 }
}
#define SIN5
Definition: s_accelerometer.h:62
#define SIN15
Definition: s_accelerometer.h:64
#define SIN25
Definition: s_accelerometer.h:66
#define SIN60
Definition: s_accelerometer.h:73
#define ACC_1G
Definition: s_accelerometer.h:57
#define SIN30
Definition: s_accelerometer.h:67
#define SIN0
Definition: s_accelerometer.h:61
#define SIN40
Definition: s_accelerometer.h:69
#define SIN75
Definition: s_accelerometer.h:76
#define SIN50
Definition: s_accelerometer.h:71
uint16_t U16
16-bit unsigned integer.
Definition: compiler.h:214
#define SIN20
Definition: s_accelerometer.h:65
#define SIN55
Definition: s_accelerometer.h:72
#define SIN45
Definition: s_accelerometer.h:70
#define SIN80
Definition: s_accelerometer.h:77
#define SIN90
Definition: s_accelerometer.h:79
#define SIN35
Definition: s_accelerometer.h:68
#define SIN65
Definition: s_accelerometer.h:74
#define SIN70
Definition: s_accelerometer.h:75
#define SIN85
Definition: s_accelerometer.h:78
#define SIN10
Definition: s_accelerometer.h:63

Referenced by accelerometer_action_x(), and accelerometer_action_y().

volatile avr32_adc_t* adc = (volatile avr32_adc_t *) &AVR32_ADC
unsigned char adc_channel_x = 1

Referenced by accelerometer_measure().

unsigned char adc_channel_y = 2

Referenced by accelerometer_measure().

unsigned char adc_channel_z = 3

Referenced by accelerometer_measure().

xyz_t g_angle