MSP430 ADC10: Zwei Kanäle hintereinander abfragen

Gast #616135
Lesenswert?

Hallo,

ich will hintereinander den AD-Kanal 0 und dann die interne Temp-Diode 
abfragen. Wenn ich jeweils nur eine von beiden Funktionen aufrufe geht 
alles prima. Rufe ich sie hintereinande auf, stimmt die Temp. nicht (46 
anstatt 27) und die Spannung an A0 springt etwas mehr.

Woran kann das liegen?

Danke und Gruß,
Peter

unsigned short read_temperature(void){

  unsigned short IntDegC;

  ADC10CTL1 = ADC10DIV_3 | INCH_10; // select Temperature Diode
  ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE + ENC + 
ADC10SC;             // Sampling and conversion start
  _BIS_SR(CPUOFF + GIE);                  // LPM0 with interrupts 
enabled

  IntDegC = ((ADC10MEM - 986) * 423) / 1024 + 3; // +3 ist Korrektur
  return IntDegC;
}


unsigned short read_ubatt(void){
  unsigned long calc;
  ADC10CTL1 = ADC10DIV_3 | INCH_0;        // select Analog Input Pin 
P2.0
  ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE + ENC + 
ADC10SC;
  _BIS_SR(CPUOFF + GIE);                  // LPM0 with interrupts 
enabled

  calc = ((unsigned long)ADC10MEM*(unsigned long)1500);

  return calc/1023;

}
Gast #616283
Lesenswert?

Was ist es denn genau für ein Typ? (MSP430F???)

Bei ADC wichtig: Das Register ADC10CTL0 kann nur verändert werden wenn 
ENC "0" ist. Ebenso ADC10CTL1. Wenn du die Funktionen hintereinander 
aufrufst, musst du die ADC Register also vorher erst wieder "freigeben" 
(ADC10CTL0 &=~ENC;).
Gast #616330
Lesenswert?

Hiho,
je nachdem, welches Derivat Du verwendest, würde ich in Deinem Falle 
(beim ADC10) über DTC immer alle Kanäle zwischen A0 und A10(temp) 
wandeln. Kostet Dich zwar 18 Bytes unnützen Speicher, aber wenn das kein 
Problem ist, dann ist das sicherlich die codemässig aufwandsaermste und 
eleganteste Lösung.
Anbei ein Beispiel für die Wandlung der Kanäle A1..A3. Müsstest Du 
entsprechend anpassen.
Angehängte Dateien:

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