Kompassmodul über SPI auslesen???

Gast #167023
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
Angehängte Dateien:
Gast #167024
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
Gast #167025
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
Gast #167026
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.
Gast #167027
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
Gast #167028
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
Gast #167029
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.