Forum: Mikrocontroller und Digitale Elektronik MSP430 ADC Spannung am PIN?


von paul_k (Gast)


Lesenswert?

Hallo,
ich folgenden Beispielcode von TI auf meinen G2553 geladen:

•
1
//******************************************************************************
2
//  MSP430G2x33/G2x53 Demo - ADC10, Sample A1, Signed, Set P1.0 if > 0.5*AVcc
3
//
4
//  Description: A single sample is made on A1 with SIGNED reference to AVcc.
5
//  Software sets ADC10SC to start sample and conversion - ADC10SC
6
//  automatically cleared at EOC. ADC10 internal oscillator times sample (16x)
7
//  and conversion. In Mainloop MSP430 waits in LPM0 to save power until ADC10
8
//  conversion complete, ADC10_ISR will force exit from any LPMx in Mainloop on
9
//  reti. If A1 > 0.5*AVcc, P1.0 set, else reset.
10
//
11
//                MSP430G2x33/G2x53
12
//             -----------------
13
//         /|\|              XIN|-
14
//          | |                 |
15
//          --|RST          XOUT|-
16
//            |                 |
17
//        >---|A1/P.1           |
18
//
19
//  D. Dang
20
//  Texas Instruments Inc.
21
//  December 2010
22
//   Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
23
//******************************************************************************
24
#include  "msp430g2553.h"
25
volatile long tempADC;
26
27
void main(void)
28
{
29
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
30
  ADC10CTL1 = ADC10DF + INCH_1;             // Conversion code singed format, input A1
31
  ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled
32
  ADC10AE0 |= 0x02;                         // P1.0 ADC option select
33
  P1DIR |= 0x01;                            // Set P1.0 to output direction
34
35
  for (;;)
36
  {
37
    ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
38
    __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
39
40
    if ((int)ADC10MEM  < 0)
41
      P1OUT &= ~0x01;                       // Clear P1.0 LED off
42
    else
43
      P1OUT |= 0x01;                        // Set P1.0 LED on
44
  }
45
}
46
47
// ADC10 interrupt service routine
48
#pragma vector=ADC10_VECTOR
49
__interrupt void ADC10_ISR (void)
50
{
51
  __bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit from 0(SR)
52
}

Jetzt ist es so das ich 3,6V am Pin 1.1 (ADC Eingang) messe, auch wenn 
nichts angeschlossen ist. Ist das normal? Kann ich trotzdem eine 
Spannung anlegen ohne den Controller zu zerstören?

Gruss Paul

von Karl H. (kbuchegg)


Lesenswert?

paul_k schrieb:

> Jetzt ist es so das ich 3,6V am Pin 1.1 (ADC Eingang) messe, auch wenn
> nichts angeschlossen ist.

Du meinst extern, mit einem Voltmeter?


Grundsätzlich:
Ein Eingangspin an dem nichts angeschlossen ist, wirkt wie eine Antenne. 
Ob und wieviel sich der aus der Umgebung einfängt (dein Handy strahlt, 
deine 230V in der Wand strahlen, der Fernsehsender in ein paar km 
Entfernung strahlt, die Waschmaschine erzeugt elektromagnetische Felder, 
der Staubsauger, etc. etc.) ist so nicht vorhersehbar.
Eingang ist Eingang. Ohne irgendwelche zusätzliche Beschaltung ist es 
sinnfrei, dem irgendeinen Default-Pegel zuzuordnen. Er hat ganz einfach 
keinen, zumindest keinen definierten.

> nichts angeschlossen ist. Ist das normal? Kann ich trotzdem eine
> Spannung anlegen ohne den Controller zu zerstören?

du kannst zb mal probieren, den Eingang mit einem Widerstand (größer 
10k) den Eingang nach Masse zu verbinden. Danach müsste schlagartig Ruhe 
sein. Sowohl dein Voltmeter als auch das Programm müssten 0 anzeigen. 
Und 10k sind groß genug, dass da nichts zerstört wird, wenn du einen 
Programmfehler hast.

Wenn das klappt, dann kannst du wohl auch bedenkenlos eine Spannung 
drauf geben. Du kannst ja für den ersten Anlauf dir eine variable 
Spannung mit einem 10k Poti machen, das du als Spannungsteiler benutzt 
und das Poti mal auf Mittelwert einstellen. Dein ADC Messwert sollte 
dann auch ein mittlerer Wert sein und wenn du am Poti drehst, sollte 
sich der Wert verändern. Wenn dem so ist, dann ist wohl alles paletti.

von paul_k (Gast)


Lesenswert?

Ja die Spannung wurde mit einem Multimeter gemesse.
Wenn ich an Pin 1.1 einen 10k Pull-down Widerstand verwende, dann fällt 
die Spannung von 3,6V auf 1,2V ab.
Normal ist das nicht oder? Eigentlich sollte der ADC Eingang doch 
relativ hochohmig sein.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist das Problem:

  ADC10AE0 |= 0x02;        // P1.0 ADC option select

Hier wird nicht P1.0 als ADC selektiert, sondern P1.1

Siehe slac144i.pdf, Seite 570.

von paul_k (Gast)


Lesenswert?

Der Kommentar im TI Beispiel ist falsch.

P1.0 ist ja die rote Led auf dem Launchpad und P1.1 soll der ADC Eingang 
sein. Und am Pin 1.1 mess ich die 3,6V.

von Qwerty (Gast)


Lesenswert?

Des Rätsels Lösung ist relativ einfach. An P1.1 vom Launchpad hängt noch 
TXD. Einfach den entsprechenden Jumper von J3 ziehen, dann ist das 
weg...

von paul_k (Gast)


Lesenswert?

ja das war der Fehler.
Danke!

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.