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さん、こんにちは。リューキィです。

    いつもいつも事細かにありがとうございます。

    すみません。恥ずかしくて言い出せ無かったのですが、main()内にMainTask()が見つかりません。前回、emWinが動いたままでオシロを使った検証をしていたのも、実はそれが理由です。。。

    e2studioでMainTask()のワードで検索も掛けてみたのですが、

    この状態で、RX65n_GUI_base_proj.c内のMainTask()をコメントアウトしてデバッグをかけても、画面は表示された状態のままです。

    検索ワードをMainTaskで切っても

    こんな感じです。

    話が少し変わりますが、先日の検証で端子への立ち上がりの割込みIRQは今のところ原因不明でズレが生じるのですが、タイマでの割込みでは割込みにズレが生じないので、タイマの割込みを100μsにしてP32の状態を監視しし、トルグしてみるとズレ無しで拾い上げることが出来ました。(先日IRQではズレが生じたので、オンオフの電気的なズレを疑ったのですが、しっかりとオンオフの状態が確認出来ました)

    それで立上りのタイミングを監視し、同時にP33の状態を見ることで、一応はロータリーエンコーダの活用が出来ている状態にはなりました。(前転逆転を繰り返すと、タイミングによってはインクリメント・デクリメントが続けて起こる現象もありましたが、立下りも見ることで、対応できました。以下がソース画面です。)

    問題点:1)TMR0は別の事(モーターの突入電流を防ぐ為のリレー切替時)で使用していたのですが、こちらに充てると別のタイマかカウントが必要になる。

    2)そもそもなぜIRQでの割込みがズレていたのか理由がわからない。(自分の知識やスキルではわからない気しかしませんが。。。)

    3)マイコンの起動時にカウントが1ズレる事がある。ロータリーエンコーダの状態をタイマで監視しているので、監視開始時に条件が揃っていると、立上りとみなし作動してしまう。(これはIRQでもありました。IRQの場合はタイマで回避できそうですが)

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

    とり急ぎですが、、、

    私の手元では以下のフォルダを見たことが無いです。

    aw/Generated/
    aw/Target/

    また、添付されていた画面コピーの第一印象では、以下のファイルはビルド対象から外れていると思われます。

    aw/Target/src/RX65n_GUI_Base.c

    私が以前に渡した土台のプロジェクトでは、main()は以下のソースにある筈なのです。ありませんでしょうか?

    src/rpb_rx65n.c

    もし、そのソースが消えているのでしたら、そもそもmain()はどこにあるのか探してみて頂けないでしょうか?

    あと、e2 studioが2022-10になってますね?いつ頃入れ替えましたかね?ひょっとして、emWinはV6.26ですか?

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

    > 2)そもそもなぜIRQでの割込みがズレていたのか理由がわからない。(自分の知識やスキルではわからない気しかしませんが。。。)

    以下の文でIRQ割り込みが遅れること自体はイメージ出来ますか?(誰が原因かは脇へ置くとしてですけれども。) ただし、今回の件では、私も、以下の理由なのか?違う理由なのか?以下だとしても誰が原因なのか?、分かっていません。


    現状のFIT/CGでは仕様として一度に1つの割り込みしか受け付けません。また、RXマイコンの機能として、割り込みをプログラム上で禁止するということが出来ます。ですので、以下のようなことが起こり得るのです。

    (1) 既に何らかの割り込み処理が実行中である時にIRQ割り込みが発生しても実行中の割り込みが終わるまでIRQ割り込みに飛ばない
    (2) どこかで誰かが割り込みを禁止しているとその誰かが割り込みを許可に戻さない限りIRQ割り込みに飛ばない

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

    > 2)そもそもなぜIRQでの割込みがズレていたのか理由がわからない。(自分の知識やスキルではわからない気しかしませんが。。。)

    以下の文でIRQ割り込みが遅れること自体はイメージ出来ますか?(誰が原因かは脇へ置くとしてですけれども。) ただし、今回の件では、私も、以下の理由なのか?違う理由なのか?以下だとしても誰が原因なのか?、分かっていません。


    現状のFIT/CGでは仕様として一度に1つの割り込みしか受け付けません。また、RXマイコンの機能として、割り込みをプログラム上で禁止するということが出来ます。ですので、以下のようなことが起こり得るのです。

    (1) 既に何らかの割り込み処理が実行中である時にIRQ割り込みが発生しても実行中の割り込みが終わるまでIRQ割り込みに飛ばない
    (2) どこかで誰かが割り込みを禁止しているとその誰かが割り込みを許可に戻さない限りIRQ割り込みに飛ばない

Children
No Data