Hallo, ich habe folgenden Beschleunigungssensor: http://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=28515 Jetzt möchte ich die Beschleunigung in z-Richtung mit einem ATMega644 über SPI auslesen. MOSI <=> SDI MISO <=> SDO SCK <=> SCK SS <=> CSB VCC <=> UIN VCC <=> UPullup GND <=> GND Dazu habe ich das SPI initialisiert;
1 | DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_SS); |
2 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA); // (1<<CPOL)|(1<<CPHA); BMA020 Datenblatt Seite 23 |
und in einer Endlosschleife sollen die höchsten 8 Bit der Beschleunigung in z-Richtung auf einem Display ausgegeben werden. Dazu muss Adresse 7 ausgelesen werden (DB Seite 9 und 24)
1 | while(1) |
2 | {
|
3 | PORT_SPI &=~ (1<<DD_SS); // Aktiviere Sensor |
4 | |
5 | SPI_MasterTransmit((1<<7)|(0x07)); // Adresse 7 ansprechen (lesen) |
6 | SPI_MasterTransmit(0); // Dummy Daten rüberschicken um Adresse 7 auszulesen |
7 | |
8 | |
9 | itoa(SPDR,string,10); // Gebe empfangenes Byte auf Display aus |
10 | LCDSetCursorPos(0,0); |
11 | LCDWrite(string); |
12 | |
13 | itoa(i++,string,10); // Überprüfe ob while-Schleife durchlaufen wird |
14 | LCDSetCursorPos(1,0); |
15 | LCDWrite(string); |
16 | |
17 | |
18 | PORT_SPI |= (1<<DD_SS); // Deaktiviere Sensor |
19 | |
20 | wait_ms(10); |
21 | }
|
Leider kommt immer wieder nur eine 0 an. Kann mir jemand helfen und sagen wo der Fehler ist? Danke.