”かふぇルネ“はルネサス製品に関してユーザ同士が自由に会話をするツールであり、回答者はルネサス社内外の方たちとなります。ルネサス製品やソリューションに関して正式な回答をご希望の場合は、ルネサス技術サポート問合せをご使用ください。

RL78G13にて40pinの出力を指定の順番にON、OFFする簡潔な方法

今回RL78G13の64pin製品(R5F100LFAFA)にて40本のpin出力を指定の順番にON、OFFするプログラムをCS+で組んでいるのですが、出力部分をどうにか簡潔に処理出来ないか悩んでいます。

因みに各pin出力の先はトランジスタを経由したPchMOSFETによる12V3Aの回路です。

処理内容としては、外部割込INTP0発生で1番目の指定pinから順番に40本のpin出力のON、OFFを繰り返すのですが、間に一定の間隔のインターバルがあり、なおかつ再度外部割込INTP0発生時は処理を中断し、その時ONになっているpinをOFFにしてから再び外部割込を待機し、外部割込発生で続きのpinからという感じです。

外部割込待機→INTP0発生→pin01(Hi)→300ms待機→pin01(Lo)、pin02(Hi)→300ms待機→pin02(Lo)、pin03(Hi)→300ms待機→INTP0発生→pin03(Lo)→外部割込待機→INTP0発生→pin04(Hi)→〜〜〜以降pin40まで〜〜〜

*300msの待機時間はユーザー操作により変化する

*pin出力の順番は固定

この際、各出力pinをON、OFFする処理がネックで現在whileの無限ループと時間比較のifの中に各pinをONするswitch文をcase1〜40までと、各pinをOFFするswitch文をcase1〜40まで記述し、switch文に対応する変数を1から++して処理しています。

まだpin出力の順番がport01→port02〜の様に並んでいれば自分でも処理の改善が出来たのですが、基板の設計上port73→port76→port06→port30のような順番になってしまっている為にP7_bit.no3=1やP7=0x04の様な形での操作となり改善策を思いつきませんでした。

何かしら改善策や助言等あればお願いします。

  • チョコです。

    サンプルプログラム等の以下のスレッドがヒントになるんじゃないかと思います。
    zipファイルのAR_LIBディレクトリにAR_LIB_PORT.cというArduinoのデジタル入出力を制御しているプログラムがあります。
    この46行目からArduinoの端子の並びをRL78のポートとビット位置等を2次元の配列で定義してあります。
    上から端子0,1,2 …と並んでいます。各行はポート番号、ビット位置、PMCレジスタの有無、プルアップ抵抗の有無の4つの要素で構成されています。質問のケースでは、最初の2つだけで充分だと思います。
    ポート番号(0~15)はポートのアドレスの下位4ビットになります。つまり、P0のアドレス(0xFFFF0)にこの値を加算すれば対象の端子のポートのアドレスが得られます。ビット位置ですが、これは、AR_LIB_PORT.hで以下のように定義されています。
    つまり、ビット位置だけが1になっているパターンです。この使い方は、digitalWrite関数にあります。
    217行目で、"P_dif[pin][0];”のように"pin"で表引きして、オフセットアドレスを”p_offset"に入れます。219行目で"p_addr"に対象ポートのアドレスを得ています。
    223行目で、"P_dif[pin][1]"でビット位置のデータを"work"に入れています。実際の処理は、以下のようになります。
    出力したい値"value"が0ならば、269行目で"*p_addr &= ( work ^ 0xFF );"としてworkのビットパターンを反転してポートとAND処理を行うことで、出力を0にしています。同様に出力したい値"value"が1ならば、278行目の"*p_addr |= work;"でポートの該当するビットを1にしています。
    これで処理はできるはずなので、後は操作したい順番にP_difで並べてください。これを0から順番にインデックスすればできまます。
    >port73→port76→port06→port30のような順番になってしまっている
    この場合、{7,BIT3},{7,BIT6},[0,BIT6},{3,BIT0}のように定義して下さい。
    これで何とかなると思いますよ。
    以上
  • ありがとうございます。

    大変助かりました。

    Arduino API対応などは耳に挟んでいましたがCS+環境に慣れていた為見向きもしていませんでした……。

    ご紹介のサンプルプログラム共々今後の参考にさせて頂きます。