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

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.