PIC24Fでノキア5110グラフィックLCDを駆動するには?その1


さて、いよいよPIC24Fの登場です。何といっても16ビットCPUを積んでいる。そして、掛け算命令をアセンブラーレベルで持っている。これは、浮動小数点等の演算が非常に高速に処理できるという事です。

しかも、国内の通販で簡単に手に入ります。PIC 24FJG64A002 I/SP ならば、秋月電子通商で@350円で手に入ります。しかも28ピン300mil。各ピンの機能や電源供給ラインは配置が違うものの、物理的には16F886と全く同じピン幅なのです。

I/Oピン数は21個。しかも、基本的に3.3V系と完全にデジタルI/O互換です。その上それぞれに、オープンドレイン設定が可能で、各内蔵機能(例えばUSART通信機能)等を固定ではなくて自由に配置できる機能まで有ります。内部発振で32MHzの高速で動作が可能。また、内部にカレンダータイマ機能まで持っています。

16Fや18Fが4クロックサイクルで1命令をこなすのに対して、24Fは2クロックで1命令を完了しますので、同一のシステムクロックならば、2倍の処理能力があります。

この豊富な機能を持ったPIC24Fを使わない手はありません。

プログラミングは通常MPLAB からPICkit2等でICSPコネクタ接続で行います。私は秋月電子通商のPICkit2互換機を使ってMPLAB C30 コンパイラー(無償版)を使ってコンパイルし、そのままMPLAB から秋月PICkit2互換機を通じてオンボード書込みをしています。ただし、HI-TECH C コンパイラーは、PIC24F、DisPIC系用の無償コンパイラーを提供していないので、今までのHI-TECH C 用のプログラミングソースをそのまま使う事が出来ません。

ただし、MPLAB C30が他のMPLAB Cコンパイラーと違ってANSI C 準拠なのです。HI-TECH C は全てANSI C 準拠なので互いにソースレベルでの互換性が非常に良いのです。

実際に、データ型として異なっているのは、MPLAB C30 にはHI-TECH C に有るBIT型変数が無いだけです。また、メモリー上のデータの格納順番もリトルエンディアン(桁の小さい方が、メモリーアドレスの若い方に配置される)である事も、HI-TECH C と同じです。今までHI-TECH C で作った関数は殆ど無修正でMPLAB C30 で使う事が出来ました。

問題は、コンパイラーとしての作法が若干異なっているので、そのままHI-TECH C のソースプログラムをコピーペーストで使用する事が出来ないのは、致し方ない所です。

実際に、下記のハードウエアで、システムクロックをフルスピードの32MHzで、NOKIA5110LCDを今までのHI-TECH C のソースプログラムを使って駆動する事が簡単に出来てしまいました。(デジタルI/Oの使用ピンや、PORTは異なる)

必要がない限り、外部にクリスタル発振子を接続する必要も無く、内蔵の発振源で稼働できる事も便利です。


(C5,C6を電解コンデンサー 10uとしていましたが、パスコンの0.1uの誤りでした。そのままでも稼働しますが、回路上の役割としては0.1uが正解です。修正してお詫びいたします。Sep. 30th 2010)
(リセット用のPSW1に並列に、C4 0.1uを追加いたします。Oct. the 5th 2010)

プロジェクトファイルを下記にリンクしておきます。(004から005にバージョンアップしました。)

2464002lcd005.zip

なお、このソースプログラムは、
Windows XP Pro v2002 SP3上で、
現時点において最新で無償の、
MPLAB-IDE v8.53、
MPLAB C30 C Compiler [pic30-gcc.exe] v3.24
にてコンパイルしています。

なお、PIC24F用のHI-TECH C は、現在は残念ながら対応していません。今回のプロジェクトは MPLAB C30 用なのでお間違え無い様にして下さい。

プログラムの構成方法を、パレットソフトさんのプログミング形式を利用し、ソースリストのデバッグや、再利用がしやすい様にしています。

ノキア5110表示用のライブラリー部分は、
CQ出版の「トランジスタ技術2006年3月号」に掲載された、
R8C/15付録マイコン基板活用企画 
第9回 小型グラフィック液晶表示器で作る簡易温度計 山本 秀樹氏 のR8C/15用ソフトウエアをHI-TECH C Compiler用に移植したものを、今回はそのままMPLAB C30 C Compiler用に再利用しています。


システムクロックが32MHzの場合には、消費電量が19mAでした。これでは、アルカリ単三電池を2本使ってDC-DCコンバータを繋いで稼働できても、今までの経験から言って1週間程で電池がつきてしまいます。

システムクロック周波数を半分の16MHzにしてみると10mA、さらに8MHzにまで下げると4.5mAにまで下がりました。ここまで下がると、16F886の時と同等の消費電流です。PIC24Fを8MHzで駆動してもちゃんとNOKIA5110LCDを駆動できましたので、今回はシステムクロックを8MHzで設定しました。


MPLAB C30 を使うのは全く慣れていないので、その作法が分からなくて勉強中です。ソースリストを機能や目的別にそれぞれ分離分散する事で、ハードウエアの違いによって修正する部分を一カ所に集中させることが出来ます。

趣味でいろいろとプログラミングをしていると、とかく自分流と云うか、だらだらと長いプログラムを書いて、後で眺めると、自分でも何が何やらさっぱり分からないソースリストになってしまい、とてもそれを別のシステムに流用する等という事を考えられる様な状態ではなくなってしまうのが落ちです。

事実、恥ずかしい事に私の今までのアセンブラーソースはそんな感じになってしまっています。

プログラミング作法として、様々な機能を駆使して仕様する様な場合には、個々の制御対象への基本部分のコントロールソースリストの流用や、システム全体のデバッグも含めて、こういった形にしておく事は、無駄なデバッグを無くす意味で大変な威力を発揮します。

せっかくC言語を使うのですから、ぜひPICの持つ力を100%以上使い倒す為にも、プログラミングの組み立て方は重要だと思っています。

さーて、今度はいよいよ気圧センサーユニットをLCDと同居させてみようと思います。

例によって、いつになる事やら・・・(Apl. the 24th 2010)


注意事項
General disclaimer
トッ プページへ

なお、当ホームページで公開しているデーター(写真、音声)等を個人の枠を超えて複製・転用する事はご遠慮下さいませ。
ご意見/苦情/ご感想はこちらまで