Moinsen, ich habe mir bei Eb*y folgendes ADXl345 Board geholt. http://www.ebay.de/itm/ADXL345-3-Achs-Sensor-Achssensor-Beschleunigungssensor-Beschleunigung-G-messer-/170999532412?pt=Bauteile&hash=item27d05dcb7c Angesteuert wird der Sensor per SPI im 4-Wire Mode. Wenn ich das dem Datenblatt richtig entnehme, ist der 4-Wire Modus automatisch aktiv. Die Chip-Select Leitung, wird auf dem Board über einen Pullup von 10k auf High gezogen. Mein eigentliches Problem ist, dass der Sensor manchmal die DEVID zurück gibt und manchmal nicht... Was mir beim dem Board aufgefallen ist, das der SDO-Pin über einen 4,7k Widerstand auf Masse gezogen ist, ist das ein Design Fehler?? Im Datenblatt steht, das SDO nur auf Masse gezogen werden muss, wenn 3-Wire Mode genutzt wird. Seh ich das richtig??
>Im Datenblatt steht, das SDO nur auf Masse gezogen werden muss, wenn >3-Wire Mode genutzt wird. Wo steht das im Datenblatt? http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf Aus >Die Chip-Select Leitung, wird auf dem Board über einen Pullup von 10k >auf High gezogen. und >Was mir beim dem Board aufgefallen ist, das der SDO-Pin über einen 4,7k >Widerstand auf Masse gezogen ist, ist das ein Design Fehler?? ergibt sich, dass das ein Vorbereitung für I2C ist. Will man SPI benutzen wird CS einfach mit der CPU verbunden, der PullUp und der PullDown stören da nicht. Und zwischen 3- und 4-WireSPI wird über das DATA_FORMAT-Register umgeschaltet.
Hi erstmal vielen Dank für deine Hilfe Detlef Kunz schrieb: >Im Datenblatt steht, das SDO nur auf Masse gezogen werden muss, wenn >3-Wire Mode genutzt wird. > > Wo steht das im Datenblatt? > http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf When using 3-wire SPI, it is recommended that the SDO pin be either pulled up to VDD I/O or pulled down to GND via a 10 kΩ resistor. S. 15 > Will man SPI benutzen wird CS einfach mit der CPU verbunden, der PullUp > und der PullDown stören da nicht. Nein, da muss ein Pullup hin, weil er sonst im umbestimmten Zustand ist! "The CS pin should always be tied high to V DD I/O or be driven by an external controller because there is no default mode if the CS pin is left unconnected" > Und zwischen 3- und 4-WireSPI wird über das DATA_FORMAT-Register > umgeschaltet. Klar, im Ausgangszustand hat das Register 0x00 also 4-Wire Mode Ich hab mir die MISO,MOSI Signale angeguckt, ich hab damit gerechnet das die Antwort des Sensors nach dem Übetragen der Adresse kommt. Was ich damit sagen will, das die Anfrage vom Master und die Antwort vom Sender zeitgleich kommen...wie geht das den..
Ich vermute das es am Auslesen der Sensordaten liegt: So sieht meien Funktion aus:
1 | void data_read(char data) |
2 | {
|
3 | uint8_t flags = 0x80; |
4 | |
5 | if ((data == DATAX0)||(data == DATAY0)||(data == DATAZ0)) |
6 | flags = 0xC0; |
7 | |
8 | PORTB &= ~(1<<CS); |
9 | |
10 | SPDR = flags | data; |
11 | while(!(SPSR & (1<<SPIF))); //wait for transmission complete |
12 | |
13 | while(!(SPSR & (1<<SPIF))); //wait for reception complete |
14 | |
15 | LowByte = SPDR; |
16 | |
17 | if (flags == 0xC0){ |
18 | _delay_us(32); |
19 | HighByte = SPDR; |
20 | }
|
21 | |
22 | PORTB |= (1<<CS); |
23 | }
|
Liegt der Fehler hier drin?
:
Bearbeitet durch User
Fehlt da nicht was zwischen den beiden while-Schleifen?
1 | SPDR = flags | data; |
2 | while(!(SPSR & (1<<SPIF))); //wait for transmission complete |
3 | |
4 | while(!(SPSR & (1<<SPIF))); //wait for reception complete |
5 | |
6 | LowByte = SPDR; |
Alberto S. schrieb: > Moinsen, > > ich habe mir bei Eb*y folgendes ADXl345 Board geholt. Wenn ich obigen Link anklicke, werden über 10.000€ aufgerufen. Krass!
Ja, das ist Ding ist sein Gewicht in goldgepresstem Latinum wert. ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.