ロータリーエンコーダ処理

ロータリーエンコーダを入手したので、デコード処理を記述します。

処理としては、

1) チャタリング吸収

(これは以前作成したsw_debounce.vをそのまま使用します)

2) エンコード処理

A入力、B入力からプラス方向、マイナス方向を検出します。

簡単に処理するために、A入力の立ち下がりエッジを検出して、その時のB入力で

プラス方向、マイナス方向の検出を行います。

クロック出力はA入力の立ち上がりエッジを使用します。

FPGAでは両エッジ検出フリップフロップが使用できないために、クロックは外側の

ロジックにて処理します。

回路は次のようになりました。

3) encode検出verilog

rotenc_2.v

module rotenc_2(enc_a, enc_b, pm);

input enc_a;

input enc_b;

output pm;

reg pm;

always @(negedge enc_a)

begin

if (!enc_b)

pm = 1;

else

pm = 0;

end

endmodule

4) up/down counter verilog

up/down counter verilog

module counter_updn_3(clk, updn, count);

input clk;

input updn; // up=1, down=0

output [7:0] count;

reg [7:0] count;

always @(posedge clk)

begin

if (updn)

count = count + 1;

else

count = count - 1;

end

endmodule

アクセスカウンター
アクセスカウンター