Energiaで450円のMSP430 LaunchPadがArduino化したので、内蔵の温度センサを読んで摂氏に変換してみた。

ボード : MSP430 LauncPad
マイコン : MSP430G2553
プログラム環境 : Energia


プログラム

温度を計ってシリアル通信でパソコンに送る。
内蔵電圧を1.5Vとして計算しているけど、実際は1.41~1.59Vらしいので精度はあきらめた。もともとチップ内部に封入されているし、きちんと気温を計るためのものではない。
https://github.com/shokai/energia-study/tree/master/temperature_serial
int ad;
double temp;
bool led_stat = false;

void setup() {
pinMode(GREEN_LED, OUTPUT);
Serial.begin(9600);
analogReference(INTERNAL1V5); // 内蔵1.5Vを基準にする
// analogReference(DEFAULT);
analogRead(TEMPSENSOR); // 最初の1回目のAD変換は正確に取れないので、捨てる
}

void loop() {
delay(1000);
ad = analogRead(TEMPSENSOR);
Serial.print("ad:");
Serial.println(ad);

temp = 1.5/1024*(ad-673)/0.00355; // 電圧を温度に変換
Serial.print("temp:");
Serial.println(temp);

digitalWrite(GREEN_LED, led_stat);
led_stat = !led_stat;
}


結果

ad:711
temp:15.68
ad:712
temp:16.09
ad:710
temp:15.27
ad:714
temp:16.92

けっこうブレるので10回ぐらい読んで平均を取ったりしたほうが良さそう
ちなみにLM35DZで計った気温は19度だった。


しばらく冷蔵庫に入れた後は
ad:680
temp:2.89
ad:681
temp:3.30
ad:683
temp:4.13
ad:681
temp:3.30
ad:681
temp:3.30


調査

white clouds: MSP430 温度計
同じボードでmsp-gccでやっているけど、同じ要領でEnergiaで書いたらADコンバータから全然違う数値がでてきた。
AD変換の比較電圧が違う気がする。
正しければ、摂氏0度の時に673が出てくるらしい。

Energia/examples/3.Analog/AnalogInput_InternalThermometer_430/AnalogInput_InternalThermometer_430.ino at master · energia/Energia
華氏で計算している。

Using the internal temperature sensor – Code vault – 43oh
華氏で計算している。
analogReference(INTERNAL1V5);
というのが気になる。

hardware/msp430/cores/msp430/Energia.h で定義されていた
DEFAULT SREF_0
INTERNAL1V5 SREF_1 + REFON
INTERNAL2V5 SREF_1 + REFON + REF2_5V
EXTERNAL SREF_2


データシートを見る
16ビット・超低消費電力マイコン MSP430™ – バリュー・ライン – MSP430G2553 – TI
40ページより、温度センサの仕様。1℃ごとに3.55mV増える。

38ページより、ADコンバータの仕様。レジスタの設定しだいで内蔵1.5Vか2.5になる。
外部電圧を参照するなら5,6番ピンを使う。


というわけでこうなった
analogReference(INTERNAL1V5);
int ad = analogRead(TEMPSENSOR);
double temp = 1.5/1024*(ad-673)/0.00355;
Serial.println(temp);