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