背景
- PICマイコンの理解の為に調べた事
- 特に、PIC16F18857について
- AIにデータシートを見てもらいながらまとめたメモ
PIC16F18857の特徴
| 項目 | 内容 |
|---|---|
| CPU | 8ビット PIC16系 RISC |
| 最大クロック | 32 MHz |
| 命令数 | 49命令 |
| Flash | 56 KB、32K words |
| SRAM | 4 KB |
| EEPROM | 256 bytes |
| I/O | 25本、うち1本は入力専用 |
| 動作電圧 | PIC16F18857は 2.3〜5.5 V |
| 温度範囲 | Industrial: -40〜85℃、Extended: -40〜125℃ |
| パッケージ | 28ピン SPDIP / SOIC / SSOP / QFN など |
データシートのファミリ表で、PIC16(L)F18857が 32768 words / 56 KB Flash、256B EEPROM、4096B SRAM、25 I/O、24ch ADC2 と示されている。
| 表記 | 意味 | 何に使うか |
|---|---|---|
| 32768 words / 56 KB Flash | プログラムを保存する容量 | 書いたCコードや機械語を入れる |
| 256B EEPROM | 電源を切っても残る小さなデータ保存領域 | 設定値、校正値、カウンタなど |
| 4096B SRAM | プログラム実行中に使う一時メモリ | 変数、配列、受信バッファなど |
| 25 I/O | 入出力ピンの数 | LED、スイッチ、センサー、モーター制御など |
| 24ch ADC2 | アナログ電圧を読める入力数 | ボリューム、温度センサー、電圧測定など |
内蔵周辺機能
内蔵周辺機能の全体像
CPU本体とは別に、PIC16F18857の中に入っている便利な小回路が入っている。
マイコンの中には、CPU以外にこういう部品が入っている。
| |
タイマ
タイマは、マイコン内部で時間を数える機能。
たとえば、
| |
などに使う。
ビットの違いは以下:
- 8ビットタイマ → 短い時間向き(0~255)
- 16ビットタイマ → より長い時間・高精度な測定向き(0~65535)
HLT
- HLT は Hardware Limit Timer の略
- 日本語っぽく言うと、ハードウェア制限タイマ
- 普通のタイマより少し賢くて、信号の時間幅や異常な長さを監視する用途に使える
例えば、
| |
のような状況を検出するのに使える。 ソフトウェアでずっと監視しなくても、タイマ側で判定できるのが利点。
WWDT
- WWDT は Windowed Watchdog Timer の略
- これはマイコンの暴走監視機能
- 通常のWatchdog Timerは、プログラムが暴走して止まったときにマイコンをリセットするための機能
たとえば、プログラムが正常なら定期的に、
| |
という合図をWatchdogに送っている。
でもプログラムが暴走して、その合図を送れなくなると、
| |
となる。
WWDTの Windowed は、「決められた時間範囲内でだけ合図してよい」という意味。
つまり、
| |
これにより、単にプログラムが止まっただけでなく、異常に速くループしているような不具合も検出しやすくなる。
CLC
- CLC は Configurable Logic Cell の略
- 日本語では、設定可能な論理セル
- 簡単に言うと、マイコン内部に小さな論理回路を作れる機能
たとえば、
| |
のような回路を、マイコンの中で構成できる。
普通なら、下のような処理はCPUでやる。
| |
でもCLCを使うと、CPUを使わずにハードウェアだけでできる。
たとえば、
| |
のようなことができる。
CWG
- CWG は Complementary Waveform Generator の略
- 日本語では、相補波形生成器
- 主にモーター制御や電源制御で使う
- 「相補」というのは、片方がONのとき、もう片方がOFFになるような信号
| |
のような関係。
- たとえば、Hブリッジやハーフブリッジでモーターを駆動するときに使う
- 重要なのは、上下のトランジスタが同時にONになるとショートして危険なので、CWGではデッドタイムという少しの隙間時間を入れられる
| |
という制御ができる。
NCO
- NCO は Numerically Controlled Oscillator の略
- 日本語では、数値制御発振器
- 簡単に言うと、設定した周波数のパルスや波形を作る機能
たとえば、
| |
などに使える。
タイマでも似たことはできるが、NCOは周波数を細かく設定しやすいのが特徴。
SMT
- SMT は Signal Measurement Timer の略
- 日本語では、信号測定タイマ
- 外部から入ってくる信号の時間的な特徴を測るための機能
たとえば、以下などに使う。
| |
例として、センサーからパルスが出てくる場合、下のようなタイプのセンサーがある。
| |
そういう信号を読むのに便利。
CRC/SCAN
- これはエラー検出やメモリ検査系の機能
- CRC は Cyclic Redundancy Check の略
- 日本語では、巡回冗長検査
- 簡単に言うと、データが壊れていないか確認するための計算
たとえば、以下などを確認するときに使う。
| |
SCAN
- SCAN は、マイコン内部のFlashメモリなどを順番に読みながらCRCチェックする機能
つまり、以下などの用途。
| |
信頼性が必要な機器では役に立つ。
PWM
- PWM は Pulse Width Modulation の略
- 日本語では、パルス幅変調
- ON/OFFを高速に繰り返して、平均的な出力の強さを変える方法
たとえばLEDを考えると、以下のような制御ができる。
| |
PWMは、以下などでよく使う。
| |
デューティ比
- PWMで重要なのがデューティ比。
- デューティ比 = ON時間の割合
たとえば、以下のような意味。
| |
ロジック機能
ここでいうロジック機能は、主にCLCのような機能を指す。
つまり、簡単な論理処理を、CPUではなくハードウェアで行う機能。
| |
3つのメモリ
Flashメモリとは
- Flashメモリは、マイコンの中にある「プログラム保存場所」
- 下のようなプログラムを書いたら、それがコンパイルされて、このFlashに書き込まれる
| |
- PIC16F18857では、32768 words / 56 KB Flashとある
- ここでの word は英単語ではなく、PICの命令1個分の単位
- PIC16系では1命令がだいたい14ビット
$$ 32768 words × 14 bit = 約56 KB $$
- つまり、約56KBぶんのプログラムを入れられるという意味
SRAMとは
- SRAMは、プログラムが動いている間だけ使う作業用メモリ
- PCでいうRAMに近い
- 例えば、Cの変数や配列がSRAMを使う
| |
- PIC16F18857では、4096B SRAM
- なので、4096バイト = 4KB の作業用メモリがある
EEPROM
- EEPROMは、電源を切っても残るデータ保存用メモリ
- PIC16F18857では、256B EEPROM
- つまり、256バイトなので大きくはない
- でも、設定値を保存するには十分なことが多い
例:
| |
- Flashも電源を切っても残るが、基本的にはプログラム用
- EEPROMは、プログラム実行中に小さな設定データを書き換える用途に向いている
3つのメモリの違い
| 種類 | 電源OFFで残る? | 主な用途 |
|---|---|---|
| Flash | 残る | プログラム本体 |
| SRAM | 消える | 実行中の変数、一時データ |
| EEPROM | 残る | 設定値、記録データ |
I/Oとは
- I/Oは、Input / Output の略
- つまり、マイコンのピンを使って次ができる
| |
- PIC16F18857では、最大で25本くらいのピンを入出力に使える
- ただし、28ピンのマイコンでも全部が自由に使えるわけではない
- 電源ピン、GNDピン、リセット用ピンなどがあるため、実際のI/O数は25本
基本的なピン
- VDD → 電源+
- VSS → GND
- MCLR → リセット端子
- ICSPCLK → 書き込みクロック
- ICSPDAT → 書き込みデータ
ちなみに、DとSの意味は、昔のMOSトランジスタ用語に由来する。
- D = Drain
- S = Source
Portピン
PICではピン名にこういう名前が付く。
| |
これは下の意味:
| |
ピンはグループごとに分かれている。
| |
次のように対応する。
| |
GPIOを使う時の基本レジスタ
| レジスタ | 役割 |
|---|---|
TRISx | 入力か出力かを決める |
LATx | 出力値を書き込む |
PORTx | 実際のピン状態を読む |
ANSELx | アナログ入力にするか、デジタルI/Oにするかを決める |
WPUx | 弱プルアップを使うか決める |
レジスタ
以下のようなレジスタがある。
- TRIS = 入力/出力を決める
- LAT = 出力する値を書く
- PORT = 入力状態を読む
- ANSEL = アナログ/デジタルを切り替える
例えば、RA0の場合以下のようになる。
| 名前 | 意味 |
|---|---|
TRISA0 | 入力か出力かを決める |
RA0 / PORTA0 | ピンの現在の状態を読む |
LATA0 | 出力値を設定する |
ANSA0 / ANSELA0 | アナログ入力にするかデジタルI/Oにするかを決める |
ICSP
ICSPとは
- In Circuit Serial Programmingの略
- PICを基板等に実装したままの状態で、内蔵メモリにプログラムを 書き込む方法のこと
- つまり、ICSP方式でPICのプログラミングを行えば、いちいち PICをソケットからはずしてプログラマのソケットに差し換える手間が不要
ICSPのイメージ
イメージは以下の感じ。
| |
ICSPでクロック線を分ける理由
書き込みは以下のような感じ。
| |
「データが来たら読む」方式もあり、代表例はUART。
| |
- UARTにはクロック線がない
- その代わり、送信側と受信側で以下のように通信速度を事前に合わせる必要がある
| |
さらに、UARTは以下のようなルールが必要。
| |
ADC
ADCとは
- ADCは、Analog to Digital Converter の略
- 日本語では、アナログ・デジタル変換器
- マイコンは基本的にデジタルの世界で動いている
| |
- 上のような信号は扱いやすい
- でも現実のセンサーは下のような中途半端な電圧を出す
| |
- このようなアナログ電圧を、マイコンが扱える数値に変換するのがADC
- たとえば、5V基準で10ビットADCなら、下のように変換する
| |
ADC2とは
- ADC2は、Microchipが使っている名称で、通常のADCより少し高機能なADC
- 普通のADCは、電圧を数値に変えるだけ
- ADC2では、それに加えて、以下もしてくれる
| |
- などをマイコン内部で補助できる
- つまり、CPUで全部計算しなくても、ADC側である程度処理してくれる機能がある
24ch ADC2の意味
- ADCで読める入力チャンネルが24個あるという意味
- ここでの ch は channel、つまりチャンネル
たとえば、下のように、複数のピンや内部信号をADCに接続できる。
| |
注意点:
- 24個のADCが入っているわけではない
- 多くの場合、1つのADC回路に対して、24個の入力候補を切り替えて読む、という仕組み
イメージとしては、
| |
なので、24個を完全に同時に測るというより、順番に切り替えて測る感じ。
ざっくりまとめ
PIC16F18857のこの仕様は、こう読めばOK。
| |
また、内蔵周辺機能は次のまとめになる。
| |
