パスワードを忘れた? アカウント作成
484382 journal

espyの日記: なぜ、負論理は今でも多用されるのか? 13

日記 by espy

ロジック回路の話。
お仕事では時に、初心者に説明したりもする立場であるが、
これを尋ねられたら、うまく説明できる自信がない。

例えば、プッシュスイッチをマイコンI/Oポートで直接、入力ピンに
接続して読み取りたい場合、入力ポートをプルアップしておいて、
スイッチを押したら "Low"として読めるような回路にすることが
多い。 (図-1,(A))

多いというか、世の中の本や実際の現場では見かけるのは、
ほとんど、この(A)だ。 でも、(B)のようにも構成できるし、
押したときにHighが見える(ソフトから"1"として読める)方が
自然ではないか? 初心者はそう考えるに違いない。

(注:ここではHigh入力→0が読めるといった変わったICは、
  とりあえず話題にしない。チャタリング除去回路も仮に略す)

この理由については、'80年代に何かの本で読んだ記憶がある。
総合すると、

  (1)TTL-ICなどで受け取る場合、これら素子の入力ピンの
    特性上、High入力は数KΩ以上の比較的高い抵抗でもHighに
    できるのに対して、抵抗でLow入力にしたい場合、プルダウン
    抵抗は 数100Ω以下にしないと確実にLowにできない。
    (入力ピンから電流が流れ出す事でLow入力となる。
  参考:図-2, 7400の内部等価回路)

  (2)プッシュキーSWの中にはエラスティック接点のものがあって、
    押しても100Ω程度の抵抗を持つものがある。

以上の点で、非押下時に抵抗でLowにしておく(B)の構成は確実性が劣る、と。

しかし、いまやCMOS時代で、どんなロジック系ICも入力インピーダンスは
とても高くなっているので、(B)の構成で、R2がたとえ1MΩ以上でも
ちゃんとLowと認知される。

今のご時世でもなお負論理を多用することに、必然的理由はあるだろうか?

# 「慣習だし…」以外の答案を、自分は少し持っているが、さらに大先輩に尋ねてみたい所ではある。

この議論は、espy (3615)によって テキ禁止として作成されたが、今となっては 新たにコメントを付けることはできません。
  • by parsley (5772) on 2007年09月21日 2時59分 (#1222247) 日記
    NANDからNOTは作れるが、ANDからNOTは作れないから、だと思っていましたが、私の前提がそもそも違っているんでしょうか?

    逆転の発想(それ極性?)があれば大丈夫とか?
    --
    Copyright (c) 2001-2014 Parsley, All rights reserved.
    • by espy (3615) on 2007年09月21日 4時56分 (#1222270) ホームページ 日記
      うーん...それは、ランダムロジックを組むときに、NANDゲートを用意しておくと、なにかと便利。みたいな
      シチュエーションかな。

      スイッチの話に限定した方がいいかな。
      あるいはもう少し広げるなら、「信号伝達に、なぜ Active High じゃなくて、Active Low 方式を選ぶのか」
      メモリのチップセレクト (Chip Select, CS)とか、ライトイネーブル (Write Enable, WE)とか。
      親コメント
      • by parsley (5772) on 2007年09月21日 8時04分 (#1222313) 日記
        「電子はなぜマイナスからプラスへ」まで戻って紛らわしくしてみるテスト

        恥かき放題
        --
        Copyright (c) 2001-2014 Parsley, All rights reserved.
        親コメント
      • by gm300 (14617) on 2007年09月21日 10時08分 (#1222381) ホームページ 日記
        さらに、NANDのほうがゲート数を節約できるから。CMOSで組むと、AND は not NANDにしないと作れない。

        reset に負論理が使われる - VSSの時にreset - なのは、電源が切れているときに reset になっていて欲しいから。フェイルセーフの思想からと聞いています。電源 on シークエンスを考えたときに、始めにVSSがつながって VDD がつながって、reset がやってくる。 reset が正しく到達する前は、どっちかというとたぶん VSS に近い電位。電源 on になったときに勝手に何か初めては困る。reset されておとなしくしていて欲しい という発想だと思います。

        断線したときに、RST になるのはいいとして、WE になるのはなんか納得いかない気がします。間違って Write したけど、WE があるから大丈夫だぜ! と思ったら断線していてどんどん書き込まれていた .. みたいな。CMOSだと断線していても、電位がふらついて、やっぱり RST もかかるような気もします。
        親コメント
      • オープンドレインのI2Cバスとかがいい例だけど,スイッチ(トランジスタ含む)でHiに引っ張ると,バス上の信号が暴れやすいし,電源の負担(瞬間的なほうの)も増えるから避けるんじゃないかな・・・(てきとう)
        --
        斜点是不是先進的先端的鉄道部長的…有信心
        親コメント
        • I2C の場合相手先がいるかどうか分からないから負論理で Open Drain にしなければなりません。

          (1) ドライブ側がいなくて、自分の電源の入っているとき→動いてはいけない

          ため、信号線は受け側でどちらかに吊らなければなりませんが

          (2) 正論理にして、受け側の電源が入っていないとき

          が危険で、低いインピーダンスで正側につり上げると信号線から入力保護用のダイオードを通して 受け側の電源に回り込み、下手をすると壊します。これは CMOS のほうがラッチアップがあるので更に怖い。

          TTL だと、入力をハイにつり上げると入力耐圧が意外に低いため、リンギングで入力サイドを壊す危険性もあります。

          親コメント
  • 最近になってマイコンまたやり始めて負論理なので、なんで逆なのー??って不安になりました。
    調べてみると負論理のほうが一般的なんですよね・・・

    なんとなく、high(プルアップしておくだけ)よりlow(GNDに直結)のほうが電流流れそうなイメージがあるので、スイッチ入力みたいな日頃はオフいなってるものは、負論理のほうが消費電力抑えられるのかなあ。とか、ちょっと思いましたがあんまり関係ないですね。
  • 職業柄、12V系と5V系を多用し、なおかつ複数の12V系、複数の5V系を扱ってる者です。

    とある回路ブロックを作って、別の基板やセンサーモジュールに信号の受け渡しをする時、
    相手側のセンサーモジュールやら基板の入力レベル12Vだったり5Vだったりとまちまち
    だったりするので、確実にオープンコレクタで出力しています。
    というか、HighActiveの信号で受け渡しするとなると、その回路ブロックの汎用性が
    なくなってしまい、好ましくないと考えています。
  • 最近のマイコンだと、プルアップ抵抗を内蔵しているのがあります。そういう場合スイッチはGNDに接続するほうが回路が単純になりますね。
     ほかには、スイッチを外付けするような場合に、GNDしか出さないことが多いとか、入力信号レベルが異なる信号にスイッチをつける場合でも、GNDにつなげば電圧を区別しなくて済むとか、それらしい理由ならいくつか。
  • 一般的な12Vマイナスアースな電装系を持つ車の改造配線は、基本的にアクティブLow推奨じゃなかったかな。
    バッテリーからのプラス配線はボディがマイナスであることから配線がヘタに露出してショートすると危険。

    なので、プラス側を複雑なルートでスイッチへ引き回したりせず、振動でこすれて磨耗しないようしっかりガードし
    寄り道させずに使いたいデバイスに直結。利用時はスイッチでマイナス側を閉じて動作させる方法が賢いとか。
  • スイッチ回路の周りの抵抗 1MΩってのはだめというか話にならない。指近づけただけでACからの回り込みでバタバタと暴れる代物になります。
typodupeerror

長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds

読み込み中...