ADXL345 Pull-Down Widerstand am SDO-Pin im SPI-Modus??

OP (Firma: Student) #3455024
Lesenswert?

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??
#3455066
Lesenswert?

>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.
OP (Firma: Student) #3455079
Lesenswert?

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..
OP (Firma: Student) #3455112
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren