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
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
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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.