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;
}
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;).
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.
Ah, um den "unnützen" Speicherbedarf zu reduzieren, kannst Du für Deine Wandlung anstelle A0 auch z.B. A7 wählen...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.