目次

エッジ変化カウント(Python)

 デジタル回路では、信号が0→1のようにエッジで
 変化したことを検出したい場面があります。

 回路では、シフトレジスタを使えば
 エッジは検出できます。

 回路は、以下。



 この動作をソフトウエアでシミュレートするには
 次のスクリプトで充分。

    dl = x & 1
    dh = (x >> 1) & 1
    tmp = dl * 2 + dh
    if tmp == 1 :

 変数xの0ビット、1ビットに現在、ひとつ前の
 値が含まれているとして、2進数を10進数へと
 変換すれば、1になります。



 1ビットの変化を検出できるのなら、12ビットくらいでも
 いけるはずとして、リストの要素をカウントにしてハード
 ウエア動作をソフト上でシミュレートしてみます。

 Pythonスクリプトは、以下。

# handler
def xcnt(px,cx,clis):
  print("in ",px, cx , clis[::-1] )
  for e in range(12) :
    dl = (px >> e) & 1
    dh = (cx >> e) & 1
    tmp = dl * 2 + dh
    if tmp == 1 :
      xx = clis[e]
      xx = xx + 1
      clis[e] = xx
  print("out", px, cx , clis[::-1] )
  print(" ")

# initialize
rmc = [0,0,0,0,0,0,0,0,0,0,0,0]
pre = 0
cur = 1024

# first edge
xcnt( pre , cur ,rmc )

# second edge
pre = cur
cur = 512
xcnt( pre , cur ,rmc )

# third edge
pre = cur
cur = 1024
xcnt( pre , cur ,rmc )

# fourth edge
pre = cur
cur = 256
xcnt( pre , cur ,rmc )

# fifth edge
pre = cur
cur = 511
xcnt( pre , cur ,rmc )

 エッジ変化のカウンタは、リストrmcに格納し
 12ビットを2変数pre、curにまとめてます。

 CUIで実行すると、次のようになります。



 生産現場で、製品の出来上がり個数を
 表示するときに、利用できます。

 生産現場では、スイッチを利用してカウンタを
 インクリメントしますが、チャタリングを除去
 するために、シフトレジスタを使った信号入力
 が多く見られます。


目次

inserted by FC2 system