知人に頼まれた機械をどう作るか考えていたら、PICが良いんじゃないかというアイデアに辿り着いた。PICという名前やCPUやメモリ、様々な周辺回路が1つのICチップに内蔵されていて百円程度という夢のような値段で入手できる事は以前から知っており、PICの見本として八潮の秋月で適当に見繕って8pinと14pinの安いPICを買った以外は未だ手を出したことが無い。もちろんライター(プログラムの書き込み器)も持ち合わせていなかった。
情報を得ようとネットで検索するとPICにはものすごく多くの種類があることが分かり、CPUのビット巾だけでも8ビットから32ビットまである。内蔵する周辺回路もてんこ盛りでかなり複雑に出来ている。私が半世紀近く前に卒論に使ったインテルの8080で同じものをディスクリートで組んだらラック1つを占有するだろう。こんなものが百円程度で買えるとはすごい世の中になったものである。一方こんなアナログとデジタルが混在した複雑なものを僅か8ピンや14ピン程度のICにどうやって押し込んでいるのか謎である。
PICには通常OSや外部記憶の様なものはなく、プログラムをPICに直書きして動かす。プログラムの開発環境としてはPICの製造元の Microchip Technology 社がMPLAB X IDEというソフトを無償で提供しており、アセンブラやCで書けるようになっている。
どのPICを使うにしてもライターは必須であるが、これも Microchip Technology 社がPickitという名前で販売しているほか中華製のコピーもあり、秋月電子でも独自に開発したPicKit2の互換品を売っている。ただPicKit2はデザインが古くMPLABではもはやサポートせずWindows10にも対応していないようなので(何故かいまだに秋月で売っている)今後の事を考え最新型のPicKit4を買った。PicKit4にPICを付けるアダプタは簡単なので、とりあえず必要な20pinのものを自作した。要はPicKitの5本の線を決まった足に直接接続するだけで20pin以下のPICには対応できるようだ。
while(1){
RA2 = 1;
__delay_ms(100);
RA2 = 0;
__delay_ms(100);
}
しかし、その前段階としての念仏が多い。例えば、
#pragma config FOSC = INTOSC
#pragma config WDTE = OFF
OSCCON = 0x00;
TRISA = 0x00;
といった書き方で、これはPICの初期設定だったり、ハードウェアの操作であったりする訳であるが、ここに登場する大文字の名前がプログラム中には定義されておらず、ある意味仲間内での秘密の呪文であり私みたいな異教徒には理解できない言葉である(実際には#include文を辿っていけば発見できるかもしれないが、そこには値は定義されていても意味は含まれていない)。しかし、これらを知らないとPICのプログラミングは不可能。
これを身に着けPIC教徒の洗礼を受けるには経典を読むしかない、ということでAmazonを彷徨って経典を探した。PICに関する経典は古いものが多く最新の情報が全般的に得られそうなものは少ない。とりあえず「C言語によるPICプログラミング大全」という経典を得た。これも元は改訂版が2009年という古いもののようであるが、2018年にリニューアルされ、さらにネットで2020年の最新情報が提供されている。
これを手元に大航海に出た。 次の目標は16F18346を使ったとある回路である。この16F18346は20pinのICであり電源を除く18pinをプログラミングにより色々な目的に使うことが出来る。
16F18346を使う理由はI2Cインターフェイスを持ちLCDと簡単に接続できてお勧めとのネット記事を見かけたからである。それにA/DやD/Aコンバータを内蔵しており、メモリーもそこそこあり目的には十分である。おまけに秋月で1個160円と安い。内部の構成は次のようになっている。
とりあえず、ブレッドボードで組んでネット情報の再現を試みた。 そこで分かったのは、私が買った経典は数多くあるPICの一般的な使い方について書いてあるが個々のPICの方言には対応していないという事である。LEDチカチカやLCD表示程度はネットで得た情報で何とかなったがそれでは応用が効かない。こうなったら原典に当たるしかない。
そこでMicrochipから16F18346のマニュアル(PDF)をダウンロードした。英文でなんと500ページある。1ページ10円のコンビニ印刷でも全部印刷したら5千円!!!、160円のPICを使うのにこんなに経費がかかるとは。
とりあえず必要そうな部分300ページ程を印刷した。
(つづく)
0 件のコメント:
コメントを投稿