MSP430 ADC mit mehreren kanälen

Gast #218196
Lesenswert?

Hallo alle zusammen,

Ich habe in meinem Programm ein Denkfehler.
Ich will zwei Kanäle für AD-Wandler benutzen, und sie über Interrupt
steuern.
Mit P6SEL |= 0x03; versetze ich die Pins 6.0 und 6.1 in ADC Modus.
dann
ADC12CTL0 = REF2_5V + REFON + SHT0_2 + ADC12ON + MSC;
Referenzspannung 2,5 Volt und ich schalte ADC an.

dann benutze ich ADC12CTL1 = SHP ; SHP Modes
und konfiguriere beide MEM-Register auf verschiedene Eingänge:
  ADC12MCTL0 = SREF_1 + INCH_0;  // Kanal 1
  ADC12MCTL1 = SREF_1 + INCH_1;  // Kanal 2
und schalte AD-Wandler an. Das Problemm ist, dass am MEM1 nichts
ankommt. woran könnte es liegen? was mache ich falsch???

Ich danke Ihnen für die Hilfe schon mal im voraus.
Angehängte Dateien:
Gast #218197
Lesenswert?

du mußt dem Wandler in ADC12CTL1 auch noch sagen das er mehrere
Wandlungen machen soll und in ADCMCTL1 sollte er noch erfahren das
dieses die letzte Wandlung ist ( + EOS).
Es gibt von TI auch Beispiele für alle möglichen ADC-Sequencen in C.
Nutzt du den MSP-GCC so findest du diese im CVS unter Examples.
Gast #218198
Lesenswert?

was ist MSP-GCC???

ich dachte, dass der Prozessor sobald ein Interrupt kommt das
Analogsignal wandelt und dann wieder wartet. wie kann ich denn ihm
sagen, dass er mehrere Wandlungen macht???

danke
Gast #218200
Lesenswert?

Danke für die Beispiele.

Eine Grundlegende Frage:
Wenn ich einfach ADC12MEM1 benutzen will, dann reicht es ja, wenn ich
folgendes Konfiguriere:

P6SEL |= 0x01; // Kanal 1
ADC12CTL0 = REF2_5V + REFON + SHT0_2 + ADC12ON ;
ADC12CTL1 = SHP ;
ADC12MCTL1 = SREF_1 + INCH_1;
ADC12IE = 0x01;
  ADC12CTL0 |= ENC;
  WDTCTL = WDT_ADLY_250;
  IE1 |= WDTIE;
  _EINT();
  for (;;) {
    _BIS_SR(LPM0_bits);
    _NOP();
    sprintf(rf_buf,"%d\r",adc2);   //
    rf_poi = rf_buf;
  }
}

interrupt [WDT_VECTOR] void wdt_isr(void) {
  ADC12CTL0 |= ADC12SC;
}

interrupt[ADC_VECTOR] void ADC12ISR (void) {
   adc2 = ADC12MEM1;    // Kanal 2
  _BIC_SR_IRQ(LPM0_bits);
}

das Programm läuft nämlich auch nicht. und da frage ich mich, welchen
Konfigurationsfehler mache ich dabei.

Danke für den Hinweis.

Schönen Tag noch
Gast #218201
Lesenswert?

du solltest dem ADC auch sagen welches ADC12MEM-Register er benutzen
soll:


ADC12CTL1 = CSTARTADD_1 + SHP ;

Die ADC12MEM-Register  sind den Eingängen ja NICHT fest zugeordnet.

----------------------------------------
(slau049e.pdf)

ADC12CTL1/CSTART Bits:

Conversion start address. These bits select which ADC12
ADDx 15-12 conversion-memory register is used for a single conversion
or for the first conversion in a sequence. The value of CSTARTADDx is 0
to 0Fh, corresponding to ADC12MEM0 to ADC12MEM15.
---------

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