www.mikrocontroller.net

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


Autor: P. Waldmann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
ATMEGA328P          ADXL345
SCL                 SCK
SDA                 MOSI
CS                  PINC4
GND                 GND
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_s...

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: P. Waldmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: P. Waldmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: P. Waldmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du einen PullUp an der CS-Leitung?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.