Hallo alle zusammen, ich beschäftige mich gerade mit SPI an meinem MSP. Es ist ein F149. Ich versuche damit gerade einen Temperatursensor auszulesen, den ich hier noch als Sample von TI liegen hatte. Das ist ein TMP122 von Texas Instruments. Leider habe ich das bisher noch nicht ans Laufen gebracht. Ich habe mir mal die Beispiel-Codes von TI angeschaut usw. aber ich komme trotzdem irgendwie nicht weiter. Ich kann den Sensor nicht auslesen. Ich hoffe, dass mir hier vielleicht jemand weiterhelfen kann. Ich habe unten mal meinen bisherigen Code eingefügt. Wäre klasse, wenn da mal jemand drüber schauen und mir auf die Sprünge helfen könnte. Grüße Michael Ich habe hier einmal den Code zur Initialisierung der SPI: void SPIInit(void) { U0CTL = CHAR + SYNC + MM; // 8-bit, SPI, Master U0TCTL = CKPH + SSEL1 + SSEL0 + STC; // Polarity, ACLK, 3-wire U0BR0 = 0x002; // SPICLK = ACLK/2 U0BR1 = 0x000; U0MCTL = 0x000; // Not Used for SPI-Mode->0x000 ME1 = USPIE0; // Module enable IE1 |= URXIE0; // Recieve interrupt enable _BIS_SR(GIE); // Enable interrupts } Dann habe ich hier noch die ISR: #pragma vector=USART0RX_VECTOR __interrupt void SPI0_RX (void) { while(U0RXBUF) { received[i++]= U0RXBUF; } P2OUT |= 0x80; // Port 2.7 auf High ( CS ) ready= 1; } und vielleicht noch die -main-: void main(void) { PortInit(); // Initialisierung der Ports SPIInit(); // SPI-Schnittstelle initialisieren P2OUT |= 0x80; // Port 2.7 auf High setzen ( CS ) LCDInit(); // LCD initialisieren ... LCDClear(); // ... und dann noch löschen und Cursor an Anfang // zurück setzen LCDOuts(" Temperatur TMP122: "); // Text auf Display ausgeben while(1) { if(ready == 1) // Wenn etwas empfangen wurde { ThirdLine(); // In die dritte Zeile des Displays springen SpaceOut(8); // Leerzeichen auf dem Display ausgeben LCDOuts(ausg_str); // Sensordaten auf dem Display ausgeben ready= 0; i= 0; } else P2OUT &= ~0x80; // Port 2.7 auf Low legen ( CS ) }/* while(1) */ }/* void main(void) */
Hmmm, sieht irgendwie etwas von hinten durchs Knie aus. Grundübel ist wohl, dass Du auf den Empfang wartest, aber das Senden nicht anstösst (TXBUF0 = ...). Da Du der Master bist, musst Du den Clock vorgeben, was Dir der Controller mit dem Beschreiben des TXBUF0 abnimmt. Danach clockt die SPI die Antwort des Sensors in den Controller und danach steht das Ergebnis im U0RXBUF-Buffer. Ich habe mal das entsprechende Beispiel angehängt. Da wird das Ganze deutlich, denke ich...
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.