| ホーム |     私の電子工作作品集

180. ロジック IC チェッカー II

[ 初公開日:2018年5月6日 ]

 この作品は、前作 "062. ロジック IC チェッカー" のリメイク版で、3個のPIC (PIC16F873A, PIC16F874A, PIC18F452) を使用して作製をしています。

 私の過去の作品群の中の主だったもので、プリント基板のままでケースに未収納の作品については、ここのところ、ふさわしいケースを探して何とか収納が できるように努めてきました。

 しかし、"062. ロジック IC チェッカー" については、以前からずっと心がけてはいたのですが、なかなか思うようなケースが見つかりません。 そこで、この旧作品の "062. ロジック IC チェッカー" をケースに収納することはきっぱり諦めて、ケースに合わせた新たなプリント基板を作り直すことにしました。

 ケースとしては上写真にも示すように、最近、私が好んで使用しているものの一つ、100均(セリア)で入手が可能な "はがきケース (L-8821) サナダ精工株式会社" で、 このケース内に収まるように プリント基板(詳細は プリント基板(1)部品配置図 を参照)のサイズ、形を加工して作製をしました。

 また、まったく同じ回路のものを作り直すのもつまらないので、今回は、表示器としては前作のような7セグLEDの使用をやめて、LCDモジュールを使用してみることにしました。 しかし、LEDからLCDへの変更はそれほど簡単なことではありません。 前作では、小さなプリント基板内に収めるために、7セグLEDの制御用PICに PIC16F628A を使用したのですが、 18 ピンで入出力数が少ないため、システムクロックには内部オシレータを使用して入出力数を増やし、かつ、同一ポートの入出力を切り替えることによって、スイッチ入力と LEDのセグメント制御を行いました。

 しかし、この同一ポートの入出力を切り替えて行う手法は、LCDの制御には使えません。 そこでやむを得ず、今回のLCDの制御用PICにはプリント基板の多少のスペース的余裕もあって、 入出力数が多い 28 ピンの PIC16F873A に変更をしました。 その結果、下の回路図のようにスイッチ入力用ポートとLCDの制御用ポートが、それぞれ専用の別ポートに分かれています。

 ただし、プリント基板にスペース的余裕があるとはいうものの、やはり限られた空間内に全体を収めなければなりませんので、プリント基板(1)部品配置図 などに示すように、3 - 8 デコーダーの 74HC138 がLCDモジュールに隠れてしまう下位置に追いやられています。 この ICは、ピン数の異なる被試験ロジック ICの電源(Vcc)ピンを 切り替えるなどの重要な役目を持っています。

■ 回路図 ■


実際に使用したPICについて

 上回路図には、U1: PIC16F873A、U2: PIC18F452、U3: PIC16F874A と指定がしてありますが、私がこれらのPICの使用に至った過程について少しばかり触れてみます。

 U1: PIC16F873A については、冒頭で述べたように前作では同目的に PIC16F628A を使用していましたが、今回、表示をLCD化するには 18 ピンでは入出力ポート数が少なく、それを補うために 私が使い慣れている PIC16F87XA シリーズの内で 28 ピンの PIC16F873A に変更をしました。

 U2: PIC18F452 については、もともと本機の前作であるチェッカーを開発していた当初は、入出力ポート数が多い 40 ピンの PIC16F877A でプログラミングを進めていたのですが、開発途中でデバイステーブルの データ量の増加に伴って、プログラムメモリが足らなくなってしまいました。 そこで私なりにいろいろと検討をした結果、CPU を PIC18F452 に変更することが一番の良策との結論に至りました。 既に完成をしているハードウェアの変更が一切なくて現状のままで良く、ソフトウェアの変更のみで対応が可能なことが分かりました。

 そのような経緯で前作では U2 には PIC18F452 を採用しているのですが、今回は部分的な U1 とのインターフェイスの変更に伴って一部のプログラム変更は行っていますが、前作のその殆んどのプログラム内容を 引き継ぐために、同じ PIC18F452 を使用しています。 ただ、実際には現在 PIC18F452 の手持ちがなく代わりに PIC18LF452 があったために、それを使用しました。

 U3: PIC16F874A については、PIC18F452 だけではまだ入出力ポート数が足りないため、その足りない入出力ポート数を補うために、前作では 40 ピンの PIC16F877A を使用しましたが、制御するための プログラムメモリとしては少量で良く、メモリが PIC16F877A の半分で、かつ、同じ 40 ピンの PIC16F874A に今回は変更をしました。 また、私の現在の手持ちの PIC16F877A も数少なくなってきたこともあって、 代わりに PIC16LF874A が多数あったために、実際にはそれを使用することにしたのです。

 ちなみに、PIC18LF452、PIC16LF874A の "L" の付いたタイプは、付かないノーマルなタイプに比べて 使用ができる電源電圧の範囲が広がっており、低い電圧でも動作をさせることが可能となっています。 私の場合、どちらも数年前に Yahoo!オークションで入手したもので、多数を所有していますので それらを使用することにしました。

| 回路図 (LogicIC_CheckerII.CE3) | ページトップ |

■ ケース外観と内部の様子 ■

ケース正面の斜め上から見たところ ケース背面の斜め上から見たところ
ケース左側面の斜め上から見たところ ケース右側面の斜め上から見たところ
蓋をあけてケース内部を見たところ
蓋をあけて内部をケース真上から見たところ 蓋をあけて右側面の斜め上から見たところ ケース裏面を真上から見たところ

| ページトップ |

■ 機能概要 ■

 この簡易ロジックICチェッカ II (Logic IC Checker II)は、「各種スイッチ入力, LCD表示部」 (以下、U1という。)、「各種ロジックICチェック, 結果表示部」 (以下、U2という。)、および 「各種ロジックICチェック補助制御部」 (以下、U3という。) の三部からなっている。


◇◇◇ U1:各種スイッチ入力, LCD表示部 の機能 ◇◇◇
  • U1では、電源投入直後に液晶(LCD)にスタートメッセージして、"Logic IC Checker"、" Ver.x.xx "、" by m.yamamoto " の文字列が、順に1.5秒間ずつ表示される。


  • その後、"[0000]" をLCDに表示して、U2からU4経由でスイッチ入力イネーブル(j0 : from U4)信号を受け取ると待機状態になり、 U1はLCDのデバイス番号入力エリア内の "0000" をブリンク表示とし、各スイッチ入力の受け付けが可能となる。

          "[    ]" 内の文字は0.5秒間点、0.5秒間滅のブリンク表示

  • デバイス番号の指定は、SW1 : 1 位 〜 SW4 : 1000 位の各桁スイッチ、および udsw : UP/DOWN スイッチで行い、 74シリーズでは74を除いた数値を、前側を "0" の右づめ4桁で指定する(例.74138→0138)。 4000・4500シリーズではそのまま4桁を指定する。

          同じくブリンク表示

  • その後、setsw : SET スイッチを押すと、U2にデバイス番号(j1 : to U2)を送信し、U2では登録されているデバイス番号かどうかをチェックして、 その結果をOK/NG LED表示、およびブザー音("ポッ"/"ブー")で知らせるとともに、U1にもそのチェック結果応答 (j7: to U1) を返してくる。

  • デバイス番号登録チェックがNGであった場合には、入力エリアの右側に "None!" と約3秒間表示し、その間、番号の確認が良くできるように一時的に番号入力エリア内の "xxxx" は点灯(表示)しきりとなるが、3秒が経過して "None!" 表示が消えるとともに、再び "xxxx" をブリンク表示として、入力番号が未だ確定されていないことを表して正しいデバイス番号の入力を促す。 なお、この状態では cksw: CHECK スイッチを受け付けない。


  • デバイス番号登録チェックがOKであった場合には、U1ではLCDのデバイス番号入力エリアのブリンク表示が点灯(表示)しきりとなって入力番号が確定されたことを表し、 入力エリアの右側に新たに正規のデバイス番号(名)が表示され、指定されたデバイス番号が登録されていることを知らせる。


  • デバイス番号登録チェックがOKであった場合、次に cksw : CHECK スイッチを押すと、チェック開始指令(j4 : to U2)をU2に送信し、 各デバイス別のデバイス機能チェックが開始される。チェック中は、各スイッチ入力を受け付けなくなる。 また、チェック結果はU2ではデバイス番号登録チェックのときと同様に、OK/NG LED表示、 およびブザー音("ポッ"/"ブー")で知らせるとともに、U1にもそのチェック結果応答 (j7: to U1) を返してくる。 U1では正規のデバイス番号(名)の右側に"OK"/"NG"を表示する。


  • U2でのチェックが終了すると、U2からU4経由でのスイッチ入力イネーブル(j0 : from U4)信号が再び送られ、U1では各スイッチ入力を受け付けるようになる。 ただし、LCDの表示は今までの一連の過程が確認することができるように残ったままであるが、SW1: 1 位 〜 SW4: 1000 位の各桁スイッチのどれかを操作すると、それらがすべてクリアされ "[xxxx]" に戻って再びデバイス番号入力エリア "xxxx" をブリンク表示とする。

  • また、この一連の過程が確認できる状態のときには入力番号が既に確定されているので、同じデバイス番号の被試験 ICを別のものに取り換えては CHECK スイッチを押すことを繰り返せば、 同番の被試験 ICが複数個ある場合にどんどんデバイス機能チェックだけを行っていくことができる。

  • デバイス番号の例外入力

    • 被試験 ICの電源(Vcc, GND)ピンが対角線上に配置されている一般的なデバイスの場合には、上記のようなデバイス番号の入力方法とその結果である正規のデバイス番号(名)の表示がされるが、 電源ピンが対角線上に配置されていない特殊な電源ピン配置のデバイスの場合には、汎用の 24 pin ゼロプレッシャー・ソケットの使用ができないため、16 pin の補助ソケット、もしくは 特殊電源ピン・ソケットアダプタ を使用する必要がある。

    • そのためにデバイス番号の入力方法も上記の例とは異なり、16 pin の補助ソケットを使用する場合は、74・4000・4500シリーズのすべてにおいて先頭は "1" で、続く後の3桁は 前側を "0" の右づめ3桁で指定をする(例.7473→1073)。 また、特殊電源ピン・ソケットアダプタを使用する場合は、同様にすべてのシリーズにおいて先頭は "9" で、 続く後の3桁は前側を"0"の右づめ3桁で指定をする(例.7473→9073、4049→9049)。

          "[    ]" 内の文字はブリンク表示

    • このようにしてデバイス番号が入力された後に setsw : SET スイッチを押すと、上記と同様にU2にデバイス番号(j1 : to U2)を送信し、U2では登録されているデバイス番号かどうかを チェックして、その結果をOK/NG LED表示、およびブザー音("ポッ"/"ブー")で知らせるとともに、U1にもそのチェック結果応答 (j7: to U1) を返してくる。 もし、このデバイス番号登録チェックがNGであった場合には、入力エリアの右側に "None!" と約3秒間表示されるのは上記の場合と同様である。

    • デバイス番号登録チェックがOKであった場合には、U2では一般の電源ピン配置の場合と区別をするために、 OK(緑)LED点灯と "ポッ" のブザー音を3回ずつ繰り返し、ユーザの注意喚起を促す。 U1では次の写真のように、正規のデバイス番号(名)の表示の前に "*" / "+" 記号を追加表示する。 "*" はデバイス番号の先頭を "1" で入力したときで補助ソケットを使用することを表し、 "+" はデバイス番号の先頭を "9" で入力したときでソケットアダプタを使用することを表している。


  • ポーズ動作モード

    • 通常のときの動作モードに対して、電源投入時に PAUSE スイッチを押しながら電源スイッチをON した場合を "ポーズ動作モード" という。 なお、詳細は pausw : PAUSE スイッチU2:各種ロジックICチェック, 結果表示部 の機能 を参照のこと。

    • U1での通常の動作モードのときとの違いはデバイス機能チェックのときで、複数の機能チェックデータ項目の内の1つが終了するごとに本機はポーズ状態となり、何番目のチェックデータの結果が OK/NGであったかをLCDに表示するので、ユーザーはそれを確認することができる。
      次の写真はそれぞれ CHECK スイッチを押した直後で、1番目のチェックデータでのチェックが終了してポーズ状態となり、左側はそのチェック結果がOKで、右側はNGであったことを表している。 次に、PAUSE スイッチを押すことによってポーズ状態が解除され、次(2番目)のチェックデータでのチェックが開始される。


    • やがて、すべてのチェックデータによる機能チェックが終了したときか、または、BREAK スイッチによってチェックを強制的に中断をしたときには、現在表示されている個別の結果表示を消して、 改めて総合的な結果表示を通常の動作モードのときと同様な形式位置で表示し直す。


  • 各スイッチの機能と操作法

    本機では、スイッチ入力イネーブル(j0 : from U4)信号が有効な場合のみ、次の各スイッチ入力を受け付ける。 ただし、udsw: UP/DOWN/BREAK スイッチを BREAK スイッチとして機能させる場合を除く。


    • SW1 : 1 位の桁スイッチ

      4桁のデバイス番号の内、 1 位の桁を指定する場合に用いる。
      1回押すごとに1ずつカウントアップされ、対応する 1 位の桁のLCDのデバイス番号入力エリアに表示される。 なお、このときに udsw : UP/DOWN スイッチと併用した場合は、1ずつカウントダウンされる。
      ( 0, 1, …… 8, 9, 0, 1, …… / 9, 8, …… 2, 1, 0, 9, …… )

    • SW2 : 10 位の桁スイッチ

      4桁のデバイス番号の内、10 位の桁を指定する場合に用いる。
      1回押すごとに1ずつカウントアップされ、対応する 10 位の桁のLCDのデバイス番号入力エリアに表示される。 なお、このときに udsw : UP/DOWN スイッチと併用した場合は、1ずつカウントダウンされる。
      ( 0, 1, …… 8, 9, 0, 1, …… / 9, 8, …… 2, 1, 0, 9, …… )

    • SW3 : 100 位の桁スイッチ

      4桁のデバイス番号の内、100 位の桁を指定する場合に用いる。
      1回押すごとに1ずつカウントアップされ、対応する 100 位の桁のLCDのデバイス番号入力エリアに表示される。 なお、このときに udsw : UP/DOWN スイッチと併用した場合は、1ずつカウントダウンされる。
      ( 0, 1, …… 8, 9, 0, 1, …… / 9, 8, …… 2, 1, 0, 9, …… )

    • SW4 : 1000 位の桁スイッチ

      4桁のデバイス番号の内、1000 位の桁を指定する場合に用いる。
      1回押すごとに1ずつカウントアップされ、対応する 1000 位の桁のLCDのデバイス番号入力エリアに表示される。 なお、このときに udsw : UP/DOWN スイッチと併用した場合は、1ずつカウントダウンされる。
      ( 0, 1, …… 8, 9, 0, 1, …… / 9, 8, …… 2, 1, 0, 9, …… )

    • udsw : UP/DOWN/BREAK スイッチ

      SW1 : 1 位の桁 〜 SW4 : 1000 位の桁スイッチとともに使用し、udsw : UP/DOWN スイッチを押しながら各桁スイッチを押した場合には、 各桁が1ずつカウントダウンされる。
      また、被試験ICのデバイス機能チェック時で休止(PAUSE)状態になったときに、このスイッチを押下することでデバイスチェックを中断(BREAK)することができる。

    • setsw : SET スイッチ

      入力された4桁のデバイス番号を、次のデータ形式でU2に送信 (j1: to U2) する。

         "スタートビット(1) + 1000 位(4) + 100 位(4) + 10 位(4) + 1 位(4) + ストップビット(1) "

      なお、このときに udsw : UP/DOWN スイッチと併用した場合は、デバイス番号の送信は行われず、LCDの 1 位の桁 〜 1000 位の桁の4桁のすべて、 即ち、デバイス番号入力エリアが "0000" にクリアされる。

    • cksw : CHECK スイッチ

      チェック開始指令(j4 : to U2)出力を有効とし、U2に送信をする。

    • pausw : PAUSE スイッチ

      このスイッチだけはU2で管理をしており "ポーズ動作モード" の場合に有効となって、デバイス番号登録チェックのときには、入力された4桁のデバイス番号をブザー音の数で知らせたり、 また被試験ICのデバイス機能チェックのときには、各チェックデータごとに結果を表示した後、休止(PAUSE)状態になったのをこのスイッチの押下で解除することができる。
      なお、この "ポーズ動作モード" 中であるかどうかはU1側でも把握する必要があるため、U1の入力ポートにも接続をして電源投入時に検出をしている。

  • LCDの表示機能

    • SW1: 1 位の桁 〜 SW4: 1000 位の各桁スイッチで入力指定されたデバイス番号を、LCD左側先頭位置に表示の "[    ]" 内の入力エリア4桁 "xxxx" で表示する。 各桁スイッチで入力中、または setsw: SET スイッチ押下でのデバイス番号登録チェックの結果がNGだった場合には、 ブリンク表示となりデバイス番号がまだ確定できていない状態を表す。 なお、デバイス番号登録チェックの結果がNGだった場合には、入力エリアの右側に "None!" と 約3秒間表示される。

    • また、デバイス番号登録チェックの結果がOKだった場合には、ブリンク表示から点灯しきりとなりデバイス番号が確定状態であることを表すとともに、入力エリアの右側に 新たに正規のデバイス番号(名)が表示され、指定されたデバイス番号が登録されていることを知らせる。

    • このデバイス番号が確定状態のときに cksw : CHECK スイッチを押下すると、各デバイス別のデバイス機能チェックが開始され、そのチェックの結果が 正規のデバイス番号(名)の右側に "OK" /"NG" で表示される。

    • なお、cksw: CHECK スイッチ押下でのデバイス機能チェックの終了後もこの表示状態は持続するが、一旦各桁スイッチのどれかを押下すると、確定状態が解除され LCDの入力エリアは再びブリンク表示となるとともに、表示されていた正規のデバイス番号(名)やチェック結果もクリアされる。

    • 被試験ICのデバイス機能チェック中でポーズ指定がされている場合には、被試験ICごとに指定された複数のチェックデータの内の1つが終了するごとに本機はポーズ状態になり、 そのチェックの結果が正規のデバイス番号(名)の右側に "OK" / "NG" で表示されるとともに、何番目のチェックデータかを "xx" と2桁で表示して知らせる。 やがて、設定されているすべてのチェックデータが終了するか、または途中で udsw: UP/DOWN/BREAK スイッチで強制的に終了させた場合には、 総合的なチェック結果を "OK" / "NG" で表示する。

◇◇◇ U2:各種ロジックICチェック, 結果表示部 の機能 ◇◇◇
  • U2では、電源投入直後にハードウェアチェックとして、まず "ピポッ" とブザー音を出力し、次にOK(緑)、NG(赤)、PAUSE (黄) LEDが約 1.5 秒間細かく交互に点滅して、 点灯チェックを行う。 その後、スイッチ入力イネーブル(j0 : from U4 to U1)信号をU4経由でU1に送出し、LCD表示の入力エリアをブリンク表示として、 各スイッチ入力の受け付けを可能とするように指示をする。


  • その後U2では、ひたすらU1からの、デバイス番号(j1 : from U1)と その後のチェック開始指令(j4 : from U1)の受信を待つ。

  • やがて、U1でデバイス番号が設定され、U2に送信(j1 : from U1)されてくると、U2ではそのデバイス番号が登録されているかどうかのチェックをする。

  • その結果、該当のデバイス番号が登録されていた場合には、OK(緑)LEDを約 100m 秒間点灯後、"ポッ" とブザー音(約 100m 秒)を出力しOK表示をする。 また、該当のデバイス番号が登録されてなかった場合には、NG(赤)LEDを約 100m 秒間点灯後、"ブー" とブザー音(約 250m 秒)を出力しNG表示をする。

  • また該当のデバイス番号が登録されていた場合で特殊なICピン接続の場合等には、それ以外の一般のICピン接続の場合と区別をするために、 OK(緑)LED点灯と"ポッ" のブザー音を3回ずつ繰り返し、ユーザの注意喚起を促している。

  • なお、"ポーズ動作モード" の場合には、デバイス番号登録チェックの結果OK/NGをLEDとブザー音で報告した後に、受信した4桁のデバイス番号を、改めてブザー音の数で知らせる。 (0:"ブー"音(約 250m 秒)を1個、1〜9:"ポッ"音(約 100m 秒)を数字の数個)

  • デバイス番号登録チェックの結果がOKだった場合には、その後のU1からのチェック開始指令(j4 : from U1)を受信すると、被試験ICのデバイス機能チェックを開始する。

  • 基本的なデバイス機能チェックはこのU2で行うが、オープンコレクタや3ステートなどの拡張チェックがある場合には、U3に拡張チェックデータである補助制御指令(j2: to U3)を送り、 そのデータ設定を依頼する。 U3では拡張チェックデータを受信すると、各ポートに指定された設定を行った後、U2に補助制御完了(j3: to U2)を返す。

    なお、補助制御指令(j2: to U3)は次のデータ形式でU3に送信する。

         "スタートビット(1) + データ RD(8) + データ RC(8) + データ RB(8) + ストップビット(1) "

  • 被試験ICごとに指定の、デバイス機能チェック個数のすべての結果がOKだった場合には、"ポッ" とブザー音(約 100m 秒)を出力後、OK(緑)LEDを約2秒間点滅してOK表示をする。 また、結果がNGだった場合には、"ブー" とブザー音(約 250m 秒)を出力後、NG(赤)LEDを約2秒間点滅してNG表示をする。 またこのとき、U1側にもチェック結果応答 (j7: to U1)のOK/NG情報を送出して知らせる。

  • なお、"ポーズ動作モード" の場合には、デバイス機能チェック個数の1個が済むごとに休止(PAUSE)状態になり、PAUSE(黄)LEDが点灯して休止(PAUSE)中であることを表示する。 またこのとき、1個ごとのチェック結果を "ポッ"/"ブー" のブザー音で知らせる(この場合にはOK/NG LED表示はしない(できない))とともに、U1側にも チェック結果応答(j7 : to U1)OK/NG情報を送出して知らせる。

  • 休止(PAUSE)中であるときに、PAUSE (休止解除)スイッチを押すことによって休止(PAUSE)状態を解除し、つぎに指定のデバイス機能チェックデータの実行が行われる。

  • また、この1個ごとのデバイス機能チェックが何個目のチェックかを知らせるために、U2からU1へその情報であるポーズ信号(j6: to U1)を送り、 U1で LCDに2桁で番号表示をする。

  • なお、被試験ICのデバイス機能チェック中は、U1へのスイッチ入力イネーブル(j0 : from U4 to U1)信号を無効としているが、OKまたはNGの結果表示をした後は、 再びU4経由で信号を有効として各スイッチ入力の受け付けを可能とする。

◇◇◇ U3:各種ロジックICチェック補助制御部 の機能 ◇◇◇
  • U3では、ひたすらU2からの拡張チェックデータである、補助制御指令入力(j2 : from U2)の受信を待つ。 オープンコレクタや3ステートなどの拡張チェックがある場合に送られてくる。

  • 拡張チェックデータを受信すると、U3では、そのデータをもとに指定のビットをプルアップ、またはプルダウン設定を行い、終わるとU2に補助制御完了出力(j3 : to U2)を 送信して完了を知らせる。

  • U2ではその補助制御完了(j3: from U3)を待って、被試験ICの出力が正しいかどうかを拡張チェックデータに基づいてチェックをする。

| ページトップ |

■ プログラム ■

 冒頭でも述べたように、表示器として 前作 のような7セグLEDの使用をやめて、LCDモジュールを使用するように変更をしたため、 思いもよらず、プログラムの変更が大掛かりなものとなってしまいました。 U1: PIC16F873A(前作では U1: PIC16F628A) 用のプログラムは、ほとんど作り直しとなりました。

 前作では4個の7セグLEDを使用しているため、文字種としては基本的には数字の表現しかできず、しかも、4桁までと限られているために表現力もいたって弱いものでした。 それに比べて今回は 16文字 x 1行のLCDモジュールを使用のために、数字の他に大小のアルファベット、記号、カタカナ(今回は使用しない)と、豊富な文字種で16文字まで表現することが可能で格段の差があります。

 また本機では、U1、U2、U3、U4と4個のICを使用していますが、それぞれのICの間でいろいろなインターフェイスを取り合いながら、全体で1つの ICチェッカーとしての機能を構成しています。 中でも特筆すべきインターフェイスには次のようなものが挙げられます。 (上の 回路図 で、赤線、矢印で示した部分)
      j0: (from U4 to U1) スイッチ入力イネーブル
      j1: (from U1 to U2) デバイス番号
      j2: (from U2 to U3) 補助制御指令
      j3: (from U3 to U2) 補助制御完了
      j4: (from U1 to U2) チェック開始/中断指令
      j5: (from U2 to U4) 3-8 デコーダ制御
      j6: (from U2 to U1) ポーズ信号
      j7: (from U2 to U1) チェック結果応答
 これらのインターフェイス(信号)について、機能概要 での説明と一部重複する部分もありますが、これらの信号がどのような働きをしているのか、プログラムでは どのようにして実現をさせているのか、ハードウエアとの関係はどのようになっているのか、また、どのような点が前作と異なっているかなどを信号名の順に、タイミングなどのイメージ図によって説明をするとともに、 本機の製作過程での私自身の感想などを交えて次に述べていきます。
  • j0: (from U4 to U1) スイッチ入力イネーブル

    この信号 j0はアクティブ "L" で、電源投入直後にU2で管理をしているOK(緑)、NG(赤)、PAUSE (黄) と3個のLEDの点灯チェック(約 1.5 秒間)を行った後に、U2からU4経由でU1に送出され、 U1ではLCDでのスタートメッセージの表示(約 4.5 秒間)の後に、デバイス番号入力エリア内の "0000" をブリンク表示とし、各スイッチ入力の受け付けが可能なことをユーザーに知らせながら 待機状態になります。

    上図において、デバイス番号登録チェックの時間が約 100m 秒間 "H" になっているのは、そのチェック結果をU2でOK(緑)/NG(赤) LEDで点灯表示している時間であって、チェックそのものは この時間に比べれば瞬時に済んでしまっています。

    その後のデバイス機能チェックの時間が約 2 秒間 "H" になっているのは、やはり、そのチェック結果をU2でOK(緑)/NG(赤) LEDで点滅表示している時間であって、 拡張チェックデータを必要としない通常のデバイスであれば、チェックそのものはすぐに済んでしまっています。

    ただし、電源投入時に PAUSE スイッチを押しながら電源ON した場合(以下、"ポーズ動作モード" という)には、複数のチェックデータの内の1つが終了するごとに本機はポーズ状態になるため、 この "H" になっている状態はすべてのチェックデータが終了するか、または途中で BREAK スイッチで強制的に終了させるまで続きます。

    やがて、チェック結果としてOK(緑)/NG(赤) LEDの点滅表示が終了すると、再び信号 j0は "L" に戻って各スイッチ入力の受け付けが可能となります。

  • j1: (from U1 to U2) デバイス番号

    SET スイッチが押されると、LCDのデバイス番号入力エリアに表示されている4桁のデバイス番号を、次のデータ形式でU1からU2に送信をします。 これはスイッチによって入力されたデバイス番号が、 U2内にあるデータテーブルに登録がされているかどうかをチェックするためであって、もし、登録がされていなければ当然ながら次のデバイス機能チェックに進むことはできません。

       "スタートビット(1) + 1000 位(4) + 100 位(4) + 10 位(4) + 1 位(4) + ストップビット(1) "

    各ビット幅は約 4m 秒で、スタートビット、ストップビットを含め、すべてで 18 ビットで構成をされています。 4m 秒というのはかなり大きく(長く)も感じますが、 18 ビット構成でも全体では 72m 秒ですから、この後U2でデバイス番号登録チェックを行ってそのチェック結果が表示されるまで、体感的には何も感じないでしょう。

    前作のプログラムを開発をしていたときに、ビット幅を 100μ秒位にしてデバイス番号を送出したときにはU2側でうまく受け取ってもらえなかったために、100μ秒に対して極端に大きな 4m 秒にした。 という経緯があったことを微かに覚えていて、動作の確実性を優先して今回も前作をそのまま踏襲しました。

  • j2: (from U2 to U3) 補助制御指令

    デバイス機能チェックの内、基本的な機能チェックについてはそのデータの設定をU2自身で行いますが、オープンコレクタや3ステートなどの拡張機能チェックがある場合には、 拡張チェックデータを補助制御指令として、次のデータ形式でU2からU3に送信をしてデータの設定を依頼します。

       "スタートビット(1) + データ RD(8) + データ RC(8) + データ RB(8) + ストップビット(1) "

    各ビット幅はやはり約 4m 秒で、スタートビット、ストップビットを含め、すべてで 26 ビットで構成をされています。 この場合には 26 ビット全体では 104m 秒を要します。 そして、 拡張チェックデータは1つだけとは限りません。 むしろ複数個あるのが一般的で、前項のデバイス番号 j1の送信とは異なって、1つの拡張チェックデータの機能チェックが終了するごとに 次の拡張チェックデータの送信が、データテーブルで指定された数だけ補助制御指令 j2としてU3に送信されることになります。

    デバイス機能チェックそのものはこの信号 j2に比べればほんの一瞬で問題にはなりませんが、仮に拡張チェックデータが 10個あったとするとその送信に要する時間(≒ CHECK スイッチを押してから チェック結果が表示されるまで)は1秒を超える訳で、人それぞれにもよりますが(少なくとも私には)、ちょっとしたストレスを感じさせます。 この点については、改善をする方向で今後の課題としておきます。

  • j3: (from U3 to U2) 補助制御完了

    U3では前項の拡張チェックデータの補助制御指令 j2を受信すると、そのデータをもとに指定のビットをプルアップ、またはプルダウンの設定を行い、それが終わると補助制御完了 j3信号を 次図のデータ形式でU3からU2に送信して設定の完了を知らせます。 U2では補助制御完了 j3を受信すると、オープンコレクタや3ステートなどの拡張機能チェックを 基本機能チェックに続いて開始します。

    このデータ形式は、もちろんハードウエア的にはインターフェイス線が異なっていますが、次項のチェック開始/中断指令 j4とまったく同じ形式となっています。

  • j4: (from U1 to U2) チェック開始/中断指令

    デバイス番号登録チェックがOKであった場合に、次に CHECK スイッチを押すと、チェック開始指令 j4を次図の形式でU1からU2に送信し、U2では各デバイス別のデバイス機能チェックが開始されます。

    また、"ポーズ動作モード" の場合には、デバイス機能チェック中に複数のチェックデータの内の1つが終了するごとに本機はポーズ状態になるため、チェックデータの多いデバイスでは 最終のチェックデータに行き着くまでに多くの時間を要します。 これは運用上の問題ですが、1つずつの機能チェックがNGばかりでそれ以上チェックを続けても無駄だと判断したような場合に、 BREAK スイッチを押すことでチェック中断指令 j4をU1からU2に送信し、デバイス機能チェックを途中で中断(BREAK)することができます。

    このように、1つのインターフェイスでチェック開始指令とチェック中断指令を使い分けています。

  • j5: (from U2 to U4) 3-8 デコーダ制御

    3-to-8 デコーダ機能の U4: 74HC138 のイネーブル端子 G2A をU2から制御することで、セレクト端子 A, B, C の入力信号を有効/無効にしています。 本機では、通常は "L" にして イネーブル状態で使用していますが、例えばデバイス機能チェックの結果をOK(緑)/NG(赤) LEDで表示するときには、下図のように各約 100m 秒間隔で "L" 、"H" を 10 回繰り返すことによって、 約 2 秒間LEDを点滅表示しながらデバイス機能チェックの結果を強調表示しています。

    なお、この信号は 前作(回路図) ではイネーブル端子 G1 を制御するアクティブ "H" で使用をしていました。 前作の作製時期は 12 年ほど以前のことで 今となってはまったく覚えていないのですが(ただの思い付きだったのかもしれません)、本信号の 3-8 デコーダ制御 j5と 次項のポーズ信号 j6のみがアクティブ "H" で、 他の6つのインターフェイスについてはすべてがアクティブ "L" になっています。 このように混在していては後々分かりづらくて混乱を招く恐れもあるため、今回の "ロジック IC チェッカー II" では すべてのインターフェイスをアクティブ "L" に統一することにしました。

    以下は余談ですが、今回の "ロジック IC チェッカー II" については、ハードウエアであるプリント基板を完成させてからソフトウエアに取り組みました。 そして、ハードウエア(回路図)については、 前作のU1の PIC16F628A を今回 PIC16F873A に変更をして、LCD化をする部分のみに特に注意を払い、後の部分については殆んど前作を踏襲していますので、インターフェイスの "H" / "L" のレベルについては深く考えずに、このインターフェイスについても前作のままプリント基板を完成させました。

    そして、次の工程のプログラムの開発に着手をしてから、その開発が進むにつれて今回のインターフェイスレベルの混在に気が付いた訳で、当然ながらプログラムの変更だけでは対応はできず、 私が最も嫌っているプリント基板の修正を今回も強いられることになりました。

  • j6: (from U2 to U1) ポーズ信号

    "ポーズ動作モード" の場合にのみ使用されるインターフェイスです。 デバイス機能チェック中に複数のチェックデータの内の1つが終了するごとに、 U2からU1にこの信号 j6を送信するとともに、PAUSE(黄)LEDを点灯させて休止(PAUSE)中であることを表示します。

    U1ではこの信号 j6と次項のチェック結果応答 j7をもとにして、何番目のチェックデータの結果がOK/NGであるかをLCDに表示するので、ユーザーはそれを確認することができます。 そして、確認後、PAUSE (休止解除)スイッチを押すことによってU2では現在の休止(PAUSE)中を解除して、次のチェックデータによる機能チェックを始めます。

    したがって、複数のチェックデータの内の1つずつが終了するごとにその機能チェック結果の確認ができるのですが、その1つずつのチェックデータでどのようなことが行われているかを知るには、 次の2つをご覧になってよく理解していただく必要があります。

    下図において、約 80m 秒間 "H" になっているのは、主に、複数のチェックデータの内の1つずつの機能チェックが終了した後に、U2からU1に返す次項のチェック結果応答 j7の時間と タイミングを取るために数 10m 秒を足し込んだ時間です。

    前項でも述べたように、この信号についても前作を踏襲のためプリント基板を作製した当初はアクティブ "H" でした。 この信号はU2とU1とのインターフェイスだけではなく、 ポーズ状態であることを表示させるために、上述したように PAUSE(黄)LEDを点灯させる役目も担っています。 したがって、アクティブ "L" に変更をするということは、 このLED回りの配線の修正も強いられることを意味します。

  • j7: (from U2 to U1) チェック結果応答

    デバイス番号登録チェックの後やデバイス機能チェックの後に、そのチェック結果をU2からU1に応答信号 j7として送信します。

    この信号 j7をU1に送信するにあたって前作と今回作とでは大きく異なっていて、前作では "ポーズ動作モード" の場合に、1つずつのデバイス機能チェックが終了したごとには U1側でも必要になりますが、すべてのデバイス機能チェックが終了したとき(BREAK スイッチによるチェック中断のときを含む)と、通常のときのデバイス機能チェックの終了後には、 U1側では必要がない(結果表示をしない)ために送信をしていませんでした。

    しかし今回作においては、すべてのチェックの後にはLCDにその結果表示をさせる必要があるために、すべての場面でU2からU1に応答信号 j7を送信しています。

    この信号 j7は上図に示すように、チェック結果がOKのときとNGのときでは "L" になっている時間が極端に異なっています。 OKのときの時間が大き過ぎるような気もしますが、 これも前作を踏襲してOK/NGの違いをU1で確実に把握ができるようにと前作の考えをそのまま使用しました。

    前作ではこの信号を検出するために、4個の7セグLEDをダイナミック点灯で使用しているためか、私のこの部分のプログラムを今自分が見ても非常に分かりづらくなっていましたが、 今回はLCDを使用したためにダイナミック点灯をさせる必要がまったくなく随分すっきりとしています。

    また前作では、U1、U2ともにI/Oポートのすべてを他の目的で既に使用していて他に空きポートが1つもなかったために、この信号 j7のためのインターフェイス線と PAUSE スイッチの入力線とを、 ハードウエア的に接続して共有をしていました。 そのためにU2側のポートを通常時は入力ポートとして PAUSE スイッチの ON / OFF が検出できるようにしておき、 U2からU1にチェック結果応答 j7として送信をしたい場合(約 50m 秒間、または約 5m 秒間)のみ、U2側のポートを出力ポートに切り替えて信号 j7を送信し、 送信し終わるとすぐにまた入力ポートに戻して PAUSE スイッチ用にしています。

    今回の "ロジック IC チェッカー II" においても、当初は前作を踏襲して同様の回路でプログラムの開発を行っていましたが、デバイス番号登録チェックや通常のときのデバイス機能チェックでは 問題は起こらないのですが、"ポーズ動作モード" の場合のデバイス機能チェックのみに問題が起こりました。

    U2とU1間のインターフェイスがなぜかうまく取れず、チェック結果がOKのときはいいのですが、チェック結果がNGのときに限り問題が起こり、U2からのNG信号(約 5m 秒)がU1で 正しく検出することができない。 というもので、OKになったりNGになったりめちゃくちゃな判定をします。

    前作では問題がなかったことから今回のプログラムのどこかに問題が潜んでいたと思われますが、どうしても解決することができず十数日間さんざん悩んだ挙句、とうとうほっぽり出してしまいました。 それが丁度一年ほど前のことです。 何とかしなければならない。 といつも思い続けてはいたのですが、つい延び延びになってしまい実際に再開に着手したのは、私の他のページで紹介をしている "Wonder Core 用 カウンター" の製作が一段落した頃で、一か月半ほど前のことでした。

    そして、再開はしてみたのですがやはり解決にはなかなか結びつかない、というよりも、一年も以前の細部のことはすっかり忘れてしまっていて、3本から成る全体のプログラムの流れそのものも 記憶から薄れてしまっていたために、すべてを始めから復習をし直さなければならなかったのが現状でした。

    結果、今までこのチェック結果応答信号 j7と PAUSE スイッチからの入力を共有していたのを解除して、思い切って信号 j7を他の場所に引っ越すことにしました。 とはいうものの、 U1には 28 ピンのCPUに変更をしたので空きポートができたのですが、U2には相変わらず空きポートはありません。

    そこで、また他のインターフェイス線と共有をさせざるを得ないのですが、回路図 に示すように今度はデバイス番号 j1のインターフェイス線と共有をさせました。 デバイス番号 j1とチェック結果応答 j7とでは、お互いに流れる信号の方向が逆の関係になっています。 そのため、デバイス番号 j1を優先して常時はU1からU2方向にしておき、 チェック結果応答 j7が必要な場合にだけU2からU1方向になるように、お互いの入出力ポートを切り替えて実現をさせています。

    これらの変更をすることによって、一年もの長い間解決することができずにいた(放棄していた)問題もどうやら落ち着いてきました。 また、これらの共有インターフェイス線は信号 j1、j7ともに アクティブ "L" のため、ひょっとしたら不要かもしれないのですが、念のために(確実に動作をさせるために)プルアップ抵抗を入れておきました。

現在の最新バージョン: Ver. 3.00

U1: PIC16F873A 用
ソースファイル (LogicIC_CheckerII1.asm)
 LCD 制御サブルーチン (LCD.sub)
HEX ファイル (LogicIC_CheckerII1.hex)

U2: PIC18F452 用
ソースファイル (LogicIC_CheckerII2.asm)
 IC データ ファイル (LogicIC_TableII.inc)
HEX ファイル (LogicIC_CheckerII2.hex)

U3: PIC16F874A 用
ソースファイル (LogicIC_CheckerII3.asm)
HEX ファイル (LogicIC_CheckerII3.hex)

| ページトップ |

■ テーブルデータの構造 ■

U2: PIC18F452 用のプログラム(ソースファイル(LogicIC_CheckerII2.asm))内で使用する、テーブルデータ(IC データ ファイル (LogicIC_Table.inc)) 内には、大別して デバイス番号テーブル (dev_no_table) と、デバイス機能チェック・データテーブル (dev_ck_table) との2つが存在する。

デバイス番号テーブルには、基本的にロジックICの種類(74シリーズ、4000シリーズ、4500シリーズのデバイス番号)数だけのデータが必要であるが、 ワンショット発生等の一部のICについては割愛してある。

また、デバイス機能チェック・データテーブルについては、個々のロジックIC別に必要とするチェック・データを用意してあり、複雑な働きをするICについてはその分 チェック・データも多く必要とし、テーブル全体としては膨大なデータ量となっている。

1. デバイス番号テーブル (dev_no_table)

1データ群は5バイトから構成されており、先頭の2バイトに4桁の デバイス番号 が設定されていて、 「U1:各種スイッチ入力, LCD表示部」 から送られてきた、スイッチ入力されたデバイス番号と比較照合するのに使用される。 比較照合は5バイト単位の全テーブルデータとの間で行なわれる。

一致デバイス番号があった場合は、以降の3バイトデータを下図のようにそれぞれのレジスタに一旦保存して、次のデバイスチェック・データの読み出しに備える。
      ( 使用例 )
      
      		dt	h'00', h'00'		;7400	Quad 2-Input NAND Gate
      		dt	h'00'
      		dt	high ic7400
      		dt	low  ic7400
      


      [ フラグ・ビットの説明 ]

    • xext: 拡張データ指定ビット

      披チェックデバイスの出力に、オープンドレイン(コレクタ)、または3ステートの機能がある場合に、その機能をチェックするために指定をする。 このフラグ指定をした場合には、次のデバイス機能チェック・データテーブル (dev_ck_table) のチェックデータ群の後に続けて、実際の拡張チェックデータ群の 指定をする。
      ( 使用例 )
      
      		dt	h'01', h'25'		;74125	Quad Bus Buffer Gate (with 3-state outputs)
      		dt	ext
      		dt	high ic74125
      		dt	low  ic74125
      
    • xinv: 出力反転指定ビット

      デバイスチェック・データは、基本的に披チェックデバイスの種類数だけのチェック・データが必要であるが、例えば AND Gate と NAND Gate 、 OR Gate と NOR Gate 、 XOR Gate と XNOR Gate 等では、同じ入力信号に対してその出力信号はお互いに相反しているため、入出力が同じピン配置のデバイス同士の場合には、 このフラグ指定をしておくだけで同一チェック・データを使用することができる。
      ( 使用例 )
      
      		dt	h'40', h'77'		;4077	Quad 2-Input EXCLUSIVE-NOR Gate
      		dt	inv
      		dt	high ic4077
      		dt	low  ic4077
      
    • xspc: 特殊処理指定ビット

      一部の披チェックデバイスでは、特殊なチェック動作をさせるために、次のデバイス機能チェック・データテーブル (dev_ck_table) 内の 特殊処理指定バイト で指定を行なう。 また、上記 xinv: 出力反転指定ビットの例のように、同一チェック・データを使用して 複数の披チェックデバイスに対応させるような場合に、 "A" というデバイスでは必要なデータ(機能)が "B" では不要とか、逆に "A" というデバイスでは 不要だったものが "B" では必要になったような場合に、まず xspc: 特殊処理指定ビット = "1" の指定をしておいて、その詳細はデバイス機能チェック・データテーブル内の 特殊処理指定バイトで指定をする。
      (ちなみに現在、前者には bit3: チェック続行指定bit4: 拡張データ変更(PULL-UP)指定 があり、 後者には bit5: クロックの追加指定 がある。)
      ( 使用例 )
      
      		dt	h'00', h'09'		;7409	Quad 2-Input AND Gate (O.C.)
      		dt	ext + spc
      		dt	high ic7409
      		dt	low  ic7409
      
    • xrep: 総繰り返し無指定ビット

      この汎用 "ロジック IC チェッカー II" では、1つの披チェックデバイスに対して一連のチェック動作を、デフォルトでは3回繰り返し行なうようにプログラミング されている。 そして一連のチェック動作にかかる所要時間は、殆どの披チェックデバイスでは瞬時に終了してしまうので、あまり問題にはならないものが多い。 しかし一部のカウンタ IC 等では、その所要時間がちょっとしたストレスに感じる程度のものがあり、そのような場合に この xrep: 総繰り返し無指定ビット = "1" の指定をしておくと、一連のチェック動作が1回だけに変更されてその所要時間を減じることができる。(その分 信頼性が欠けるかも・・・)
      ( 使用例 )
      
      		dt	h'40', h'20'		;4020	14-Stage Ripple-Carry Binary Counter/Dividers
      		dt	rep
      		dt	high ic4020
      		dt	low  ic4020
      
    • フラグ・ビット xyyyyyy との表現の相違

      フラグ・ビットの表現について、xyyy(例. xext)では、そのフラグのビット位置を表しているのに対して、yyy(例. ext)では、そのフラグ・ビットの 取りうる値を表している。 例えば xext では 7 bit を表しているのに対して、ext では 1を左に 7 bit シフトした値、すなわち '80h' の値を表す。
      ( 例 )
      
      xext		equ	d'7'		;拡張データ指定ビット位置
      ext		equ	h'01' << xext	;拡張データ指定ビット値
      
      
2. デバイス機能チェック・データテーブル (dev_ck_table)

1データ群が何バイトから構成されているかは決まってなく、個々のロジックICの機能によってチェックデータが複雑に変化する、可変長データである。
  • 基礎データ (Vcc, GND, 入出力ピン割当データ)

    個々のロジックIC(デバイス)別の各ピンを、PICのどのポートのどのビットで入出力制御するかを指定( "0": 入力ピン "1": 出力ピン )する。

    ちなみに、デバイスのピン指定( "0": 入力ピン "1": 出力ピン )の意味は、例えばデバイスの入力ピンには PIC(出力)から信号を与え、 デバイスの出力ピンからは PIC(入力)に信号を与えるため、デバイスの入力ピン/出力ピンの状態を "0"/"1" で指定をすると、その値がそのまま PICの出力 "0"/入力 "1" の指定(割り当て)になる。
      
      ( 使用例 )
      
      ic7400			; Quad 2-Input NAND Gate
      			
      		dt	pin14		;ICピン数(Vcc Pin)
      		dt	b'10000000'	;RB  3, 2, 1,--,--,--,--,--  ;入出力割当
      		dt	b'01001100'	;RC 12,11,10, 9, 8, 6, 5, 4
      		dt	b'00000000'	;RD --,--,--,--,--,--,--,13
      


      [ フラグ・ビットの説明 ]
    • xatn: 注意喚起指定ビット

      先頭バイトに atten: 注意喚起指定ビット = "1" の指定をしておくと、例えば通常の対角線上の電源(Vcc, GND)ピン配置と異なって、 特殊な電源ピン配置となっているようなデバイスの場合に、デバイス番号の入力直後に、OK(緑)LED点灯と "ポッ" のブザー音を3回ずつ繰り返して、 ユーザの注意喚起を促すことが可能となる。
      ( 使用例 )
      
      ic7473		; Dual J-K Flip-Flops (with Clear)
      
      		dt	pin14x + atn	;ICピン数(特殊 Vcc Pin)    ;注意喚起指定
      		dt	b'00000000'	;RB --, 7, 6, 5, 3, 2, 1,--  ;入出力割当
      		dt	b'00011011'	;RC --,--,14,13,12,10, 9, 8
      		dt	b'10000000'	;RD CK,--,--,--,--,--,--,--
      
    • xivd: 無効指定ビット

      ある披チェックデバイスの一連のチェックデータ群の登録(作成)が、デバイス機能チェック・データテーブル (dev_ck_table) にあるものの、 未だ検討不足でそのまま実行するとチェックエラーを起こしてしまうような場合には、その未完成なデータ群の登録を開放しておくことはできない。 そのような場合にそのデータ群の先頭バイトに xivd: 無効指定ビット = "1" の指定をしておくと、そのデータ群は無効扱いとしてチェックが 実行されることはない。

      なお、この指定によって現在、チェックデータ群がそのような未完成状態にあることを、"ピピピピッ" というブザー音の後に、 NG(赤)LEDの点灯とともに "ブー" とブザー音を出力して、ユーザに知らせる。
      ( 使用例 )
      
      ic74192		; Synchronous Up/Down Decade Counter (Dual Clock Lines)
      
      		dt	pin16 + ivd	;ICピン数(Vcc Pin)	     ;無効指定
      		dt	b'01100000'	;RB  4, 3, 2, 1,--,--,--,--  ;入出力割当
      		dt	b'11000110'	;RC 13,12,11,10, 9, 7, 6, 5
      		dt	b'10000000'	;RD CK,--,--,--,--,--,15,14
      
    • clk7: クロック入力指定ビット

      披チェックデバイスの一連のデータ群の基礎データは4バイトで構成されており、一般的な IC の場合にはそれで十分な基礎的な情報が得られるが、 クロック入力を伴うような IC の場合には、どのピンにクロックを入力するかを決めるクロック入力ピンの割当データが必要になる。 そのような場合には まず、基礎データの RD入出力ピン割当の clk7: クロック入力指定ビット = "1" の指定をし、次に続く3バイトでクロック入力ピン割当を指定する。

      なお、ここでの clk7: クロック入力指定ビットは、クロックピンの割当指定に対して、下記 チェックデータ の3バイト目の clk7: クロック入力指定ビットは、ここで割り当てたクロックピンに、実際にクロックパルスを与えるかどうか("1" 与える/"0" 与えない)を指定する ものである。
      ( 使用例 )
      
      ic4020	;(+ rep)	; 14-Stage Ripple-Carry Binary Counter/Dividers
      
      		dt	pin16		;ICピン数(Vcc Pin)
      		dt	b'11110000'	;RB  4, 3, 2, 1,--,--,--,--  ;入出力割当
      		dt	b'11001111'	;RC 13,12,11,10, 9, 7, 6, 5
      		dt	b'10000011'	;RD CK,--,--,--,--,--,15,14
      
  • クロック入力ピン割当データ

    上記、RD入出力ピン割当の clk7: クロック入力指定ビット = "1" だった場合のみに、次図のようにクロック入力ピンの割当指定の3バイトが続く。 該当のクロック入力ピンの位置に "1" を、他の位置には "0" を指定する。
      ( 使用例 )
      
      		dt	b'00000000'	;RB  4, 3, 2, 1,--,--,--,--  ;Clock Pin
      		dt	b'00010000'	;RC 13,12,11,10, 9, 7, 6, 5
      		dt	b'00000000'	;RD --,--,--,--,--,--,15,14
      


  • チェックデータ個数, チェックデータ

    チェックデータ個数で指定した数だけの3バイトデータ塊りのデータ群が、チェックデータ01, チェックデータ02, ……, チェックデータnn と続く。

    上記の基礎データの 入出力ピン割当データ で指定したピンに対して、入力ピンにはチェックのための条件である入力信号を、 出力ピンにはチェック結果の期待値である出力信号を、それぞれ High レベルを "1"、Low レベルを "0" で指定する。

    また、入力ピンにクロックを入力するような場合には、チェックデータの3バイト目の clk7: クロック入力指定ビットに "1" を指定しておいて、上記の クロック入力ピン割当データ で指定したビットに対して、"0" を指定すれば ↑(positive edge) の、"1" を指定すれば ↓(negative edge) のクロックパルスを、デフォルトでは 1個得ることが可能となる。(複数のクロックパルスを得る場合は、下記 特殊処理指定バイト出力クロック数 を参照)
      ( 使用例 )
      
      		dt	d'15'		;チェックデータ個数
      		    :
      		    :
      		dt	b'00000000'	;チェックデータ 03	8	Q4=1
      		dt	b'00010100'	;
      		dt	b'11000000'	;bit7=1: CK 指定, Clock Pin=1: negative edge 指定
      		    :			;bit6=1: 特殊処理指定
      		    :
      


    なお、デバイス番号テーブル (dev_no_table) から取得保存したフラグバイトの xspc: 特殊処理指定ビット と、RDチェックデータの clk7: クロック入力指定ビット、および spc6: 特殊処理指定ビットとの関係は次のとおりである。


  • 特殊処理指定バイト

    上記 チェックデータ nn の RDチェックデータで spc6: 特殊処理指定ビット = "1" だった場合のみに、次図の特殊処理指定バイトが続き、 ここで特殊処理の詳細を指定する。
      ( 使用例 )
      
      		dt	b'00000001'	;bit0=1: クロック数の指定
      


      [ フラグ・ビットの説明 ]
    • bit0: クロック数の指定ビット

      披チェックデバイスの入力ピンにクロックを入力するような場合には、通常、チェックデータ の3バイト目の clk7: クロック入力指定ビット = "1" を指定するが、そのパルスの数は1個である。 殆どの場合はそれで事足りることが多いが、例えばカウンタ IC 等で一気にシーケンスを進めたいような場合には、 まず、チェックデータの3バイト目の clk7: クロック入力指定ビット = "1" とともに、spc6: 特殊処理指定ビット = "1" の指定をしておいて、 次に、特殊処理指定バイトの この bit0: クロック数の指定ビット = "1" の指定をする。 実際のクロックパルス数の指定は、さらに特殊処理指定バイトの後に続く 2バイトの 出力クロック数 で指定をする。
      ( 使用例 )
      
      		dt	b'00000000'	;チェックデータ 01
      		dt	b'01001000'	;
      		dt	b'11000000'	;bit7=1: CK 指定, Clock Pin=0: positive edge 指定
      					;bit6=1: 特殊処理指定
      		dt	b'00000001'	;bit0=1: クロック数の指定
      		dt	h'00',h'08'	;クロック数 = 8 個
      
    • bit1: クロック入力ピンの変更指定ビット

      披チェックデバイスのクロック入力ピンの割当指定がある場合には、基礎データ (Vcc, GND, 入出力ピン割当データ) に続く クロック入力ピン割当データ で行ない、初めの時点で一意的に決まってしまうのが一般的であるが、披チェックデバイスによっては、 当初に決めたクロック入力ピン条件を途中で変更して、次には他のクロック入力ピン条件でシーケンスを進めたいような場合も存在する。 そのような場合には、 通常の3バイト塊りのチェックデータで新たなクロック入力ピン割当データの指定を行い、その3バイト目の spc6: 特殊処理指定ビット = "1" の指定をしておいて、 次に続く特殊処理指定バイトの この bit1: クロック入力ピンの変更指定ビット = "1" の指定をする。
      ( 使用例 )
      
      		dt	b'10000000'	;RB  4, 3, 2, 1,--,--,--,--  ;Clock Pin
      		dt	b'00000000'	;RC 13,12,11,10, 9, 7, 6, 5
      		dt	b'01000000'	;RD --,SP,--,--,--,--,15,14
      					;bit6=1: 特殊処理指定
      		dt	b'00000010'	;bit1=1: クロック入力ピンの変更指定
      
    • bit2: 入出力ピン割当の変更指定ビット

      披チェックデバイスの種類によっては、同一ピンがコントロール条件によって、入力ピンになったり出力ピンになったりするものがある。そのようなデバイスを チェックする場合に、通常の3バイト塊りのチェックデータで新たな入出力ピン割当の指定を行い、その3バイト目の spc6: 特殊処理指定ビット = "1" の指定を しておいて、次に続く特殊処理指定バイトの この bit2: 入出力ピン割当の変更指定ビット = "1" の指定をする。
      ( 使用例 )
      
      		dt	b'00000000'	;RB  6, 5, 4, 3, 2, 1,--,--  ;入出力割当
      		dt	b'11111000'	;RC 15,14,13,12,11, 9, 8, 7
      		dt	b'01000111'	;RD --,SP,--,--,19,18,17,16
      					;bit6=1: 特殊処理指定
      		dt	b'00000100'	;bit2=1: 入出力ピン割当の変更指定
      
    • bit3: チェック続行指定ビット

      同一チェック・データを使用して複数の披チェックデバイスに対応させるような場合で、"A" というデバイスでは必要なデータが "B" では不要となるような場合には、 まず "B" の デバイス番号テーブル (dev_no_table) 内のフラグバイトで、 xspc: 特殊処理指定ビット = "1" の指定をしておく。 次に不要となるチェック・データ群の3バイト目の spc6: 特殊処理指定ビット = "1" の指定をしておいて、続く特殊処理指定バイトの この bit3: チェック続行指定ビット = "1" の指定をする。

      次の例では、3バイトデータ塊りのデータ群(チェック・データ 04)は、デバイス番号テーブル (dev_no_table) 内のフラグバイトで、特に何の断りもない ic7408 では必要なデータ群となり、xspc: 特殊処理指定ビット = "1" の指定をしてある ic7409 では不要なデータ群として扱われる。
      ( 使用例 )
      
      ic7408			; Quad 2-Input AND Gate
      ic7409	;(+ ext + spc)	; Quad 2-Input AND Gate (O.C.)
      
      		    :
      		    :
      
      		dt	b'11100000'	;チェックデータ 04
      		dt	b'11111111'	;
      		dt	b'01000001'	;bit6=1: 特殊処理指定 (+ spc: チェックをパス)	7409
      
      		dt	b'00001000'	;bit3=1: チェック続行指定			7408
      
    • bit4: 拡張データ変更(PULL-UP)指定ビット

      上記と同様、同一チェック・データを使用して複数の披チェックデバイスに対応させるような場合で、"A" というデバイスでは必要なデータが "B" では不要となる ような場合には、まず "B" の デバイス番号テーブル (dev_no_table) 内のフラグバイトで、 xspc: 特殊処理指定ビット = "1" の指定をしておく。 次に不要となるチェック・データ群の3バイト目の spc6: 特殊処理指定ビット = "1" の指定をしておいて、続く特殊処理指定バイトの この bit4: 拡張データ変更(PULL-UP)指定ビット = "1" の指定をする。

      次の例では、3バイトデータ塊りのデータ群(チェック・データ 01 自体)は、デバイス番号テーブル (dev_no_table) 内のフラグバイトで、特に何の断りもない ic7447 では必要なデータ群となり、xspc: 特殊処理指定ビット = "1" の指定をしてある ic7448 では不要なデータ群として扱われ、次に続くチェック・データ 02 以降のデータ群には何の影響も与えない。 ただし、ic7447 においてもこの場合のチェック・データ 01 は単なるダミーデータであり、次に続くチェック・データ 02 以降のデータ群をすべて、PULL-UP 機能がついた拡張チェック・データとして扱うようになる。 (ちなみに、基本のチェック・データを省略して拡張チェック・データだけを指定することはできないため。)
      ( 使用例 )
      
      ic7447			; BCD-to-7 Segment Decoder/Driver (O.C.15V)
      ic7448	;(+ inv + spc)	; BCD-to-7 Segment Decoder/Driver (2KΩ P.U.)
      
      		    :
      		    :
      
      		dt	b'00000000'	;チェックデータ 01	dummy
      		dt	b'00000000'	;
      		dt	b'01000000'	;bit6=1: 特殊処理指定 (+ spc: チェックをパス)  7448
      
      		dt	b'00010000'	;bit4=1: 拡張データ変更(PULL-UP)指定           7447
      
    • bit5: クロックの追加指定ビット

      同一チェック・データを使用して複数の披チェックデバイスに対応させるような場合で、上記とは逆に "A" というデバイスでは不要だったものが "B" では必要になった ような場合には、まず "B" の デバイス番号テーブル (dev_no_table) 内のフラグバイトで、 xspc: 特殊処理指定ビット = "1" の指定をしておく。 次に必要となるチェック・データ群の3バイト目の spc6: 特殊処理指定ビット = "1" の指定をしておいて、続く特殊処理指定バイトの この bit5: クロックの追加指定ビット = "1" の指定をする。

      次の例では、3バイトデータ塊りのデータ群(チェック・データ 01)は、デバイス番号テーブル (dev_no_table) 内のフラグバイトで、特に何の断りもない ic74160 ではそのままの機能のデータ群であり、xspc: 特殊処理指定ビット = "1" の指定をしてある ic74162 では、3バイト目に clk7: クロック入力指定ビット = "1" が 自動的に追加されたデータ群として扱われる。
      ( 使用例 )
      
      ic74160			; Syncronous Decade Counter (Direct Clear)
      ic74162 ;(+ spc)	; Syncronous Decade Counter (Synchronous Clear)
      
      		    :
      		    :
      
      		dt	b'11000000'	;チェックデータ 01	(Clear)    0  QA-D=0
      		dt	b'00001001'	;
      		dt	b'01000000'	;bit6=1: 特殊処理指定 (クロック追加はしない)	74160
      
      		dt	b'00100000'	;bit5=1: クロック追加指定 (+ spc)		74162
      
    • bit6: クロック数(2)の指定ビット

      bit0: クロック数の指定ビット では、そのクロックパルスの数は最大 65,536 個までしか指定ができない。 披チェックデバイスによっては、 より多くのクロックパルスで一気にシーケンスを進めたいような場合も存在する。 この bit6: クロック数(2)の指定ビットでは、bit0: クロック数の指定ビットと同様に 次に続く2バイトの 出力クロック数 とともに指定をするのであるが、こちらの指定ビットでは 32,768 個単位の高速クロックパルスが、 2バイトの出力クロック数で指定した数だけ発生することになる。
      ( 使用例 )
      
      		dt	b'00000000'	;チェックデータ 02	Q18=1	   262,144
      		dt	b'00010010'	;
      		dt	b'11000000'	;bit7=1: CK 指定, Clock Pin=1: negative edge 指定
      					;bit6=1: 特殊処理指定
      		dt	b'01000000'	;bit6=1: クロック数(2)の指定
      		dt	h'00',h'08'	;クロック数 = 32,768 x 8 = 262,144 個
      
    • bit7-0 = "0": 無指定

      bit7 〜 bit0 のすべてが "0" 指定の場合には、該当のチェックデータの実行は無視されて、何も指定されなかったものとして扱う。 なお、bit7 は予備で、 現在使用されていない。

  • 出力クロック数

    特殊処理指定バイトデータで bit0: クロック数の指定 = "1"、または bit6: クロック数(2)の指定 = "1" だった場合のみに、 次図の出力クロック数指定の2バイトが続く。( 指定可能範囲: 1 〜 65,536 (h'00',h'00' 指定のとき) )
      ( 使用例 )
      
      		dt	h'00',h'07'	;7個のクロック数を指定
      


  • 拡張チェックデータ個数, 拡張チェックデータ

    オープンドレイン(コレクタ)、または3ステートなどの拡張チェックがある場合には、基本チェックのデータ個数のチェックデータ群が終了した後に、 次図のように拡張チェックデータ個数で指定した数だけの3バイトデータ塊りのデータ群が、拡張チェックデータ01, 拡張チェックデータ02, ……, 拡張チェックデータnn と続く。

    拡張チェックデータでは基本の チェックデータ と同様に、まず上記の基礎データの 入出力ピン割当データ で指定したピンに対して、入力ピンにはチェックのための条件である入力信号を、出力ピンにはチェック結果の期待値である出力信号を、それぞれ High レベルを "1"、 Low レベルを "0" で指定をする。 そして次に、拡張チェックデータの3バイト目の pul7 ビットで PULL-DOWN 指定: "0"/PULL-UP 指定: "1" をする。 この PULL-DOWN 指定: "0"/PULL-UP 指定: "1" は、「U3:各種ロジックICチェック補助制御部」 で、オープンドレイン(コレクタ)や 3ステートなどの機能をチェックするために用いられる。

    なお、これらの拡張チェックデータの存在は、デバイス番号テーブル (dev_no_table) のフラグバイトの xext: 拡張データ指定ビット = "1" で指定をしておく。
      ( 使用例 )
      
      		dt	d'2'		;拡張チェックデータ個数
      
      		dt	b'00000000'	;拡張チェックデータ 01
      		dt	b'00000000'	;
      		dt	b'00000000'	;bit7=0:   PULL-DOWN 指定
      
      		dt	b'00110000'	;拡張チェックデータ 02
      		dt	b'00011000'	;
      		dt	b'10000000'	;bit7=1:   PULL-UP 指定
      

| ページトップ |

■ 対応デバイス一覧とデータシート ■

 本装置 "ロジック IC チェッカー II" で、現在、チェックの確認がとれている74シリーズ、4000シリーズ、4500シリーズ ICの一覧を、次表にまとめておきます。

 ロジック ICの種類数が多くて確認には相当な時間を要するため、実は未だチェック確認の進行中で、確認がとれたものに順次更新をして行きます。 チェックデータの "IC データ ファイル (LogicIC_TableII.inc)" の見直し更新も必要なため、取り敢えず、前作の旧 "ロジック IC チェッカー" で確認がとれているものを掲載しておきます。
 なお、一覧表から各デバイスのデータシートも簡単に見られるようにリンクが貼ってありますが、著作権等の問題もありますのでデータシートファイルはサーバ上にはありません。 もし、一覧表から各デバイスのデータシートが見られるようにしたい方は、ご自分のパソコンにこの一覧表と各メーカーのデータシートをダウンロードする必要があります。

■ プリント基板(1)部品配置図 ■

 使用したプリント基板は、"秋月電子通商" 販売の "AE-6(1L) (通販コード:P-04708)" ガラスエポキシ片面ユニバーサル基板 (155 x 114 mm)です。

 今回使用したケースに収納(ケース加工図 参照)するにはサイズが一回り大きいので、左下図に示すように …… でまず四辺をカットし、 かつ、右辺をコ字型にくり抜いて使用しました。 ガラスエポキシ基板は丈夫なので、私は好んで使用しているのですが、ただ今回のような加工をするのには 結構大変でした。 殆んど同サイズの基板に、"サンハヤト" の "ICB-96" 紙フェノール片面ユニバーサル基板がありますが、加工をするにはそちらの方が楽かもしれません。



左側は加工前のプリント基板、 右側は加工後のプリント基板

| プリント基板(1)部品配置図 (LogicIC_CheckerIIPC2.CE3) | ページトップ |


( 2018/10/04 追記 )

 重要なことを書き忘れていました。 本機の写真を見ていただければ分かるように、私は上図に示す部品配置図のように本機を作製したのですが、ケースに収納した本機を実際に使用してみると、 このレイアウトではゼロプレッシャ ICソケットのレバーを操作するのに、非常に不都合なことが分かりました。

 プリント基板をケース内に収納しないで、そのままの単体で使用しているときにはまったく問題はないのですが、ケースに収納したときには、プリント基板の右辺側に設けたコ字型の切り込みを入れた部分に、 ケース右辺の内側に出っ張った部分が隣り合うわけで、ゼロプレッシャ ICソケットのレバー回りの空間が極端に狭くなってしまって、そのレバー操作がかなりし辛くなるのです。

 その点で上図の部品配置図は失敗でした。 そこで、その改善策(になるかどうかは検証が取れていないが)を次に示しておきます。 次図に示すように、ゼロプレッシャ ICソケットの右辺と ケース右辺の内側に出っ張った部分との空間を広げるために、ゼロプレッシャ ICソケットをプリント基板のランド3つ分(約7.6mm)左に、かつ、1つ分下にずらします。

 そのためには、3個のPIC、74HC138、5個のトランジスタなど、全体のレイアウトも少しずつ変更をしなければなりません。 そして、これらのパターン変更によって新たに加わった 左にランド3つ分と下に1つ分の小さな空間ですが、恐らくその目的は果たしてくれるものと思います。 勿論、これらのパターン変更は新たにプリント基板を作製するときの話で、 私のように既に改善前のパターン図で作製してしまったものはどうしようもありませんが ・・・

| プリント基板(1)部品配置図(改) (LogicIC_CheckerIIPC2a.CE3) | ページトップ |

■ プリント基板(1)パターン図 (部品面) ■

| プリント基板(1)パターン図 (部品面) (LogicIC_CheckerIIPC.CE3) | ページトップ |

■ プリント基板(1)パターン図 (ハンダ面) ■

| プリント基板(1)パターン図 (ハンダ面) (LogicIC_CheckerIIPC1.CE3) | ページトップ |

■ LCDモジュールの選択と取り付け ■

 キャラクタLCDモジュールにも様々な種類のものがありますが、 2017/4 現在 *、"秋月電子通商" のネットでの 商品カタログ を覗いてみると(断っておきますが、私は決して "秋月電子通商" の回し者ではありません)、最も安価なものでは、16文字 x 1行でバックライトなしのものとして、 "S-10551D" と "DMC16117A" との2機種が販売(共に@300)されています。 (以下の4枚の写真は、"秋月電子通商" のホームページからダウンロードした後、無断で このページに合うようにサイズを加工して使用しました ・・・ ごめんなさい)

 * 2018/4 現在では、左側の "S-10551D" は商品カタログから消えています。 どうやら売れ切れたようです。

"S-10551D" 表面 "S-10551D" 裏面 "DMC16117A" 表面 "DMC16117A" 裏面

 本機では、表示させる文字数としてはそれほど多くは必要としていませんので、これらのLCDで十分です。 私も数年前からこれらを数個ずつ所有しており、"S-10551D" については既に 数回の使用実績があります。 これらのLCDはそれぞれハード的に特徴があり、"S-10551D" は使用しているプリント基板が片面のもののため、モジュールの裏面(ハンダ面)側にコネクタを取り付けることは 不可能なため、私はこのモジュールに直接フラットケーブルを付線して、本体側のプリント基板との接続をしています。 (その実例としては、私の次のページ等を参照願います)
 一方、"DMC16117A" は使用しているプリント基板が両面のスルーホールのため、モジュールの裏面(ハンダ面)側にコネクタを取り付けることが可能で、私にとっては初めてですが 今回はこちらのモジュールを使用することにしました。 実際にコネクタ(メス側:ピンソケット)を取り付けた様子を次写真に示します。

コネクタの取り付けの様子 (1) コネクタの取り付けの様子 (2)

 また、これらのモジュールには4つの角にそれぞれΦ2.6 の取り付け用の穴が開けられていますが(取り付けサイズはどちらも同じ)、本体側のプリント基板にこのモジュールを 取り付け固定するためには、スペーサーとして 11.5 mm 長のものが必要となります。 これは今回使用したコネクタのメス側(ピンソケット)とオス側(ピンヘッダ)の、黒い樹脂部分の長さを合わせると 約 11.5 mm になるためで、このように、M2.6 x 11.5 というような特殊なスペーサーは、一般的には入手は不可能です。

 そこで、どうすれば良いのか? ・・・ ですが、私の他のページ(例えば、万年カレンダーケースへの液晶モジュールの取り付け )でも書いているように、このような特殊なスペーサーは自分で作ってしまおう ・・・ という提案です。 そのためには、そこで述べているような "タップを切る(めねじ)ための工具 ( [ 工具の紹介 - 1 ] )" が、最低でも必要となります。 できれば、同様に述べている "パイプカッター ( [ 工具の紹介 - 2 ] )" も揃えることができればよりベターで、スペーサーの自作が楽になります。

 [ タップ切りの方法とコツ ] 下の写真は、タップハンドルを使用してパイプにタップを切っているところのイメージを表したものです。

左横に伸びている透明で細長いものが、これからタップを切ろうとしている材料のパイプで、まずこれを左手の指でしっかり持って固定をし、右手にはタップハンドルを持って、そのタップの先を パイプの穴に差し込んで右に回転をして行けば良い訳ですが、うまくタップを切るためには、やはりそれなりにコツがあります。

パイプの穴に差し込んだタップを、軽く押し当てるように力を入れながら右に回転をさせて進めて行くのですが、前進ばかりではだめで、少し前進しては次に左に回転をさせて後退し、 また前進しては次に後退し、・・・ を繰り返しながら、少しずつタップを切って行くのです。

パイプ材料にタップを切るということは、その切った分量だけ切りくずができる訳で、また、その切りくずはパイプの内部にどんどんと溜まって行くため、それらを随時外に排出してやらなければ パイプ内が詰まってしまいます。 そのため、上述の前進後退はもちろんですが、数回に一度は総撤退をしてパイプ内からタップを引き出して、パイプ内とタップ先に付いた切りくずの掃除を してやるのです。

そして、これらの行為をこまめに行うことが最も重要で、これを怠るとトラブルが発生して大変なことになってしまうことがあります。 右回転の前進は比較的楽に進むため、ついつい前進し過ぎてしまう、 ということがしばしば起こり得るのですが、このような場合には、次の左回転の後退にひどく困難を強いられ、そうこうしているうちに、やがては前進も後退もままにならないような状態に 陥ってしまうのです。

そんな場合にはパイプを持つ左の指先に多大な力が加わって、私も人差し指にマメを作ってしまった経験が何度もあります。 要は、焦らずゆっくりと、前進後退、前進後退・・・、総撤退、 を繰り返して気長に作業を進めて行くことが大切です。

 次の写真は、上述の工具を使用して実際に自作をした 11.5 mm 長のスペーサーです。 右側の写真はスペーサーを自作するための元となるパイプ材料の一例で、 私は "東急ハンズ" で調達をしたもの(PVCパイプ、外径Φ4.0、内径Φ2.0)を使用しています。

真ん中の4つの白いものが自作をしたスペーサー "東急ハンズ" で調達をした PVCパイプ (タグ部分を 拡大

 左上の写真の中で自作スペーサーの左右に写っているビスは、M2.6 x 10 のものを長さ 3 ミリほどカットをして 7 mm 長に加工をしたものです。 私は、M2.6 のビスでは 5 mm 長、10 mm 長、15 mm 長と、3種のものを常備しているのですが、今回は 5 mm 長(実際にはプリント基板の厚さを差し引いた長さ)のものより長い方がしっかりと固定ができるので 7 mm 長を作製しました。
 このように長いビスから余分な部分をカットして、必要な長さのビスを作り出すためには、長時間ストップウオッチ/タイマー蝶番の取り付け で述べた工具、圧着ペンチ(プライヤー)が必要で、この工具があると、ねじ山を潰すことなく簡単にビスの切断をすることが可能です。

 こうして、自作をしたスペーサーと適度な長さにカットをしたビスを使用して、実際にLCDモジュールを取り付けるときの様子を次の写真に示します。

(1) 本体のプリント基板にスペーサーを 裏面からねじで取り付ける (2) コネクタ(本体側のオスとモジュール側のメス)を嵌合する
(3) LCDモジュールをねじでスペーサーに取り付け固定する (4) 背面側から見たLCDモジュールとコネクタの様子

| ページトップ |

■ ケース加工図 ■

 使用したケースは、100均で購入した "はがきケース (L-8821) サナダ精工株式会社" ポリプロピレンケースです。

 私がプリント基板をケースに取り付け固定をするときには、通常は、5 mm 長のパイプ状のM3スペーサーを使用して、それらの間に挟み基板がケース底から少し浮くようにして いるのですが、今回は 7 mm 長のスペーサーを使用しました。 それは、下のケース加工図にも示すように、プリント基板の右側面にあるコの字型の切り欠き部分が、 5 mm 長のスペーサーでは少々短くてケースの同型の部分と接触してしまい、スペーサーの役が果たせないからです。 7 mm 長のスペーサーを使用したときには 接触することはなく、うまくプリント基板がケースに収まります。

| ケース加工図 (LogicIC_CheckerII.CE3) | ページトップ |



■ 特殊電源ピン・ソケットアダプタ ■

 通常の対角線上の電源(Vcc, GND)ピン配置と異なって、 特殊な電源ピン配置となっているようなデバイス用には、汎用の 24 pin ゼロプレッシャー・ソケットは 使用ができないため、本体の プリント基板(1) においては 16 pin の補助ソケットが 1個搭載してあります。

 しかし、その補助ソケットでも pin14x, pin14y, pin16x 用には、ICの挿入位置の変更だけで対処ができますが、pin16y 用になると GND(Vss) ピンの変更が、pin16z 用では Vcc, GND 両ピンの変更が必要となります。 しかも、その変更を実現することは、一般的に運用時には容易ではありません。

 また、披チェック ICデバイスによってはそのままの素の状態ではダメで、必要なジャンパーを外部に施した状態でチェックを行なわなければならないものもあります。

 そこで、特殊な電源ピン配置用とジャンパー施工用との両方を考慮した、ピンヘッダを設けた "特殊電源ピン・ソケットアダプタ" が必要となりますが、前作の ICチェッカーで作製したものでは 基板の一部分がケースなどにぶつかって使用ができないため、まったく新たに作製をし直しました。 アダプタ プリント基板(2) の裏面側にある 12 pin x 2 本のピンヘッダを、 次の写真のように本体基板のゼロプレッシャー・ソケットに挟んで、二段構成にして使用をします。  pin14x, pin14y, pin16x, pin16y, pin16z 用には、それぞれ専用のソケットを設けてあり、該当の特殊ピン披チェック ICデバイスをそのまま挿入するだけでOKです。 また、pin16w 用には一番左側の pinxxx ソケットを使用して、その上にあるスライドスイッチを上側に ON します。 この pinxxx ソケットは、スライドスイッチを下側に OFF しているときは 一般の pin16 用にも使用ができ、pin14 用のときもジャンパー施工を伴うような場合には、24 pin のピンヘッダとともに使用します。

 なお、このアダプタの機能を使用するためには、U1でのデバイス番号の指定に例外入力をすることに注意をします。 74シリーズにおいても4000シリーズにおいても、先頭は "9" で、 それによる特殊ピン ICデバイスのデバイス番号の重複はありません。(先頭 "9": 例、7492 → 9092、4049 → 9049)

 ただし、ジャンパー施工を伴う一般のピン配置の pin14, pin16 用を使用する場合はその限りでなく、通常のデバイス番号の入力指定で行ないます。

 現在把握している、特殊ピンデバイスやジャンパー施工を伴うデバイスの例を、次に挙げておきます。
        特殊ピン   ジャンパー施工ピン
        ソケット名 Vcc Vss デバイス例   デバイス例 ( デバイスピン ) ピンヘッダ
        pin14x 4 11 7473, 7477, 7478        
        pin14y 5 10 7490, 7491, 7492, 7493   7490, 7492, 7493 ( 1-12 ) 1-14
        pin16x 5 12 7475, 7483, 7496, 74141        
        pin16y 5 13 7476        
        pin16z 3 14 4045        
        pin16w 1 8 4049, 4050        
        標準ピン   ジャンパー施工ピン
        pin14 14 7     4007 ( 3-6, 1-5-12, 2-9, 4-11, 8-10-13 ) 8-11, 6-10-17, 7-14, 9-16, 13-15-18
        pin16 16 8     74390 ( 3-4, 12-13 ) 7-8, 16-17
            4018 ( 1-13 ) 5-17

| ページトップ |

■ ソケットアダプタ回路図 ■

| 回路図 (SpcSocketII.CE3) | ページトップ |

■ プリント基板(2)パターン図 (部品面) ■

 プリント基板(2)ではハンダ面側にもコネクタ(ピンヘッダ)を取り付けるために、その方法に一工夫をしています。 本来、その部分だけが両面スルーホールになっているのが理想的で 非常に都合がいいのですが、ユニバーサルプリント基板を使用する限りではそのようなことは実際には望めません。

 通常の部品面側にコネクタ(ピンヘッダ)を取り付けるのとは異なって、ハンダ面側に取り付けるためにその足のハンダ付けは反対の部品面側になるのですが、片面のユニバーサルプリント基板を使用のため そこには銅箔がなく、そのままではハンダ付けをすることができません。

 私の他のページでも書いたように、両面スルーホールのユニバーサル基板はあっても、スルーホールになっていない両面のユニバーサル基板は、なぜか市販がされていない(少なくとも、私がよく利用をする "秋月電子通商" では取り扱っていない)ようです。 両面スルーホール基板は、私にとっては使いづらいだけで何のメリットもありません。

 そこで、今回のプリント基板(2)の製作では、まず次の左側写真の下段のようなプリント基板の小片(過去に基板をカットして出た端材)を用意します。 次にハンダ面を上にした小片を プリント基板(2)の部品面側に接着をし、その部分だけが両面構造になるようにして、そこにハンダ面側に取り付けたコネクタ(ピンヘッダ)の足をハンダ付けします。
        上段: 左:加工前のピンヘッダ、右:加工後のピンヘッダ 加工のイメージ: 2枚重ねた小片上にピンヘッダを差し
        下段: 左:基板小片の部品面、右:基板小片のハンダ面 スチール定規の上にのせて、右端のピンを上から押す
 ただこの場合、プリント基板の厚さが 1.6 mm x 2 = 3.2 mm となってコネクタ(ピンヘッダ)の足が届かなくなってしまうので、コネクタ(ピンヘッダ)にも簡単な加工が必要です。 その加工のイメージを上の右側写真に示しますが、使用したピンヘッダ(オス)は "秋月電子通商" で取り扱っている、標準タイプ(低オスではない)の 1 x 40P のものを 12P にカットして 2個用意をします。

 次に加工手順ですが、写真に示すように2枚重ねた小片上にピンヘッダを差し、スチール定規の右端からピンが出るようにずらした位置にして、ピンの上から固いもので押し付けるようにすると、 定規の厚さ(私が使用したものは 1 mm )分だけピンが押し下げられます。 これを順に右にずらしながら繰り返すことによって、黒い台座のすべての下部分を 1 mm だけ長くすることができます。 なお、写真には写っていませんが、ずらした小片の右端を受ける位置とこれら2枚の定規の下位置、すなわち押し下げられたピンの下端が当たる位置にも、合計3枚の定規を用意すれば作業が確実になります。

 また、今回はプリント基板(2)自体にも若干の加工があります。 下のパターン図や写真にも写っているように、基板の部品面側から見て右上角を少々カットする必要があります。 初めから開けられているΦ3 の○穴を利用して、パターン図に示す形に削って切り欠き部分を作ります。

 ソケットアダプタであるこのプリント基板(2)を、ICチェッカー本体のゼロプレッシャー・ソケットに装着するときに、素のままではそのレバーを立てると基板の右上角部分にぶつかって装着ができないためで、 作った切り欠き部分でぶつかるのを防ぎます。

 なお、以下は余談ですが、前作でもソケットアダプタ基板や本体基板のハンダ面側に、コネクタ(ピンヘッダ)を取り付けていますが、今回のようにハンダ面を上にしたプリント基板の小片は使用していないので、 どのようにして取り付けたのか不思議に思われた方もいるかもしれません。

 前作ではそれについて何も触れてはいませんでしたが、実は、ハトメを使用していたのです。 プリント基板のハンダ面側から差し込んだピンヘッダの足ピンを、部品面側から差し込んだハトメで受け、 それにハンダ付けをしてガッチリと固定をしているのです。 何といっても基板小片とは異なって、仕上がりにスマートさがあります。

 Φ1 x 1.5 mm 長ほどのすごく微小なハトメで、前作を作製した 12 年ほど以前には 80個ほどを所有していました。 入手したのはそれよりはるか昔のことで、いつ頃どこで購入したのかはまったく記憶にありません。 今思えばその数少ない貴重なハトメを、前作の ICチェッカーですべて使い切ってしまいました。

 その後も、この微小なハトメを使用したい場面が時々あってネットでもいろいろと探してはみたのですが、目的に合うような微小なハトメはなかなか見当たりません。 ハトメの内径はピンヘッダが通り、 かつ、ハトメの外径がプリント基板の穴に入らなければなりません。 もし、どなたかご存知の方がいらしたら私までご一報いただければ幸いです。

| プリント基板(2)パターン図 (部品面) (SpcSocketIIPC.CE3) | ページトップ |

■ プリント基板(2)パターン図 (ハンダ面) ■

| プリント基板(2)パターン図 (ハンダ面) (SpcSocketIIPC1.CE3) (SpcSocketIIPC2.CE3) | ページトップ |

■ 使用部品表 ■

(主要部品: IC, トランジスタ等)

(データシート)
PICマイコン .................... PIC16F873A
PICマイコン .................... PIC16F874A
PICマイコン .................... PIC18F452
3-8 デコーダー .................... HD74HC138
トランジスタ .................... 2SA1015
ショットキダイオード .................... 1S4
LCDモジュール .................... DMC16117A

| 部品表 | Excel ファイル (LogicIC_CheckerII_parts.xls) | ページトップ |

■ 参考サイト ■

簡易型汎用ロジックICチェッカ ..... http://junneko.private.coocan.jp/hardware/checker/checker.htm

| ページトップ | ホーム |


Copyright (C) 2006-2023 やまもとみのる
初版:2006年12月14日、初公開:2018年5月6日、最終更新:2023年10月29日