1 | /*=========================================================================
|
2 | ADXL
|
3 | -----------------------------------------------------------------------*/
|
4 | #define ADXL_ADDRESSW 0xA6 //ADXL Adresse Schreiben
|
5 | #define ADXL_ADDRESSR 0xA7 //ADXL Adresse Lesen
|
6 | #define ADXL_DEVID 0x00 // Device ID
|
7 | #define ADXL_DATA_FORMAT 0x31 // Auflösung
|
8 | #define ADXL_BW_RATE 0x2c // Bandbreite
|
9 | #define ADXL_POWER_CTL 0x2d // Power Control
|
10 | #define ADXL_ACC_Data 0x32 // Erstes ACCL Register
|
11 |
|
12 | typedef enum
|
13 | {
|
14 | ADXL_Enable_Measure = 0x08, // Messung einschalten
|
15 | ADXL_sleep = 0x04, // Sleep Modus
|
16 | ADXL_DATARATE_100_HZ = 0b1010, // 50Hz
|
17 | ADXL_DATARATE_50_HZ = 0b1001, // 25Hz
|
18 | ADXL_DATARATE_25_HZ = 0b1000, // 12.5Hz
|
19 | ADXL_DATARATE_12_5_HZ = 0b0111, // 6.25Hz
|
20 | ADXL_RANGE_16_G = 0b11 // +/- 16g
|
21 | } defs;
|
22 |
|
23 | //Variablen
|
24 |
|
25 | int8_t adxlvalue[5];
|
26 | int16_t x;
|
27 | int16_t y;
|
28 | int16_t z;
|
29 | int i;
|
30 |
|
31 |
|
32 | void ADXL_Init(void)
|
33 | {
|
34 | i2c_init();
|
35 |
|
36 | //Auflösung setzen
|
37 | i2c_start();
|
38 | i2c_write(ADXL_ADDRESSW);
|
39 | i2c_write(ADXL_DATA_FORMAT);
|
40 | i2c_write(ADXL_RANGE_16_G);
|
41 | i2c_stop();
|
42 |
|
43 | //Bandbreite setzen
|
44 | i2c_start();
|
45 | i2c_write(ADXL_ADDRESSW);
|
46 | i2c_write(ADXL_BW_RATE);
|
47 | i2c_write(ADXL_DATARATE_12_5_HZ);
|
48 | i2c_stop();
|
49 |
|
50 | // Messung starten
|
51 | i2c_start();
|
52 | i2c_write(ADXL_ADDRESSW);
|
53 | i2c_write(ADXL_POWER_CTL);
|
54 | i2c_write(ADXL_Enable_Measure);
|
55 | //i2c_write(ADXL_sleep);
|
56 | i2c_stop();
|
57 |
|
58 | }
|
59 |
|
60 | int main(void)
|
61 | {
|
62 | ADXL_Init();
|
63 | uart_init();
|
64 | uart_puts("Init");
|
65 | while (1) {
|
66 | i2c_start();
|
67 | i2c_write(ADXL_ADDRESSW);
|
68 | i2c_write(ADXL_ACC_Data);
|
69 | i2c_stop();
|
70 | i2c_start();
|
71 | i2c_write(ADXL_ADDRESSR);
|
72 |
|
73 | adxlvalue[0]=i2c_read(1);
|
74 | adxlvalue[1]=i2c_read(1);
|
75 | adxlvalue[2]=i2c_read(1);
|
76 | adxlvalue[3]=i2c_read(1);
|
77 | adxlvalue[4]=i2c_read(1);
|
78 | adxlvalue[5]=i2c_read(0);
|
79 | i2c_stop();
|
80 | x = (int16_t)((((int)adxlvalue[1]) << 8) | adxlvalue[0]);
|
81 | y = (int16_t)((((int)adxlvalue[3]) << 8) | adxlvalue[2]);
|
82 | z = (int16_t)((((int)adxlvalue[5]) << 8) | adxlvalue[4]);
|
83 |
|
84 | uart_puts("X=", (char) x);
|
85 | uart_puts(" Y=", (char) y);
|
86 | uart_puts(" Z=", (char) z);
|
87 | uart_puts("\r\n");
|
88 |
|
89 | _delay_ms(2000);
|
90 | }
|
91 |
|
92 | }
|