いつも大変お世話になっております。リューキィです。
現在、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なので、非常に少ないのですが数回転回すとズレる状態です。
何かわかる方がいらっしゃいましたら、ご指導いただきたく思います。
よろしくお願い致します。
リューキィさん、こんにちは。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ですか?
メインは以下の所です。このメインの中にはMainTask()はありません。。。
emWin自体はver6.22でした。
e2studioは色々バグった際にe2studioそのものを入れ替えてみたので、今ダウンロードフォルダを見たところ、11/5となっていました。
割込みですが、別の割込みはあの時点では自分のプログラムとしてはTMR0しかなく、それ自体は動作させるときだけスタート、ストップを使っていたので、被ってはいないと思っていました。
他であるとすれば画面の更新の割込みかと。なので割込み優先のレベルを上記のタイマも含めて、IRQを15にして、タイマを10,LCDを6にはしていたのですが。。。
割込み禁止はスマートコンフィグ上では見られなかったのですが、自分の知識不足かもしれません。
リューキィさん、こんにちは。NoMaYです。> メインは以下の所です。このメインの中にはMainTask()はありません。。。以前に私が土台のプロジェクトを渡した当時のことを思い返すと、既にそちらでかなり作り込みが進んでいたものがあって、でも動かなくて、こちらから送ったものとマージするような形になっていた筈です。そして、そちらでその時にmain()が重複してしまうことに気付いて、src/rpb_rx65n.cを丸ごと消したのだと思います。当時、私は今回のことが起きるとは思わなかったので、どうマージしたかの詳細には立ち入りませんでした。なので、今しがたまで、そちらのmain()にMainTask()が無いということに思い至らなかったんですよ、、、その、なんというか、フォーラムでのやり取りですので、どうしても双方お互いに見えないところが沢山あることは避けられないですよね、、、それで、そういうことであれば、頂いた画面コピーのmain()の後半?の隠れている部分にあるemWin呼び出しの部分の全体が見たいです。おそらく、APPW_X_Setup()の上からmain()の最後までを#if 0 ~ #endifで括れば、「main()のMainTask()呼び出しをコメントアウトして下さい」とお願いしたことと同じになる筈ですけれども。
本当に余計なご気苦労だけお掛けして申し訳ございません。。。
さすがに後半全部をコメントアウトすると、While(1)も消えちゃいそうだったので、セットアップ部分と、最後付近にあるAPPW_系をコメントアウトしました!無事に画面は消えました!
本当に素人が手探りで進めているので、伝える事も拙くて、やってることも謎な部分が多くてご迷惑をお掛けして本当に申し訳ございません。
リューキィさん、こんにちは。NoMaYです。> 他であるとすれば画面の更新の割込みかと。なので割込み優先のレベルを上記のタイマも含めて、IRQを15にして、タイマを10,LCDを6にはしていたのですが。。。私が感じているのは、昨今の初学者さんの共通の認識というか誤解というか、スマートコンフィグレータ上であのように至る所で割り込みレベルを指定させられたら、てっきり、割り込み優先度を高くした割り込みは、割り込み優先度を低くした割り込みが実行中でも、すぐに実行される、ものだと思ってしまいますよね。でも違うのですよ。既に低優先度の割り込み処理が実行中だったら、その割り込みが終わるまでは高優先度の割り込みであっても待たされてしまうのですよ。現状のFIT/CGでは、そういう仕様なのです。頂いた文面ですと、LCDを6にしていても、LCD割り込みに既に入ってしまっていたら、IRQを15にしていても、LCD割り込みが終了するまでIRQ割り込みには飛ばないのです。> 割込み禁止はスマートコンフィグ上では見られなかったのですが、自分の知識不足かもしれません。こちらはそもそもスマートコンフィグレータとは関係無いです。emWinのライブラリの中とか、あるいは共同作業で同じプログラムを作っている他の人とか、そういうところで知らぬ間に行われていることだったりするのです。
リューキィさん、こんにちは。NoMaYです。> IRQを15にして、タイマを10,LCDを6にはしていたのですが。。。ちなみに、スマートコンフィグレータの割り込みタブの割り込み優先度はFITモジュールには反映されません。FITモジュールの割り込み優先度はコンポーネントタブのFITモジュールの設定画面の中で設定します。なので、そこのところも気になるところです。(ただ、それと今私が困惑していることの関連は自分も分かりません。)とは言え、IRQ割り込みは、オシロで波形を見ていた時、CGコンポーネントでしたから、割り込みタブの設定の筈でしたね、すみません。