Forum: Compiler & IDEs SPI-Kommunikation mit Accelerometer (Multibyte)


von P. Waldmann (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

konnte nach längerem Stöbern im Forum zur Kommunikation mit einem 
3-Achs-Accelerometer (ADXL345) keine Hilfe finden, die für mich 
verständlich war, deswegen frag ich mal los:

Ich versuche über einen ATMEGA328P mit dem besagten Accelerometer zu 
kommunizieren über SPI-3-Wire, allerdings bis jetzt ohne Erfolg.

Wenn der Code ausgeführt wird, wird nach dem 42. Testbyte (Zeile 179) 
"8" empfangen und auf einer 7-Segment-Anzeige dargestellt. Ich kann 
leider nicht verstehen, warum gerade "8" empfangen wird, weil ich denke 
durch mein Procedere die DeviceID abzufragen, was ja eigentlich "0xE5" 
ausgeben sollte.

CPOL und CPHA sind, wie im Code im Anhang zu sehen ist, vom Datenblatt 
[1] erwünscht auf 1 gesetzt, bevor der µc mit dem Accelerometer 
"spricht".

Verbunden habe ich die Ports wie folgt:
1
ATMEGA328P          ADXL345
2
SCL                 SCK
3
SDA                 MOSI
4
CS                  PINC4
5
GND                 GND
6
VCC                 VCC

Bin leider noch nicht so erfahren, deswegen bitte Nachsicht mit meiner 
Dummheit.
Vielen Dank schonmal fürs Lesen, mein Code ist im Anhang.

[1] http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf

von Stefan E. (sternst)


Lesenswert?

P. Waldmann schrieb:
> Wenn der Code ausgeführt wird, wird nach dem 42. Testbyte (Zeile 179)
> "8" empfangen und auf einer 7-Segment-Anzeige dargestellt. Ich kann
> leider nicht verstehen, warum gerade "8" empfangen wird, weil ich denke
> durch mein Procedere die DeviceID abzufragen, was ja eigentlich "0xE5"
> ausgeben sollte.
> ...
> Verbunden habe ich die Ports wie folgt:

Wie gedenkst du denn, überhaupt irgendetwas zu empfangen, wenn du gar 
keine "Rückleitung" hast?

von P. Waldmann (Gast)


Lesenswert?

Die Rückleitung ist die gleiche, die auch die Daten reinleitet bei 
3-Wire-SPI, so wie ich das verstanden habe: beim seriellen Datentransfer 
werden erst Daten verschickt über diese Leitung und danach über dieselbe 
Daten empfangen.
Im Datenblatt steht, es geht 4-Wire und 3-Wire SPI mit bis zu 3MHz.

Nun habe ich da eben auch gelesen, dass bei V_DD_I/O nur eine Spannung 
zwischen 0,2 bis 0,8 x V_DD_I/O anliegen darf. Aber ich denke daran kann 
es nicht liegen, da das Gerät auf einem Breakout-Board [1] mit 
eingebauten Widerständen und Entstörkondensator ist.

[1] http://www.sparkfun.com/products/9836

von holger (Gast)


Lesenswert?

>Die Rückleitung ist die gleiche, die auch die Daten reinleitet bei
>3-Wire-SPI,

Da müsstest du dann Software SPI nehmen. Das SPI Modul
vom ATMega kann glaube ich kein 3-Wire SPI. Schließ das Teil
als 4-Wire an.

von P. Waldmann (Gast)


Lesenswert?

> Das SPI Modul vom ATMega kann glaube ich kein 3-Wire SPI.
> Schließ das Teil als 4-Wire an.

Danke für den Tip, holger. Habe nun das Teil neu verlötet und SDO an 
MISO am µc angeschlossen.

Mein Problem ist, dass das AVRStudio beim Programmieren meckert und 
verschiedene Fehler ausgibt. Wenn ich alle Kabel vom Accelerometer zum 
µc verbinde (inkl. MISO), gibt es folgenden Fehler:
> There seems to be a short circuit on the ISP connector.
> The MOSI line(s) appear to be short-circuited.
> The opeartion will be aborted
Manchmal ist bei der Fehlerangabe auch die Rede von SCK statt MOSI.
Wenn MISO nicht angeschlossen ist, gibt es den Fehler beim programmieren 
nicht. Woran könnte das liegen?

Und die "8", die ich vorher empfangen habe, wird auch ohne 
angeschlossenes Accelerometer empfangen. Merkwürdig, da dass Display 
nicht über MISO angeschlossen ist.

von P. Waldmann (Gast)


Lesenswert?

Nochmal zum Kurzschluss:
Ich habe auch überprüft, ob ich unsauber gelötet habe, aber weder mein 
Auge noch mein Multimeter können das bestätigen. Es besteht zumindest 
schonmal keine Verbindung zwicshen SCL/SDA/SDO auf dem Accelerometer 
(alle 3 Ports liegen nebeneinander).

Könnte ich vielleicht noch irgendwo anders messen, um das 
herauszufinden?

von Stefan E. (sternst)


Lesenswert?

Hast du einen PullUp an der CS-Leitung?

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.