akira.kei が 2026年01月15日02時09分11秒 に編集
初版
タイトルの変更
28ピンPIC18F26Q84を使うのか(その2)
タグの変更
PIC
PIC18F26Q84
記事種類の変更
セットアップや使用方法
ライセンスの変更
(MIT) The MIT License
本文の変更
[<前の記事](https://elchika.com/article/7786f966-a438-43f5-bfd2-096cfd443e4d/) : [次の記事>]() ## MCC ClassicかMelodyか PIC18F26Q84はプログラムメモリが64KBあり、PIC 12F1822のように2KBの中に四苦八苦して収める必要がないので、無駄ルーチンを吐き出すMCC (GUIで設定したら半自動である程度のソースを書いてくれる)を使ってもメモリ不足になることは少ない。従ってMCCをバリバリ使うわけだが、PIC18向けのMCCには「Classic」と「Melody」の2種類がある。 Classicの方はもう非推奨になっていて警告が出るのだが、新しい方のMelodyはClassicからGUIが刷新されて使いにくくなった。というか頭が硬くなった老人には新しいことを覚えること自体に抵抗があるわけだ。ただ頭の体操のために電子工作を趣味としている反面もあるわけで、PIC18を使う際にはMCC、それも新しい方のMelodyを使うことにする。 ## まずはオシレータ Classic使いからすると取っ付きにくいカラフル画面が表示されるが、まずはオシレータの設定だ。この絵の真ん中あたりの「Clock Control」を押すとクロック設定画面が出る。  設定画面自体はClassicの場合とよく似ているので操作そのものは特に問題はなさそうだ。食わず嫌いだったかな。  オシレータ種類は高速内部発振の「HFINTOSC」一択でいい。周波数の選択肢は「1、2、4、8、12、16、32、48、64」とかなり幅広いし、PLLが無いので何かの組み合わせを考慮する必要もない。今回はお試しで無駄に最高速にしてみた。 ## その他接続設定 下の方の「Pin Grid View」でRC4とRC5をそれぞれOUTPUTに設定した。28ピンDIPでありピン数には余裕があるので、CLOCKOUTも有効にしておいた。「Pins」画面でLED1、LED2と名前を付け、LED1をStartHighチェックしておけば、あとはLED 1_Toggle()などで交互点灯させれば良い。あとはTimer0を周期割り込みタイマーとして設定しておく。 これで「Generate」すればソースが半自動で用意されるはずなのだが、そのボタンが見当たらない。 ## そ、そんなところに 結論から言えばこの薄くて押せなさそうな縦の「Project Resource」部分を選ぶと「Generate」ボタンが表れた。  いかにも「今は無効です」という面構えなので、こんなところにあるとは思わなかったよ。ここで、「Generate」を押したらソースが用意されるのだが、なんだか画面上はなんの変化もない。こういうフィードバックの無さが嫌われる理由では?  ## Main関数 なぜかmainがvoidではなくintで設定されるが、まぁいいだろう。割り込みルーチンMyTMR0が設定した時間毎に呼ばれるので、ここでLEDを順にトグルする。LED1は初期状態をHighにしたので2つのLEDが交互に点灯する。 ``` #include "mcc_generated_files/system/system.h" void MyTMR0(void) { LED1_Toggle(); LED2_Toggle(); } int main(void) { SYSTEM_Initialize(); TMR0_PeriodMatchCallbackRegister(MyTMR0); INTERRUPT_GlobalInterruptEnable(); //INTERRUPT_GlobalInterruptDisable(); while(1) ; } ``` 一定時間毎に割り込みが発生して特定の関数が呼ばれるようにするには「TMR0_PeriodMatchCallbackRegister」でその割り込みルーチンを登録する(ここではMtTMR0)。そして割込を有効化して黙ってループし続ける。while(1)には中身が無いのでずっとここでループする。 ## 結論 SNAPによる書き込みも問題なく、MCCの設定も簡単で「Generate」ボタンの位置がわかった現在ではもうなんの問題もない。吐き出したソースファイルも使用しているRAMも微少であり、素晴らしい。  ただ、今後これ以上使うかというとちょっと28ピンって大きすぎるかもw