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