00001
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 # ifndef _S_ACCELEROMETER_H
00047 # define _S_ACCELEROMETER_H
00048
00049 #include "compiler.h"
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060 #define ACC_SHIFT 2
00061
00062
00063 #define ACC_ZERO (512 >> ACC_SHIFT)
00064 #define ACC_1G (205 >> ACC_SHIFT)
00065 #define ACC_MIN ( ACC_ZERO - ACC_1G )
00066 #define ACC_MAX ( ACC_ZERO + ACC_1G )
00067
00068 #define SIN0 0
00069 #define SIN5 0.087
00070 #define SIN10 0.174
00071 #define SIN15 0.259
00072 #define SIN20 0.342
00073 #define SIN25 0.423
00074 #define SIN30 0.5
00075 #define SIN35 0.574
00076 #define SIN40 0.643
00077 #define SIN45 0.707
00078 #define SIN50 0.766
00079 #define SIN55 0.819
00080 #define SIN60 0.866
00081 #define SIN65 0.906
00082 #define SIN70 0.94
00083 #define SIN75 0.966
00084 #define SIN80 0.985
00085 #define SIN85 0.996
00086 #define SIN90 1
00087
00088 #define ACC_CALIB_X 0
00089 #define ACC_CALIB_Y 0
00090 #define ACC_CALIB_Z 0
00091
00092 #define ACC_ZERO_X ( ACC_ZERO + ACC_CALIB_X )
00093 #define ACC_ZERO_Y ( ACC_ZERO + ACC_CALIB_Y )
00094 #define ACC_ZERO_Z ( ACC_ZERO + ACC_CALIB_Z )
00095
00096 #define ACC_TRIG_X0 (int) ( ACC_ZERO_X - SIN15 * ACC_1G )
00097 #define ACC_TRIG_X1 (int) ( ACC_ZERO_X + SIN15 * ACC_1G )
00098 #define ACC_TRIG_Y0 (int) ( ACC_ZERO_Y - SIN15 * ACC_1G )
00099 #define ACC_TRIG_Y1 (int) ( ACC_ZERO_Y + SIN15 * ACC_1G )
00100 #define ACC_TRIG_Z_TOP (int) ( ACC_ZERO_Z - SIN75 * ACC_1G )
00101 #define ACC_TRIG_Z_BOT (int) ( ACC_ZERO_Z + SIN60 * ACC_1G )
00102
00103 #define ACC_QUIET_LO (int) ( 0.6 * ACC_1G * ACC_1G )
00104 #define ACC_QUIET_HI (int) ( 1.4 * ACC_1G * ACC_1G )
00105
00106 typedef struct { int x ; int y ; int z ; } xyz_t ;
00107
00108 typedef struct {
00109
00110 xyz_t m ;
00111
00112
00113 char left ; char right ; char up ; char down ;
00114 char topdown ;
00115
00116
00117 xyz_t k ; xyz_t ak ; int ak2 ;
00118
00119
00120 xyz_t g ; xyz_t ag ; int ag2 ;
00121 xyz_t s ; int s2 ;
00122
00123 } Avr32_acc_t ;
00124
00125
00126
00127
00128
00132 void accelerometer_init();
00133
00140 void accelerometer_measure(U32 angle, char* buf);
00141
00142 #endif