PICの構造と機能

  1. PICとその構成

    1. PICとは

      PICはマイクロチップ社が提供する、1チップ(1個のIC)で、制御が可能な小型プロセッサ(計算機)です。PICにもベースライン、ミドルレンジ、ハイエンド、の3シリーズがあります。ハイエンドのPICでは、プログラムのステップ数は16k、データメモリは1.5kバイトになり、10bitのAD変換や、34本の信号を制御可能です。
       プログラムメモリは書き換え可能なROM(電源を落としても忘れないメモリ)で、ここにプログラムを記録します。データメモリはRAMで、高速な読みだしや書き込みが可能です。PICはレジスタを通して、PICの外部端子(信号線)を制御します。ポート端子は最大8*3本のディジタル信号の状態を同時に読み出したり、値を出力できます。カウンタ/タイマは、プログラムで指定した周期の信号を出力したり、計数できます。これらの端子は TTL とよぶ通常のディジタルICと直接接続可能です。



       シリアル通信は、RS232C方式で外部のプロセッサと情報の交換ができます。RS232Cドライバ用のICを介してシリアル端子をもつWindowsのPCとも接続可能です。アナログ変換はアナログ信号を入力とし、それをディジタル信号に変換する機能があります。

    2. PICのメモリ

       メモリは記憶装置の意味です。メモリには 番地(アドレス)信号があり、指定した番地のメモリに記録をしたり、読み出すことができます。通常の半導体メモリは、電源を切ると記憶した内容が消えてしまいます。電源を切っても記憶内容を忘れないメモリを ROM といいます。ROMにも、特殊な書き込み装置で(時間はかかりますが)値が書き換え可能なROMと、制作時に値を書き込み書き換えできないROMがあります。書き換え可能なROMを フラッシュ型ROMと呼びます。
       また、ROMに対し、電源を切ると忘れてしまいますが、読み出しと同じ速度で書き換え可能なメモリをRAMと呼びます。

       ここで使用するPICのプログラムメモリはファラッシュ型メモリです。また、データメモリには小容量のRAMが内蔵されています。データメモリはレジスタファイルと呼ばれ、先頭020hはSFR と呼ばれる周辺機能の制御用レジスタが配置されています。また、データメモリにみ一部フラッシュメモリが内蔵されています。

  2. PICの構造

    1. ミドルレンジPIC

      ここでは、PICシリーズの中から、ミドルレンジでプログラムの書き換え可能な、20ピンの 「16F628」 を紹介をします。これは、2Kバイトのプログラム用命令、224バイトのデータメモリ、128バイトのフラッシュメモリ、16本の入出力信号を持ちます。16本の信号は、入力または出力が可能で、入力信号からプグラム処理を結果を、残りの信号線に出力することができます。また、外部のプロセッサとデータ交換を行うためのシリアル通信機能や、時間を計測するためのタイマ、も組み込まれています。アナログ電圧比較回路を内蔵していますが、アナログーディジタル変換機能は内蔵していません。



    2. プログラムの書き込み

       プログラムは専用の書き込み回路を利用し、内部のフラッシュROMに書き込みます。このとき利用されるピンは、実行時に利用される制御信号用のピンが共用されます。プログラムされたPICは単独で動作可能です。プログラムの書き込み器(ライター)は、1万円程度でキットが市販されていますし、3万円程度でUSB接続可能なライターも入手可能です。

    3. アーキテクチャ

       命令を記録する14bitのメモリと、8bitのデータを記録するデータメモリは分離されています(これを Harvard アークテクチャといいます)。プログラムのアドレス(番地)は11ビットですからプログラムメモリは2kワード(1ワード14ビット)です。PICによってはこの2kのプログラムを別の信号で切替えて、最大16kまで組み込んでいます(これをバンク構成といいます)。
       プログラムで直接指定できるメモリは128バイトですが、PICによってはこれを別の信号で切替えて、最大1.5kまで増量しています。データメモリは電源を切ると記憶が失われますが、256バイト単位のフラッシュメモリを内蔵しているPICもあります。
       演算は8ビットで、加減算、シフト、論理演算、が可能です。演算によるキャリーフラグが利用できますから、プログラムによる多バイト演算は可能です。
       条件付の制御はスキップのみが可能です。条件付のスキップ命令と無条件ジャンプまたは呼び出し命令を組み合わせて制御を行います。
       サブルーティン呼び出しで戻り番地を記憶するスタックは8レベルです。また、タイマーや制御信号の変化による割り込み機能もあります。

       
    4. 命令構成

      プログラムは、命令を組み合わせて実行します。命令は
       入出力信号のレジスタへの読み込みと書きだし
       レジスタとデータメモリとの演算
       条件判断と指定命令へのジャンプおよび呼び出し
      命令から構成され、合計で35(ミドルレンジ)または77命令(ハイエンド)です。
       演算は加減算と論理演算で、乗除算命令はありません。多くのレジスタはデータメモリの先頭の数十バイトを利用します。

    5. 割り込み

      割り込みは、ハードウエアの信号により、特定の関数を呼び出す機能です。計算機があるプログラムを実行中に、ハードウエアの要因で別のプログラムを「割り込んで」実行できます。
      計算機は、プログラムにしたがって実行をしますが、以下の要因で、「割り込み処理」を実行します。

       INTF:INT端子の変化
       RBIF:ポートBの上位4ビットの変化
       TOIF:タイマー0のオーバーフロー
       EERPMへの書き込み完了

       割り込み条件が成立すると、プロセッサは4番地からのサブルーティンを呼び出します。「割り込み処理」を実行した後、RETFIE 命令を実行すると、割り込み前の処理を再開できます。
       割り込み機能を利用すると、割り込み要件の発生に関する処理は、実行中のプログラムとは独立に要件発生時にリアルタイムで(直ちに)実行することができます。

    6. ハードウエア機能

      • ポート制御

        プログラムの値をそのまま端子に出力したり、端子の値をそのまま変数取り込む機能です。8ビットのポートが1〜3用意されています。

      • カウンタ/タイマ

        カウンタは外部信号または内部のクロックの値を計数する機能です。タイマーは0,1,2の3種あります。タイマー0は8ビットの計数をしますが、プリスケーラを設定することで、最大 1/256 まで入力のクロック数を分周できます。タイマー1は16ビットの計数ができますが、プリスケーラは最大 1/8 となります。ターマー1,2 はオーバーフローすると、割り込みを起こすことができます。
         タイマー2は16ビットのカウンタですが、計数値を取り出したり、設定した値になると割り込みを起こすことができます。
        また、指定した周期で指定した幅のパルス(クロック)を生成できます。

      • 通信機能

         RS232Cによるシリアル通信機能がハードウエアで組み込まれています。RS232CはPCの COM:端子と接続できます。他に、近距離の通信機能として、I2CまたはSPIの接続機能があります。これで、外付けのメモリ、時計、などとPICを2本の信号線で接続できます。

      • アナログ変換

        アナログ信号をディジタル信号に変換します。これをAD(Analog to Digital Conversion)変換といいます。変換ビット数は10ビットで、複数のアナログ信号を切り替えてAD変換することができます。DAコンバータは組こまれていません。

  3. PIC16F628


    1. 実験に便利なPICの紹介

      ここでは、実験に便利な代表的なPICについて少し詳しく紹介します。

    2. 特徴

      16F628Aは小型ですが、多くの機能を積み込んだミドルレンジのPICです。AD変換機の組み込まれていません。以下に特長をまとめます。

      形状 18ピンDIP
      高速 最大1命令400ns
      命令数 35個のシングルワード命令
      動作電圧 最小3Vから5.5V
      発振回路 クリスタル/セラミック発振子、
      内部発振の選択設定可能
      EEROMメモリ 2KWordのプログラムと128Byteのデータメモリ
      レジスタ(RAM) 224バイト
      入出力ピン数 LED直接駆動可能(シンク25mAMax)
      入力/出力個別プログラマブル 13PORT
      タイマー TMR0,TMR1,TMR2
      アナログ比較 2個
      シリアル UART搭載
      参照電圧発生 16レベル、1個
      CCP Capture/Compare/PWMとして利用可能

    3. 16F62xAシリーズ

      メモリのみが違います。プログラムメモリはキロワードで、1ワードはここでは12ビットです。

      16F627A 16F628A 16F648A
      プログラムメモリ(kw) 1 2 4
      データメモリ(byte) 224 224 256
      EEPROM(byte) 128 128 256

    4. 端子

      PIC16F684は18ピンのDIPタイプ(一般のディジタルICと同じ)となっています。
      このICのピン配置は下図のようになっています。
      ICピンの配置

      各ピンの機能を簡単に紹介します。RA2/AN2/Vref のように / で区切られている場合、そのピンに複数の役割がります。特定の機能を利用するように設定すると、たの機能は利用できません。
       RA5は入力専用です。また、RA4はOpenDrainで、出力はLレベルになりますが、Hレベルにはなりません。

      端子番号 端子名 注意 用途
      RA2 I/O PORT A(bit2)
      AN2 アナログ比較1入力
      Vref アナログ参照電圧生成
      RA3 PORT A(bit3)
      AN3 アナログ比較2入力
      RA4 PORT A(bit4)
      TOCKI 外部カウンタクロック入力端子
      CMP2 比較器2出力
      RA5 入力専用 PORT A(bit5)
      MSCLR マスタークリア
      VPP プログラム書き込み
      VSS 電源(グラウンド)
      RB0 割込使用しないとき PORT B(bit0)
      INT 割り込み
      RB1 PORT B(bit1)
      RX USART入力
      DT 同期データ信号
      RB2 PORT B(bit2)
      TX USART出力
      CK 同期用クロック
      RB3 PORT B(bit3)
      CCP1 比較、PWM出力
      10 RB4 PORT B(bit4)
      PGM ST プログラム入力
      11 PB5 PORT B(bit5)
      12 PB6 PORT B(bit6)
      T1OSO タイマー1発振出力
      T1CK1 ST タイマー1クロック
      13 RB7 PORT B(bit7)
      T1OSI タイマー1発信入力
      PGD プログラムデータ
      14 VDD 電源
      15 RA6 内部発振のとき PORT A(bit6)
      OSC2 振動子1
      CLKOUT 外部クロック出力
      16 RA7 内部発振のとき PORT A(bit7)
      OSC1 振動子1
      CLKIN 外部クロック
      17 RA0 PORT A(bit0)
      AN0 アナログ比較1入力
      18 RA1 要プルアップ PORT A(bit1)
      AN1 アナログ比較1入力
    5. 利用できるメモリの種類とサイズ

      PICに内蔵されているメモリには幾つかの種類があります。

      • Wレジスタ

        Workレジスタでプロセッサが演算処理をするとき、一方の値を記録します。

      • プログラムメモリ 2Kワード

        2048個までの14bitの命令が記録できます。記録内容は、ライターと呼ばれる回路で書き込み変更することができます。

      • データメモリ(レジスタファイル)  224バイト

        変数として利用できるメモリで内部の Register Fileを利用します。データはバイト(8ビット)単位です。

      • 特殊レジスタ(SFR)

         入出力ポートやタイマーなどの機能を設定するレジスタで、ビット毎に固有の機能を持ちます。命令からはレジスタファイルの先頭の数十バイトのレジスタファイルとして扱われます。

      • EEPROMデータ

        電源を切っても消えないメモリです。動作が遅いのと、書き込み回数に制限があるので、一般のプログラム変数としては使えませんが、定数の読み取りや再スタート時の初期値として利用できます。10000回書き込み保証

         
      • スタック

        サブルーチン呼び出し時に戻り番地の記録に利用します。8レベルまで利用できます。

    6. クロック回路

       クロック回路は、PICの命令実行の周期を定める、重要な発振回路です。16F628では内部発振機能を持っているため、構成(Configuration)のみを行えば4Mhzで発振可能です。しかし、高速・高精度の発振を行うには、外部に発振用の部品を接続したり、外部発振回路を利用する必要があります。発振には次の種類が選択できます。

      モード 意味 周波数 c1 c2
      LP 低電力 水晶 32k 68-100 68-100
      XT 低速 水晶 4Mhz 15-68 15-68
      XT 低速 セラミック 4MHz 15-33 15-33
      HS 高速 水晶 20MHz 15-33 15-33
      HS 高速 セラミック 10Mhz 15-33 15-33
      INT 内部 4Mhz 不要 不要
      EC 外部 発振回路 不要 不要

      発振用の部品(水晶、セラミック)は、PICのOSC1、OSC2に接続しますが、各端子からGND(0V,共通電位)にC1,C2のコンデンサを接続することが推奨されています。セラミック振動子では、コンデンサを内蔵した3本足の部品があり、この場合、中央の端子をGNDに接続します。
      利用する発振回路に応じて、構成(Configuration)ビットを設定する必要があります。

    7. 構成(Configuration)の設定

      プログラムメモリのアドレス2007H番地にある特別なメモリで、PICの基本的な条件を設定します。このメモリはROMへのプログラム書き込み時にのみRead/Writeできます。設定内容は、プログラム保護の有無、電源ON時のRESET条件、WatchDog Timerの有無、発振子の種類です。以下の設定を行います。

      記号 内容 意味
      BOR Brown Out Teset 電圧が低下したとき、回路の誤動作を避けるため、リセットをします
      POR Power On Reset 電圧が十分上がるまで、リセットをします。
      PWRT Power Up Timer 電圧が上がってから、72msリセットを続けます

      bit13:CP:codeの保護
      bit8:CPD:Dataの保護
      bit7:LVP:低電圧プログラムの設定

      bit6:BOREN:BrownOutリセットを有効にする
      bit5:MCLRE:MCLRを利用する
      bit3:PWRTEN:PowerUpTimerを利用しない
      bit2:WDTE:WDTを利用する

      bit4,1,0;クロックの利用法
       111,110:ER:外部RC発振,RA6(110)
       101,100:INTOSC:内部発振(4M)、RA6(100)
       011:EC:外部発振
       010:HS:高速水晶/セラミック利用、8-10M
       001:XT:中速水晶/セラミック利用、0.5-4M
       000:LP:低速水晶利用、32k-200k

      通常の実験では、クロックの利用法、の設定のみを行えば良いでしょう。高速が必要な場合 HS,精度が必要な場合 EC または XT、でそれ以外の場合は、INTOSCで十分です。INTOSC でない場合、RA7,RA6(ポートA上位2ビット)は利用できなくなります。

    8. リセットとプログラムの実行

       電源を入れると、リセット(初期化)が起こり、0番地から実行を開始します。構成ビットで「MCLRを利用する」と設定すると、MCLR信号でもリセットできます。

    9. 電気的条件

      • 電源の条件

        VSSに対するVDDの許容最大値は6.5V、最低値は-0.3Vです。動作可能電圧は3V〜5.5Vです。ただし、クロックが20MHzの場合4.5V以上の電圧が必要です。最大電力は600mWです。
         また、BOR(BrownOutReset)は最大4.35Vでかかりますから、これ以下の電圧で利用する場合、BOR は設定できません。

      • 端子の電気的条件

        端子の電圧は、最低-0.3V、最大はVDD+0.3Vです。ただし、MCLRとRA4は最大14Vです。
        電流は、ソース、シンクとも最大25mAです。また、ポート全体の最大電流は200mAです。

      • 消費電力

         VDD=5Vで、20MHzクロックの場合、消費電流は5mA程度です。これは発光ダイオード1個を弱く点灯する程度の電力です。スリープ状態では0.1mAになります。