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


von Markus (Gast)


Angehängte Dateien:

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

von Gerhard Gunzelmann (Gast)


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

von Markus (Gast)


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

von Mike (Gast)


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.

von Gerhard Gunzelmann (Gast)


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

von Markus (Gast)


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

von Gerhard Gunzelmann (Gast)


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

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.