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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.