www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 SPI-Datenübertragung temperaturabhängig?


Autor: Wolfgang (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es eine Erklärung für folgendes „Phänomen“ ?
Ein MSP430F1611 ist über SPI mit einem Digitaltemperaturfühler MAX 6630
verbunden.
Die Temperaturwerte werden auf einer Smart Media Speicherkarte
abgespeichert.
Solange der MSP430 bei Zimmertemperatur betrieben wird, erfolgt eine
fehlerlose Messung.
Wenn die gesamte Messanordnung dem Kühlschranktemperaturen ausgesetzt
wird, wird ab einer bestimmten Temperatur (ca. +6°C) immer der gleiche
Wert übertragen. (siehe Beispielkurve)
SPI wurde wie folgt initialisiert:
//für SPI
  P3SEL = 0x0E;      // Setup P3 for SPI mode   P3.1,P3.2,P3.3--> 0E
  P2DIR |= BIT6+BIT7;         // P2.6 + P2.7 SPI Platz 2 + 1
  U0CTL = CHAR + SYNC + MM + SWRST;     // 8-bit, SPI, Master
  U0TCTL = CKPL + SSEL1 + STC; //       // Polarity, SMCLK, 3-wire
  U0BR0 = 0x02;                         // SPI-CLK = SMCLK/2
  U0BR1 = 0x00;
  U0MCTL = 0x00;
  ME1 = USPIE0;             // Module 1 enable für USART0 ME1
  U0CTL &= ~SWRST;          // SPI enable
  IE1 |= URXIE0;            // Receive interrupt enable

Hat jemand eine Erklärung dafür, dass bei „tiefen“ Temperaturen irgend
etwas schief läuft?
Mit freundlichen Grüssen
Wolfgang

Autor: Robert Teufel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls der interne Oszillator benuetzt wird, der ist meines Wissens nach
beim MSP430 stark temperaturabhaengig. Sollte trotzdem nicht schief
gehen, schliesslich ist das Interface synchron.

Robert

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ursache erkannt. Mit SPI hat es nichts zu tun.
Die den Fühlern zugewiesene Wandlungszeit war bei Zimmertemperatur
gerade ausreichend. Sie wurde durch eine for Schleife gebildet.
Durch die Abkühlung des MSP430 änderte sich die Ausführungszeit der
Befehle und damit die Schleifenzeit.
Wie würde ein Programm mit TimerB aussehen, um einstellbare
Verzögerungszeiten abzurufen?

Mit freundlichen Grüssen
Wolfgang

Autor: taxcon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Sieht so aus als wenn Du den Code Composer von TI oder IAR benutzt.
dort gibt es Zahlreiche Beispiele für interruptgesteuerte
Timerroutinen.

Mfg
taxcon

Autor: Wolfgang (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Entweder ist es zu trivial oder ich bin zu dämlich. Ich finde nichts
aus obiger Liste.
Ich möchte eine for Schleife, die eine Pause erzeugt, durch einen Timer
ersetzen.
Wenn ich z.B. schreibe
Pause (500);
dann soll das Programm eine Pause von 500ms einlegen.
Vielleicht kann mir jemand mal auf die Sprünge helfen, welches Beispiel
ich nehmen sollte.
(oder hat ein Programmschnipsel für mich)

Mit freundlichen Grüssen
Wolfgang

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, schon mal mit dem Watchdog als Timer probiert?

MSP430x14x.h bietet einige Voreinstellungen:

/* WDT-interval times [1ms] coded with Bits 0-2 */
/* WDT is clocked by fMCLK (assumed 1MHz) */
#define WDT_MDLY_32 (WDTPW+WDTTMSEL+WDTCNTCL)
/* 32ms interval (default) */
#define WDT_MDLY_8 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0)
/* 8ms " */

void main(void)
{
    WDTCTL = WDT_MDLY_8; /* use Watchdog timer in intervaltimer
    mode, clock source = System clock (1MHz), intervall = 8
    ms */
    IE1 |= WDTIE; // enable watchdog interval-timer interrupt.
    _EINT(); // general interrupt enable
    ...
    for (;;) { // endless loop
  }
}

int count=0;
  void interrupt [WDT_VECTOR] tick(void) {
    /*to do .. */
  }
}
Gruß Marcel

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.