ICL7137 (3)

 ハードウェア / ソフトウェアを合わせたブロック・ダイアグラムを下に再掲します。
 図では、ICL7137 からの 7 セグメント LED への配線に「パラ」ってセグメント・パターンの信号を取り出していますが、標準の回路のままではロジック・レベルが合わず、正常に信号が取り出せません。 LED 表示とセグメント・パターン・キャプチャを両立させるには回路を一部改造する必要があります。
 また、精度の点で、実際の運用では LED 表示は行わず、信号を取り出すだけにする必要があります。 これらの点については、詳しくは後で述べます。

 ICL7137 からは、AD 変換終了タイミングを直接示す信号は出力されていません。 標準 48 kHz のマスタークロックを 16000 分周した毎秒 3 回のレートで AD 変換が行われ、(外部から見れば勝手に) 表示がアップデートされます。
 1 セグメントでも表示が変わったことを検出できれば、それがセグメント・パターンをキャプチャするタイミングのきっかけになります。
 セグメント・パターン変化の見落としを避けるためには、

(5 [セグメント] × 3 [桁]) + [1000 の位のセグメント] 1 ビット + [極性 (マイナス符号)] 1 ビット = 17 ビット

のすべてのビットの変化を監視する必要があります。
 この目的で、多くのマイコンに実装されている「ピン変化割り込み」を利用することができます。
 ±5 V で動作する ICL7137 とのインターフェースを考慮し、手持ちの中から 5 V 電源で動作可能な Microchip PIC16F1716 を選択しました。
 PIC では、「ピン変化割り込み」を「IOC (Interrupt On Change) 割り込み」と称しており、「エンハンスト・ミッドレンジ 8 ビット CPU コア」に属するチップの一部の品種には全ポートの全ビットに対して IOC 機能が実装されています。 28 ピン・デバイスを選べば入力ピンが最大 25 本使えますから余裕があります。
 PIC16F873 などの古いミッドレンジ 8 ビット・デバイスでは、入力ビット数は足りますが、IOC があるのはポート B だけなので適していません。 
 使用した PIC16F1716 は、現在では秋月での取り扱いがないようです。 現在取り扱われている 28 ピンの品種では、

  • PIC16F18857 — 単価 170 円
  • PIC16F1778 — 単価 240 円
  • PIC16F1783 — 単価 200 円
  • PIC16F1788 — 単価 230 円

には全入力ピン 25 本に IOC が装備されているようです。
 ICL7137 と PIC16F1716 との接続を下の回路図に示します。

 ICL7137 の動作に必要な回路部分は省略してあります。
PIC16F1716 は、RA, RB, RC 各ポート 8 ビット・フルに I/O として利用可能で、合計では 24 ビットになります。 それに加え、MCLR / Vpp と兼用する入力専用のポート・ビット PE3 が 1 ビットあります。
 セグメント・パターンの読み込みには、100 の位から 1 の位の 3 桁分で合計 15 ビット、1000 の位、マイナス符号それぞれ 1 ビットが必要です。
 各ポートの I/O 以外の機能として、

  • RA7 — CLKIN
  • RA6 — CLKOUT
  • RB7 — ICSPDAT
  • RB6 — ICSPCLK
  • RE3 — MCLR / Vpp

があり、これらを「専用のピン」として扱い、セグメント入力用途のピンとは分離しておけば、外部クロックで動作させたり、付加回路を設けずに動作中でも PICKIT3 などをつなぎっぱなしにすることができます。
 また、データロガー側のマイコンとのインターフェースの I2C の SCL / SDA や EUSART の RX / TX を専用ピンとして RC7 / RC6 に割り当てれば、 RA, RB, RC 各ポートの下 6 ビットはセグメント入力専用に使えることになります。
 そこで、RA4..RA0、RB4..RB0、RC4..RC0 はそれぞれの桁の 5 セグメント入力として使い、RA5 は 1000 の位、RB5 はマイナス符号のセグメントの入力としています。
 RC5 が余りますが、これはプログラムのデバッグ用の出力ポートとして使っています。
 上の回路図では、図が複雑になるのを避けるために、ICL7137 の 10 の位の桁のセグメント出力と PIC16F1816 の RB ポートとの接続に関しては、「b0」などの同じ番号の付いた「タグ」同士を接続するものとして表記しています。 たとえば、「b0」タグの ICL7137 の 12 番ピン (A2) と PIC16F1716 の 21 番ピン (RB0) を接続します。
 ICL7137 のセグメント c 出力 (C1, C2, C3) とセグメント d 出力 (D1, D2, D3) は、7 セグメント LED への配線のみで PIC 側には接続しません。