Gast
#616135
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;
}