目次
前
次
エッジ変化カウント(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で実行すると、次のようになります。
生産現場で、製品の出来上がり個数を
表示するときに、利用できます。
生産現場では、スイッチを利用してカウンタを
インクリメントしますが、チャタリングを除去
するために、シフトレジスタを使った信号入力
が多く見られます。
目次
前
次