1 | //Pins
|
2 | # define SENS_CLK_PIN (13) // 13=PB5 CLK
|
3 | # define SENS_MISO_PIN (12) // 12=PB4 MISO
|
4 | # define SENS_MOSI_PIN (11) // 11=PB3 MOSI
|
5 |
|
6 | # define SENS_CS_PIN ( 0)
|
7 | # define SENS_CS_ENABLE() PORTD |= (1<<0) // PB2->1
|
8 | # define SENS_CS_DISABLE() PORTD &= ~(1<<0) // PB2->0
|
9 |
|
10 |
|
11 | char tmp[1];
|
12 |
|
13 |
|
14 | void Sens_writeSPI(uint8_t data);
|
15 | uint8_t Sens_readSPI(uint8_t data);
|
16 | void RESET(void);
|
17 |
|
18 |
|
19 | uint8_t Sens_readSPI(uint8_t data)
|
20 | {
|
21 | PORTD ^= ( 1 << PIND1 ); // TOGGLE LED---------------------------------------------------------------
|
22 |
|
23 | SPDR = data; //read-command
|
24 | while(!(SPSR & (1<<SPIF)));
|
25 | return SPDR;
|
26 | }
|
27 |
|
28 |
|
29 | void Sens_writeSPI(uint8_t data)
|
30 | {
|
31 | SPDR = data; //write-command
|
32 | while(!(SPSR & (1<<SPIF)));
|
33 | return;
|
34 | }
|
35 |
|
36 |
|
37 | //------------ PROGRAMMABLAUF ----------
|
38 |
|
39 | void loop()
|
40 | {
|
41 | while(1)
|
42 | {
|
43 | uint8_t temp[23];
|
44 |
|
45 | // Register auslesen
|
46 | SPCR = SPCR | (1<<CPHA);
|
47 |
|
48 | PORTD &=~ (1<<PIND0); //CS-Sensor Enable
|
49 |
|
50 | Sens_writeSPI(0x00 | 0x80); // Erstes Register ab dem gelesen wird. rw-bit = 1
|
51 |
|
52 | temp[0] = Sens_readSPI(0x00); // Datenregister des Sensors
|
53 | temp[1] = Sens_readSPI(0x01); // Datenregister des Sensors
|
54 | temp[2] = Sens_readSPI(0x02); // Datenregister des Sensors
|
55 | temp[3] = Sens_readSPI(0x03); // Datenregister des Sensors
|
56 | temp[4] = Sens_readSPI(0x04); // Datenregister des Sensors
|
57 | temp[5] = Sens_readSPI(0x05); // Datenregister des Sensors
|
58 | temp[6] = Sens_readSPI(0x06); // Datenregister des Sensors
|
59 | temp[7] = Sens_readSPI(0x07); // Datenregister des Sensors
|
60 | temp[8] = Sens_readSPI(0x08); // Datenregister des Sensors
|
61 | temp[9] = Sens_readSPI(0x09); // Datenregister des Sensors
|
62 | temp[10] = Sens_readSPI(0x0a); // Datenregister des Sensors
|
63 | temp[11] = Sens_readSPI(0x0b); // Datenregister des Sensors
|
64 | temp[12] = Sens_readSPI(0x0c); // Datenregister des Sensors
|
65 | temp[13] = Sens_readSPI(0x0d); // Datenregister des Sensors
|
66 | temp[14] = Sens_readSPI(0x0e); // Datenregister des Sensors
|
67 | temp[15] = Sens_readSPI(0x0f); // Datenregister des Sensors
|
68 | temp[16] = Sens_readSPI(0x10); // Datenregister des Sensors
|
69 | temp[17] = Sens_readSPI(0x11); // Datenregister des Sensors
|
70 | temp[18] = Sens_readSPI(0x12); // Datenregister des Sensors
|
71 | temp[19] = Sens_readSPI(0x13); // Datenregister des Sensors
|
72 | temp[20] = Sens_readSPI(0x14); // Datenregister des Sensors
|
73 | temp[21] = Sens_readSPI(0x15); // Datenregister des Sensors
|
74 |
|
75 | PORTD |= (1<<PIND0); //CS-Sensor Disable
|
76 | delay(1);
|
77 |
|
78 | SPCR = SPCR & ~(1<<CPHA);
|
79 |
|
80 | PORTD ^= ( 1 << PIND2 ); // TOGGLE LED---------------------------------------------------------------
|
81 | }
|
82 |
|
83 | }
|
84 |
|
85 |
|
86 | void RESET(void)
|
87 | {
|
88 | PORTD &=~ (1<<PIND0); //CS-Sensor Enable
|
89 | delay(10);
|
90 | Sens_writeSPI(0x0A | 0x2);
|
91 | delay(100);
|
92 | PORTD |= (1<<PIND0);
|
93 | }
|
94 |
|
95 | void setup()
|
96 | {
|
97 |
|
98 | DDRD |= (1 << PIND1); //OUTPUT FÜR LED1
|
99 | DDRD |= (1 << PIND2); //OUTPUT FÜR LED2
|
100 |
|
101 | DDRD |= (1 << PIND0); //CS-Sensor
|
102 |
|
103 | DDRB |= (1 << PINB2); // /SS - OUTPUT
|
104 | DDRB |= (1 << PINB3); // MOSI - OUTPUT
|
105 | DDRB &=~ (1 << PINB4); // MISO - INPUT
|
106 | PORTB |= (1 << PINB4);
|
107 | DDRB |= (1 << PINB5); // SKC - OUTPUT
|
108 |
|
109 | // SPI Clock 16MHz/2
|
110 | SPCR = (1<<SPE) | (1<<MSTR); //enable SPI, Master, clk=Fcpu/4
|
111 | SPSR = (1<<SPI2X); //clk=Fcpu*2
|
112 |
|
113 | //INIT SENSOR
|
114 | PORTD &=~ (1<<PIND0); //CS-Sensor Enable
|
115 | delay(10);
|
116 | Sens_writeSPI(0x15 & 0x7F); // Erstes Register ab dem gelesen wird. rw-bit = 1
|
117 | Sens_writeSPI(0b10000000);
|
118 | delay(100);
|
119 | PORTD |= (1<<PIND0); //CS-Sensor Disable
|
120 |
|
121 | }
|