Forum: Mikrocontroller und Digitale Elektronik MSP430 F2013 merkwürdiges Verhalten


von Bernd N (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein merkwürdiges Phänomen mit einem MSP430F2013. Die 
Beschaltung sieht folgendermaßen aus:

                      MSP430f2013
                    --------------
          +3,5V  --|DVCC       GND|-- DVSS
       rote LED  --|P1.0      P2.6|-- Enable
            TXD  --|P1.1      P2.7|-- Data
            RXD  --|P1.2      TEST|-- TEST/SBWTCK
         Taster  --|P1.3     RESET|-- RST/NMI/SBWTDIO
        ADC_IN+  --|P1.4      P1.7|-- Clock
  (GND) ADC_IN-  --|P1.5      P1.6|-- grüne LED
                    --------------

Nun zum Phänomen, an RXD wird ein Interrupt ausgelöst und der Eingang 
ist entsprechend konfiguriert. Wenn ich nun den ADC konfiguriere 
(INCH_2) dann löst der Interrupt an RXD nicht mehr aus. Kommentiere ich 
die Zeile SD16AE = SD16AE2 aus dann funktioniert der Interrupt 
einwandfrei.

Was hat bitteschön der INCH_2 an P1.4, P1.5 mit dem Interrupt an P1.2 am 
Hut ???

Auszug Initialisierung:
1
    P1IES |= RXD;                                 // RXD hi/low edge interrupt
2
    P1IFG &= ~ RXD;                               // clear RXD (flag) before enabling interrupt
3
    P1IE |= RXD;                                  // enable RXD interrupt
4
    P1OUT &= ~ LED1 + LED2;                       // LED's Off
5
    P2SEL &= ~ Clock + Data;                      // P2.6, P2.7 as IO
6
    P2DIR |= Clock + Data;                        // Clock, Data als Ausgang setzen
7
8
    SD16_A = 0x61;                                // center 1,2V temp. drift 50ppm/K (Errata, ADC)
9
    SD16CTL = SD16REFON + SD16SSEL_1 + SD16DIV_0; // VREF=1.2V, fM=SMCLK (SD16CTL=REF+Clocksource)
10
    SD16INCTL0 = SD16INCH_2;                      // ADC Input is (SD16INCH_2)
11
    SD16CCTL0 = SD16UNI + SD16OSR_1024;           // OSR=1024, unipolar
12
//    SD16AE = SD16AE2;                             // P1.4 A2+, P1.5 A2- = GND, enable analog Input

Vielen Dank für die Hilfe.

von Stefan (Gast)


Lesenswert?

Mit SD16AE = SD16AE2 wählst du Port P1.2 als ADC Eingang aus.
Für SD16INCH_2 müsstest du aber P1.4 und P1.5 aktivieren:
SD16AE = SD16AE4 + SD16AE4;

von Stefan (Gast)


Lesenswert?

Sorry, Tippfehler in der letzten Zeile.
Zweimal SD16AE4 ist natürlich falsch. Richtig:
SD16AE = SD16AE4 + SD16AE5;

von Bernd N (Gast)


Lesenswert?

Erst einmal vielen Dank, kanns im Moment nicht testen... das wäre der 
Hammer denn wenn ich mit der Konfiguration messe, dann bekomme ich 
korrekte Meßwerte am Eingang.

Kannst Du mir bitte sagen wo du diese Zuordnung im DB gefunden hast ?

Vielen Dank noch mal.

von Stefan (Gast)


Lesenswert?

Die Zuordnung ist im Datenblatt im Abschnitt "APPLICATION INFORMATION, 
MSP430x20x3" auf den Seiten "Port P1 (P1.0 to P1.3) pin functions, 
MSP430x20x3" und "Port P1 (P1.4 to P1.7) pin functions, MSP430x20x3" zu 
finden.

Die ADC Eingänge werden über den ausgewählten ADC Kanal bestimmt, mit 
den SD16AE.x Bits werden die Ausgangstreiber bzw. Eingangschaltungen 
abgeschaltet:
3. Setting the SD16AE.x bit disables the output driver as well as the 
input schmitt trigger to prevent parasitic cross currents when
applying analog signals.

Statt P1.5 mit GND zu verbinden könntest du auch einfach nur das Bit für 
P1.4 setzen und das für P1.5 auf 0 lassen:
4. With SD16AE.x = 0 the negative inputs are connected to VSS if the 
corresponding input is selected.

von Bernd N (Gast)


Lesenswert?

Hallo Stefan,

nochmals vielen Dank für deine Hilfe. Irgendwie habe ich die Seiten 
völlig übersehen :-)

Danke dafür.

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.