Config_ICUでのIRQの設定について

いつも大変お世話になっております。リューキィです。

現在、RX65N Envision Kitでロータリーエンコーダを使用した試作機の開発をしているのですが、

信号の入力も表示も出来ているのですが、なぜか1回転した時の数字がズレてしまう事が多々発生してしまっています。

ロータリーエンコーダの接続の方法や、接続端子の接触不良等も疑ったのですがどうやら問題なさそうで、次にマイコン側の端子の設定

を疑っている次第です。

13chのD7(IRQ1)とD6(IRQ2)ロータリーエンコーダの信号線は接続しており、

モジュールのConfig_ICUでIRQ1/2ともに立上りエッジのレベル15 フィルタ無しにしてあります。

また、メインソース上で

R_GPIO_PinDirectionSet( GPIO_PORT_D_PIN_1, GPIO_DIRECTION_INPUT );
gpio_err |=R_GPIO_PinControl (GPIO_PORT_D_PIN_1, GPIO_CMD_IN_PULL_UP_ENABLE);
R_GPIO_PinDirectionSet( GPIO_PORT_3_PIN_2, GPIO_DIRECTION_INPUT );
gpio_err |=R_GPIO_PinControl (GPIO_PORT_3_PIN_2, GPIO_CMD_IN_PULL_UP_ENABLE);

で入力端子設定とプルアップ設定も行っております。

(※もしかしたらこれが二重設定とかになっていて邪魔をしているのか??とも思い始めました)

また、ロータリーエンコーダのカウントは

IRQ1が立ち上がった際に、IRQ2の状態を見て0だったらカウントをインクリメント

IRQ2が立ち上がった際に、IRQ1の状態を見て0だったらカウントをデクリメント

としています。(それぞれの立ち上がりを見ずとも、一行目にelseでデクリメントすれば良いのもわかっているのですが、ズレが発生しているので何か問題があるのかもと思い、わざと

分けてあります)

ロータリーエンコーダの1周の分解能は40なので、非常に少ないのですが数回転回すとズレる状態です。

何かわかる方がいらっしゃいましたら、ご指導いただきたく思います。

よろしくお願い致します。

Parents
  • リューキィさん、こんにちは。NoMaYです。

    再開した時にやることをメモしました。

    (1) 再開時に下のオシロの画面コピーの1枚目と同じ現象になるか念の為に確認する。

    これまで頂いていた投稿から感じるのは、そちらの環境がいくら何でも不安定過ぎるかなぁ、という感じがする為です。

    (2) 以下の設定で上記の(1)と同じことをするとどういう波形になるか?

    (2-1) emWinを止める(これまでの投稿の記載で書けば、main()のMainTask()呼び出しをコメントアウトする)
    (2-1') 上記の(1)ではemWinが動いていた(なおemWinが動くことに伴ってLCDドライバ/DRW2Dドライバ/R_SCI_IICドライバ等も動いている)
    (2-2) 他方で、main()にはIRQ割り込みとポート出力が使えるようにコードを入れておく

    (3) 下のオシロの画面コピーの2枚目の時にemWin(及び関連ドライバ)は動いていたか?

    (3-1) main()のMainTask()呼び出しのコメントアウトを解除したものの、MainTask()の中でコメントアウトされたものが無かったか?
    (3-2) CMTを1つ追加で使ったわけであるが、そのせいでemWin(及び関連ドライバ)で必要なCMTが不足して動作不能になっていなかったか?

    (4) IRQ割り込みを遅延させているのは何の処理か?(暫定的に以下の(4-1-1)や(4-1-2)であると仮定)

    (4-1-1) 通常処理での何かの長時間のclrpsw_i~setpsw_iの期間?
    (4-1-2) 何かの長時間の割り込み処理?

    (4-2) RX65N Envision Kitにもともとあったものなのか? リューキィさんのアプリケーションコードによるものか?

    (4-3) どうやって `何の処理が?` というのを特定するか (私の課題かなぁ)

    (5) どういう対処案があるか

    (5-1) hirakuni45さんのアドバイスの方法

    hirakuni45さんからのリプライ/アドバイス
    community-ja.renesas.com/cafe_rene/forums-groups/beginners/f/002-2095199602/9604/config_icu-irq/46944#46944

    (5-2) 多重割り込み

    もしもemWinのバイナリライブラリの中だと、、、詰み?、、、(まだDTCで対処出来る可能性があるだろうか?、、、)

    以下、これまでに頂いていたオシロの画面コピーの一部です。(私の書き込みがあります。)

    黄色: ロータリエンコーダからの出力
    ピンク色: それをIRQに入れて立ち上がりエッジ検出の割り込み処理でデバッグ用ポート出力をトグルしたもの


    黄色: 未測定
    ピンク色: CMTで1msの割り込みを発生させて割り込み処理でデバッグ用ポート出力をトグルしたもの

     

  • こんにちは。NoMaYです。

    以下の現象の原因の可能性のメモです。

    (A) 立ち上がりエッジ検出のIRQ割り込みが3~4ms程も遅延することがある。(そのようにオシロで観測される。)
    (B) 他方、CMTタイマで作った1ms割り込みではそのような遅延が無い。(そのようにオシロで観測される。)
    (B') また、TMRタイマで作った100μs割り込みでもそのような遅延は無さそう。(試しに作ったプログラムが期待通り動いている。)

    可能性

    ・ 誰かが割り込みマスク処理を間違えて、意図せずIRQ割り込みが一時的にマスクされてしまっている、ということは無いだろうか?

Reply
  • こんにちは。NoMaYです。

    以下の現象の原因の可能性のメモです。

    (A) 立ち上がりエッジ検出のIRQ割り込みが3~4ms程も遅延することがある。(そのようにオシロで観測される。)
    (B) 他方、CMTタイマで作った1ms割り込みではそのような遅延が無い。(そのようにオシロで観測される。)
    (B') また、TMRタイマで作った100μs割り込みでもそのような遅延は無さそう。(試しに作ったプログラムが期待通り動いている。)

    可能性

    ・ 誰かが割り込みマスク処理を間違えて、意図せずIRQ割り込みが一時的にマスクされてしまっている、ということは無いだろうか?

Children
No Data