鳥なき里のマイコン屋(168) PIC16F18855で吉例Hello World.

Joseph Halfmoon

前回、久しぶりにMicroChip社の8ビットマイコンを使って吉例Lチカ。遥か昔の記憶でPICはメンドイという意識があったのですが、そんなことはありませんでした。MPLAB X IDEに「標準装備」されたMCCでスイスイです。今回はこれまた吉例Hello Worldを実施。UART1個しかないのに端子は2組、なぜに?

※「鳥なき里のマイコン屋」投稿順Indexはこちら

MPLAB Xpress Evaluation Board

今回使用しているMicroChip社の8ビットマイコンPIC16F18855は、ミッドレンジの8ビットPICとして「推し」になっている近代化したPIC16Fのシリーズ品種みたいです。しかし使用しているXpressボードは、特価品(見切り品)の一品。お求めやすい価格でした。というのもMicroChip社の主力製品はどれもPickitなどの開発ツールでインタフェースをとる形式が多いなかで、あまり人気だとは思えない(個人の感想です)MicroChip社のWeb開発環境むけに特化して(もちろんPCにインストールしたMPLAB X IDEでも使えます)、素のままではPickitなどのツールに対応していないためかと思われます。

USB経由でPCとXpressボードを接続すると、PCからは以下の2つのデバイスが見えます。

    • UARTシリアルデバイス
    • XPRESSというボリューム名のストレージデバイス

こんな感じ。

PC_DEV

前回、プログラムの書き込みは XPRESSなるドライブにHEXファイルをドラッグ&ドロップで行いました。

今回は、接続すると現れるUSBシリアル・デバイスにシリアル出力したいと思います。

PIC16F18855のシリアル入出力

データシートをみると、SPI、I2Cなどは複数搭載されているのですがUARTとして使用できるペリフェラルは EUSART が 1個だけのようです。このナケナシの1チャンネルを今回は標準入出力に割りあて、printf()に使ってしまおうという目論見です。printf()さえ使えれば、今回使用のXpressボードはハードウエア・デバッガとのIF無ですが、「伝統のprintf()デバッグ」は出来ると。

しかし、Xpressボードの回路図をみると、UARTの信号らしい信号名の端子が2組存在しているのです。

    • F188TXU、チップの端子は RC0
    • F188RXU、チップの端子は RC1
    • F188TXM、チップの端子は RC6
    • F188RXM、チップの端子は RC5

回路図上の行先は、TXU/RXUの方がUSB-IFを担当している「裏面」マイコンPIC18LF25K50へ接続。TXM/RXMの方が、表面にある mikroBUS(TM) のスロットにです。TXU/RXUの方に接続すればUSB経由でPCの仮想シリアルポートにつながるんじゃね。

なお、POR(パワーオンリセット)後の初期状態でEUSARTのRXは、上記のどちらでもない端子RC7に接続されているみたいです。ううむ。

この「Pin接続何でもあり」な状態を支えているのが、PPS (Peripheral Pin Select module)というものみたいです。これにより各種ペリフェラルの入出力機能は remappable なんだとか。小ピンでもシブトイPICの真骨頂か?

以下はMCCでEUSARTを追加した後のEUSARTのピンの初期状態です(なお、前回LチカにPA0使いましたが、今回はPA1に変更してます。)PIN_BEFORE

上記をみると、POR後初期値のPC7にRXが接続されとります。

そこでXpressボードのUSB経由で通信できるように以下のようにTX/RX端子をRC0とRC1に変更いたしました。PIN_AFTER

順序が前後しますが、MCC(Harmony版)ではEUSARTではなく、非同期なUART1というお名前でリソース追加します。こんな感じ。ProjectResources

同期式で使いたかったら別なお名前があるのか?すいません未確認デス。

さて追加したUART1の設定値が以下に。PrintfをUARTに向けろ、割り込みドリブンだぜ、にチェックしてあります。UART1_EasyVIEW

ビルドしてGo

MCCで生成したソースファイル群は以下のような感じです。HelloWorldProject

main.c に以下のような Lチカ 兼 Hello Worldのコードを書き入れました。HelloWorldCode

早速ビルドしてみます。BUILD SUCCESSFULとな。buildResults

生成されたHEXファイルをXPRESSストレージに書き込みましたが、様子が変です。RESETかけると一度だけLEDが点滅し「H」という文字が仮想シリアル端末に表示されるのですが、その後が続きません。もう一度RESET、ダメじゃ。ErrorPrintf

なんか忘れているだろ~ということで、生成済の main.c 内を見直しました。以下のインタラプトをイネーブルにするための御印は、ジェネレート後のままではコメントアウトされておりました。こいつらのコメントを外してみると。EnableInterrupt

再ビルド。プログラムサイズは僅かに2バイト増えましたです。buildResults2

書き込んだ後、仮想シリアル端末(伝統のTeraTermPro)をみれば、ほれこのように。HelloWorld

よかった。これで伝統のPrintf()デバッグは可能と。

鳥なき里のマイコン屋(167) PIC16F18855、MPLAB IDEで吉例Lチカ へ戻る

鳥なき里のマイコン屋(169) 復活! PICkit2 で読み書き出来たものの へ進む