Hallo Community,
in meinem aktuellen Projekt möchte ich mithilfe eines Mikrocontrollers
ATmega88A den Beschleunigungssensor ADXL362 auslesen. Angesteuert wird
er über einen 4 Wire SPI. Die UART-Schnittstelle funktioniert auch
soweit, da ich sie mit einigen Test-Bytes, die ich vorgegeben und
korrekt empfangen habe, getestet habe. Lediglich das schreiben und lesen
des ADXL362 Sensors bereitet mir momentan Schwierigkeiten.
Ich hoffe brauchbare Denkanstöße oder Lösungsvorschläge von euch zu
erhalten.
Ich hänge das Datenblatt und meine Vorstellung von der Lösung an diesen
Beitrag an.
Ich denke den Lösungsansatz auf S.19 den Datenblattes gefunden zu
haben(Read and Write Register Commands).
1 | //Schreibt Daten in ein Register des ADXL362
|
2 | void schreiben_ADXL362(int reg, int daten)
|
3 | {
|
4 | _delay_us(10);
|
5 | PORTC = (PINC & (~(1<<SS2))); //Setze Chipselect auf 0
|
6 | _delay_us(1);
|
7 | SPDR = 0x0A; //Wählt den Schreibe-Modus
|
8 | while(!(SPSR & (1<<SPIF))); //Warte auf Übertragungsende
|
9 | SPDR = reg; //Wählt register, in das geschrieben wird
|
10 | while(!(SPSR & (1<<SPIF))); //Warte auf Übertragungsende
|
11 | SPDR = daten; //Sende zu schreibende Daten
|
12 | while(!(SPSR & (1<<SPIF))); //Warte auf Übertragungsende
|
13 | _delay_us(2);
|
14 | PORTC = (PINC | (1<<SS2)); //Setze Chipselect auf 1
|
15 | }
|
1 | //Liest Daten aus einem Register des ADXL362
|
2 | unsigned short lesen_ADXL362(int reg)
|
3 | {
|
4 | PORTC = (PINC | (1<<SS2)); //Setze Chip-Select auf 1
|
5 | _delay_us(10);
|
6 | PORTC = (PINC & (~(1<<SS2))); //Setze Chip-Select auf 0
|
7 | _delay_us(1);
|
8 | SPDR = 0x0B; //Wählt den Lese-Modus
|
9 | while(!(SPSR & (1<<SPIF))); //Warte auf Übertragungsende
|
10 | SPDR = reg; //Wählt register, in das geschrieben wird
|
11 | while(!(SPSR & (1<<SPIF))); //Warte auf Übertragungsende
|
12 | SPDR = 0x00; //Sende Dummy um Daten zu empfangen
|
13 | while(!(SPSR & (1<<SPIF))); //Warte auf Übertragungsende
|
14 | _delay_us(2);
|
15 | PORTC = (PINC | (1<<SS2)); //Setze Chip-Select auf 1
|
16 | _delay_us(2);
|
17 | return SPDR;
|
18 | }
|