PICマイコンのススメ(呉高専アドベントカレンダー2022)

[呉高専 Advent Calendar 2022](https://adventar.org/calendars/7908)の記事になります。
呉高専電気情報工学科を卒業して、現在大学4年生のwoodロボと申します。
ここでは私の愛するマイコンであるPICマイコンについて語っていこうと思います。

# そもそもマイコンって何？
マイコンとはプログラムを書きこんで制御できるICです。
中にはパソコンと同じようにCPUやメモリが入っています。

マイコンを使用するには電源回路やクロックまわりなど様々な周辺回路が必要ですが、これらをまとめて基板として販売されているものもあり、マイコンボードと呼ばれます。
例えばArduinoは簡単に使えるマイコンボードとして、広く使われています。このマイコンボードはArduino Unoで、搭載されているマイコンはAtmel社のAVRマイコンであるATMEGA328Pになります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/965323/995b79bb-bd54-a5f0-165b-8c3ea91b9d80.jpeg" width="500">

超定番のマイコンボード　Arduino Uno
https://akizukidenshi.com/catalog/g/gM-07385/

マイコンとパソコンの違いとしては入出力の違いがあげられます。パソコンではUSBやHDMIなどのポートがありそれを接続することで様々なデバイスを使用することができます。それに対してマイコンにはピンが多く出ており、例えばLEDを光らせるなど回路に接続できます。高性能なマイコンにはUSBやEthernetなどが搭載されているものもあります。

近年ではArduino環境で開発できWiFiが搭載されたESP32や、高性能で低価格なNucleoボードに搭載されているSTM32マイコンなど多くのマイコンが電子工作界隈をにぎわせています。

# PICマイコンとは

PICマイコンは[Microchip社](https://www.microchip.com/)の開発するマイコンです。
Arduinoが出るよりも前の時代ですが、Atmel社のAVRマイコンとMicrochip社のPICマイコンは電子工作をしている人の中で宗教戦争の話題としてよく取り扱われていました。現在ではMicrochip社がAtmel社を買収したため、どちらもMicrochip社の製品になっています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/965323/7acefecd-9a00-6a76-9688-2df54320656b.jpeg" width="500">

昔流行してたPIC16F84A(現在のマイコンと比べると性能は低く歴史を感じさせる一品)
https://akizukidenshi.com/catalog/g/gI-00097/

**開発方法**
PICマイコンのプログラミングは、頑張れば最強のコードが書けるが闇深いアセンブラ言語で紹介しているサイトもあると思いますが、現時点で始めるならC言語またはC++言語(32bitPICマイコンのみ)での開発がオススメです。
下に示すようなマイコンについての説明が書いてあるデータシートを読みながらレジスタと呼ばれるものを操作するのが従来のPICプログラミングでしたが、最近ではGUI設定でマイコンを設定してライブラリを自動生成できるようになりました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/965323/d476b54a-6342-3754-38fb-e1c659033aa2.png" width="500">

PIC32MX1xx/2xxデータシート
https://akizukidenshi.com/download/ds/microchip/PIC32MX1XX_2XX.pdf

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/965323/ebec059c-9029-be98-daba-b634bb4c5957.png" width="500">

自動生成ツールMPLAB Harmony3のクロック設定画面

サイトは[ここ](https://www.microchip.com/en-us/tools-resources/configure/mplab-harmony)

回路としては「Curiosityなどのマイコンボードを購入する」か、「マイコン単体と周辺回路、書き込み機を用意する」の2つが挙げられます。書き込み機の価格が高くPICマイコンを始めるのは敷居が高いと言われていましたが、例えばPIC32でいえばArduino nanoを書き込み機にする方法があり低価格に始めることができます。またCuriosityには書き込み回路が内蔵されており初期投資は少なめに済みます。(もちろん量産することを考えればマイコン単体で購入するほうが安いです)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/965323/877accd9-d331-a923-fe72-d4385f87debe.jpeg" width="500">

2022年12月現在、秋月電子で在庫処分特価1500円で売られているCuriosity Development Board
https://akizukidenshi.com/catalog/g/gM-10022/


# PICマイコンのメリット

**8bit,16bit,32bitと多くのマイコンを取りそろえている**
8bitマイコンではPIC10F,12F,16F,18F、16bitマイコンではPIC24F,dsPIC30,dsPIC33、32bitマイコンではPIC32シリーズを取りそろえており、マイコンの種類が多いので欲しいマイコンが見つかる可能性が高いです。
低価格ながらペリフェラルが強くCPU性能のいらないプロジェクトなら最適な8bitマイコン、高性能なCPUを持つ32bitマイコン、中間に位置する16bitマイコンとそれぞれ適材適所です。

オススメマイコンを1つ紹介すると16bitマイコンのdsPIC33CHが挙げられます。
このマイコンは2022年12月時点で秋月電子にて400円で販売されており、性能としてはこのような感じです。一番有名なマイコンボードであろうArduino Unoを比較例としてだしています。
 - デュアルコアマイコン(180MHz/200MHz)
     - ただし2クロック1動作なので(90MIPS/100MIPS)
 - 12bit3.5Msps AD 変換モジュール(1/3)
     - 合わせて1秒間に1400万回電圧を測ることができる
     - Arduino Unoだと1秒間に数万回程度
 - PWM 分解能250ps のHigh-Resolution PWM(4/8)
     - 250ps(0.00000000025秒)単位で波形の幅を調整できる
     - Arduino Unoだと62.5ns(0.0000000625秒)単位

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/965323/ede7de7b-92b0-db15-6866-6afb40d0487f.png" width="500">

dsPIC33CH64MP202
https://akizukidenshi.com/catalog/g/gI-15250/


**ピン配置を自由に変更できるPPS機能が便利**
最近のPICマイコンにはピン配置を自由に変更できるPPS(peripheral pin select)という機能があります。基板を製造した後でTX・RXのような配線を繋ぎ間違えて作り直しになるようなことがありますが、PPS機能を使用することでマイコン内部で配線を繋ぎかえることができ、基板を作りなおさなくてすみます。これはめちゃくちゃ便利です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/965323/866eca4a-5c2c-032a-6ac1-06de786966b8.png" width="400">

PPS機能のイメージ

実際のPPS機能の設定はGUIで簡単に設定を行う事ができます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/965323/f2a9816f-8a59-d42f-b7f3-59ad2989c329.png" width="500">

PPSの設定画面
例えばUART通信(ArduinoのSerial通信)の送信ピンであるU1TXはB0~B15の中から自由に配置することができる。

**(回り巡って)単位が取れる**
近年では自動生成ツールでマイコンの設定ができますが、とはいえガチりだすとマイコンのデータシートを読みたくなります。マイコンのデータシートは英語が標準でありPICマイコンを使用すると英語力が向上しTOEICの点数があがることが見込まれます。[^1]
私が在籍していた時にはTOEICの点数によって単位が認定されるシステムが存在していました。これからPICマイコンを使用することで(少なくとも呉高専では)単位が取れるということになります。

[^1]: 個人差があります。データシートが読めてもTOEICの点数は伸びないことがあります。

# PICマイコンのデメリット
**マイコンボードの使用例が少ない**
おそらくPICマイコンを使用する人はマイコン単体を購入し自分で基板を設計することが多いので、先ほど紹介したcuriosityボードはarduinoとは違い記事が少ないです。これは初心者参入のハードルをあげているように思ってます。

**最新の開発ツールを使用している記事が少ない**
ネット記事をみていると、アセンブラ言語を使った例や、レジスタ書きのコードが多く、初期設定などの関数を自動生成できるMCCやharmonyなどの最新の開発ツールを使用した記事が少ないように思えます。たしかにアセンブラやレジスタ書きのほうがマイコンの性能を最大限活かせますが、こちらも同様に初心者参入のハードルをあげているように思えます。

# 終わりに

PICマイコンは種類が多く、プロジェクトに最適なマイコンが見つかるということでおすすめですが、初心者参入がarduino等と比較すると少し難しいように思えます。ただ、arduino等と比較しPICでマイコンを勉強すると基礎知識がつくので、自分のマイコンスキルアップには非常におすすめです。安くてペリフェラルが優秀なマイコンがたくさんあるので、PICマイコンをはじめてみてはどうでしょうか？

ところで
「PICマイコンふれてみたいな、でも難しそうだしどうやって始めたらいいか分からないな」
「arduino使ってるけど、どうやって動いてるかもっと理解してマイコンマスターになりたい」

### そんなあなたにオススメな本があります！！！

Lチカから初めて、「**オシロスコープの製作**」や「**USBメモリと通信**」、「**自作USBキーボード**」など楽しいプロジェクトが盛りだくさん。UARTやSPI,I2C通信の詳しい解説や、オススメのPICマイコンについても多く紹介しています。

全国の学生さん、2～3日くらいで終わるので冬休みの電子工作としてぜひ買ってください。(土下座)

大容量200ページで驚きの1200円、PICマイコンの同人誌(PDF)はここから！

https://booth.pm/ja/items/3753131

同人誌に対応したマイコンボードは600円(円安で500→600円に値上げ)から販売しています。(600円は基板のみで部品は秋月電子で購入していただきます)

https://booth.pm/ja/items/3751749

半導体不足でいつ部品が無くなるか分からないので早めに購入購入～！！！(ダイレクトマーケティング)[^2]

[^2]: アドベントカレンダーで宣伝してしまって申し訳ないです。