Forum: Mikrocontroller und Digitale Elektronik SPI zwischen ARM7 und MS5534


von Andy Osthaus (Gast)


Lesenswert?

Hallo,
Ich versuche eine SPI kommunikation zwischen einem Arm7 (LPC2129
Olimex-Board) und einem MS5534a hin zu bekommen.
Da ich mich zum ersten mal mit SPI beschäftige, tu ich mich da ein
wenig schwer:-(
Der Sensor wird korrekt versorgt und erhält einen 32kHz Takt als Master
Clock.
Nun möchte ich ihn per SPI erst reseten und dann den Messwert
auslesen.

Hier eins meiner Probleme:
Die Reset Signatur ist 21 Bit lang. Wie schicke ich die 21 Bit mit
einem 8Bit Register meines Mikrocontrollers?
Bisher habe ich 3 Byte geschickt, wobei ich das letzte Byte am Ende mit
Nullen aufgefüllt habe.
Kann man das so machen???

Leider erhalte ich keine Antwort von meinem Sensor.
Hier ein kurzer Auszug:

void init_SPI(void)
{
  int CPHA=3;
  int CPOL=4;
  int MSTR=5;

  // setup SCK pin P04
  PCB_PINSEL0 &= ~(3<<8);
  PCB_PINSEL0 |= (1<<8);

  // setup MISO pin P05
  PCB_PINSEL0 &= ~(3<<10);
  PCB_PINSEL0 |= (1<<10);
  // setup MOSI pin P06
  PCB_PINSEL0 &= ~(3<<12);
  PCB_PINSEL0 |= (1<<12);
  // setup SSEL pin P07   // WICHTIG: auch wenn es nicht benutzt
wird...
  PCB_PINSEL0 &= ~(3<<14); // ansonsten läuft die ganze SPI nicht

  PCB_PINSEL0 |= (1<<14);

  SPI0_SPCCR = 4096;

  SPI0_SPCR = (1<<MSTR)|(1<<CPOL)|(1<<CPHA); //Enable SPI, SPI in Master
Mode

}

int main(void)
{
  ....

  init_SPI();

  SPI0_SPDR=170;
  while(!(SPI0_SPSR & (1<<7))) //Wartet bis Byte gesendet wurde
   {
   }

  uart1Puts("\r\n SPIO_SPDR = ");
  ascii2uart1(SPI0_SPDR);

      ......
}

Kann mir von euch jemand helfen???
Gruß Andy

von mthomas (Gast)


Lesenswert?

Externen Pull-Up and Sel versucht? Da war/ist irgend ein Fehler in
diesem Modell betr. des SEL-Pins (vgl. lpc2000 yahoo-group archiv).
(Habe bisher SPI nur am LPC2138 mit MMC/SD genutzt). Evtl. mit Osz.
nachschauen, ob Sel "wackelt". CPOL/CPHA wirklich erforderlich und
passend? Falls wirklich genau 21 bits verlangt werden, hilft mglw.
Software SPI beim Init. Kenne den "MS4434a" aber nicht. "Ganze
Bytes" muessten eigentlich funktionieren, sonst waere die
SPI-Schnittstelle des MS* wirklich etwas "ungluecklich".

von Vikinger (Gast)


Lesenswert?

Hallo,

ich bin mir nicht ganz sicher aber vielleicht verträgt Dein Sensor die
Pause zwischen den einzelnen Bytes nicht. So wie ich das verstanden hab
muss man immer erst warten bis das aktuelle Byte raus ist
(Schieberegister leer) und kann dann erst das nächste Byte der SPI-Unit
übergeben. Dabei müsste mIMHO eine (kurze) Pause auftreten welche Deinem
Sensor eventuell nicht schmeckt. Hast Du diesen Sensor schon mal wo
anders getestet?

Oder ist Dein Problem schon behoben?
Wenn ja dann schreib bitte kurz wie.

Grüße
Erik

von Daniel D. (daniel1976d)


Lesenswert?

Gibt es nicht Schieberegister die nur 7 bit lang sind also 3 x 7 = 21...
Kann ein UART nicht sowas machen?

Sorry bin schon lange raus...

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.