mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 ADC10: Zwei Kanäle hintereinander abfragen


Autor: Peter Mueller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

}

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;).

Autor: szimmi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: szimmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah,
um den "unnützen" Speicherbedarf zu reduzieren, kannst Du für Deine 
Wandlung anstelle A0 auch z.B. A7 wählen...

Autor: Peter Mueller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, genau das war das Problem

Gruß,
Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.