Forum: Mikrocontroller und Digitale Elektronik MSP430F149 ADC immer 0xFFF


von Fabian H. (Firma: keine) (eimer)


Lesenswert?

Hi Leute,

ich hab gerade ein kleines Problem.

Und zwar zeigt mein ADC immer was an obwohl er in der Luft hängt, auch 
wenn ich eine Spannung anleg wandelt der nichts um. Ich kann mir das 
nicht erklären, ich meine vorgestern ging das mit dem Code noch 
einwandfrei.
Vll. sieht einer von euch den Fehler, meiner nicht geschulten Meinung 
nach passt das so.
1
#include  <msp430x14x.h>
2
#include  <math.h>
3
float sum;
4
unsigned int i=0;
5
unsigned int j=0;
6
float RMS;
7
8
void main(void)
9
{
10
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
11
  P4DIR |= 0x0F;                            // P4.0 output
12
  P4OUT=0;                                  //Reset Outputs
13
  CCTL0 = CCIE;                             // CCR0 interrupt enabled
14
  CCR0 = 3;                                 //32768/4 =8192
15
  TACTL = TASSEL_1 + MC_1;                  // ACLK, upmode
16
  //Test  
17
  
18
  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
19
}
20
21
// Timer A0 interrupt service routine
22
#pragma vector=TIMERA0_VECTOR
23
__interrupt void Timer_A (void)
24
{
25
  i++;
26
  P4OUT ^= 0x0F;                            // Toggle P1.0
27
  P6SEL |= 0x03;                            // Enable A/D channel A0
28
  ADC12CTL0 = ADC12ON+SHT0_0+MSC;           // Turn on ADC12, set sampling time
29
  ADC12CTL1 = SHP+CONSEQ_0+CSTARTADD0;      // Use sampling timer, set mode
30
  ADC12IE = 0x03;                           // Enable ADC12IFG.0
31
  ADC12MCTL0 = EOS+INCH_0+SREF_0;
32
  ADC12CTL0 |= ENC;                         // Enable conversions
33
  ADC12CTL0 |= ADC12SC;                     // Start conversion
34
  
35
}
36
37
#pragma vector=ADC12_VECTOR
38
__interrupt void ADC12ISR (void)
39
{
40
    long int temp=0;
41
    long int temp1=0;
42
    temp=(ADC12MEM0);
43
    temp=(ADC12MEM1);
44
    temp1=temp*temp;
45
   ADC12CTL0 &= ~ENC;                         // Enable conversions
46
}

von Jörg S. (joerg-s)


Lesenswert?

>Und zwar zeigt mein ADC immer was an obwohl er in der Luft hängt, auch
>wenn ich eine Spannung anleg wandelt der nichts um.
D.h. der Interrupt löst aus, aber das Ergebnis sieht nicht richtig aus?

von Stefan (Gast)


Lesenswert?

vielleicht so?
1
> #pragma vector=ADC12_VECTOR
2
> __interrupt void ADC12ISR (void)
3
> {
4
>     long int temp=0;
5
>     long int temp1=0;
6
>     temp=(ADC12MEM0);
7
>//     temp=(ADC12MEM1);
8
>     temp1=temp*temp;
9
>    ADC12CTL0 &= ~ENC;                         // Enable conversions
10
> }

Oder steht schon in ADC12MEM0 selbst nix drin, oder wie?

von Fabian H. (Firma: keine) (eimer)


Lesenswert?

ADC12IE = 0x03; <--- Hier liegt der Fehler es muss natürlich 0x0003 
sein, hat ja 16 bit :)

von Stefan (Gast)


Lesenswert?

Fabian Hof schrieb:
> ADC12IE = 0x03; <--- Hier liegt der Fehler es muss natürlich 0x0003

Du willst uns jetzt aber nicht erzählen, dass es nur mit dieser 
Änderung funzt ?
Das kann nämlich nicht sein!

von der don (Gast)


Lesenswert?

Fabian Hof schrieb:
> ADC12IE = 0x03; <--- Hier liegt der Fehler es muss natürlich 0x0003
> sein, hat ja 16 bit :)
>

So ein Quatsch! Das ist genau dasselbe, kannst auch einfach 3 
hinschreiben!

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.