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_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]