あれ、なんで 動かないんだ、もういいや




まだ書いてる途中です。
以下はメモ。

 何度やっても動かない。なぜだ!なぜなんだ!そういうことは、電子工作では「当 たり前」です。
 一発で動く人は、神 の手を 持った人です。もし、一発で動いたあなた。
 「俺は神の手を持っている!」と自慢しても良いと思います。(・・・やっぱりそれはちょっと言いすぎかも。)

 そういう神業をもたない私のような一般人は、計測器やらテスト回路やらのお世話になって、
 日々を生き抜くしかないのです。(?)





 0: 大前提・電子工作のバグ出しに王道なし



 これだけは知っておいてください。電子工作のバグだしには、王道はあり ません。
 配線が正しいか確認し、計測器をもってあちこち測りまくるしかないの です。
 しょうがないです。電気は目に見えないですから。

 ちなみに、自分で設計した回路だと、さらに「設計が正しいか」を確認する必要がありますが、
 それは今回のわれわれには必要ありません。
 「TD4の回路は間違いなく動くようにできています」当 然ながら。

 本を信じてください。・・・というか、実際ちゃんと動いている人がたくさんおられるんですから。
 
 悪いのは回路図ではないですよ。目の前の工作物です。今回に限っては
 


 1: まずは配線(電源)を追いかけましょう



 
 結局これしかないんです。本にもありますよね。本にあるとおり、まず電 源ラインを追いかけましょう
 まずは・・・

 (1)ちゃんと、5Vを供給できていますか?

 いくらACアダプタが5V供給できるようになっていても、電流が100mAしか流せないやつとかだと、
 うまく動きませんよ。それから、ACアダプタが壊れている、電池がなくなっているというもっとも初歩的な
 ミスは上級者にもあります。とりあえず、テスタで図ってください。

 (2)ちゃんとつながってますか?
 
 これがもっともありがちなミスです。テスタを「通電チェックモー ド」にして調べましょう。
 通電すると「ピー」と音が鳴るものがありますが、あれがベストです。
 実際にICをソケットに挿して、供給されるべきピンと電源部分にテスタを当てると良いでしょう。

 それから、稀に「線がつながっているけど、その線が断線している」と いう嫌なことがあります。

 テスタを当てた状態で線を振ってみると分かりますが・・・。
 大抵テスタを当てている段階で腕を2本とも使い切っているはずで、線を振るのは難しいかもしれません。
 そういう場合は、「ミノムシクリップ」とかを使って固定できるようにしま しょう。(確か、本にも載っていましたね。)

 (3)ちゃんとつながってますか?その2
 
 74シリーズの電源は、対角線上にあります。(7番と14番、8番と16番というように)
 つい、そればかり調べてしまいがちですが、それ以外のところも調べましょう。

 例えば命令デコーダの回路。5Vにつながっているピンがありますよね。
 ここもちゃんとチェックしましょう。あとは74HC74や、HC14回りの抵抗・コンデンサとか、
 HC153とかHC161とか。ROMの方もお忘れなく。


 本にもあるとおり、これらのチェックがちゃんと行われていれば

 ・74HCが焼けるように熱くなった!
 ・コンデンサが爆発した!
 ・抵抗から煙が!

 
 といった事態が起きる確率を、かなり下げることができます。  


 
(3)ちゃんとつな がってますか?その3
  ここまでのテストは、基盤の裏側にテスターを当てて行っていたと思います。

  でも、それだけでは不完 全な場合があります。

  例えば、ICソケットを使っている場合、ICソケットの裏側の足にテスターを当ててみると
  ちゃんと通電していたものが、ICを挿してみると何故かうまく通電していない状態にある場合があります。
  
  ソケット内部で接触不良が起きていたり、単純にICの足の先が90度曲がっているせいで、
  ソケットに接触していない状態になっていたりします。

  でも、これらの問題を見ただけで発見するのは困難で す。

  そこで、ICを指した状態で、ICのピンに表側からテスターを当てて 検査します。
  これで異常がなければ、まず問題ないといっていいでしょう。
  (たんなる配線の見落としの場合もありますが。)
  



 2: さらに配線(その他の配線)を追いかけましょう



 電源のチェックが終われば、その他の配線を追いかけることになります。
 追いかけ方は同じです。注意点も同じ。一応まとめて書いておきます。

 
 ・ICをソケットに挿して、回路図上で接続されているピン同士をテスターで通電 チェックする。

 ・通電チェックしながら線を振ってみる。
 → もしおかしい場合
   大抵は、半田付け不良です。断線というケースは稀。
   ということなので、通電チェックでおかしかったところを、半田付けしなおしましょう。

 → それでもおかしいとき
   半田付けしなおしてもおかしいときは、断線の疑いがあります
   何度半田付けしてもおかしいときは、接続している線を変えてみてください。

 → それでもやっぱりおかしいとき
   テスターが故障してません?それから、ICソケットにICがちゃんと挿さっていないとか。
   ソケットの上でICの足がぐにゃりと曲がっている
   ことによる接触不良というのは、意外とあります。要チェック。   

 ・実際に稼動する状態に設置してから通電チェックをしてみる。
 → 床に置いた重みで、接続不良が起きている場合があります。そういうことをし ている場合は一応
   チェックしておいた方が無難です。本当は、足とかつけたり、大き目のケースに入れたりするほうが
   いいんですけどね。




 3:動作させてみて、チェックする


 
 実際に電源をいれて、動作させながらチェックし ます。
 いよいよ、アナログテスターの本領発揮です。ここはデジタルテス ターだとちょっとつらいこともあります。
 (クロックを入れたときの立ち上がりとかを見つけやすいのです、アナログテスターは。)
 
 ん?オシロスコープがあるからそんなの関係 ない?
 そういうのが使える環境にあって、かつ使い方が分かっているなら・・・

 こんなところ読んでる場合か!!
 さっさとオシロでチェックしなさい!!



 ・・・このページは、そういうものが使える人は対象外となっております。
 そういう便利なものがあることを知らないあなたのために書いているつもりです。

 ん・・・?なんとなく便利そうだから使いたい?
 
 そーですね。お金があったら買いたいです。
 でも、まともなオシロスコープは1万円札が2枚位は最低でも出て行きます
 
 とりあえず、私の知る限りでの「安くて便利な」オシロスコープを上げておきます。
 ペ ン型デジタルオシロスコープOSZIFOX(秋月電子)
 
 どうです?まあ多分、大抵の方は「やっぱり高いよ」という感想を持たれるかと。


 その感覚は正しいです。

 今回の電子工作「のみ」をこなしたい方に は、お勧めしません
 多分高価な買い物になってしまいます。
 
 少し深みに入りたい方にはお勧めです。
 
 ・・・

 ちょっと前置きが長くなりましたが。アナログテスターでチェックしていきましょう。
 (テスターの針が触れるのを、目を皿にして確認できるのであれば、オシロスコープは要りませんので。)


 (1)クロック・リセットのチェック
 
  まず最初に絶対に確認しておかないといけないものがあります。
  それは「リセット」「クロック」です。この2つが駄目だと、まったく動いて くれません。

  他の部分が駄目だった場合は、「なんとなく動いているっぽいけど、ちょっと駄目かな?」
  という状況になってくれることもあって(必ずではないですが)、それなりの充実感を得られるのですが。
  
  リセットとクロックに関しては、そういうわけにはいきませんので、まず最初に確認しておきましょう。


  ・リセット
  リセット信号は、74HC161の1番ピン・74HC74の13番ピンに出力されています。

  ス イッチを押さない状態で「HI」レベル(5V)なのが普通です。

  LOWレベル(0V)になっていたり、中途半端な値(2V~3Vの間くらい)になっていたりしたら、
  動作不良の原因になります。


 ・クロック
  クロック信号は、74HC161の2番ピン・74HC74の11番ピンに出力されています。

  1Hz・ 10Hzモードでは、HI→LOW→HI→LOW・・・・と いうように変化します。
  
  マニュアルモードでは、スイッチを押し続 けるとHI、離すとLOWになります。

  両方のモードで、動作を確認しておいてください。デバッグするときは、両方とも使いますので。
  HIレベルのとき、ちゃんと4~5V程度出ているかを確認しておいてください。
  10Hzモードでは確認しにくいかも知れませんが・・・(とりあえず1Hzモードで確認が取れればOKです。)



  もしも、配線が正しいのに動作していない場合は、74HC14の故障ということもあります。
  (非常に低い確率ですが)
  14の予備を買ってきて試してください。(それでも駄目なときは、やっぱりあなたのミスです。)
  


 (2)ROMとプログラムカウンタのチェック
  
  デバッグを行うにあたって、意外に重要度が高いのがROMです。
  なぜかというと、動作しながらのチェックというのは
  「『〇〇』というデータを与えてみて、正しい電圧が出ているかを測っていく
  ということが主体になるからです。

  その『〇〇』にあたる部分が、ROMなわけですが。
  これが意図した通りに与えられないと、そもそもチェックにならないわけです。

  さらに
  ROMといっても16個(16バイト)あります。それらのうちの1つ を選んで利用することになるのですが
  その「選ぶ部分の回路」がおかしいと、ちゃんとROMが機能しません

  ということで、プログラムカウンタも、ROMと同じくらい、あるいはそれ以上に重要度が高いです。

  では早速チェックに入りましょう。
  まずチェックするのはプログラムカウンタです。


  ・プログラムカウンタ
  
  まずチェックする前にやっておく必要があるのは、ROMを全部 「00000000」にしておくことです。
  なぜかというと「1111xxxx」か、「1110xxxx」はジャンプ命令だからです。
  ジャンプ命令が発生すると、プログラムカウンタの値がxxxxに勝手に書き換えられてしまいます。
  これはチェックの邪魔になりますので、こうなることを避けるためにROMの設定を変えておきます。

  つぎに、クロックをマニュアルモードに設定します。その後、リセットボタンを、3秒程度押し続けて離します。
      それから、プログラムカウン タに相当する74HC161はどれなのかを見つけておいてください
  ここでは、それをチェックすることになりますので。

  これで準備は終りです。
  
  ・61の14・13・12・11番のピンから、ROM選択のための信号が出て います。
   これらのピンをチェックします。

   ここから出る信号は2進数です。そし て、通常は1ずつ増えていきます。つま り・・・

   0000 → 0001 → 0010 ・・・
   
   といった具合です。準備が終わった段階では、0000が出ていないとおかしいのでチェックしましょう。
   もし出ていない場合は、もう一回リセットボタンを、3秒程度押し続けて離します。
   (今回は長めに押してみてください。)
   リセットボタンを押してみて、0000が出ない場合は、リセットの不調がかんがえられますので、
   1つ前に戻ってチェックしてみましょう。

   次に、クロック用のスイッチを一回押して、クロックを1ついれてみてください。
   すると、先の説明に従って 0001と出るはずです。

   この調子で、・・・・→ 1110 → 1111 まで順番に出力されるかどうか、チェックしてみましょう。


  ・0000の次に0001が出ないとか、途中で値が変わってしまう、ということがあります。
   この場合は、161の9番ピン・7番ピン・10番ピンをチェックしてみてください。

   7番・10番は、常にHIレベルになっているでしょうか?ここがHIレベルでないと、
   プログラムカウンタとして機能しません
  
   次に9番ピンを調べてみてください。今回の動作では、このピンは
   ずっとHIレベルのままになっているは ずです。
  
   途中で突然LOWレベルになっている場合、以下の不都合が考え られます。

   → ROMの設定がおかしい。あるいはROMからの出力が不正

   何らかの事情でROMから「1111xxxx」か「1110xxxx」が出力されていることが考えられます。
   74HC540の11~18番のピンと、74HC32・74HC10・74HC153の接続部分を測って、
   問題の出力パターンがでていないか確認してください。

   出ている場合は、ROMの配線が間違っている可能性があります。


   → 命令デコーダの接続がお かしい、もしくは命令デコーダとプ ログラムカウンタの接続が不良

   「1111xxxx」か「1110xxxx」が出力されていないのに、161 の9番ピンがLOWになる場合は、
   命令デコーダの接続がおかしい場合があります。
   74HC10・74HC32の配線をもう一度確認しましょう。
   また、74HC153や74HC283の接続がわるい場合もありますので、念のため確認してください。

   それから、意外とありがちなのが命令デコーダと161の接続が不良である場合です。
   もう一度通電チェックしておきましょう。


   ・ROM

   実は私は、ROM部分を作ったことがないので(DIPスイッチ で構成した場合のものを)
   偉そうなことは言えませんが。
 
   でも、勘所は分かりますんで、一応書いておきます。

   ・74HC154の入力・出力は適正か?
    プログラムカウンタから受け取った2進数4桁の信号は、74HC154によって
    「16個のROMのうち、1つを選ぶ」という機能に変換されます。

    よって、ROMがちゃんと 動くためには74HC154が正常に動いていない と駄目です。
    
    これをテストするには、
    「クロックをマニュアルモードに設定します。その後、リセットボタンを、3秒程度押し続けて離します。」
    という定番の設定にする必要があります。

    その後、クロックを入れてみて、154の1~11番および13~17番のピンを調べる必要があります。

    動作チェックですが大体以下のような手順で行います。

    → 154の20~23番ピンの状態を確認する。
      プログラムカウンタ74HC161の、11~14番がそのまま出力されているはずです。
      74HC154の20~23番ピンと、プログラムカウンタの74HC161の11~14番ピンを交互に測定して
      比べてみてください。
      

    → 154の1~11番・13~17番の出力を確認する。

      74HC154の、20~23番ピンへの出力に対応して、1~11・13~17番ピンの状態が変化します。
      具体的には

                0000なら、1番だけLOW、残りは全部HI
      0001なら、2番だけLOW、残りは全部HI
      0010なら、3番だけLOW、残りは全部HI
      ・・・・

      というように、一つずつLOWになる部分がずれていきます。
      もし、全部HIのままだったら、18番、19番がGNDに接続されていないということが考えられます。
      あるいは、154の20~23番への出力がおかしいということもあります。


   
   74HC540 の入力・出力は適正か?
      
    74HC154によって、ROMが選ばれた後は、74HC540に対してROM(DIPスイッチ)の出力が行われます。
    つまり、いくら154が機能していても、このあたりで配線ミスをしていたら意味がないわけです。
    あるいは、DIPスイッチが壊れているという、笑えないオチもありえます。
      
    74HC154のチェックと平行して、540のチェックも行って みてください。
  
  
    → 74HC540の2~9番ピンを確認する。  
       現在選ばれているDIPスイッチの出力が、そのまま74HC540に出力されているはずです。

       例えば0000に対応するDIPスイッチが、”1111 0000”となっていたら、
       それに対応するように540の2~9番ピンが、「Hi Hi Hi Hi   Low  Low Low Low」というようになるはずです。
       
       そうなっているかどうかを確認してください。

       もしそうなっていない場合、

       * 74HC154の1~11番および13~17番と、ダイオードとの接続がおかしい。
       (全部を調べる必要があります。)

       *  DIPスイッチ+ダイオード部分と、74HC540の2~9番との接続がおかしい。
       (全部を調べる必要があります。)

       * DIPスイッチと74HC540をつなぐ部分の途中にある、1KΩの抵抗の接続がおかしい。

       * DIPスイッチ、抵抗、ダイオード、74HC540、74HC154のいずれか1つ、もしくは複数が壊れている。

       * あるいはそれらの半田不良、接続不良。

       以上の問題が考えられます。

  
    → 74HC540の11~18番ピンを確認する。

                   540の11~18番ピンには、同じ540の2~9番ピンへの入力が、そのまま出力となっているはずです。
       
       もしそうなっていない場合、

       * 74HC540の1番および19番の接続がおかしい。

       ことが考えられます。チェックしてみてください。
       



   補足:データバスD0~D7 には、現在セレクトされているROM(DIPスイッチ)の出力がそのまま出ているはずです。
      出ていなかった場合
  
      ・アドレスバス(A0~A3)がおかしい。(74HC154の20~23番ピン)
       もしくはアドレスバスへの出力が不適正である。
      ・ROMの配線がおかしい。
      ・電源ラインがおかしい。

      などといったことが考えられます。まずはアドレスバスをチェックして、「ROMがおかしい」のか
      「CPU本体がおかしい」のかを突き止めるようにすると、早くデバッグすることができます。


 4:動作させてみて、より深くチェックする




 ここまでのチェックが通った場合、うまくいくと「なんとなく 動き出す」可能性があります。
 つまりここまでの部分は、「動作に致命的な影響を与える確率が高い部分」 なのです。
 
 もし、現段階で「時々動くけど、時々おかしい」という場合は、もう一度チェックの最初に戻って
 再チェックした方が無難です。これより下は、

 「動作するけど、本来の動作と少し違う」
 「特定の命令が動かない」
 「特定の命令同士が入れ替わっている」

 というような場合に有効なことが多いです。もちろん、チェックしてみるのは自由なので、
 そのまま進んでも一向に構いません。


 (1)命令デコーダのチェック
  
 恐らくこの電子工作を行うに当たって、一番配線ミスをしやすいのがこの部 分です。
 しかも、問題が検出しにくいところです。

 ここを間違えると、「命令したとおりに動いてくれない」という問題 が発生します。
 では、じっくり問題を搾り出していきましょう。
 

  ・命令デコーダ

   これのチェックは、ちゃんとROMが動くことが大前提です。そうで ないのに
   動作チェックをしないといけない場合は、このページの下のほうにあ るテスト回路
   (1バイト分のROM)を参考にして、テスト用のROMを1つだけ接続できるようにしてみてください。

   
  ・命令デコーダ74HC32・74HC10への入力は適正か?

  ちゃんと接続されているかは当然として、ちゃんと4~5V出ているかどうかのチェックはしておいてください。
  具体的には、74HC540の11~18番の接続部分(あるいはテスト用のROM)にテスタを入れて、
  電圧をチェックしてください。


  ・命令デコーダ74HC32・74HC10からの出力は適正か?

  命令デコーダは、与えられたROMからの入力 = 命令  を解釈し、 解釈した結果
  その命令を実行するのに必要な機能ブロック(この場合は 74HC161)を ONにする(OFFにする)という
  仕事を持っています。

  ということは与えられた命令に対して、正しい機能ブロックをONにできないと、
  うまく命令を実行できないことになります。

  これでここでどんなテストをすればいいか分かるかと思います。

  つまり
  → ROMから入力(命令)を与えてみる。
  → その結果、正しい74HC161への出力が出ているか確認する。

  ということを行えばいいのです。
  どういうパターンだと、どの74HC161が使われるかについては、本を読み返してください。

  例えば、
  「1111xxxx」の命令か(JMP)、「1110xxxx」の命令(JNC)で条件を満たしている場合か
  これらの場合は、プログラムカウンタに相当する74HC161の値が変更され、「xxxx」になります。
  
  そのため、普段はHIである74HC161の9番ピンが、この瞬間だけLOWになります。
  つまり、これにつながっている74HC10の出力が、一時的にLOWになるわけです。

  こういったことを、本を利用して調べてください。

  当然「全命令に対して」です。
  面倒くさいです。でも、仕方ないです。王道なし、ですからね。

  なおここでは、JNC命令に関しては完全に調べる必要はありません。
  この命令は、もう少し回路の状態をチェックしてから調べます。




(2)マルチプレクサのチェック

  「ビットの並びがおかしい」
  「別なレジスタの値が使われている」
  「なぜか、レジスタの値が0として扱われている」

  という場合、74HC153、つまりマルチプレクサの接続が間違っている場合があります。
  これ、順番を間違えたりすることが結構あるのです。

  よく確認しましょう。


・マルチプレクサ


  ・入力の接続は適正か?

  マルチプレクサはその性質上、少々つなぎ間違 えても、普通に動きま す
  74HC161や、GNDとの接続を確認しましょう。特に順番をしっ かり確認してください。


  ・入力と出力の関係は適正か?
  
  マルチプレクサで一番重要なのはここです。
  本来、Aレジスタから入力されたものを出力しないといけないのに、なぜかBレジスタの内容が
  出力されていた・・・ということはとてもありがちなことです。

  二つの153の7番と9番ピンの出力と、3~6番・10~13番の入力 を比べて、現在出力される
  べきものが出力されているのかを確認しましょう。

  何が出力されるべきか、というのは先ほどの命令デコーダで調べたところと、
  同じ場所あたりに載っているはずです。(ちょっと離れているかも?)本を調べてみましょう。

 
  それから、次に考えられるのは、153の14番・2番のピンに対する、74HC540・74HC32の出力が
  おかしい場合です。

  これがまずいと、正しい出力が選択されません。ここも調べておきましょう。


(3)ALUとフラグレジスタ・レジスタのチェック

  もう最後のチェックです。チェックするところはそれほど多くないですけどね。
  でも、最後に大物が残ってます。ALUです。
  これの配線ミスをしていたり、壊れていたりすると目も当てられません。
  
  「ビットの並びがおかしい」
  「足し算の結果がおかしい」
  「思ったところにジャンプしてくれない」

  こういうときは、ALUの配線を疑います。

  「条件ジャンプがおかしい」

  この場合は、フラグレジスタを疑います。

・ALU

 ・入力の接続は適正か?    

  ALUで問題が起きている場合は、99%配線ミスです。
  2つの74HC153との接続部分をチェックしましょう。
  それから、74HC540との接続もチェックしてください。


 ・出力の接続は適正か?    

  全部の74HC161と、74HC283の1・4・10・13番ピンが つながっているかちゃんと確認
  しましょう。接続不良・半田不良を起こしやすいところです。


・フラグレジスタ


 ・入力の接続は適正か?
 
  未使用ピンはちゃんと処理されているか、クロック・リセットはちゃんと入っているか、
  命令デコーダ・74HC283との接続は正しく行われているか、こういった問題に注意してください。


 ・出力は適正か?

  これのチェックはちょっと難しいです。とりあえず、

  MOV A, Im      0011 Im
  MOV B, Im      0111 Im
  MOV A, B       0001 0000
  MOV B, A       0100 0000

  このあたりの命令を利用して、Aレジスタ(あるいはBレジスタ)に値をおいてください。
  (1以上の値

  MOV A, 1     スイッチのパターン< 0011 0001 >   (MOV B, 1      0111 0001)

   こんな感じです。

  次に、

  ADD A, Im      0000 Im
  もしくは
  ADD B, Im      0101 Im

  を利用して、5桁目への「桁上 がり」を起こすような足し算を行っ てください。
  つまり0x0fを足せばOKです。

  ADD A, 0x0f      スイッチのパターン< 0000 1111 >  ( ADD B, 0x0f      0101 1111)

   このように。
  すると、74HC74の8番ピ ンが、ADD A,0x0fの命令に差し掛かった瞬間、HIからLOWになります
  (手動クロックを利用してじっくり確認してください。)

  もしならなければ、それは接続不良もしくは配線ミス、あるいはごく稀にあるICの故障です。


・レジスタ(A・B)


 ・レジスタの値が適正か?

  Aレジスタ・Bレジスタの値は、常時調べることができます。
 
  どうして調べるかというと、調べたいレジスタの74HC161の、11~14番ピンの出力を見ればよいのです。
  
  ここにそのまま出力されていま す。
 
  これを利用して、MOVやADD命令を徹底的に調べなおすと、思わぬ問題を発見することがあります。
  
  故障だ、備品不良だと騒ぐ前に、
  
  とりあえずしつこいくらいこの方法を使って、レジスタの中身を確認し てみてください
  
  思わぬ発見をすることがあります。
 

5:確率は低いけど、とりあえず交換テスト




  ここまでやったけどどうもおかしいという場合、74のいずれかが駄目になっているということが
  考えられます。特に静電気の多い冬場は、CMOSを壊しやすい時期です。

  電子パーツ販売店ではある程度の配慮が行われています。(部品の取り皿 にまで工夫がされています!)

  ですんで、たいていの場合壊したのは「あなた」であることが多いです。
  (私も過去にいくつも壊したことがあります。静電気によるものではないですが。)

  壊れているかどうか。これのチェックは大変難しいです。
  完全に壊れている場合はすぐ分かりますが、部分的に壊れている場合はなかなか分かりません。

  そこで。
  
  思い切って予備部品を買ってきてしまいましょう。どうせ、何万もするも のではないですから。
  予備部品を買ってきて、交換してみるのが吉です。
  
  でも多分、配線ミスとかそういうものである可能性が高いです。
  部品の故障を疑うような事態になった場合、とんでもない間抜けなミスを犯している恐れも同時に
  高まるものだと思ってください。

  それでも怪しいなら、部品交換をやってみてください。
  



戻る