Forum: Mikrocontroller und Digitale Elektronik MSP430 ADC nur an bestimmten Ports ?


von Robert I. (robert_i39)


Lesenswert?

Hallo.

Ich habe jetzt sehr viel gelesen über die ADC im MSP430.

Es ist mir auch gelungen am P1.3 ein Analoges Signal auszuwerten, jedoch 
scheitere ich daran das Signal über den P1.7 auszuwerten.

Habe ich da was übersehen/überlesen ?
Ich benutze gerade einen MSP430G2553.

Hier mal der Code der das Signal am P1.7 lesen sollte:
1
#include  "msp430g2553.h"
2
3
unsigned int ADC_value=0;
4
float Voltage = 0;
5
float band = 3.5/1024;
6
float correction_factor = 1.08545;
7
8
void ConfigureAdc(void);
9
10
void main(void)
11
{
12
  {
13
    WDTCTL = WDTPW + WDTHOLD;    // Stop WDT
14
    BCSCTL1 = CALBC1_1MHZ;      // Set range   DCOCTL = CALDCO_1MHZ;
15
    BCSCTL2 &= ~(DIVS_3);      // SMCLK = DCO = 1MHz
16
    P1SEL |= BIT8;          // ADC input pin P1.7
17
    ConfigureAdc();          // ADC set-up function call
18
    __enable_interrupt();      // Enable interrupts.
19
20
21
    while(1)
22
    {
23
      __delay_cycles(1000);        // Wait for ADC Ref to settle
24
      ADC10CTL0 |= ENC + ADC10SC;      // Sampling and conversion start
25
      __bis_SR_register(CPUOFF + GIE);  // Low Power Mode 0 with interrupts enabled
26
      ADC_value = ADC10MEM;        // Assigns the value held in ADC10MEM to the integer called ADC_value
27
      Voltage = (ADC_value * band)*correction_factor;      //Converting in Volt
28
29
30
    }
31
32
33
  }
34
}
35
36
// ADC10 interrupt service routine
37
#pragma vector=ADC10_VECTOR
38
__interrupt void ADC10_ISR (void)
39
{
40
  __bic_SR_register_on_exit(CPUOFF);        // Return to active mode }
41
}
42
43
// Function containing ADC set-up
44
void ConfigureAdc(void)
45
{
46
47
  ADC10CTL1 = INCH_3+ ADC10DIV_3 ;         // Channel 3, ADC10CLK/3
48
  ADC10CTL0 = SREF_0 + ADC10SHT_3 + ADC10ON + ADC10IE;  // Vcc & Vss as reference, Sample and hold for 64 Clock cycles, ADC on, ADC interrupt enable
49
  ADC10AE0 |= BIT8;                         // ADC input enable P1.7
50
}

Freue mich schon über eure Hilfe
Danke

von Max G. (l0wside) Benutzerseite


Lesenswert?

Schau ins Datenblatt, Table 2. Du musst ADC Channel 7 nehmen.

Max

von Michael P. (protactinium)


Lesenswert?

mach mal so
1
void ConfigureAdc(void)
2
{
3
4
  ADC10CTL1 = INCH_7+ ADC10DIV_3 ;         // Channel 3, ADC10CLK/3
5
  ADC10CTL0 = SREF_0 + ADC10SHT_3 + ADC10ON + ADC10IE;  // Vcc & Vss as reference, Sample and hold for 64 Clock cycles, ADC on, ADC interrupt enable
6
  ADC10AE0 |= BIT7;                         // ADC input enable P1.7
7
}

: Bearbeitet durch User
von Robert I. (robert_i39)


Lesenswert?

Danke euch,

was so ein kleiner Fehler ausmachen kann :)

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.