MSP 430 C-Programm verstehen

OP #265918
Lesenswert?

Hi Leute,
ich bin dabei überhaupt mal zu versuchen den Microcontroller zu
verstehen.
Ich betrete dabei völliges Neugebiet für mich.

Zu meiner Hardware:
Ich habe den MSP 430 mit FG439. Eine fertige Schaltung mit dem Namen
MSP 430 Watch and Altimeter von TI.
Ich hoffe diese Angaben reichen.

Nun habe ich als erstes versucht das C Programm der blinkenden LED zu
verstehen:
#include  <msp430xG43x.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
  FLL_CTL0 |= XCAP18PF;                 // Set load capacitance
  ADC12CTL0 = SHT0_2 + ADC12ON;         // Set sampling time, turn on
ADC12
  ADC12CTL1 = SHP;                      // Use sampling timer
  ADC12IE = 0x01;                       // Enable interrupt
  ADC12MCTL0 = INCH_8;                  // Channel A8 (VERef+)
  ADC12CTL0 |= ENC;                     // Conversion enabled
  P1DIR |= 0x01;                        // P1.0 output

  for (;;)
  {
    ADC12CTL0 |= ADC12SC;               // Sampling open
    _BIS_SR(CPUOFF + GIE);              // LPM0, ADC12_ISR will force
exit
  }
}

// ADC12 interrupt service routine
#pragma vector=ADC_VECTOR
__interrupt void ADC12_ISR (void)
{
    if (ADC12MEM0 < 0x7FF)
      P1OUT &= ~0x01;                   // Clear P1.0 LED off
    else
      P1OUT |= 0x01;                    // Set P1.0 LED on
    _BIC_SR_IRQ(CPUOFF);                // Clear CPUOFF bit from 0(SR)
}

Nun kann ich zwar einiges mit C Codes anfangen, da ich aber keinen Plan
vom Microcontroller habe, komme ich nicht recht weiter.

Mein Ziel ist es einen AD-Wandler und DA-Wandler zu gebrachen und die
Einlesewerte natürlich auch zu speichern.

Nur bewege ich mich mit all den Datenblättern von TI und sonstigen pdfs
aus dem Netz völlig im Dunkeln.

Es wäre toll wenn mir jmd dabei helfen könnte die AD und DA Wandlung
und überhaupt den Controller zu verstehen.

Danke an alle die Antworten!
Gruss Marcus
Angehängte Dateien:
Gast #265920
Lesenswert?

Das "Das große MSP 430 Praxisbuch" kannst du getrost in die Tonne
kloppen (es sei denn, du kannst nicht englisch lesen u. verstehen), in
den Datenblättern und AppNotes steht es Verständlicher und
ausführlicher.

In der Zeile

  ADC12IE = 0x01;                       // Enable interrupt

schaltest du den Interrupt für den ADC Kanal A0 ein, mit

  ADC12MCTL0 = INCH_8;                  // Channel A8 (VERef+)

activierst du aber den Kanal A8.
Für Kanal A0 ist zwar der Interrupt eingeschaltet, aber der Kanal ist
nicht aktiviert, somit wird nie ein Interrupt ausgelöst.
Der Kanal A8 ist zwar aktiviert, aber der Interrupt wurde nicht
eingeschaltet. Somit löst dieser auch niemals einen Interrupt aus.

Abgesehen davon müssen die Portleitungen zunächst mit PxSEL als
ADC-Eingang konfiguriert werden...
OP #265921
Lesenswert?

Hi Leute, danke für die Antworten.
Also das Buch hole ich mir vielleicht noch, bekommen aber auch noch ein
anderes Buch über den Mikrocontroller. Nun war das von mir vielleicht
ungeschickt einen C-Code oben einfach reinzustellen. Also was ich genau
möchte: Eine Eingabe der Messwerte einer Verstärkerschaltung, die ich
noch basteln muss, über einen AD Wandler. So und da komm ich ins
Rotieren.
Ich möchte mittels zwei Messelektroden eine Imedanz messen.
Hierzu habe ich nun besagten Mikrocontroller. Mein Problem liegt aber
eher darin, dass ich nicht weiß wie ich den Controller mittels C-Code
richtig ansteuere. Der Mikrocontroller hat meines Wissens einen 16 Bit
AD Converter und hierzu brauche ich eine Routine in C.

Gruss Marcus

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