SPI Frage MSP430

Gast #1143340
Lesenswert?

hallo,
hab da mal eine frage:
ich verwende den msp430f169, hab (so glaube ich)
den µp richtig initialisiert, und jetzt möchte ich
daten auf mosi schreiben.
meine frage: taktet der µp automatisch, sobald ich meine daten
ins register U0TXBUF geschrieben hat (hab die CS leitung zuerst auf LOW 
gesetzt) diese raus, und schaltet dann den takt wieder ab? oder kann ich 
das steuern wie lang der takt zB. noch nachläuft?
besten dank, gruß christoph
Persönliche Seite #1143366
Lesenswert?

> taktet der µp automatisch, sobald ich meine daten
> ins register U0TXBUF geschrieben hat (hab die CS leitung zuerst auf LOW
> gesetzt) diese raus, und schaltet dann den takt wieder ab? oder kann ich
> das steuern wie lang der takt zB. noch nachläuft?

Es sollten exakt soviele Taktimpulse ausgegeben werden, wie Datenbits 
übertragen werden.

Ein "Nachlaufen" darf es nicht geben.
Gast #1143631
Lesenswert?

hab ich mir jetzt alles durchgelesen, müsste eigentlich so hinhauen
ich schick zuerst ein "Command- Byte"
und dann ein von dir angesprochenes "Dummy- Byte" bei mir
FF hex, da es sich nicht mit einem Command überschneidet
(Ok der Sensor schickt 11 Bit aber ich will nur mal schauen ob
er überhaupt etwas schickt)

ahm is der Sensor SCA100T - D02
#1143696
Lesenswert?

Ja, also die 8 Bit Temperatur auslesen sollte so funktionieren. Command 
hinschicken, waren bis rausgeschoben ist (auf RX-Int-Flag warten) und 
dann nochmal Dummy-Byte raus, wieder auf das RX-Flag warten und dann 
steht in URXBUF0 dein Temperatur-Wert.

Bei dem 11-Bit Wert wirds schwieriger. Wenn der Sensor nicht allzu blöd 
ist, kannst du ihm 3 Bytes schicken, und die restlichen 5 Bist ignoriert 
er, dann bekommst du den 11 Bit Wert in 2 Bytes zurück. Mit Pech klappts 
so nicht und du musst die SPI in Software nachbilden.
Gast #1143813
Lesenswert?

hab das mal versucht zu programmieren
müsste also so aussehen, hier les ich die Temperatur ständig
wieder ein....


 P3OUT &= ~BIT0; //CSB für Sensor
 U0TXBUF = 0x08; //Commando für Temp lesen RWTR
 while (URXIFG0 != 1)
 {}; //WARTEN

while(1) //somit liest er ständig die Temperatur
{
  U0TXBUF = 0xAF; //DummyByte
  while(URXIFG0 != 1)
  {};//WARTEN
}

oder muss ich immer zunächst ein Command schreiben
um dann die Daten zu erhalten??
Gast #1149009
Lesenswert?

so müssts doch funktionieren oder, den Senor anzusprechen
um zumindest die Temp. auszulesen?

 while (1)
  {
    P3OUT &= ~BIT7; //enable Sensor

    TXBUF0 = 0x08;                   //Kommando Read Write Temp
    while (!(IFG1 & UTXIFG0));       //USART0-> TX frei?
    while (!(IFG1 & URXIFG0));       //Daten empfangen?
    rec_sensor = RXBUF0;

    TXBUF0 = 0x00;                   //Dummy-Byte senden
    while (!(IFG1 & UTXIFG0));       //USART0--> TX frei?
    while (!(IFG1 & URXIFG0));       //Daten empfangen?
    rec_sensor = RXBUF0;

    P3OUT |= BIT7;
  };

irgendwie bekomm ich da keine "richtige" Antwort vom Sensor
vll hat wer eine Idee?
besten Dank
Gast #1149219
Lesenswert?

ME1 |= USPIE0;                     // Enable USART0 SPI
  UCTL0 |= CHAR + SYNC + MM;          // 8-bit SPI Master
  UTCTL0 |=SSEL0+STC;//               // SMCLK, 3-pin mode
  UBR00 = 0x02;
  UBR10 = 0x00;
  UMCTL0 = 0x00;

und dann halt noch Port3 Select, Direction und POUT....

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren