mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kompassmodul über SPI auslesen???


Autor: Markus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend zusammen,

ich bin gerade dabei einen elektronischen Kompass zu bauen. Dazu habe
ich mir das Kompassmodul HMR3300 von Honeywell besorgt. Ich möchte die
Daten per SPI übernehmen. Aber damit hab ich so meine Probleme.
Alles Datenblattlesen bringt mich nicht weiter. Ich verstehe einfach
nicht, wie ich die SPI-Schnittstelle von meinem ATMEGA 16 konfigurieren
muss.
Laut Text im Datenblatt ist SCK Low wenn er nicht aktiv ist. Im
Timing-Diagramm sieht es genau anders aus. Was muss ich für eine Clock
Phase und Clock Polarity einstellen?
Und zu guter letzt, wie läuft die Kommunikation dann ab – muss ich
jedes Mal mit CS auf Low gehen, um das nächste Datum zu empfangen, oder
lasse ich CS konstant auf Low, bis ich meine beiden Bytes empfangen
habe.

Ich hab mir mal die Leitungen mit dem Oszilloskop angeschaut, irgendwie
reagieren die beiden Module (AVR und HMR3300) aufeinander, aber ich
bekomme einfach keine Daten übermittelt.
Ich hoffe jetzt auf Euch, dass Ihr mich vielleicht auf die richtige
Fährte bringt.
Anbei hab ich Euch die wichtigsten Zeilen aus dem Datenblatt
beigelegt.
Ach ja, ich programmiere in C mit Codevision.

Herzlichen Dank im voraus.

Markus

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Markus

als Vertreter des PIC-Lagers kann ich nur allgemein helfen: Hast Du den
takt schon gemessen ? Einer der beiden Teilnehmer am SPI muß einen Takt
erzeugen, und das ist in der regel der uC. Der SPI spuckt aber -
zumindest beim PIC - nur einen Takt aus, wenn der uC was senden soll.
Also evtl mußt Du einen Dummy-Wert (z.B. 00) schicken, damit der uC
einen takt erzeugt und damit sollten dann die Daten kommen.

Gerhard

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gerhard,

so etwas hab ich auch aus dem Datenblatt gelesen. Mein Problem ist nur,
dass das Kompassmodul(KM) ein PseudoMaster ist. Das Kompassmodul erzeugt
den Takt, aber erst wenn ein CS kommt. Doch wenn das KM ein Master ist,
muss der uC Slave sein, der braucht aber dann auch ein CS Signal.
Ich probier jetzt mal ein extra CS-Signal zu erzeugen, uns Steuer damit
uC und KM.
Ich werd da einfach nicht schlau draus.
Wie läuft eigentlich die Kommunikation ab? Wird mit jedem Takt ein Bit
hin und gleichzeitig ein Bit zurückgeschoben? Oder z.B. mit der
steigenden Flanke ein Bit hin und mit der fallenden ein Bit
zurückgeschickt? Oder läuft das ganze doch Byteweise ab?

Rätselhafte Grüsse Markus

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zur Not bastel dir den Kram doch in Software. Kostet dich soundso 4
Pins. Die Implementierung dürfte anhand der Timing-Diagramme simpel
sein, ein Oszi hast du ja zur Kontrolle auch zur Verfügung.

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo markus

die PIC's haben für den Slave-Mode noch einen Eingangs-Pin
(Slave-Select), sowas in der Art werden die Atmels auch haben. In dem
Fall, wo alos der uC SPI-Slave ist, aber die ganze Kommunikation
steuert, könntest Du vielleicht den Pin, über den Du den CS des KM
bedienst gleichzeitig den internen SPI im Slavemodus synchronisieren.
Aber wie gesagt - ich weiß nicht wie Dein atmel das macht bzw gemacht
haben will - sollte aber im Datenblatt stehen. Schau also mal obs da
einen Pin gibt, sowas wie einen Slave-Select oder SPI-Slave-Sync.

Gerhard

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

ich habs jetzt geschafft, dass der uC vom KM Daten richtig empfängt,
und zwar in dem ich den ATmel als Slave konfiguriert habe, und über
einen extra Pin ein CS signal an das Kompassmodul und an den SS-Eingang
vom Atmel ausgebe.
Mit dem ersten Datentransfer sollte aber der ATmel ein Datum simultan
an das KM schicken. Was er auch tut, nur kommt das Datum mindestens
eine Taktflanke zu früh. Hab ich eine Möglichkeit dies zu verändert??

Grüsse Markus

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei den PICs gibts meines Wissens eine Einstellung bei der der Versatz
zwischen Datenein- und Ausgang eingestellt wird. Schau doch mal die
Beschreibung der Bits der SPI-Register-Beschreibung an, vielleicht
steht da ja noch was.

Gerhard

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.