7segLED へのADC変換表示

いつもお世話になります。

としです。

標記の件、7segLED へのADC変換表示でアドバイスを頂きたく思います。

内容は7セグLEDへの小数点以下の表示方法です。

環境;CSPlus_CC_Package_V80300

         CC-RL_V10900

   RL78G11(R5F1058A)

 

初期設定

 P51~56 7segのabcdef

 P00~01 7segのgとドット  ⇒ピン数が足りないのでP5.0を使用しました。

 チャネル0 インターバルタイマ ⇒wait関数を作る様

 チャネル3 インターバルタイマ ⇒7segの桁を変えるよう

 ADC等の初期設定は全て触っておりません。

 

/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
volatile    uint8_t g_disp_data[11];     /* P5表示データバッファ   */
uint8_t const CONV_7SEG[11] =
{
    0x7e,    /* "0"  */
    0x0c,    /* "1"  */
    0x36,    /* "2"  */
    0x1e,    /* "3"  */
    0x4c,    /* "4"  */
    0x5a,    /* "5"  */
    0x7a,    /* "6"  */
    0x4e,    /* "7"  */
    0x7e,    /* "8"  */
    0x4e,    /* "9"  */
    0x00    /* " "  */
 };

volatile    uint8_t g_disp_data2[11];    /* P0表示データバッファ   */
uint8_t const CONV_7SEG2[11] =
{
    0x00,    /* "0"  */
    0x00,    /* "1"  */
    0x01,    /* "2"  */
    0x01,    /* "3"  */
    0x01,    /* "4"  */
    0x01,    /* "5"  */
    0x01,    /* "6"  */
    0x00,    /* "7"  */
    0x01,    /* "8"  */
    0x01,    /* "9"  */
    0x00    /* " "  */
};

 

void main(void)
{
    R_MAIN_UserInit();
    /* Start user code. Do not edit comment generated here */
    while (1U)
    {
        uint8_t count = 0U;               /* カウンタクリア           */
        g_result_buffer = 0U;            /* A/D結果クリア            */

        R_ADC_Set_OperationOn();  /* 電圧コンパレータを動作許可状態 */

       wait_time(1);                        /* 安定のため5us待機        */
    
        R_ADC_Start();                    /* ADCスタート                */

    /* ---- Main loop ---- */
        while (1U)
        {
            HALT();                  /* HALTモードで待機             */
            ADIF = 0U;                /* 割り込み要求フグのクリア    */
           R_ADC_Get_Result(&g_result_buffer);    /* AD変換結果(10ビット)呼び出し */
            g_disp_data  [0] =  CONV_7SEG[( g_result_buffer)] ;
            g_disp_data2[0] =  CONV_7SEG2[( g_result_buffer)] ;
            g_disp_data  [1] =  CONV_7SEG[( g_result_buffer)] ;
            g_disp_data2[1] =  CONV_7SEG2[( g_result_buffer)] ;
            g_disp_data  [2] =  CONV_7SEG[( (g_result_buffer /100)/2 )] ;
            g_disp_data2[2] =  CONV_7SEG2[( (g_result_buffer /100)/2 )]
            wait_time(1);        /* 安定のため5us待機        */

static void R_MAIN_UserInit(void)
{
    /* Start user code. Do not edit comment generated here */
    R_TAU0_Channel3_Start();        /* チャネル3カウント開始        */
    EI();
    /* End user code. Do not edit comment generated here */
}

 

 

R_ADC_Get_Result(&g_result_buffer); でAD変換値を0~1023で読んでいるので

この変換値をなんらかで計算すると思うのですが

どうすればよいかが分かりません。

整数の場所は(AD変換値/100)/2 で出すことができました。

小数点以下がどう計算するのかが分かりません。

2進数にして考えても見たのですが小数点第一位だけを出すのはわかりませんでした。

 

以上、アドバイスがあれば教えていただきたく思います。

 

 

Parents
  • とし さん、こんにちは。NoMaYです。

    別の発想として、(V(ボルト)ではなく) mV(ミリボルト)でuint16_tの変数に一旦格納して、4桁目(千の位)の数値と3桁目(百の位)の数値を取り出す、というのも素朴でよいかも、と思いました。

  • 個人的には 2のべき乗の値以外での除算はコストが気になるので避けたいです。

    https://wandbox.org/permlink/Hw2Z0gwzvCeWIU1p
    https://wandbox.org/permlink/FKiy3jUchube1srD

  • RL78/G11 は RL78-S3 コアで除算命令もあるしそれほど恐れる必要はないかな >除算
  • fujita nozomu さん、NoMaY さん、チョコ さん

    お世話になります。
    としです。

    お礼が遅くなり大変申し訳ありませんでした。

    fujita nozomu さん
    具体的なアドバイスありがとうございます。
    さらに検証までしていただき申し訳ありませんでした。
    自分でも確認してみましたが
    整数部を求めるのに(AD変換値/100)/2  ではやはり誤差が出ました。
    この誤差を少なくするために2進数にしてからマスク等を行うかと
    考えたらすでにNoMaY さんとチョコ さんからアドバイスを
    頂いておりました。

    今回、7seg を使用したのも本来はIICAで行いたかったのですが
    表示すらされなかったので、暫定でもこちらを使用しました。

    そうしたら今回の件でくじけそうでしたが
    皆さんのアドバイスで完成しそうです。

    大変申し訳ないのですが今週は作業ができないので
    来週早々に取り掛かりたいと思います。

    成功したら別途、作成プログラムを乗せたいと思います。

    以上、みなさんありがとうございます。
  • fujita nozomu さん、NoMaY さん、チョコ さん

    お世話になります。
    としです。

    7segLEDへのADC変換表示についてですが
    fujita nozomu さんから教えていただいたプログラム

    int date(void)
    {
    d0 = 5 * g_result_buffer / 1024;
    d1 = 50 * g_result_buffer / 1024 - 10 * d0;
    d2 = (500 * g_result_buffer / 1024 - 100 * d0 - 10 * d1);
    d3 = 5000 * g_result_buffer / 1024 - 1000 * d0 - 100 * d1 - 10 * d2;
    }

    こちらで7segLEDの動作をシミュレーションで確認することができました。

    しかしNoMaY さん、チョコ さんから教えていただいたプログラムでは
    動作を確認することができませんでした。
    主な変更点は下記プログラムを追加させていただいた点だけになります。
    int date(void)
    {
    mv = ((g_result_buffer * 5000)/ 1024);
    d0 = mv / 1000; mv -= 1000 * d0;
    d1 = mv / 100; mv -= 100 * d1;
    d2 = mv / 10; mv -= 10 * d2;
    d3 = mv;
    }
    uint16_t mv、char d0 等の宣言はグローバル関数のところでやっています。
    ⇒int date(void)内でchar の宣言を記入するとエラーになるためです。


    mv,d0,d1,d2,d3,g_result_bufferをデバッグのウォッチ1で確認すると
    例1; 1015mvの時
    名称      数値
    g_result_buffer  208(0x00d0)   
    mv 5(0x0005)
    d0 0x00
    d1 0x00
    d2 0x05
    d3 0x05

    例2; 3005mvの時
    名称      数値
    g_result_buffer  615(0x0267)   
    mv 8(0x0008)
    d0 0x00
    d1 0x00
    d2 0x05
    d3 0x08

    例3; 4007mvの時
    名称      数値
    g_result_buffer  821(0x0335)   
    mv 0(0x0000)
    d0 0x00
    d1 0x00
    d2 0x04
    d3 0x00

    このようになっておりデータが取り出せません。
    mv の数値が自分の思っている数値(計算した数値)
    と異なるのが問題だと思います。

    これらの原因についてもしお分かりなら
    ご教示いただきたく思います。
  • > mv,d0,d1,d2,d3,g_result_bufferをデバッグのウォッチ1で確認すると
    > 例1; 1015mvの時
    > 名称      数値
    > g_result_buffer  208(0x00d0)   
    > mv 5(0x0005)
    > d0 0x00
    > d1 0x00
    > d2 0x05
    > d3 0x05

    CC-RL は int のサイズが 16bit であり、g_result_buffer が uint16_t だとすると

    mv = ((g_result_buffer * 5000)/ 1024);

    の g_result_buffer * 5000 の計算は uint16_t で行われるため、g_result_buffer の値次第ではオーバーフローが発生します。

    mv = (uint16_t)((g_result_buffer * 5000L)/ 1024);

    とかしとけばまあ大丈夫でしょう。
  • チョコです。
    >mv = (uint16_t)((g_result_buffer * 5000L)/ 1024);
    そうなんですよね。uint16_tでは桁あふれするので,乗算から除算までの途中の計算はuint32_tで計算しないといけないのです。
  • チョコです。

    >今回、7seg を使用したのも本来はIICAで行いたかったのですが

    >表示すらされなかったので、暫定でもこちらを使用しました。

    RENESASのRL78/G11のサンプルコードを見ていたら,「デジタル電圧計」(R01AN4063JJ0100)

    と言うのがありました。

    これは,電圧を測って結果をIICAでLCDに表示しているようです。

    このアプリケーションノートはとしさんのやりたいことの参考になりそうです。

    また,「1.5 内部基準電圧による補正処理 」に整数での演算について説明があるので,参考になるかもしれません。

    一度,ダウンロードしてみてください。

  • fujita nozomu さん、チョコさん

    いつもお世話になります。
    としです。

    ご確認とアドバイスありがとうございます。

    お礼が遅くなり申し訳ありません。

    さっそく作業に取り掛かりたいのですが
    自分にコロナウイルスの疑いがあるので
    しばらく作業ができません。

    動作確認後別途、こちらに乗せたいと思います。

    毎回、アドバイスを頂きありがとうございます。
Reply
  • fujita nozomu さん、チョコさん

    いつもお世話になります。
    としです。

    ご確認とアドバイスありがとうございます。

    お礼が遅くなり申し訳ありません。

    さっそく作業に取り掛かりたいのですが
    自分にコロナウイルスの疑いがあるので
    しばらく作業ができません。

    動作確認後別途、こちらに乗せたいと思います。

    毎回、アドバイスを頂きありがとうございます。
Children
  • それは大事ですね、お大事に。
  • いつもお世話になります。
    としです。

    前回の質問内容から確認がおそくなり申し訳ありませんでした。
    シミュレーションでの動作確認ができましたので
    報告させていただきます。

    また、5V以外の電圧でも
    確認を行いましたので、追加で記入させていただきます。

    void main(void)
    {
    R_MAIN_UserInit();
    /* Start user code. Do not edit comment generated here */
    while (1U)
    {
    uint8_t count = 0U; /* カウンタクリア */
    g_result_buffer = 0U; /* A/D結果クリア */

    R_ADC_Set_OperationOn(); /* 電圧コンパレータを動作許可状態 */

    wait_time(1); /* 安定のため5us待機 */

    R_ADC_Start(); /* ADCスタート */


    /* ---- Main loop ---- */
    while (1U)
    {
    HALT(); /* HALTモードで待機 */
    ADIF = 0U; /* 割り込み要求フグのクリア */
    date();

    R_ADC_Get_Result(&g_result_buffer); /* AD変換結果(10ビット)呼び出し */
    g_disp_data[2] = CONV_7SEG[d0] ;
    g_disp_data2[2] = CONV_7SEG2[d0] ;
    g_disp_data[1] = CONV_7SEG[d1] ;
    g_disp_data2[1] = CONV_7SEG2[d1] ;
    g_disp_data[0] = CONV_7SEG[d2] ;
    g_disp_data2[0] = CONV_7SEG2[d2];
    wait_time(1); /* 安定のため5us待機 */

    }

    }



    /* End user code. Do not edit comment generated here */
    }
    /***********************************************************************************************************************
    * Function Name: R_MAIN_UserInit
    * Description : This function adds user code before implementing main function.
    * Arguments : None
    * Return Value : None
    ***********************************************************************************************************************/
    static void R_MAIN_UserInit(void)
    {
    /* Start user code. Do not edit comment generated here */
    R_TAU0_Channel3_Start(); /* チャネル3カウント開始 */
    EI();
    /* End user code. Do not edit comment generated here */
    }

    /* Start user code for adding. Do not edit comment generated here */

    /**************************************************************
    * 関数名; wait_5us
    * 説明 ; 5us待つ
    * 引数 ;-
    * 戻り値;-
    ***************************************************************/
    void wait_5us(void)
    {
    R_TAU0_Channel0_Start();
    NOP();
    R_TAU0_Channel0_Stop();
    }

    /*******************************************************************************
    * Function Name: wait_time
    * Description : 任意時間待機(5usを何回繰り返すか)
    * Arguments : wait time by 20us
    * Return Value : none
    ********************************************************************************/
    void wait_time(uint8_t time)
    {
    uint8_t work;
    for ( work = time ; work > 0 ; work-- )
    {
    wait_5us(); /* wait 5us */
    }
    }

    /*******************************************************************************
    * Function Name: int date(void)
    * Description : 7seg表示用数値算出
    * Arguments : wait time by 20us
    * Return Value : none
    ********************************************************************************/
    /*
    int date(void) //5V
    {
    mv = (uint16_t)((g_result_buffer * 5000L)/ 1024);
    d0 = mv / 1000; mv -= 1000 * d0;
    d1 = mv / 100; mv -= 100 * d1;
    d2 = mv / 10; mv -= 10 * d2;
    d3 = mv;
    }
    */

    /*
    int date(void) //10V
    {
    mv = (uint16_t)((g_result_buffer * 10000L)/ 1024);
    d0 = mv / 1000; mv -= 1000 * d0;
    d1 = mv / 100; mv -= 100 * d1;
    d2 = mv / 10; mv -= 10 * d2;
    d3 = mv;
    }
    */

    /*
    int date(void) //20V
    {
    mv = (uint16_t)((g_result_buffer * 20000L)/ 1024);
    d0 = mv / 10000; mv -= 10000 * d0;
    d1 = mv / 1000; mv -= 1000 * d1;
    d2 = mv / 100; mv -= 100 * d2;
    d3 = mv;
    }
    */

    /*
    int date(void) //30V
    {
    mv = (uint16_t)((g_result_buffer * 30000L)/ 1024);
    d0 = mv / 10000; mv -= 10000 * d0;
    d1 = mv / 1000; mv -= 1000 * d1;
    d2 = mv / 100; mv -= 100 * d2;
    d3 = mv;
    }
    */

    /*
    int date(void) //40V
    {
    mv = (uint16_t)((g_result_buffer * 40000L)/ 1024);
    d0 = mv / 10000; mv -= 10000 * d0;
    d1 = mv / 1000; mv -= 1000 * d1;
    d2 = mv / 100; mv -= 100 * d2;
    d3 = mv;
    }
    */

    /*
    int date(void) //50V
    {
    mv = (uint16_t)((g_result_buffer * 50000L)/ 1024);
    d0 = mv / 10000; mv -= 10000 * d0;
    d1 = mv / 1000; mv -= 1000 * d1;
    d2 = mv / 100; mv -= 100 * d2;
    d3 = mv;
    }
    */

    // /*
    int date(void) //60V
    {
    mv = (uint16_t)((g_result_buffer * 60000L)/ 1024);
    d0 = mv / 10000; mv -= 10000 * d0;
    d1 = mv / 1000; mv -= 1000 * d1;
    d2 = mv / 100; mv -= 100 * d2;
    d3 = mv;
    }
    // */







    /* End user code. Do not edit comment generated here */

    また、チョコさんのアドバイスにありました
    「デジタル電圧計」のアプリケーショノートを見ていこうと思いますが
    まだ、知識が足りないので もう少し勉強したいと思います。
    (CS+のバージョン違いなのかコード生成ファイルの出力方法が違っていたためです。)

    以上、ありがとうございました。
  • ちょこです。
    久しぶりの書込みで、頭から眺め直していたら、気になるところをみつけてしまいました。

    > /* ---- Main loop ---- */
    > while (1U)
    > {
    > HALT();    /* HALTモードで待機 */
    > ADIF = 0U; /* 割り込み要求フグのクリア */
    > R_ADC_Get_Result(&g_result_buffer); /* AD変換結果(10ビット)呼び出し */
    のHALTでの割り込み待ちはA/D変換完了の割り込みかと思いますが、R_MAIN_UserInitでTA03を起動しています。こちらでHALTが解除されることはないでしょうか?
    複数の割り込みを使用している場合には、どの割り込みかを判定する必要があります。ここでは、A/D変換完了の割り込みを検出したいなら、その割り込み処理でフラグを設定して、それを確認すべきでしょう。
    A/D変換完了の割り込みが発生していないなら、もう一度HALTに戻すべきです。(この処理の段階では、割り込みは許可されているので、ADIFをいじる必要はないはずです。)

    また、今回の書込みの中の5us待ちの以下の処理はおかしいのではないでしょうか。TM00を起動して、1クロック後にTM00を停止してしまっています。何の為にTM00を使っているのかわかりません。G11の動作クロック周波数が分からないのですが、この処理は"???"です。
    >void wait_5us(void)
    >{
    >R_TAU0_Channel0_Start();
    >NOP();
    >R_TAU0_Channel0_Stop();
    >}
  • ちょこさん
    返信とご確認ありがとうございます。

    次のページの表記に気付かなくて返事が遅れてしまいました。
    申し訳ありません。

    >今回の書込みの中の5us待ちの以下の処理はおかしいのではないでしょうか。
    >void wait_5us(void)
    >{
    >R_TAU0_Channel0_Start();
    >NOP();
    >R_TAU0_Channel0_Stop();
    >}

    インターバルタイマ設定を「5μs」に設定したので
    カウントできているものだと思っていました。

    ここでは、下記のようにフラグを見るようにします。
    void wait_5us(void)
    {
    TMIF00 = 0; /* 割り込み要求フラグをクリア */
    R_TAU0_Channel0_Start();  /* TM00 のカウントをスタート */
    while ( 1 == TMIF00 ) /*カウントアップ待ち */
    {
    NOP();
    }
     R_TAU0_Channel0_Stop();
    }

    また、
    >複数の割り込みを使用している場合には、どの割り込みかを判定する必要があります。
    こちらについて、
    if文でADC以外をはじくようにするかと思いますので
    このあたりの書き方を探したいと思います。

    もしわかりやすい資料等があれば教えていただきたいです。

    できましたら、また投稿させていただきます。
  • お世話になります。
    としです。

    割り込みについて
    以前にチョコさんに作成頂いた
    RL78割り込みについて
    japan.renesasrulz.com/.../313

    こちらがありましたので、見ていこうかと思います。
  • チョコです。
    まだ、問題が考えられます。
    R_TAU0_Channel0_Start()関数では、TMIF00をクリアし、TMMK00もクリアしてTM00をスタートさせているはずです。従って、INTTM00割り込みを受け付けてしまい、TMIF00がクリアされてしまうので、タイミングによってTMIF00が1になるのを検出できない可能性があります。
    これを避けるには、TMMK00をセットしてからwhileとすべきです。
  • チョコさん。
    ご確認ありがとうございます。

    としです。

    >複数の割り込みを使用している場合には、どの割り込みかを判定する必要があります。
    上記について、確認したところ何回もアナログ電圧を触っていると「000」と表記される
    タイミングがありました。
    これが、HALTモードが解除されたタイミングだと思います。

    if文でADC以外をはじくようにしたところ、動かなくなりました。
    ⇒タイマー割り込みがされないから、7segへの表示がされなくなっていました。

    そこで、過去の多重割り込みの投稿を確認させていただき下記のように修正しました。
    (HALTの位置をタイマー割り込みの中に移動しました。)

    void main(void)
    {
    R_MAIN_UserInit();
    /* Start user code. Do not edit comment generated here */
    while (1U)
    {
    uint8_t count = 0U; /* カウンタクリア */
    g_result_buffer = 0U; /* A/D結果クリア */


    /* ---- Main loop ---- */
    while (1U)
    {

    date();

    R_ADC_Get_Result(&g_result_buffer); /* AD変換結果(10ビット)呼び出し */
    g_disp_data[2] = CONV_7SEG[d0] ;
    g_disp_data2[2] = CONV_7SEG2[d0] ;
    g_disp_data[1] = CONV_7SEG[d1] ;
    g_disp_data2[1] = CONV_7SEG2[d1] ;
    g_disp_data[0] = CONV_7SEG[d2] ;
    g_disp_data2[0] = CONV_7SEG2[d2];
    wait_time(1); /* 安定のため5us待機 */

    }

    }



    /* End user code. Do not edit comment generated here */
    }
    /***********************************************************************************************************************
    * Function Name: R_MAIN_UserInit
    * Description : This function adds user code before implementing main function.
    * Arguments : None
    * Return Value : None
    ***********************************************************************************************************************/
    static void R_MAIN_UserInit(void)
    {
    /* Start user code. Do not edit comment generated here */
    R_TAU0_Channel3_Start(); /* チャネル3カウント開始 */
    EI();
    /* End user code. Do not edit comment generated here */
    }

    /********r_cg_tau.user.cの中身です↓************/


    static void __near r_tau0_channel3_interrupt(void)
    {
    /* Start user code. Do not edit comment generated here */

    R_ADC_Set_OperationOn(); /* 電圧コンパレータを動作許可状態 */
    wait_time(1); /* 安定のため5us待機 */
    R_ADC_Start(); /* ADCスタート */
    EI(); /* 外部割込み許可 */
    HALT(); /* HALTモードで待機 */

    P3 = 0x00; /* クリア・ディスプレイ */
    /* P3=0b0000 */

    P5 = g_disp_data[g_sel]; /* 表示データを設定 */
    P0 = g_disp_data2[g_sel]; /* 表示データを設定 */
    // P0 = g_disp_data3[g_sel]; /* 表示データを設定 */

    P3 |= ( DIGI_SEL[g_sel] ); /* 表示桁選択 */

    g_sel++; /* 表示桁の更新 */
    /* g_selパラメータの桁変更*/
    g_sel &= 0x03; /* 3桁まで変更させる */

    /* End user code. Do not edit comment generated here */

    今のところこのプログラムで電圧読込みに失敗はしてません。


    また、
    >これを避けるには、TMMK00をセットしてからwhileとすべきです。
    R_TAU0_Channel0_Start();の中身を確認したところ
    チョコさんのご指摘通り、TMIF00、TMMK00共にクリアされていました。

    下記のようにTMMK00 = 1 ; 追加したところ、ADCが動かなくなってしまいました。
    自分の認識が違うのは確かなのですが
    TMMK00 = 1 ; の置き場所が違うのでしょうか。

    void wait_5us(void)
    {
    TMIF00 = 0; /* 割り込み要求フラグをクリア */
    R_TAU0_Channel0_Start();  /* TM00 のカウントをスタート */
    TMMK00 = 1 ;
    while ( 1 == TMIF00 ) /*カウントアップ待ち */
    {
    NOP();
    }
     R_TAU0_Channel0_Stop();
    }

    文字が多くて申し訳ないのですが
    ご教示いただきたいと思います。
  • チョコです。
    もう一つ問題がありました(こちらがより基本的な間違いです。)
    「while ( 1 == TMIF00 )」は判断条件が間違えていますね。ここは、比較データは"1"ではなく"0"です。

    TMMK00をセットするタイミングはここしかないです。(できれば、R_TAU0_Channel0_Start()を使うのではなく、単にTMIF00をクリアし、TS0に1を書き込むだけの方が簡単です。)
  • チョコです。
    "r_cg_tau.user.c"を眺めると、INTTM03の中でA/D変換完了の割り込みでHALT を解除し、INTAD割り込み処理の中で変換データを読み出して、A/Dを停止させているようですね。INTADがINTTM00よりも優先順位が上なら動くはずです。
    全体像が見えないので、これ以上の説明はできません。
  • チョコさん

    お世話になります。
    としです。

    R_TAU0_Channel0_Start()については関数があるので
    使っていました。

    これを使うことで割り込みマスクに影響があることが
    やっと理解できました。
    ありがとうございます。

    下記のようにプログラムを修正させていただきました。
    void wait_5us(void)
    {
    TMIF00 = 0; /* 割り込み要求フラグをクリア */
    TS0L = 0x00; /* TM00 のカウントをスタート */
    TMMK00 = 1; /* 割り込みマスク設定 */
    while ( 0== TMIF00 ) /*カウントアップ待ち */
    {
    P5_bit.no6 = 1; /* 確認用 */
    NOP();
    }

    }

    また、
    >INTTM03の中でA/D変換完了の割り込みでHALT を解除し、
    >INTAD割り込み処理の中で変換データを読み出して、A/Dを停止させているようですね。
    >INTADがINTTM00よりも優先順位が上なら動くはずです。

    こちらについても、丁寧に説明頂いたので理解できそうです。

    毎回、アドバイスを頂きましてありがとうございます。

    今回の7seg+ADC と別件でPWM+ADC UART+ADCのプログラムを
    シミュレータで確認できました。

    ここからもう一度、前回教えていただきましたRL78/G11のIICAサンプルプログラムに挑戦したいと思います。