Forum: Mikrocontroller und Digitale Elektronik ADXL345 Pull-Down Widerstand am SDO-Pin im SPI-Modus??


von Alberto S. (Firma: Student) (alberto)


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??

von Detlef K. (adenin)


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.

von Alberto S. (Firma: Student) (alberto)


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..

von Alberto S. (Firma: Student) (alberto)


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?

: Bearbeitet durch User
von Detlef K. (adenin)


Lesenswert?

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;

von Pete K. (pete77)


Lesenswert?

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!

von Detlef K. (adenin)


Lesenswert?

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
Noch kein Account? Hier anmelden.