Forum: Mikrocontroller und Digitale Elektronik MSP430 Probleme mit SPI/Temp Sensor


von Michael (Gast)


Lesenswert?

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) */

von szimmi (Gast)


Lesenswert?

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...

von szimmi (Gast)


Angehängte Dateien:

Lesenswert?

Oerks. Anhang fehlte...

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.