Featured image of post PICマイコンについてざっくり全体像理解

PICマイコンについてざっくり全体像理解

目次

背景

  • PICマイコンの理解の為に調べた事
  • 特に、PIC16F18857について
  • AIにデータシートを見てもらいながらまとめたメモ

PIC16F18857の特徴

項目内容
CPU8ビット PIC16系 RISC
最大クロック32 MHz
命令数49命令
Flash56 KB、32K words
SRAM4 KB
EEPROM256 bytes
I/O25本、うち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以外にこういう部品が入っている。

1
2
3
4
5
6
7
CPU          → プログラムを実行する頭脳
タイマ       → 時間を数える
ADC          → 電圧を数値に変換する
PWM          → モーターやLEDの強さを制御する
CLC          → 簡単な論理回路を作る
通信回路     → UART / SPI / I2C など
監視回路     → 暴走検出、エラー検出など

タイマ

タイマは、マイコン内部で時間を数える機能。

たとえば、

1
2
3
4
5
1msごとに処理する
LEDを0.5秒ごとに点滅する
10秒経ったらモーターを止める
PWM信号を作る
入力信号の長さを測る

などに使う。

ビットの違いは以下:

  • 8ビットタイマ → 短い時間向き(0~255)
  • 16ビットタイマ → より長い時間・高精度な測定向き(0~65535)

HLT

  • HLT は Hardware Limit Timer の略
  • 日本語っぽく言うと、ハードウェア制限タイマ
  • 普通のタイマより少し賢くて、信号の時間幅や異常な長さを監視する用途に使える

例えば、

1
2
3
4
入力信号が長すぎる
パルスが来ない
一定時間内に反応がない
モーター制御信号が異常

のような状況を検出するのに使える。 ソフトウェアでずっと監視しなくても、タイマ側で判定できるのが利点。

WWDT

  • WWDT は Windowed Watchdog Timer の略
  • これはマイコンの暴走監視機能
  • 通常のWatchdog Timerは、プログラムが暴走して止まったときにマイコンをリセットするための機能

たとえば、プログラムが正常なら定期的に、

1
私は正常に動いています

という合図をWatchdogに送っている。

でもプログラムが暴走して、その合図を送れなくなると、

1
おかしい。リセットしよう。

となる。

WWDTの Windowed は、「決められた時間範囲内でだけ合図してよい」という意味。

つまり、

1
2
遅すぎてもダメ
早すぎてもダメ

これにより、単にプログラムが止まっただけでなく、異常に速くループしているような不具合も検出しやすくなる。

CLC

  • CLC は Configurable Logic Cell の略
  • 日本語では、設定可能な論理セル
  • 簡単に言うと、マイコン内部に小さな論理回路を作れる機能

たとえば、

1
2
3
4
5
6
AND
OR
XOR
NOT
フリップフロップ
ラッチ

のような回路を、マイコンの中で構成できる。

普通なら、下のような処理はCPUでやる。

1
2
3
入力Aを読む
入力Bを読む
AとBが両方1なら出力を1にする

でもCLCを使うと、CPUを使わずにハードウェアだけでできる。

たとえば、

1
2
スイッチA AND スイッチB → 出力ON
PWM信号 AND 安全許可信号 → モーター駆動

のようなことができる。

CWG

  • CWG は Complementary Waveform Generator の略
  • 日本語では、相補波形生成器
  • 主にモーター制御や電源制御で使う
  • 「相補」というのは、片方がONのとき、もう片方がOFFになるような信号
1
2
信号A:  ON  OFF ON  OFF
信号B:  OFF ON  OFF ON

のような関係。

  • たとえば、Hブリッジやハーフブリッジでモーターを駆動するときに使う
  • 重要なのは、上下のトランジスタが同時にONになるとショートして危険なので、CWGではデッドタイムという少しの隙間時間を入れられる
1
2
3
上側OFF
少し待つ
下側ON

という制御ができる。

NCO

  • NCO は Numerically Controlled Oscillator の略
  • 日本語では、数値制御発振器
  • 簡単に言うと、設定した周波数のパルスや波形を作る機能

たとえば、

1
2
3
4
1kHzの信号を出す
10kHzのパルスを出す
ブザー用の音を作る
一定周期のクロック信号を作る

などに使える。

タイマでも似たことはできるが、NCOは周波数を細かく設定しやすいのが特徴。

SMT

  • SMT は Signal Measurement Timer の略
  • 日本語では、信号測定タイマ
  • 外部から入ってくる信号の時間的な特徴を測るための機能

たとえば、以下などに使う。

1
2
3
4
5
パルス幅を測る
周期を測る
周波数を測る
HIGH時間を測る
LOW時間を測る

例として、センサーからパルスが出てくる場合、下のようなタイプのセンサーがある。

1
2
パルスの幅が長い → 測定値が大きい
パルスの幅が短い → 測定値が小さい

そういう信号を読むのに便利。

CRC/SCAN

  • これはエラー検出やメモリ検査系の機能
  • CRC は Cyclic Redundancy Check の略
  • 日本語では、巡回冗長検査
  • 簡単に言うと、データが壊れていないか確認するための計算

たとえば、以下などを確認するときに使う。

1
2
3
通信で受け取ったデータが正しいか
Flash内のプログラムが壊れていないか
保存データが壊れていないか

SCAN

  • SCAN は、マイコン内部のFlashメモリなどを順番に読みながらCRCチェックする機能

つまり、以下などの用途。

1
2
3
プログラムメモリをスキャンする
CRCを計算する
異常がないか確認する

信頼性が必要な機器では役に立つ。

PWM

  • PWM は Pulse Width Modulation の略
  • 日本語では、パルス幅変調
  • ON/OFFを高速に繰り返して、平均的な出力の強さを変える方法

たとえばLEDを考えると、以下のような制御ができる。

1
2
3
ずっとON        → 明るい
半分だけON      → 半分くらいの明るさ
少しだけON      → 暗い

PWMは、以下などでよく使う。

1
2
3
4
5
LEDの明るさ調整
モーター速度制御
ブザー音
サーボ制御
電源制御

デューティ比

  • PWMで重要なのがデューティ比。
  • デューティ比 = ON時間の割合

たとえば、以下のような意味。

1
2
3
25% → 25%の時間だけON
50% → 半分ON、半分OFF
90% → ほとんどON

ロジック機能

ここでいうロジック機能は、主にCLCのような機能を指す。

つまり、簡単な論理処理を、CPUではなくハードウェアで行う機能。

1
2
3
4
入力AがONかつ入力BがONなら出力ON
入力Aまたは入力BがONなら出力ON
信号を反転する
複数の条件を組み合わせる

3つのメモリ

Flashメモリとは

  • Flashメモリは、マイコンの中にある「プログラム保存場所」
  • 下のようなプログラムを書いたら、それがコンパイルされて、このFlashに書き込まれる
1
2
3
LEDを点滅させる
センサーを読む
UARTで送信する
  • 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を使う
1
2
int count;
char buffer[32];
  • PIC16F18857では、4096B SRAM
  • なので、4096バイト = 4KB の作業用メモリがある

EEPROM

  • EEPROMは、電源を切っても残るデータ保存用メモリ
  • PIC16F18857では、256B EEPROM
  • つまり、256バイトなので大きくはない
  • でも、設定値を保存するには十分なことが多い

例:

1
2
3
4
5
モーター速度設定
センサー補正値
起動回数
ユーザー設定
最後に選んだモード
  • Flashも電源を切っても残るが、基本的にはプログラム用
  • EEPROMは、プログラム実行中に小さな設定データを書き換える用途に向いている

3つのメモリの違い

種類電源OFFで残る?主な用途
Flash残るプログラム本体
SRAM消える実行中の変数、一時データ
EEPROM残る設定値、記録データ

I/Oとは

  • I/Oは、Input / Output の略
  • つまり、マイコンのピンを使って次ができる
1
2
入力 Input  : スイッチを読む、センサー信号を読む
出力 Output : LEDを光らせる、リレーを動かす、ブザーを鳴らす
  • PIC16F18857では、最大で25本くらいのピンを入出力に使える
  • ただし、28ピンのマイコンでも全部が自由に使えるわけではない
  • 電源ピン、GNDピン、リセット用ピンなどがあるため、実際のI/O数は25本

基本的なピン

  • VDD → 電源+
  • VSS → GND
  • MCLR → リセット端子
  • ICSPCLK → 書き込みクロック
  • ICSPDAT → 書き込みデータ

ちなみに、DとSの意味は、昔のMOSトランジスタ用語に由来する。

  • D = Drain
  • S = Source

Portピン

PICではピン名にこういう名前が付く。

1
2
3
4
5
6
7
RA0
RA1
RA2
RB0
RB1
RC0
...

これは下の意味:

1
2
3
4
5
R A 0
│ │ │
│ │ └─ 0番目
│ └─── Aポート
└───── Register / Port系の名前

ピンはグループごとに分かれている。

1
2
3
PORTA: RA0, RA1, RA2, RA3...
PORTB: RB0, RB1, RB2...
PORTC: RC0, RC1, RC2...

次のように対応する。

1
2
3
4
RA0 = PORTAの0番ピン
RB3 = PORTBの3番ピン
RC6 = PORTCの6番ピン
RE3 = PORTEの3番ピン

GPIOを使う時の基本レジスタ

レジスタ役割
TRISx入力か出力かを決める
LATx出力値を書き込む
PORTx実際のピン状態を読む
ANSELxアナログ入力にするか、デジタルI/Oにするかを決める
WPUx弱プルアップを使うか決める

レジスタ

以下のようなレジスタがある。

  • TRIS = 入力/出力を決める
  • LAT = 出力する値を書く
  • PORT = 入力状態を読む
  • ANSEL = アナログ/デジタルを切り替える

例えば、RA0の場合以下のようになる。

名前意味
TRISA0入力か出力かを決める
RA0 / PORTA0ピンの現在の状態を読む
LATA0出力値を設定する
ANSA0 / ANSELA0アナログ入力にするかデジタルI/Oにするかを決める

DIP

  • DIP は Dual Inline Package の略
  • 日本語だと デュアル・インライン・パッケージ、つまり 2列に足が並んでいるICパッケージのこと

こんな形のもの。

1
2
3
4
5
6
7
8
   ┌───────────────┐
1 ─┤               ├─ 28
2 ─┤               ├─ 27
3 ─┤               ├─ 26
   │     IC本体     │
...│               │...
14─┤               ├─ 15
   └───────────────┘

DIP系以外のピン配置

名前意味特徴
DIP / PDIP足が左右2列に出ているブレッドボード向き
SPDIPShrink DIPDIPより少し小型
SOIC表面実装IC基板に直接はんだ付け
SSOP小型の表面実装ICSOICよりさらに細かい
QFN足が外に出ていない表面実装小型・高密度だが手作業は難しめ

ICSP

ICSPとは

  • In Circuit Serial Programmingの略
  • PICを基板等に実装したままの状態で、内蔵メモリにプログラムを 書き込む方法のこと
  • つまり、ICSP方式でPICのプログラミングを行えば、いちいち PICをソケットからはずしてプログラマのソケットに差し換える手間が不要

ICSPのイメージ

イメージは以下の感じ。

1
2
3
4
5
6
7
PICkit「データ線に 1 を出したよ」
PICkit「クロックをカチッ」
PIC「今の値は 1 だな」

PICkit「データ線に 0 を出したよ」
PICkit「クロックをカチッ」
PIC「今の値は 0 だな」

ICSPでクロック線を分ける理由

書き込みは以下のような感じ。

1
2
3
ICSPDAT:  1   0   1   1   0
ICSPCLK: ↑   ↑   ↑   ↑   ↑
          読む 読む 読む 読む 読む

「データが来たら読む」方式もあり、代表例はUART。

1
2
3
4
UART:
TX → データ送信
RX → データ受信
GND → 基準
  • UARTにはクロック線がない
  • その代わり、送信側と受信側で以下のように通信速度を事前に合わせる必要がある
1
2
9600bps
115200bps

さらに、UARTは以下のようなルールが必要。

1
2
3
スタートビット
データビット
ストップビット

ADC

ADCとは

  • ADCは、Analog to Digital Converter の略
  • 日本語では、アナログ・デジタル変換器
  • マイコンは基本的にデジタルの世界で動いている
1
2
3
4
0
1
HIGH
LOW
  • 上のような信号は扱いやすい
  • でも現実のセンサーは下のような中途半端な電圧を出す
1
2
3
4
0.73V
1.24V
2.58V
4.01V
  • このようなアナログ電圧を、マイコンが扱える数値に変換するのがADC
  • たとえば、5V基準で10ビットADCなら、下のように変換する
1
2
3
0V   → 0
2.5V → 約512
5V   → 1023

ADC2とは

  • ADC2は、Microchipが使っている名称で、通常のADCより少し高機能なADC
  • 普通のADCは、電圧を数値に変えるだけ
  • ADC2では、それに加えて、以下もしてくれる
1
2
3
4
5
平均化
フィルタ
しきい値判定
オーバーサンプリング
簡単な演算処理
  • などをマイコン内部で補助できる
  • つまり、CPUで全部計算しなくても、ADC側である程度処理してくれる機能がある

24ch ADC2の意味

  • ADCで読める入力チャンネルが24個あるという意味
  • ここでの ch は channel、つまりチャンネル

たとえば、下のように、複数のピンや内部信号をADCに接続できる。

1
2
3
4
5
AN0
AN1
AN2
AN3
...

注意点:

  • 24個のADCが入っているわけではない
  • 多くの場合、1つのADC回路に対して、24個の入力候補を切り替えて読む、という仕組み

イメージとしては、

1
2
3
4
5
6
7
センサー1
センサー2
センサー3
...
センサー24
   ↓ 切り替えスイッチ
ADC本体

なので、24個を完全に同時に測るというより、順番に切り替えて測る感じ。

通信回路

PIC16F18857には MSSP という通信モジュールが入っていて、これを使って SPI / I2C ができる。

イメージ:

1
2
3
4
PIC16F18857
├─ UART  : PCやシリアル通信向け
├─ SPI   : 高速なセンサー、SDカード、表示器など
└─ I2C   : 温度センサー、OLED、RTC、EEPROMなど

MSSP

  • Master Synchronous Serial Port
  • SPIやI2Cを扱うためのモジュール

UART

  • UART は、かなりシンプルなシリアル通信
  • 正式には Universal Asynchronous Receiver/Transmitter
  • クロック線なしで、送信用と受信用の2本の線でデータをやり取りする通信

UARTで使う線

UARTで使う線は、基本はこの2本。

1
2
TX : Transmit  送信
RX : Receive   受信

実際にはGNDも必要なので、最低限はこう。

1
2
3
PIC TX  → 相手 RX
PIC RX  ← 相手 TX
PIC GND ─ 相手 GND

ポイントは、TXとRXはクロス接続すること。

1
2
PICのTX → 相手のRX
PICのRX ← 相手のTX

UARTのイメージ

UARTは、送る側と受ける側があらかじめ通信速度を決めておく。

1
2
9600 bps
115200 bps

このような通信速度を ボーレート と呼ぶ。

  • UARTにはクロック線がないので、
  • 「1秒間に何ビット送るか、先に決めておこう」
  • という方式

UARTで送られるデータ

例えば、A という文字を送ると、実際にはビット列として送られる。

1
2
3
スタートビット
データビット
ストップビット
  • よくある形式は、8N1
  • 意味は、以下に
1
2
3
8 : データ8ビット
N : パリティなし
1 : ストップビット1個

UARTの用途

UARTはこういう場面でよく使う。

1
2
3
4
5
6
PCとのシリアル通信
USBシリアル変換器との通信
Bluetoothモジュール
GPSモジュール
他のマイコンとの簡単な通信
デバッグ用のログ出力

たとえばPICからPCへ、

1
2
3
Temperature = 25.3
Motor ON
Error detected

みたいな文字列を送るのに便利

I2C

  • I2C は Inter-Integrated Circuit の略
  • 読み方はだいたい アイ・スクエアド・シー または アイ・ツー・シー
  • IC同士を、少ない配線でつなぐための通信方式
  • 温度センサー、OLEDディスプレイ、RTC、EEPROM、加速度センサーなどでよく使う

I2Cで使う線

I2Cで使う線は基本的に2本。

1
2
SCL : クロック線
SDA : データ線

意味は下:

SCL : クロック線 SDA : データ線

接続イメージはこんな感じ。

1
2
3
PIC SCL ─── センサー SCL
PIC SDA ─── センサー SDA
PIC GND ─── センサー GND

ただし、I2Cでは普通 プルアップ抵抗 が必要。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
VDD
[4.7kΩ]
SCL ───── PIC / センサー / OLED

VDD
[4.7kΩ]
SDA ───── PIC / センサー / OLED
  • 抵抗値はよく 4.7kΩ や 10kΩ が使われる
  • モジュール基板だと、すでにプルアップ抵抗が載っていることもある

I2Cの大きな特徴

I2Cの強いところは、SCLとSDAの2本だけで複数の部品をつなげること。

1
2
3
4
5
PIC
├─ 温度センサー
├─ OLED
├─ RTC
└─ EEPROM

配線としてはこういうイメージ。

1
2
3
4
5
6
7
8
9
SCL ─┬─ 温度センサー
     ├─ OLED
     ├─ RTC
     └─ EEPROM

SDA ─┬─ 温度センサー
     ├─ OLED
     ├─ RTC
     └─ EEPROM

SPIだと相手ごとにCS線が必要だった。

1
2
3
4
SPI:
CS1 → センサー1
CS2 → センサー2
CS3 → OLED

でもI2Cでは、相手を アドレス で選ぶ。

1
2
3
4
温度センサー : 0x48
OLED        : 0x3C
RTC         : 0x68
EEPROM      : 0x50

なので、PICはこういう感じで話す。

1
2
3
4
5
PIC「0x48番のセンサーさん、温度をください」
温度センサー「はい、25.3℃です」

PIC「0x3C番のOLEDさん、文字を表示して」
OLED「了解です」

ここがI2Cのキモ。 線で選ぶSPI、アドレスで選ぶI2C という感じ。

I2CのMasterとSlave

I2Cにも、基本的に Master と Slave がある。

1
2
Master : 通信を開始して、クロックを出す側
Slave  : Masterに呼ばれて応答する側

PICがセンサーを読む場合、たいていPICがMaster。

1
2
3
4
PIC       = Master
センサー  = Slave
OLED      = Slave
RTC       = Slave

最近の資料では、Master/Slaveの代わりに、

1
Controller / Target

のような言い方をすることもある。

初心者のうちは、

1
2
Master = 話しかける側
Slave  = 呼ばれて返事する側

くらいでOK。

I2C通信の流れ

例えば、PICが温度センサーから値を読む場合:

  1. PICが通信開始を知らせる
  2. PICがセンサーのアドレスを送る
  3. PICが「読みたい」と伝える
  4. センサーがデータを返す
  5. PICが通信終了を知らせる

I2Cでは通信の開始と終了に名前がある。

1
2
START 条件
STOP 条件

ざっくり図にするとこう。

1
2
3
4
5
6
7
8
9
START
アドレス送信
Read / Write 指定
データ送受信
STOP

ReadとWrite

I2Cでは、相手のアドレスに加えて、読み書きを指定する。

1
2
Read  : 相手からデータを読む
Write : 相手にデータを書く

例:

1
2
3
4
温度センサーから温度を読む → Read
OLEDに表示データを送る     → Write
RTCに時刻を設定する        → Write
EEPROMから設定値を読む     → Read

ACKとNACK

  • I2Cでは、データを送ったあとに相手が、受け取ったことを送る。
  • これを ACK と呼ぶ
1
ACK = Acknowledge

逆に、返事がない場合は NACKとなる。

1
NACK = Not Acknowledge

イメージはこう。

1
2
3
4
5
PIC「0x48番さん、いますか?」
センサー「います」 ← ACK

PIC「0x77番さん、いますか?」
返事なし          ← NACK

I2Cのアドレス

I2C機器にはそれぞれアドレスがある。

よくある例:

1
2
3
4
OLED SSD1306      : 0x3C
RTC DS3231        : 0x68
EEPROM 24LC256    : 0x50
温度センサー系    : 0x48

このアドレスによって、同じSCL/SDAにつながっている複数のICを区別する。

1
2
3
PIC「0x3Cさん、画面表示して」
PIC「0x68さん、現在時刻をください」
PIC「0x50さん、保存データをください」

I2Cの速度

モード速度
Standard-mode100 kHz
Fast-mode400 kHz
Fast-mode Plus1 MHz

プルアップ抵抗

  • プルアップ抵抗は、信号線をVDD側へ弱く引っ張っておくための抵抗
  • I2CのSCL/SDAは、各ICが強くHIGHを出すのではなく、必要なときだけLOWに引っ張る方式で動く
  • そのため、誰もLOWにしていないときに信号線をHIGHへ戻すため、SCL/SDAにはプルアップ抵抗が必要になる
  • よく使う値は4.7kΩや10kΩ

SPI

  • SPI は、UARTより高速で、クロック線を使う同期式通信
  • 正式には Serial Peripheral Interface

基本は4本。

1
2
3
4
SCK  : クロック
MOSI : Master Out Slave In
MISO : Master In Slave Out
SS/CS: 相手を選ぶ線

最近は用語として MOSI/MISO の代わりに、SDO/SDI や COPI/CIPO と呼ぶ場合もある。

基本イメージ(PIC側がMasterの場合)

1
2
3
4
5
PIC SCK  → センサー SCK
PIC MOSI → センサー SDI
PIC MISO ← センサー SDO
PIC CS   → センサー CS
GND      ─ GND

SPIのMasterとSlave

SPIでは、基本的に片方が Master、もう片方が Slave になる。

1
2
Master : クロックを出して通信を支配する側
Slave  : Masterに従って応答する側

PICがセンサーを読むなら、たいていPICがMaster。

1
2
PIC「今から読むぞ。クロック出すぞ」
センサー「はい、そのタイミングでデータ返します」

SPIのCSとは

  • SPIでは、複数の部品をつなげることがでる
  • そのとき、どの部品と話すかを選ぶ線が CS
1
2
CS = Chip Select
SS = Slave Select

例えば、3つのSPI部品をつなぐならこうなる。

1
2
3
4
5
6
7
SCK  ─ 全部に接続
MOSI ─ 全部に接続
MISO ─ 全部に接続

CS1  ─ センサー1
CS2  ─ センサー2
CS3  ─ 液晶

PICがセンサー1と話したいときだけ、以下のようにする。

1
2
3
CS1 = LOW
CS2 = HIGH
CS3 = HIGH

多くのSPI部品は、CSがLOWのとき選択中となる。

SPIの特徴

SPIはかなり速い。

1
2
3
UART : 比較的ゆっくり、配線少なめ
SPI  : 速い、ただし線が多め
I2C  : 線は少ない、複数デバイスに便利

SPIはクロック線があるので、UARTのように「ボーレートがズレて読めない」という問題が起きにくい。

UART / SPI / I2C の比較

通信方式線の数相手の選び方特徴
UARTTX/RX基本1対1PC通信やデバッグ向き
SPISCK/MOSI/MISO/CSCS線高速、線は多め
I2CSCL/SDAアドレス線が少なく複数ICに便利

かなり雑に言うと、

1
2
3
UART = 1対1で文字を送るのが得意
SPI  = 高速にデータをやり取りするのが得意
I2C  = 少ない線でたくさんのICと話すのが得意

ざっくりまとめ

PIC16F18857のこの仕様は、こう読めばOK。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
56KB Flash
→ プログラムを入れる場所

4KB SRAM
→ 動作中の変数を置く場所

256B EEPROM
→ 電源OFF後も残したい小さな設定値を置く場所

25 I/O
→ 外部部品とつなぐピンが25本ある

24ch ADC2
→ 最大24系統のアナログ電圧を数値として読める

また、内蔵周辺機能は次のまとめになる。

1
2
3
4
5
6
ADC  → 電圧を読む
PWM  → 強さを調整して出す
タイマ → 時間を数える
CLC  → 条件判断をハードウェアでやる
WWDT → 暴走を監視する
CRC  → データ破損を調べる

参考文献

Built with Hugo
テーマ StackJimmy によって設計されています。