手持ちのICで行側制御(スキャン側)ロジック(仮)を作成して動作させてみたところ、ラッチクロックを拾ってスキャン対象自動進段するという主要な機能は実現できていましたが、クリア時の挙動に問題があることが発覚しました。
【おさらい:クリア時の問題点】
74HC595をクリアすると、内部構造がシフトレジスタとストレージレジスタの二段構えになっているので、SRCLRで全シフトレジスタがクリアされるものの出力側にあるストレージレジスタは未反映のままになっています。よってRCLKにてラッチしてシフトレジスタからストレージレジスタへ反映してやらないといけません。しかし、RCLKは74HC4040でカウントしているため、SRCLRと同タイミングでCLRでクリアすると、①CLRにてカウンタは0に戻る、②クリアによるラッチ、③初回データ投入後のラッチという流れで処理が行われ、74HC138によるデコード後は①スキャン対象=1、②スキャン対象=2、③スキャン対象=3への出力となり、結果的に3番目のスキャン対象に初回データが反映されてしまう。
【解決策の方針】
1.SRCLRによるリセット後に送出する、クリア反映と初回データラッチの二回分のラッチクロックを、74HC4040では無視してカウンタを0のまま維持する2.74HC138は初回のデータラッチが終わるまで全ての出力ピンをHIGHにする
【具体案の検討】
方針的に、自動化を実現するためには純粋に論理回路を組まなければ解決できないところまでやってきたようです。専用ドライブICの誘惑は強くなりつつありますが、かたくなに拒否して汎用ICのみでやっていきます。わしゃー頑固じゃけぇ。SRCLRをLOWにしたままだとシフトができませんので初回データラッチができません。なんらかの方法で「クリア処理→初回データ投入中」(以後単に「初回ラッチまでの処理」と書きます)の判断を行う必要があります。
74HC595の制御に使うピンはあとOEくらいしか残っていません。OEは負論理でLOWの時出力され、HIGHの時は3-state modeになります。これは各出力ピンがHIGHでもLOWでもないという状態になる、ということなのですがよくわかりませんね。各出力ピンにはスイッチが付いていてONの時は出力され、OFFの時には切断される、というイメージです。OFFの時が3-state modeということですね。初回ラッチまでの処理中はOEをHIGHにして、出力を切っておくことにしましょう。
次にRCLKを制御するのですが、OEがHIGHの時はRCLKの信号をLOWに保っておけばよいでしょう。色々調べていますとマルツの周波数カウンタの製作記事に参考になりそうなことが書いてありました。周波数カウンタは一定期間サンプリング・カウントするロジックが必要ですが、このサンプリングロジックが使えそうです。
ロジックICで構成した周波数カウンタの製作 【測定原理と仕様検討編】
リンク先によれば、何かしらのパルスを一定期間カウントするには、パルスの信号線とサンプリングスイッチの信号線とのANDを取るとサンプリングスイッチ側がHIGHの時にだけパルスの信号線の内容が送出されるとのこと。両方HIGHになった時だけHIGHが出力される=結果的にスイッチ側HIGHの時だけ信号を送出、と理解しましたので、このロジックを拝借することにしましたが、OEは負論理であるためOEを反転してRCLKとANDを取る必要があります。
となると、NOTとANDのロジックICが必要になります。また前回NORが必要になりそうだ、と予測していますので、ICを3つ増やす必要があるようです。よせばいいのに「最小限にするにはどうすればいいかな」とムズムズし始めたので調査続行。
例によっていろいろ情報を漁るとどの記事かはわすれましたが、NANDならほかの論理にも使いまわせるよ、と気になることが書いてありましたので、その線で調べてみると興味深い記事を発見しました。なるほど、そういうことか。
NANDがあればなんでもできる その2 (論理回路にかかわる一連のエントリも面白いです)
NOTはNANDの入力に同じものを突っ込めばよく、ANDはNANDのNOTで表現できますね。初回ラッチまでの処理を表現するロジックはNANDで構成できそうです。
74HC138のG1は74HC595のOEと同じ信号で全ピン未選択状態?を作り出せますので、単純に分岐・接続すればOKです。つまり初回ラッチが終わった後G1をLOWにすればめでたく一つ目のスキャン対象が選択されます(多分)。
【解決策(仮)】
まずマルツの技術情報でロジックICについて調べました。
NANDに対応するロジックICは74HC00ですので、通販でよく使う秋月(ぉぃ)で調べますと SN74HC00N(I-08594) がありました。NANDゲートが4つで1ICになっています。検討ではNANDが3つ必要だとわかりましたので1つ余りますが、これだけでNORを構成することはできません。
なので74HC138の先に挟むNORはNORゲートを買うことにします。やはり秋月で調べますと SN74HC02(I-08595) というNORゲートが4つパッケージングされたものが見つかりました。ということは8行分=2つ必要ですね。
検討した論理をなにかしらの図式に起こしたいので、論理回路図のエディタを探したところ、Web上で作成・保存できるサービスを見つけました。
draw.ioというサービスなのですが、論理回路に限らずUMLやらなにやら、ルームレイアウト(笑)までカバーしていますので、とりあえず何か図を書くとなったらこれを使うと便利かも。一応日本語にも対応していますが、切り替え方法はわからないとわからないので使い方というか切り替え方法を記載した記事にもリンクしておきます。
draw.io
図版作成Webサービス draw.io について
早速各ICとの接続を含めて書いてみたのが以下の図。何気に人生初の論理回路図です。
尚、各ICで今回のロジックに関わるピンのみ接続線を出してあります。ごちゃごちゃするので不要なものは省略。NORゲートもどこに挟むかわかっているので省略。
(NANDの〇が見づらいのでANDと混同しがちですが、ちゃんとNANDですから)
まぁ見ての通りです。
一段目のNOTのICへの分岐ですが、74HC4040の11番ピンに接続しないといけません。
74HC595Nの13ピンからICへの分岐は74HC138の6番ピンに接続しないといけません。
いきなりバグ…orz
【おまけの参考情報】
第7章 論理回路記号とその変換
図を書くために参考にしたのですが、解説もわかりやすいです
NAND ICでNOT回路を作って警報機を作ってみた 【YouTube】
妙に丁寧な言葉遣いでテンポがたどたどしいけど、動作の様子が一目瞭然、シンプルでわかりやすいです。
0 件のコメント:
コメントを投稿