リモコンコードの読み込み

こんにちはRooL78と申します。

リモコン受信信号のリーダ部のHigh・Low幅(Low→High及びHigh→Low)を測定するため
入力ポートの割込み(INTP5)とTAU0のインターバルタイマ(1usec)を用いて実現したいのですが、
リーダの最初のHigh→Lowのパルス幅の測定がうまくいきません。
オシロ波形の実測値よりも半分以下の値になり、何度か繰り返すと5回程度に1回は正しい値になります。

※因みにですが、High→Lowパルス幅のあとのLow→Highの幅の方は毎回正しい値で問題ございません。

ソフトとしましてはPIF5が1になっているかポーリング方式でモニターし、なっていたら
(確認後はすぐにPIF5を0にセットする)、すぐにTAU0をスタートします。
そして、再びPIF5が1になっているポーリング方式でモニターし、なっていたらTAU0をストップします。
そのあと、TAU0のタイマーのカウント値を取り込んでおります
※INTP5は両エッジ検出モードです

使用マイコン:RL78 G14

お手数をおかけ致しますが、宜しくお願い致します。

  •  チョコさんの考えているのは、僕の考えている事と違うんじゃ無いかな。
     タイマーユニットから、割り込みや出力は行いません。単にカウント値を読むだけです。
     関数を呼ぶ前と後でのカウント値の差を測れば、関数の動作時間を測れます。
     エッジ割り込みで値を読めば、エッジ間の時間が分かります。

  • チョコです。

    >チョコさんの考えているのは、僕の考えている事と違うんじゃ無いかな。

    いいえ、同じことです。ちょっと説明が不足していたようです。

    RL78のTAUのタイマにフリーランモードはないので、何らかのモードに設定する必要があります。

    そのために、常に連続してカウントさせることを考えると、入力なしのキャプチャ動作か、0x10000カウントのインターバルタイマ動作をさせることになります。

    このために前回の書き込みのような使い方を書いたものです。

    あのような使い方ならば、タイマの割り込みを無視すれば、0xFFFF~0までの繰り返しのカウント動作(フリーラン)を行います。

    カウントダウンが嫌ならば、キャプチャモード(パルス間隔測定)に設定してエッジ検出をなしにしておけば、カウントアップでのフリーランになります。

    ちなみに、インターバルタイマ・モードなら、0x10000カウントごとに割り込みが発生するので、それを使えば、16ビットからのオーバーフローが分かるので、割り込みで上位の桁をカウントするようにしておけば、より長い時間でも測定可能です。パルス間隔測定では、オーバーフロー・フラグを使えば、最大0x20000間隔までは測定可能です。

  • まだ認識が違うんじゃ無いかな。

    名前の右の 4 days ago などと書かれた部分にカーソルを持って行くと、日付が表示されます。
    その日付で言うと 2021/11/19 11:52 の投稿で、測定開始の赤い矢印の次の立ち上がりでキャプチャー出来ないから、最初のHレベルの幅を測定出来ないと言う事かと思ったのですが。

    2021/11/21 21:58 どちらにしても、1回目の割り込みまでは無視することになる点は同じですね。

    これも、最初のHレベルの幅を測定出来ないと言う意味だと思ったんだけど。

    タイマーユニットとは関係の無い割り込み端子で良いんですよ。最初の立ち上がりでカウンタ値を読めると思うけど。

    私はH8とRX621の経験は有るけど RooL78 については知りません。
    タイマーユニットを持っていれば、フリーラン・カウンタぐらい作れるだろうと言う事で書いています。

  • チョコです。

    少し誤解があるようです。

    参照されている「2021/11/19 11:52 の投稿」のタイミングチャートは、あくまで、あの測定方法での動作結果を説明しただけで、エッジ検出でのキャプチャは原理的に最初のキャプチャ値は無意味だと言っているだけです。

    >最初の立ち上がりでカウンタ値を読めると思うけど。

    読めますが、そもそも最初のエッジで読み出した値は、比較すべきデータがないので、入力信号のハイ幅やロー幅を求められないですよね。意味を持つのは、2つ目以降のエッジからです。

    非同期の信号に対しては、どういう方法を使おうと、最初のエッジまでの時間はあくまで測定を開始してからの時間であり、入力パルスの幅とは無関係です。これはタイマを使おうと、エッジ検出の割り込みを使おうと変わりません。

    >タイマーユニットを持っていれば、フリーラン・カウンタぐらい作れるだろうと言う事で書いています。

    RL78のタイマにフリーラン・モードがないので、その実現方法を具体的に示しているだけです。初心者の場合には、そのモードがないとそこで止まってしまいます。

  • チョコです。

    リカルドさんの投稿を読み直してみました。

    測定開始の赤い矢印の次の立ち上がりでキャプチャー出来ないから、最初のHレベルの幅を測定出来ないと言う事かと思ったのですが。

    ここが誤解ですね。その上の方に記述しましたが、「最初は立下りエッジ検出(検出リモコン信号は負論理なので、リモコン信号の立ち上がり相当)で起動します。」と、計りたいリモコンのリーダ部の前縁を待っています。つまり、最初のキャプチャ値は元々データを求めたい訳ではありません。単に、最初のキャプチャ値がおかしくなることを説明しているだけです。

    説明が、分かりにくかったようで申し訳ありませんでした。

    また、いつも実現方法を意識しているので、余分な情報が多いかもしれません。

    以上