PICには12、16、18シリーズがあります。12シリーズは8ピンのパッケージで、PICのどれかひとつの機能を専用に利用するとき便利です。16シリーズは18ピンから40ピンまで、ピン数が選択できます。大型のPICはすべての機能を含んでいます。必要とする、機能、入出力の端子数で、メモリのサイズで必要な型番を選択してください。
18シリーズは命令が16ビットになり、異なる命令セットになります。
マニュアルは、MicroChip社のwebからPDFをダウンロードできます。英文です。
http://www.microchip.com
16Fシリーズにも多くの型番があります。以下は、メモリサイズや内蔵する周辺機能を表にまとめたものです。クロックの(int)はクロック内臓を意味します。ccp
は、Capture、Comparator、PWM の先頭文字で、計数値の取得やPWM信号の発生を行います。
UARTは非同期通信機能で、PCのCOM端子を利用してデータの送受信を行うことができえう機能です。naはNotAvailableでりようできないこと、avはAvailable:利用可能です。比較器はアナログ信号としての比較、ADはアナログディジタル変換です。
最後のJDMはUARTを利用してPICへのプログラム書き込むを行う回路方式で、書き込み回路とソフトが公開されています。
ここでは、先の章で紹介した 628,648 以外のPICを簡単に紹介します。
ピン | プログラ ムメモリ |
データ メモリ |
EEROM | 入出力 | クロック | ccp | UART | タイマ 8/16 |
比較器 | AD | JDM | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
648A | 18 | 4k | 256 | 256 | 16 | 4Mhz(int) 20MHz |
1 | USART | 2/1 | 2 | na | av |
630 | 1k | 64 | 128 | 12 | 4Mhz(int) 20MHz |
1 | 1/1 | 1 | 10bit/8ch | av | ||
84A | 18 | 1k | 36 | 64 | 13 | 10Nhz | na | na | 1/0 | a | na | av |
873/874 | 28 | 4k | 192 | 368 | 14 | 20MHz | 2 | USART/ SSP |
3/2 | 2 | 10bit/5ch /8ch |
av |
876/877 | 40 | 8k | 368 | 256 | 14 | 20MHz | 2 | USART/ SSP |
3/2 | 2 | 10bit/5ch /8ch |
av |
87 | 18 | 4k/7k | 368 | 256 | 16 | 8Mhz(int) 20MHz |
1 | USART/ SSP |
2/1 | 2 | na | av |
88 | 18 | 4k/7k | 368 | 256 | 16 | 8Mhz(int) 20MHz |
1 | USART/ SSP |
2/1 | 2 | 10bit/5ch | av |
種類 | プログラ ムメモリ |
データ メモリ |
EE ROM |
汎用 IO |
AD 変換 |
コンパ レータ |
CCP PWM |
タイマ | クロック | クロック 内臓 |
635 | 1k | 64 | 128 | 6 | 1 | 2 | 20 | 8 | ||
675 | 1k | 64 | 128 | 6 | 4 | 1 | 2 | 20 | 4 | |
683 | 2k | 128 | 256 | 6 | 6 | 1 | 1 | 3 | 20 | 8 |
現在のところ、16Fシリーズのすべての機能を搭載しています。内部クロックは4Mhz以外に8種から選択可能で、微調整も可能です。Timer1の消費電力が、従来の20μAから、1.8μAに減少しました。また、WDTの周期も設定可能になりました。これらは待機時の消費電力の現象に効果があります。
IOポート、タイマー・PWM、シリアル、以外に10bitアナログ変換、アナログ比較が可能です。
プログラムROMをプログラムで読み書き可能です。
内部クロックの場合、周波数の微調整が可能です。
多分、(現在の)ミドルレンジのすべての機能が詰まっています。
87と88の違いは AD変換機能の有無です。
プログラムメモリは4K,データメモリは368、EEROMは256バイトです。
2007Hと2008H番地にあり、プログラムでは設定できない構成を指定します。プログラムと同時に書き込みます。
CP | CCPMX | DEBUG | WRT1 | WRT0 | CPD | LVP | BOREN | MCLRE | FOSC2 | PWRTEN | WDTEN | FOSC1 | FOSC2 |
CP、CPD:コードとデータを保護
CCPMX:クロックの出力指定(CCP1)
WRT1,0:プログラムによるROM書き込むからの保護
MCLRE:4ピンはMCLRとして利用
IESO | ECMEN |
IESO:
ECMEN:クロックの監視をする
ANS6 | ANS0 |
外部端子を、アナログ入力とするか、ポートAとして利用するかを設定します。1でアナログ入力となります。
ADCS1 | ADCS0 | CHS2 | CHS1 | CHS0 | GO/^DONE | ADON |
ADCS2,0 は、ADCON1のADCS1ビットと共に、AD変換のクロックを指定します。
CHS2,1,0 はアナログの入力を選択します。
選択後、サンプルが終了するまで20μSは必要です
GOを1にすると、変換を開始します。変換が終了するとこのビットが0になります。
ADON: 変換機能を有効にします。0にすると変換機能をオフにするため、消費電力が抑制されます。
ADFM | ADCS2 | VCFG1 | VCFG0 |
ADFM: 読みとりの形式を指定します。0の場合、左詰になりADRESHに先頭8ビット、ADRESLに残りの2ビットが入ります。
1の場合右詰になり、ADRESLに下位8ビット、ADRESHに残りの2ビットが入ります。
AD9 | AD8 | AD2 |
AD1 | AD0 |
AD変換の結果が入ります。ADFMが0のとき、ADRESHの先頭8ビットが入り、ADRESLに残りの2ビットが入ります。
ANSELでアナログ入力として使用する端子を定めます。
ADCS2,ADCS1,ADCS0で、アナログのクロックを定めます。クロックは1.6Mhz以下にします。クロック4MHzの場合、0,0,1 を設定します。
倍率 | ADCS2 | ADCS1,0 | 最大クロック |
---|---|---|---|
2 | 0 | 00 | 1.25 |
4 | 1 | 00 | 2.5 |
8 | 0 | 01 | 5 |
16 | 1 | 01 | 10 |
32 | 0 | 10 | 20 |
64 | 1 | 10 | 20 |
ADFMで読みとりフォーマットを定めます。8ビットで十分の場合、左詰を選択します。
VCFG1,0で、アナログ参照電圧を定めます。0,0 にすると、最大VCC,最低がGNDになります。VREFでこの参照電圧を設定可能です。
CSH2,0で入力チャンネルを定めます。
設定後、入力電圧が確定するまで、20μ秒待ちます。
GOビットを1にします。
GOビットが0になるのを待ちます。
ADRESH,L で結果を読みます。
変換時間は、1ビット当たり1アナログクロックです。4Mhzクロックで利用する場合、0.5Mのクロックですから、20μ秒かかります。したがって、チャンネルを切り替えながら変換をすると、40μ秒が必要です。これに、プログラムでデータを読み出す時間が必要です。したがって、最大200K程度のサンプルが可能です。ただし、SRAMが256バイト程度しかありません。
最大の特徴は入出力ピンの数で、ポートもAからEまで5ポートあります。ただし、A,Eポートは8ビット構成ではありません。16シリーズの機能はほとんど含まれていますが、あとから追加された、内臓クロック、EEROM書き込み機能、などは含まれていません。16F877Aでは含まれています。PWMやシリアル通信は2系統備えています。
電源用端子VDDとグランド端子VSSは左右両側にあります。11/32ピンを共に電源+に、12/31ピンを電源ーに接続してください。片側でも動作しますが、双方を接続するほうが安定した電源を供給できます。
(MicroChip社webページより)
876/873は28ピン構成で、幅は18ピンのPICと同じです。ピン数が少ないので、ポートのD,E が省略され、ピンに3種の機能が割り当てられていますが、機能はほぼ同じです。ただし、AD入力のチャンネル数が少なく、パラレルスレーブ機能は省略されています。
(MicroChip社webページより)
877と874の違いはメモリのサイズです。877のプログラムメモリは8Kですが、874は4kです。データメモリも368と192も違いがあります。
8ピンの中に、ポート、タイマ、アナログ変換機能が組み込まれています。シリアル通信機能や、CCP機能は組み込まれていません。プログラムもメモリ1Kですからコンパイラを利用すると、少し、きついかも知れません。また、データメモリのアドレスが少し変則的で、SFRはすべてバンク1に割り振られています。
629はプログラムメモリが1k、データメモリ64、EEROM128バイトを内蔵しています。6ビットのポートと8,16ビットタイマー、アナログ比較機能があります。
クロックは4MHzの発振回路を内臓し、最大20MHzのクロックで動作します。動作電圧は2Vかた5.5Vまでで、sleep 命令による低電力待機が可能です。
675は629の機能に4ch、10bitのAD変換機能が内蔵されています。このため、ひとつのピンに最大5種の機能が割り当てられています。電源ピンが通常と逆なので要注意。
端子 | 役割 |
VDD | 電源 2〜5V |
GP5/T1CK1/OSC1/CLKIN | 汎用IO、Timer1クロック、発振子、外部クロック入力 |
GP4/T1G/OSC2/CLKOUT | 汎用IO、Timer1ゲート、発振子、クロック出力 |
GP3/MCLR/VPP | 汎用IO、マスタクリア(リセット)、プログラム時電源 |
GP2/AN2/T0CKI/INT/COUT | 汎用IO,アナログ入力、タイマー0クロック入力、 外部割込み、 |
GP1/AN1/CIN-/VREF/ICSPCLK | 汎用IO,アナログ入力、コンパレータ入力、 参照電圧、プログラム時電源クロック |
GP0/AN0/CIN+/ICSPDAT/ULPWU | 汎用IO,アナログ入力、コンパレータ入力、 プログラム時電源クロック、ローパワー覚醒入力 |
VSS | 電源 GND |
ポートは GPIO レジスタの下位6ビットを利用しますが、アナログ関連機能のリセットが必要です。アナログ比較機能の初期設定のために CMCON を、アナログチャンネルの設定のためANSEL の設定が必要です。
bcf STATUS,RP0 clrf GPIO movlw 07h movwf CMCON bsf STATUS ,RP0 clrf ANSEL ;12F675のみ movlw 0ch movwf TRISIO
GPIOを入力として使用する場合、状態変化で割り込むことができます。GP2 を単独の割り込み信号として利用することもできます。他に、タイマー、AD変換、EE書き込み、での割り込みも利用できます。
GIE | PEIE | T0IE | INTE | GPIE | T0IF | INTF | GPIF |
SFRはすべて バンク1に割り振られtいます。
OSCCAL で内部発振(4MHz)を微調整することができます。100000 が中央値で、000000が最小、111111が最大になります。
CAL5 | CLA4 | CAL3 | CLA2 | CLA1 | CLA0 |
コンフィグレーションで設定する PowerOnReset と BrownOutDetect を設定することができます。どちらも、0にすると設定します。
^POR | ^BOD |
#include <12F675.h> #fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOMCLR #use delay(clock = 8000000) //GP0,GP1 にLED接続 //順に点灯、消灯 void main() { while(1){ output_low(PIN_A0); delay_ms(500); output_high(PIN_A0); output_low(PIN_A1); delay_ms(500); output_high(PIN_A1); } }
12F675と同じ8ピン構成ですが、プログラムメモリが2Kに拡張され、CCP 機能が追加されています。データメモリでのSFRの番地も16Fシリーズと同様ですから、16Fシリーズでなれている場合、12F675より利用しやすいでしょう。
GP2端子は6重の機能が割り振られています。
端子 | 役割 |
VDD | 電源 2〜5V |
GP5/T1CK1/OSC1/CLKIN | 汎用IO、Timer1クロック、発振子、外部クロック入力 |
GP4/T1G/OSC2/CLKOUT | 汎用IO、Timer1ゲート、発振子、クロック出力 |
GP3/MCLR/VPP | 汎用IO、マスタクリア(リセット)、プログラム時電源 |
GP2/AN2/T0CKI/INT/COUT/CCP1 | 汎用IO,アナログ入力、タイマー0クロック入力、 外部割込み、コンパレータ1出力、キャプチャPWM |
GP1/AN1/CIN-/VREF/ICSPCLK | 汎用IO,アナログ入力、コンパレータ入力、 参照電圧、プログラム時電源クロック |
GP0/AN0/CIN+/ICSPDAT/ULPWU | 汎用IO,アナログ入力、コンパレータ入力、 プログラム時電源クロック、ローパワー覚醒入力 |
VSS | 電源 GND |
16Fシリーズと同様、バンク0の0-20h にSFRが割り当てられています。バンク0のRAMは96バイトで、残り32バイトはバンク1に振られています。12F629/675
とは異なりますから注意が必要です。