各位神人你們好
我用MSPFR4133內部的sensor讀取溫度,若照我的代碼讀到的溫度數值非常小,我已經研究了3天但還是沒有找到問題。我比較不知道的是initTemperatureSensor() 這段要怎麼配置才會是正確的。
而每次sensor讀取到的值會存在ADCMEM0 register中 再經由換算公式得到攝氏溫度。
轉換公式如下

執行完readSensor 的結果

執行完readSensor 變數的結果

#include <msp430.h>
#include <stdio.h>
#define ADC_30_REF (*(unsigned int *)0x1A1A)//30Cref
#define ADC_85_REF (*(unsigned int *)0x1A1C)//85Cref
int adc30=0;
int adc85=0;
void initTemperatureSensor() {
ADCCTL0 &= ~ADCENC;
ADCCTL0 = ADCSHT_5 | ADCON;
ADCCTL1 = ADCSHP;
ADCMCTL0 = ADCINCH_12;
ADCCTL0 |= ADCENC;
}
int readTemperature(void) {
adc30=ADC_30_REF;
adc85=ADC_85_REF;
int rawTemp;
ADCCTL0 |= ADCSC;
while (ADCCTL1 & ADCBUSY);
rawTemp = ADCMEM0;
int tempC = (rawTemp-adc30)*(55/(adc85 - adc30)) + 30;
return tempC;
}
void main(void) {
WDTCTL = WDTPW | WDTHOLD;
PM5CTL0 &= ~LOCKLPM5;
initTemperatureSensor();
while (1) {
unsigned int temp = readTemperature();
__delay_cycles(1000000);
}
}
這是我參考的官方文件
https://www.ti.com/lit/ug/slau445i/slau445i.pdf?ts=1731846188011&ref_url=https%253A%252F%252Fchatgpt.com%252F
https://www.ti.com/lit/ds/symlink/msp430fr4133.pdf