PICで気圧計 by 24FJ64GA002
(AE-SCP1000-D01 & ノキア5110LCD) その1


いよいよ、PIC24Fを駆使して行くわけですが、その前にいろいろと基礎実験をしています。

前回は、ノキア5110グラフィックLCDを駆動できるのかを実感しました。

また、内蔵発信器(FRC 8MHz)でPLLを使ってフルスピードの32MHz動作では19mA近くも消費電流が流れてしまうので、8MHzダイレクトにクロックを下げ、消費電流を4.5mAに下げられる事も分かりました。今までと同様に電池駆動が出来そうです。

次に実験したのは、PIC24Fの内蔵UARTを MPLAB C30 C言語から使う方法です。今回の様にピン数の少ないPIC24Fの内蔵機能は、他のPICの様に固定的にピンに割り付けられてはいないのです。自分のPORTBに重複した16ピンをRPn(n:0〜15)として呼び、そこに、設定によって自由に好みの機能を割り付けて使う事が可能です。

例えば、uartの送信機能をRB4の位置に割り付けたければ、宣言の名称にちょっとクセがありますが、
RPOR2bits.RP4R = 3;
で従来のPB4(RP4)にUART1のTX機能が割つきます。

ここで「3」がUART1のTXを意味し、その前の呪文の様なRPOR2bits.RP4Rが「RP4」を意味します。この呪文や番号は、一定の規則で決まっていますので、一覧表から簡単(?)探す事が出来ます。

その他の高速ボーレート選択(BRGH)や、ボーレート値、ビット数、ストップビット、パリティー、フロー制御の有無等は、設定用の名称があるのですが、これまた呪文の様にたくさんあって、分かり難いので、私はビットで設定して問題なく動きました。

unsigned int U1MODEvalue = 0b1000100000001000; // UART1初期設定 高速mode
unsigned int U1STAvalue = 0b0000010000000000; // UART1初期設定
unsigned int Baud = 51; // 19200bps@4MHz 高速mode

OpenUART1( U1MODEvalue, U1STAvalue, Baud);

なお、MPLAB C30 では、PIC24F用のUART用ライブラリーを用意していて、uart.h をインクルードして使う事に成るのですが、MPLAB C30 のバージョンに合ったライブラリーをリンクさせる為に、その都度MicroChipのディレクトリー内のファイルをリンクさせるので、配布用のサンプルプロジェクト内にはその実体が存在しません。(当たり前のことですが)

また、単純にインクルード宣言をするだけでは正しくライブラリーを参照する事が出来ないのです。

まず、PIC24FJ64GA002用の uart.h をリンクさせるには、
C:¥Program Files¥Microhip¥MPLAB C30¥lib¥PIC24F¥libpPIC24Fxxx-coff.a
を、プロジェクトファイルのLibrary Files に登録しなくては成りません。

また、プロジェクトファイルのLinker Scriptに、
C:¥Program Files¥Microhip¥MPLAB C30¥support¥PIC24F¥gld¥p24FJ64GA002.gld
を登録しなくてはなりません。

この2つが正しく登録されていて始めて、
#include <uart.h>
が正しくコンパルが通る様になります。

つまり、MPLAB C30 でライブラリーを使用する様な場合は、PICの型式に合わせて、この2つが正しくコンパイラー側に設定されていないと使えないのです。

また、ライブラリーによっては、その他の追加の条件を追加される場合もあります。

今回は使用しませんが、 stdio.h の printf()を使う場合には、さらに、必ずヒープ領域を128byte程設定する様にリンカに指示するようにしないと、ヒープ領域が定義されていないと云うエラーになって、コンパイルが完了しません。これはPIC24FのUARTが16ビット幅の4段のFIFOを送信、受信共に持っている(16*4*2=128)事に由来する様なのですが、詳しい事はわかりません。

今回は、uart.h 内の
getcUARTn
ReadUARTn
WriteUARTn
putcUARTn

OpenUARTn
を使用しますので、ヒープ領域等の確保は全く必要ありません。

後閑氏のホームページ
http://www.picfun.com/c30frame.html
の「実行時のメモリ環境」
に、
**************** 引用 ********************

ヒープ領域は、Cライブラリのメモリ管理関数である calloc、malloc、realloc関数を
使ってダイナミックにバッファ管理を行う場合にだけ使用されます。
これらの関数を使わないときはヒープ領域を割り当てる必要はありません。
デフォルトでは割り当てしないようになっています。
 stdioライブラリの標準出力関数stdoutを使うときには、同時に開くファイル1個当たり
40バイトのヒープ領域を必要としますので注意が必要です。
 コンパイルしたときヒープ領域が必要で定義されていない場合には、エラーメッセージ
が出力されますので、このときプロジェクトの環境設定で適当なサイズのヒープ領域を
指定します。

*************** 引用終わり ******************

と書いてあります。

また、後閑氏のホームページの
http://www.picfun.com/c30frame.html
の「標準入出力関数」
に、
C30 の printf()ライブラリーの事が書いてあります。

また、
http://www.picfun.com/c30libframe.html
の「UART」
に.gif写真でサンプルが載っています。

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

上記ハードウエア用に後閑氏のホームページのPIC24F用UARTサンプルソフトウエアを、パレットソフトさん風に書き直したものを掲載いたします。

パレットソフトさんの構成は、高級言語であるC言語の特徴を良く生かして、基本的なデータ処理のアルゴリズムを、ハードウエアに依存する部分と、しない部分に分ける様にしています。これは、他のPIC系や、他のCPUに移植する場合に、主にハードウエアに依存する部分をピンポイントで修正すれば流用できる事を意味しているのです。

2464002uart01.zip

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

System クロックは、今後の実験の為にも、外付け発振子の不要な内部発振器のFRC 8MHzをダイレクトに使っています。

通信条件は、高速モード(BRGH = 1)で、19200bps、データ長 8ビット、パリティ無し、ストップビット 1ビット、フロー制御 無しです。

独自のデータ型の宣言群である_AtrDef24f.h は、今回はソース内では使っていませんが、これは今後の実験で、今までの開発ソースを利用する上では大変重要な役目を果たす拡張用の部分なので、今回は形式的に含めました。

たとえば、MPLAB C30ではBIT型が無いので、_AtrDef24f.h 内ではコメントアウトしてあります。また、今回のuart.h 内でBOOLを宣言していますので、ここも_AtrDef24f.h 内ではコメントアウトしています。
(Sep. 30th 2010)


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

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