MSP430 / eZ430-F2013
sample_0 project 日々の取り組みはこちら
コンセプト
解説
ダウンロード
変更履歴
2006年9月9日 追加
2006年9月8日 新規作成
記述内容には、思い込みによる記述や十分な検証をしていない部分が存在する可能性があります。十分に注意してください。
誤り等ありましたら、ご指摘いただけると幸いです。 新井健司 / JH1PJL E-mail :
MSP430関連の開発を再開しました(2011年4月4日)
今回はこれだけで、HW変更なしで動作 このような改造は不要です。購入したままの形で、動作可能
MSP430 sample_0 project ----- コンセプト
基本コンセプト
1.HW
eZ430-F2013のTI出荷状態のままで動作すること
すなわち、HWに関しては何も変更しないで動作すること
2.SW
内蔵温度センサーの測定値をLEDにモールス信号として表示する
電源電圧の測定値をLEDにモールス信号として表示する
上記、2つのデータ表示を定期的に切り替える
MSP430 sample_0 project ----- 解説
7月19日にeZ430-F2013を入手してから約2ヶ月間、紆余曲折の上、ADC(SD_16)の使い方に関して(確証はまだ得られないが)かなりの部分が判ってきた。
加速度センサーを組み合わせた本来の目標達成の前に、上記でまとめたように、eZ430-F2013のハードウェア改造しないで、動作確認が出来るサンプルをまとめておく事にする。ここで説明しているように、Webページを探してもまだeZ430-F2013を使用した製作事例が少ないので、TI提供のLED点滅のサンプルから次のステップに行く参考にしてもらえるとありがたい。
<RTM>
MSP430の特徴はなんと言っても省電力タイプであることだが、その特徴を生かすためにはポーリングするようなプログラムを書くのではなく、Event Driven、すなわち何かが変化したり何かが起こった時にMPUが動き出すようにするのが良い。この目的では、以前から私が作成し使っているRTMが非常に相性が良いと思う。ここを参考にして、動作原理を理解してみてほしい。
ユーザープログラムの作成の際、絶対守らなければならない点:
→ プログラムでは待ちループを絶対作らない。
考え方の基本:
→ State Transition(状態遷移図)を作成して、制御全体を整理した上で、
状態遷移が現在どの状態なのか(例えばステートを番号で表して)を識別し、
状態の遷移が発生したかを判断し、
次の状態に移行するか、とどまるかをTask内に記述すること。
<Morse code>
eZ430-F2013の出力装置はたった一個のLEDです。この一個の表示装置で数値を表示する方法はそんなに思いつきません。今回はモールス信号を応用しました。詳しくは、ここを参考の事。
初めての人には、読み取りが難しいが少し慣れると読み取れるようになる!(?)
<ADC>
今回は大変苦労した。先ず、ADCの方式がΣΔ変換器と呼ばれるもので、今までのMPU内蔵のADCとは違う方式たっだので今までの経験が生かせない。更に、ADC変換値と物理データ値との関係がうまくつかめずに苦労してしまった。ADCの動作原理はいまだに十分理解出来ず。まだまだ修行が足らないようだ。
<正規化>
大分まじめにWebで探し回って、電源電圧の正規化や内蔵温度センサーの正規化コードを探したが、見つけることが出来なかった。
ここに掲載した、Vccと温度の考え方もまだ確証が持てない。間違いなどあれば是非ご指摘願いたい。
VCC計算の検証
温度計算の検証
VCC計算のインプリメント
/********** Nomalize Vcc data subroutine ******************************************/
// (Normalized Vcc) = (ADC converted data ) x Constant_Vcc
// Constant = 201.4 [uV/bit]
void normalize_adcvcc( void )
{
nor_adc_vcc = ((unsigned long)((int)(adc_vcc)-(adc_offset))*20142)/100000;
}
温度計算のインプリメント
/********** Nomalize Temperature data subroutine ***********************************/
// (Normalized Temperature) = (Vsen - Voffset)/TCsen - 273
// Vsen = (ADC converted data ) x Constant_temp
// Constant_temp = 18.311 [uV/bit], Voffset = 0 [V], TCsen = 1.32 [mV/K]
void normalize_adctemp( void )
{
nor_adc_temp =
(unsigned int)((((unsigned long)((int)(adc_temp)-(adc_offset))* 18311)/132 - 2730000)/100);
}
<悩み>
今回の正規化ルーチンでは、longでの加減乗除計算を入れてしまい、結果として32bitのLibraryがリンクされてしまった。結果は、コード領域のオーバーフロー!サンプルプログラムは、RTM部分の中で今回使用していない部分を削除したりして何とかまとめたが、今後のプログラム作成上でも、ROMの2KBやRAMの128Bは、かなり気を使って臨まないと、やりたいことがまとまってもインプリメンテーションの段階でROMやRAM不足で実現できない可能性がある。
*************************************************************
* SEGMENTS IN ADDRESS ORDER *
*************************************************************
SEGMENT SPACE START ADDRESS END ADDRESS SIZE TYPE ALIGN
======= ===== ============= =========== ==== ==== =====
DATA16_AN 0000 - 0000 1 rel 0
0021 - 0022 2
0053 - 0053 1
0056 - 0057 2
00B0 - 00B0 1
0100 - 0103 4
0112 - 0113 2
0120 - 0121 2
DATA16_I 0200 dse 0
DATA16_Z 0200 - 022D 2E rel 1
CSTACK 0258 - 027F 28 rel 1
DATA16_AN 10FC - 10FD 2 rel 0
CSTART F800 - F81D 1E rel 1
CODE F81E - FEDB 6BE rel 1
DATA16_C FEDC - FF3F 64 rel 1
INTVEC FFE0 - FFF5 16 com 1
RESET FFFE - FFFF 2 rel 1
*************************************************************
* END OF CROSS REFERENCE *
*************************************************************
MSP430 sample_0 project ----- ダウンロード
IAR Embedded Workbench で試すことの出来るソースファイルを下記に格納。
あくまでもテスト用です。ご承知置きください。
-------- eZ430_sample_0_by_JH1PJL.zip