www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI zwischen ARM7 und MS5534


Autor: Andy Osthaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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".

Autor: Vikinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Duesentrieb (daniel1976d)
Datum:

Bewertung
0 lesenswert
nicht 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...

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.