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 側には接続しません。