PIC 17:ロータリ・エンコーダ


 LCDで表示すると「文字DATAを入れたりしたい」のですが、この時スイッチだけでは効率が悪いです。そこでロータリ・エンコーダを使うと一気に文字などの選択が出来て便利です。
 まず、ロータリ・エンコーダの動作実験をすることにしました。

実験の結果
 入力の手段のロータリ・エンコーダは以前avrで実験しているので、初めから作動させるのではなくavrで作ったSOFTの移植をすることにしました。
 これの方が開発が簡単です。実は、移植したのですがコマンドが少し異なるので始め移植ミスの勘違いがあって動きませんでした。
 確かにこれで動いたはずなのに・・・!と思い、もう一度古いDATAを出して確認するとDATAの読みの変換方法が間違っていたのに気付きました。(2007/APR/2)

プログラムは!

 接点の変化を調べ、回転方向を探る物です。2つの接点(RE_S0・RE_S1)があり、片方が変化した時にもう一方の状態を調べ[1]なら加算、[0]なら減算をします。

 プログラムのもう一つのポイントはタイミングです。チャッタリング除去のWAITとして使っているTIMERです。以前の物は0.7mS程度で十分使えましたのでこれを使いました。もし、不都合が出ればその時点で変更するつもりです。
 VFOレジスタをUP/DOWNさせ結果をLCDに表示させています、プログラムでLCDに表示させている部分は略しました。

その後の実験!
 これで早回し・遅回しでもカウントアップなどに十分動作しました。
 但し、メカ接点1回転24ステップのエンコーダです。光学式とか細かい接点を使う場合、調整が必要かも知れません。
 現時点で、100ステップ(4回転)ぐらい変化させても、快適で苦になりません。表示は8bitの0から255まです。
  RE
 プログラム [本当は接点の図を入れると理解し易いと思いますが、略します。]
RE_CHECK
		btfsc		PORTB,RE_S0
		return				;exit
		call		TIME07M
		btfsc		PORTB,RE_S0	;again
		return
RE_LOOP
		btfss		PORTB,RE_S0
		goto		RE_LOOP
		call		TIME07M
		btfss		PORTB,RE_S0	;again
		goto		RE_LOOP
		btfsc		PORTB,RE_S1	;
		goto		RE_DOWN
;-------------------------------------------------------
RE_UP
		incf		VFO,F		;+step
		return
RE_DOWN
		decf		VFO,F		;-step
		btfsc		STATUS,Z
		clrf		VFO
		return

[もどる]もどる  [MAIN MENU

inserted by FC2 system