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