2012年3月13日火曜日

GNU GCC 開発環境整備 再び (for ARM Cortex-M3)

CQ出版 Interface誌 恒例の付属基板 本年(2012年)は 富士通「FM3マイコン」のようです。このマイコンはARM Cortex-M3マイコンで、今は亡きDesign Wave誌 2008年5月号付属の基板CQ-STARMと同じコアです。
  そこでほぼ4年前の基板CQ-STARMを引っ張り出し、電源ON、するとその当時組んだプログラムが動きだしました。「お久しぶり」といった感じでした。
  この基板に搭載されたMCUはSTM32F103で
   動作クロック72MHz、RAM 20KB、フラッシュROM 128KB 
 本年の「FM3マイコン基板」に搭載されるMCUはMB9BF618T(予定)で、
   動作クロック144MHz、RAM 128KB、フラッシュROM 1MB
 かなりのスペックです。 今年は本腰を入れていろいろ遊びたいと思います。

  さて、STM32基板ですが、若干物足りないスペック、開発環境はIARのWorkbench(使用制限)、追加部品の水晶発振子の入手性 等で、その当時、動作確認程度の開発にとどめていました。
 そのような扱いのSTM32基板、稼働したプログラムのプログラムソースをビルドすると、案の定、ビルドエラーが発生しました。他のARM基板(LPC2388、LM3S8962)での開発でGNU GCCの開発環境(GCC ver.3.4. => ver.4.3 )を組み直したのが原因だと思われます。
   今年のFM3基板の準備として、GNU GCCの開発環境の組み直しを行いました。   

 1.GNU GCC 開発環境について
  ◎GCCは、ARM対応版を整備する。
    ARM7TDMI、Cortex-M3、、、、各MCUコア共通
  ◎コードセットはThumb
    GNU GCC はThumb-2に非対応 GCC Vre4.6.3のインストールで Thumb-2のコードセットがインストールされることを秘かに期待していたのですが残念、、、、Thumb-2は2003年の発表で、そろそろGNU GCCでThumb-2の対応があっても良いのではと思います。
    Interface編集部、ARM社、富士通、、、、どこでも良いから、GNU GCCのThumb-2対応版をリリースしてほしいものです。  

  ◎FPU (Floating Poing Unit; 浮動小数点演算ユニット)無しで整備する。
    GNU GCCでビルドすると。「…m-elf/4.6.3/thumb/lib**.a(_******.o) uses hardware FP, whereas main uses software FP」のビルドエラー発生 安直にコンパイルオプション -mhard-float を付加、これはCortex-M3ではNG。
    そこで、binutils、gcc、newlibでconfigureオプション --with-float=soft を指定して再インストールしました。    

2.GNU GCC(Vre4.6.3) 開発環境整備 手順
  1)Cygwinのインストール
     gccに加え、binutils、(libiconv)等のパッケージをインストールする。
     ※出来るだけGNU GCCの開発環境(Cygwin上で動くソフトウエアを開発する環境)を整えてしまう。
  2)gccビルド準備( 1)の補足 )
    gccビルド用に以下のパッケージをインストールする。
   ①gmpのインストール
   ②mpfrのインストール
   ③mpcのインストール
   ④libiconvのインストール
    ※今回はCygwinのインストールでは組み込まず、ここでインストール
  3)gccビルド
   ここでビルドするgccは、Cygwin上で稼働し、ARM MCUで動くソフトウエアを出力する。
   ①binutilsのインストール
    binutils ver.2.22ではインストール失敗(初回)、ver.2.21.1で成功
    一旦GNU GCCをインストール後再度 ver.2.22をインストールで成功
   ②gccのインストール
   ③newlibのインストール
        newlib ver.1.20.0ではインストール失敗(初回)、ver.1.18.0で成功
    その後、ver.1.19.0をインストール 成功
    その後、ver.1.20.0をインストール 成功
   ③gccのインストール
     configureでオプション --with-newlib を追加して再インストール         

※ST32F103 LCD出力プログラム


メモ
 ※configureオプション --with-float=
    --with-float=soft 浮動小数点演算をライブラリを使って実行
    --with-float=hard 浮動小数点演算をFPUを使って実行
 ※Cortex-M3では Thumb の一部の命令がサポートされていない。コンパイル オプション -mcpu=cortex-m3 指定がこの問題に対応してくれると良いのですが。後々手こずることになりそうです。

2012年3月3日土曜日

MSP430 温度計

Texas Instruments MSP430 を使って温度計を作成しました。


LaunchPadで実装されているデモプログラムに手を入ただけのものですが、結構よい暇潰しになりました。
1年前は、デモプログラムの通信機能を中心に色々試してみましたが、今回はADCについて機能を検証しました。

1.ADC10コンフィグレーション
 1)入力レンジの設定
   ・GND~Vcc  0V~3.3V
   ・GND~Vref  0V~(1.5V or 2.5V) ※デモプログラム設定 
   ・その他
 2)チャネル 選択 
   ・A0~A7
   ・Temperature Sensor    ※デモプログラム設定
 3)参照電圧(Vref)選択 Reference-generator voltage
   ・1.5V           ※デフォルト
   ・2.5V
 4)参照電圧生成 Reference-generator
 5)サンプリング周期設定 Sample and hold time
   64xADC10CLKs 
 6)割り込み許可 Interrupt enable
 7)ADC ON

2.ADC分解能
 ADC分解能 = 1500mv ÷ 1024(10bit) = 1.4648mv/div

3.温度計算(内蔵温度センサ)
   MSP430G2x52に内蔵された温度センサを利用した温度計
   (ADC10 チャネル選択で温度センサ指定)
   ・温度センサ仕様  3.55mV/℃

   ADC値(1単位)あたりの温度= 1.4648mv/div ÷ 3.55mV/℃ = 0.41263℃

   0℃でのADC値 = 673

   計測温度 = (ADC値 - 673) × 0.41263

4.温度計算(外装温度センサ LM61BIZ)
  ADC10のチャネル A0に 温度センサを繋げた温度計
   ・温度センサ仕様 0℃での出力電圧 600mV、  10mV/℃

   ADC値(1単位)あたりの温度. = 0.14648 ℃/div.

   0℃でのADC値 = 600mV÷1.46484375mv/div = 409.6

   計測温度(℃)=(ADC10の出力値 - 409.6)×0.14648

5.その他

 ADCの出力値はサンプリング毎に結構ぶれるので、サンプルプログラムでは8回のサンプリングの移動平均をとり、この値から温度計算を行っています。

 今回の温度表示は、MSP430内蔵温度センサと外装温度センサでは、最大で1.5℃のずれがありました。また、部屋にあった寒暖計とも2~5℃ずれていました。