PIC, AVR, ARM マイコンの色々メモ

## この記事は？

急な思いつきで電子工作に興味を持ち、急な思いつきでマイコンについて調べ初めた自分。
せっかく調べたので、ちょっくらメモでも残そうと思った自分。

この記事では、PIC, AVR, ARM マイコンの違い等について記しています。
実践的な話についてはあまり触れておりません。
マイコン選びの参考なんかになれば幸いです。

## 用語等

### マイコン

マイクロコンピュータ、マイクロコントローラの略。
電子回路なんかで IC チップが載っているのを見かけるかと思いますが、同じ IC チップに見えても機能は異なります。
IC チップは、論理回路 IC や OP アンプ IC 等、各ピンの機能が固定されているものと、そうでないものに分けられます。
機能が固定でない、プログラムによって動作を任意に変えられるものが PLD (プログラマブル ロジック デバイス) と呼ばれ、その一種がマイコンです。

### マイコンボード

マイコン IC 単体で扱おうとすると、プログラム書き込み装置 (ライタ)、書き込みのための回路等を用意する必要があります。
PC アプリの開発と違い、ハードウェアの準備が必要なので、素人にはなかなか扱いにくいものがあります。
マイコン IC を扱いやすくするために、必要な回路を一つの基板にまとめたものが、マイコンボードです。
後述の IDE のハードウェア版とでも言いましょうか。

### IDE (統合開発環境)

PC アプリの開発と同様に、マイコンのソフト開発のためにはソフト側の準備も必要です。
コードをマイコン上で実行可能な形にするコンパイラ、それを書き込むソフトなんかが必要になってきます。
これも、それぞれ自力で用意するのは、素人には少々難しいでしょう。
手軽に初められるよう、コンパイラやライブラリ、書き込みソフト等がまとめられたものが、IDE です。

### アーキテクチャ

ちょい難しい言葉で説明すると、「演算ユニットの構成や命令の決まり一式」。
マイコンの話に当てはめると、「マイコン IC の基本的な構成や命令なんかの決まり」。
異なるアーキテクチャの環境では、同じソフトは動かすことができません。

### プログラムがマイコンで動くまで

1. プログラムコードを書く
2. コンパイルして実行ファイル的なのを生成
3. 書き込み装置 (ライタ) を使って実行ファイル的なのをマイコンに書き込む

## アーキテクチャの話

さて、ここから各マイコンの色々について綴っていきます。

### PIC アーキテクチャ

* Microchip社が開発・製造している。
* IC チップの型番は「PIC...」で始まっている。
* これが有名というようなマイコンボードは無い･･･？(調べが悪いだけかもしれないケド)
* 以前は開発環境がオープンでなく、有料だったとか。今は無料で手に入るみたい。

後述の AVR よりも歴史が長いようです。

### AVR アーキテクチャ

* Atmel社が開発・製造していた。Atmel社は Microchip社に買収された。
* IC チップの型番は「AT...」で始まっている。
* 有名なマイコンボードは Arduino。
* 恐らく、誕生当初から開発環境は無料で手に入る。

PIC と比べて歴史が浅く、ドキュメントなんかが少ない (少なかった) という点でマイナス。
PIC とは違って開発環境がオープンという所でプラス。
このようなことで、昔は PIC と差があったようです。
時が経ち、PIC も開発環境が無料になり、AVR のドキュメントも十分増え、今では二者の差はあまり無いようです。

### ARM アーキテクチャ

* ARM社がアーキテクチャを設計している。チップの設計・製造は、他の会社が行っている。
* ARM の IC チップだけが単品で出回っているのは多くなさそう？
* マイコンボードは各社から色々出されている。
* ブラウザ上で動く統合開発環境が提供されている。

ARM社自身はチップの製造は行っていません。
他の半導体メーカーに ARM アーキテクチャの設計情報を提供し、半導体メーカーがチップを開発・製造・販売し、ARM社はアーキテクチャのライセンスを取るという事業の形をとっているそうです。
ARM アーキテクチャを採用したチップは、総称して ARM系チップ、ARM系プロセッサと呼ばれます。

## マイコンボード, プラットフォーム等の話

### AVR / PIC IC 単品実装

マイコンボードを用いないスタイルです。
マイコンが誕生して間もない頃や、デジタル電子工作初期時代はこのスタイルが恐らく普通だったでしょう。

マイコンボードを用いないため、ライタ等を自力で用意する必要があり、難易度は高めです。
その代わり、必要なものだけを実装できるため、最も安価に製作ができます。
チップ単体で使用しますから、(よほど下手な回路でない限り) マイコンボードを用いるよりも省スペースで済みます。

### Arduino

やはりマイコンボードで有名所と言えば、まず Arduino。
AVR マイコンを搭載しています。
Arduino は回路やソフト等の設計がオープンにされているプロジェクトです。
純正の Arduino は数千円しますが、(中華臭のする) 互換品は安いものでわずか数百円で手に入ります。

プログラム書き込みの際、AVR/PIC IC 単体ではライタを IC とつながなければなりません。
ですが、Arduino のボードには USB 信号を変換するチップが搭載されており、ライタが無くとも書き込めます。
ソフト開発環境は、Arduino IDE という統合開発環境が用意されており、これ一つでコンパイルも書き込みもできます。

Arduino IDE をインストールし、Arduino ボードと PC を USB で繋げば、もう準備完了です。
セットアップの簡単さ、利用の手軽さはトップクラスでしょう。

### Raspberry Pi

Arduino に並んで有名なマイコンボードといえば、Raspberry Pi。
ARM アーキテクチャのプロセッサを搭載しています。
Linux OS が動かせるほどのスペックを持っており、HDMI 映像出力があるのが特徴です。
もちろんブラウザなんかも動きますので、そのまま PC として使っていくことも可能です。

れっきとした一つの PC として動作するので、機械学習、画像解析、小型サーバとしての活用も可能です。
普通のデスクトップ PC 等と違うのは、非常に小型である点と GPIO がある点でしょう。

使い始めるには、SD カードに OS イメージを書き込み、OS をインストールする必要があります。
セットアップの手軽さとしては、Arduino よりは劣ります。

### ARM系マイコンボード / Mbed

Arduino や Raspberry Pi に対して、こちらは少々マイナーです。
上記のプラットフォームとは少々異なった形態をとっています。

前述の通り、ARM のチップを製造しているのは 1社だけではないので、チップもボードも多種多様あります。(特別これだけが有名というものも恐らく無いです。)
同じアーキテクチャであるため、ソフト開発環境をほぼ共通にすることができます。
ARM マイコンボードのソフト開発に共通で利用できるよう構築された開発環境が、Mbed です。
Mbed というのは、ARM社主導の ARM系マイコンボード、IoT 開発プラットフォームです。
Mbed に対応しているマイコンボードは、以下のページで確認できます。

Development boards | Mbed
<https://os.mbed.com/platforms/>

液晶モジュールがついているものや、イーサネットモジュール、無線モジュールがついているものがありますね。
モジュールを自力で取り付けても良いですが、このボードでは初めから実装されているという点が違います。

開発環境は、Mbed Compiler という、ブラウザ上で動作する IDE が用意されています。(要アカウント登録, 無料)
ブラウザ上でコードを書き、コンパイルが通るとバイナリファイルがダウンロードされます。
ARM系マイコンボードを USB で PC と接続すると、マイコンボードは USB メモリとして認識されます。
その USB メモリ判定のマイコンボードにバイナリファイルをコピーすることで、書き込みが完了します。

追加のドライバ等は全く用いず、クロスプラットフォームに開発ができるのが Mbed の特徴です。
セットアップの難易度は、Arduino に並んで手軽でしょう。

## まとめ

さて、各マイコンの特徴を踏まえて、マイコン選びはざっと以下のような感じでしょうか。

* ユニバーサル基板に IC 実装とか、割と本格的なデバイス製作なら PIC or AVR
  * 今現在は PIC と AVR の差はあんまり無さそう。どっちが人気とか強いとかも無さそう。
* とりあえず GPIO でちょっくら遊びたい、お手軽電子工作なら Arduino or ARM系マイコンボード
* 画像解析とか簡易サーバとかパワフルなことをするなら Raspberry Pi
* 無線とかネットワーク等、IoT 関連を手軽に始めるなら ARM系マイコンボード