MSP430 mit sd16 Anfangerproblem

Gast #433140
Lesenswert?

Hallo MSP430 Kenner

ich versuche den A/D Wandeler (SD16) in einem 430f427 zu benutzen. 
Leider bekomme ich nur Werte die keinen Bezug zu dem erwarteten Meßwert 
haben. Die Werte liegen immer oberhalb 60000 egal was ich zu Messen 
versuche. Wenn ich zB den interne gebrückten Kanal Messe bekomme ich 
auch keine 0 Werte sonder 60112 und der wert ist nicht stabil. Ich habe 
mal mein Testprogamm angefügt vielleicht hat jemand ja eine Idee was ich 
verkehrt mache augenblicklich bin ich zimlich ratlos.

************************************************************************ 
**

#include <stdio.h>
#include <intrinsics.h>
#include "paul.h"

#include <io430x42x.h>

static unsigned int ADCresult;

static BOOL  fADEnde = FALSE;

// int SD16 Wandeler
void InitSD16(void)
{
  volatile unsigned int i;                  // Use volatile to prevent 
removal
                                            // by compiler optimization
  __disable_interrupt();

  SD16CTL = SD16REFON + SD16SSEL1 + SD16DIV0 + SD16DIV1;            // 
1.2V ref, SMCLK
  SD16CCTL2 |= SD16SNGL+SD16IE+SD16DF ;            // Single conv, 
enable interrupt
  SD16INCTL2 |= SD16INCH0 +SD16INCH1+ SD16INCH2 + SD16INTDLY1; 
// Select Channel A7
  for (i = 0; i < 0x3600; i++);             // Delay for 1.2V ref 
startup

  __enable_interrupt();
} // InitSD16



int main( void )
{

   // extern 32khz
  FLL_CTL0_bit.XTS_FLL = 0;
  WDTCTL = WDTPW + WDTHOLD; // WD aus
  InitSD16();

  for (;;)
  {
    volatile unsigned int i; // volatile verhindert das wegoptimiert 
wird

    fADEnde = FALSE;
    SD16CCTL2 |= SD16SC;                    // Set bit to start 
conversion
//    __low_power_mode_1();                     // Enter LPM0

    while (!fADEnde){}

    __no_operation();                                 //SET BREAKPOINT 
HERE

    //********

  }
}

#pragma vector=SD16_VECTOR
__interrupt void SD16ISR(void)
{
  switch (SD16IV)
  {
  case 2:                                   // SD16MEM Overflow
    break;
  case 4:                                   // SD16MEM0 IFG
    break;
  case 6:                                   // SD16MEM1 IFG
    break;
  case 8:                                   // SD16MEM2 IFG
    ADCresult = SD16MEM2;                   // Save CH2 results (clears 
IFG)
    fADEnde = TRUE;
    break;
  }

 // __low_power_mode_0();                   // Exit LPM0
}

************************************************************************ 
**

Paul

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren