JJ1UBA_nisiの手作りブログ

オーディオアンプ、スピーカ、マイコンを中心に色々なものを手作りしています。
2019年からアマチュア無線も始めました。

LPC1114FN28でロータリーエンコーダ制御

2013-09-27 16:09:14 | プログラミング
Si4735ラジオモジュールをLPC1114FN28で制御しようとしてWebを検索して
いると、LPC1114FN28に限らず、ロータリーエンコーダ制御で苦労しておら
れるようです

ロータリーエンコーダ処理を割込処理で実現しましたので、概要を公開します
ロータリーエンコーダは、秋月のRE-160Fを使用しています



処理概要:

  • ロータリーエンコーダのパルスの立下りで割込みを受け付けています
  •      
  • ロータリーエンコーダの割込ハンドラーは、ロータリーエンコーダが
    回転するとmain()処理と非同期で起動され、フラグ:Flg_encorderが
    AP_INT_OKの場合は、ロータリーエンコーダが接続されているGPIO
    の状態を読み取り、グローバル変数に保存するとともに、Flg_encorder
    AP_INT状態に設定します
  •      
  • main()のwhileループで、Flg_encorderのフラグを常時監視し、AP_INT
    状態に遷移した場合は、Flg_encorderをAP_INT_WAIT状態にします
         
    (ロータリーエンコーダの割込みンドラーは、Flg_encorderがAP_INT_WAIT
    状態の時は、
    main()処理に割込みを通知しません)

  • main()でロータリーエンコーダが右回転した場合や、左回転した場合の
    処理を実行中は、Flg_encorderをAP_INT_WAIT状態を維持します

  • ロータリーエンコーダは、チャタリングを起こす場合があるので、しばらく
    waitしてから、Flg_encorderをAP_INT_OKに遷移させ、次の割込が処理
    可能になったことを割込ハンドラーに通知します。

  • Flg_encorderのフラグ状態

  • AP_INT_OKmain処理が割込みを受付可能状態
    AP_INT_WAITmain処理が割込みに伴う処理を実行中
    AP_INT割込みハンドラーからの割込通知  



ソースコード: 赤字部分がミソです



最新の画像もっと見る

コメントを投稿