PICをC言語(SDCC)で
PIC16F887でLCD表示
◆PICは現時点で最も有名な小型マイコンといえるでしょう。
アマチュア、学生にも人気があり、入門書も多いマイコンです。しかし、いざプログラムを組もうとした時、ハードルが意外に高いマイコンでもあります。それはPICがやや特殊なアーキテクチャーを持ち、2Kワード毎にプログラム・メモリが分割されていることも一因のようです。
アセンブラでプログラムする場合、入門書の短い参考プログラムの中には出て来る頻度は低いのですが、いざ実際のプログラミングを始めると BANKSEL命令の迷路にぶつかってしまいがちです。当初プログラミングを開始した時はまだしも、後からの変更は至難です。
◆そこで欲しいのはC言語コンパイラです。CならばアセンブラのBANKSELから開放されます。
しかしながら市販されているCコンパイラはかなり高額で、手を出す勇気がない人も多いと思いますが
SDCCと
gputilsの組み合わせでフリーなCコンパイラが使うことができます。
SDCCは小型プロセッサ向けCコンパイラ、gputils はPIC用アセンブリツールです。
◆上記 SDCC と gputils のページからWindows用ファイルをダウンロードし、セットアップ゚します。
SDCCは見つけにくいのですが
you can download the release from:
http://sourceforge.net/programs/sdcc/filles/
という小さな表示をクリックして、
SDCC-win32
を選びます。
また、gputils にはLinux用など多数のPICアッセンブラが入っていますが、Win32用は Download → Older
gputils の中に入っています。私が使っているのは 0.13.6 です。
上に添付するサンプルプログラムを解凍して PICC.BAT と TEST.C を c:\test のようなフォルダを作って入れます。
cd c:\test でカレントディレクトリを移し、PICC.BAT を実行します。
エラーが表示されないでコンパイルとアッセンブリができると TEST.hex が出来上がります。
PICライタでHEXファイルを書き込みします。
写真は PICプログラマーVer4(秋月電子) + LM350を使ったAC16→DC15V安定化電源
◆ サンプルプログラムは「AVRでLCD表示」の項を参照してください。
◆LCDは16桁2行表示のキャラクタ・ディスプレイならほとんどの機種が使えますが、機種によってバックライトのピンが付いたものや、1pinが5Vで2pinがGNDになっているものもあるので要注意です。
◆PIC16F887 使用注意
1) デフォルトではアナログポートになっているためデジタルポートとして使う場合は
ANSEL = 0,
ANSELH = 0;
でアナログポートを禁止する必要があります。
2)参考プログラムは8MHzの内部クロックを使っていますが、外付水晶(20MHzまで可)を
使う時は内部クロックの設定はしないで、RAはアナログポートのままにしておきます。
TRISA = 0xff;
そしてcofigは高速外付け水晶用の HS を使います。
int at 0x2007 __config1 = _HS_OSC & _WDT_OFF
& _PWRTE_OFF & _CP_OFF & _LVP_OFF ;
◆SDCC 注意
SDCCではビット単位の入力や出力は不可。エラーも発生しないため要注意。
入出力は外部変数を介して実行した方が安全だと思います。
使用できない入出力例
PORTA &= 0x01; 入力が必要な出力は不可
RA0 = 1; ビット操作は不可
PORTA = PORTA | 0x02; 入力が必要な出力は不可
使用できる入出力例
PORTA = 0x02; 8ビット直接出力はOK
unbuf = PORTB & inbit; 外部変数バッファを介すればOK
【後記】
SDCCで動かすPICはAVRのCに比較すべくもなく低速なのですが、それでもPICの魅力を考えると捨てる訳にはいかないでしょう。特に、アトメル社がマイクロチップ社に吸収されてしまって以来、PICは更に重要な存在になってきているような気がします。という訳で、私はWin10環境でもPICを使い続けられるように、VMwareで仮想XPを走らせ、USBコンバーターと、秋月からPICプログラマβバージョンを更新して、環境を整えて使っています。
2020/5