• 公開日:2025年08月01日
  • | 更新日:2025年09月25日

ADC入力をUARTで送信するシステムを試作してみた

経緯/背景

とあるお客様からの「センサーからのアナログ入力をディジタル値に変換してUARTで出力するシステムを作りたい」とのご要望をいただき、PoC: Proof of Conceptとしてシステムを作ってみることにしました。

用意するもの

ハードウェア

開発するためのPCと評価ボード、イマドキのPCにはなかなかRS-232Cポート(UART送受信用)がないので、USBへの変換モジュールを使用します。アナログ入力値を意図的に変化させるためにボリュームスイッチも用意しました。

  • Windows PC
  • Renesas: RL78/G15 Fast Prototyping Board
  • Silicon Labs: CP2102 USB to UART Bridge
  • ボリュームスイッチ
  • USBケーブル(Type-A <–> Micro)x2
  • その他配線用ケーブル

ソフトウェア

PCの中に必要なものは次の通りです。ルネサスから新しいバージョンが提供されている場合はそちらをご使用ください。

ドキュメント

メンタル

  • やる気
  • 元気
  • モリ*キ!!

初期動作確認

使い慣れていらっしゃる方には不要ですが、e2 studioや評価ボードに初めて触れる方は是非ウォーミングアップを。

  1. 前述のリンクからPCへ統合開発環境e2 studioインストール
  2. 「ファイル」->「新規」->「Renesas C/C++ Project」->「Renesas RL78」を選択
  3. プロジェクトのリストから「Renesas CC-RL C/C++ Executable Project」(もしくは「LLVM for Renesas RL78 C/C++ Executable Project」)を選んで「次へ」
  4. 「プロジェクト名」に任意の名称を入力し「次へ」
  5. 「Target Board」のプルダウンリストから「RL78G15_FastPrototypingBoard」を選択、「Configurations」の「Hardware Debug構成を生成」をチェック、すぐ下のプルダウンリストで「COM Port (RL78)」を選択して「次へ」
  6. 「Use Smart Configurator」をチェックして「次へ」
  7. プロジェクトのサマリーが表示されて「終了」

これでプロジェクトが生成されました。srcフォルダーの下に”<プロジェクト名>.c”ファイルができていて、main関数もあります。すでにその中にLEDがチカチカするコードが記述されていますので、早速ビルドして実行してみましょう。

  1. ビルドの前に最適化オプションを変更します。コンパイラによってはこれをしないとビルド時に警告(WARNING)が出てしまいます。「プロジェクト」->「プロパティ」でプロパティ画面を表示し、画面左のリストで「C/C++ビルド」->「設定」、画面中央のリストで「Compiler」->「最適化」画面右に並んでいる「最適化レベル」を「一部の最適化」もしくは「デバッグ優先」を選んで「適用して閉じる」
  2. 「プロジェクト」->「プロジェクトのビルド」(Ctrl+B)でビルド開始
  3. エラーがなければ「実行」->「デバッグ」(F11)
  4. デバッグが始まるとリセットベクタ(cstart.asm)で一旦停止するので「ブレークポイントまで実行」(F8)
  5. main関数の先頭でまた停止するのでもう一度「ブレークポイントまで実行」(F8)

これでプログラムが止まらずに実行できます。LEDがチカチカしているでしょうか?ここまででウォーミングアップは終わりです。

デモ環境構築:ハードウェア編

RL78/G15FPBのユーザーズマニュアルを見ながら、A/Dコンバータと必要なピンとボリュームスイッチを、UART通信に必要なピンとCP2102を接続します。

A/Dコンバータ

RL78/G15FPB ボリュームスイッチ
ArduinoTMコネクタ IOR(VDD) 最大電圧
ArduinoTMコネクタ A1(ANI8) 可変出力
ArduinoTMコネクタ GND 最小電圧

UART

RL78/G15FPBのユーザーズマニュアルを見ながら、UARTのTxDポートとCP2102を接続します。

RL78/G15FPB CP2102
PmodTMコネクタ No.6(VCC) +5V
PmodTMコネクタ No.2(TXD0) RXI
PmodTMコネクタ No.5(GND) GND

デモ環境構築: ソフトウェア編

初期動作確認と同じ要領でe2 studioでプロジェクトを作成し、そこにA/DコンバータとUART通信の機能を追加します。

スマート・コンフィグレータでの機能追加: ADC

  1. プロジェクト・エクスプローラーから<プロジェクト名>.scfgをクリックしてスマート・コンフィグレータを起動
  2. 「コンポーネント」タブで「コンポーネントの追加」から「A/Dコンバータ」を選択
  3. 設定値は次の通り
  4. 「コードの生成」ボタンをクリック

スマートコンフィグレータでの機能追加: UART

  1. プロジェクト・エクスプローラーから<プロジェクト名>.scfgをクリックしてスマート・コンフィグレータを起動
  2. 「コンポーネント」タブで「コンポーネントの追加」から「UART通信」を選択
  3. 設定値は次の通り
  4. 「コードの生成」ボタンをクリック

メインルーチン

スマート・コンフィグレータで生成されたADCとUARTの関数セットから必要なものをmain関数から呼び出します。

    int main(void)
    {
        uint8_t adc_value = 0;
        uint8_t str_serialout[16];

        EI();

        R_Config_ADC_Set_OperationOn();
        R_Config_UART0_Start();

        while (1) {
            PIN_WRITE(LED2) = ~PIN_READ(LED2);

            R_Config_ADC_Start();

            /* Delay 500 milliseconds before returning */
            R_BSP_SoftwareDelay(500, BSP_DELAY_MILLISECS);

            R_Config_ADC_Get_Result_8bit(&adc_value);

            itoa_3digit(&(str_serialout[0]), adc_value);

            str_serialout[3] = '\r';
            str_serialout[4] = '\n';

            PIN_WRITE(LED1) = 0U;
            R_Config_UART0_Send(str_serialout, 5);

        }

        return 0;
    }

8ビットバイナリーデータからアスキー文字への変換

メインルーチンのほとんどはスマート・コンフィグレータで生成された関数セットですが、1つだけ自作した関数があります。それがitoa_3digit()です。ADCから得た8ビットバイナリーデータをそのままUARTで通信することもできますが、今回使用するTera Termで受信したデータを表示する場合、バイナリーデータのままではPC画面上に正しく表示できません。そこでバイナリーデータをアスキー文字に変換してからUART送信します。

    void itoa_3digit(uint8_t *str, uint8_t value){
        uint8_t d100, d010, d001;

        d100 =  value        / 100;
        d010 = (value % 100) /  10;
        d001 =  value %  10;

        str[0] = ( d100 == 0                ) ? ' ' : '0' + d100;
        str[1] = ((d100 == 0) && (d010 == 0)) ? ' ' : '0' + d010;
        str[2] =                                      '0' + d001;
    }

UART送信完了割り込みルーチン

UARTの送信処理が動作しているかの確認のため、送信直前にLED1を点灯してあります。送信完了割り込みが発生したら当該LEDを消灯します。

    /* Start user code for include. Do not edit comment generated here */
    #include "r_smc_entry.h"
    /* End user code. Do not edit comment generated here */

    **** 中略 ****

    static void r_Config_UART0_callback_sendend(void)
    {
        /* Start user code for r_Config_UART0_callback_sendend. Do not edit comment generated    here */
        PIN_WRITE(LED1) = 1U;
        /* End user code. Do not edit comment generated here */
    }

ビルドとデバッグ

コードが書けたらビルド(Ctrl+B)しましょう。成功したらRL78/G15FPBとPCをUSBで接続し、デバッグ(F11)です。デバッグ開始後ソフトウェアが正しく動いていれば、LED2が0.5秒ごとに反転、そしてLED1が0.5秒ごとに一瞬点灯しているはずです。

Tera Term

RL78/G15FPBが動き出したら次はPC側のセットアップです。CP2102とPCを接続するとPCがUSBデバイスを検出します。新しくできたCOMポートに、ダウンロードしておいたドライバーを当てれば、COMポートのセットアップは完了です。Tera Termを起動し、「設定」->「シリアルポート」を選択します。

設定値をしたら入力したら「OK」、これでTera Term画面上に0.5秒ごとにA/Dコンバータからの入力値が表示されます。必要に応じて「設定」-> 「設定の保存」をしておきましょう。

デモ動作確認

デモ環境構築が完了したらいよいよ動作確認です。ボリュームスイッチを回してみましょう。スイッチを右に回しきればTera Termに255が、左に回し切れば0が表示されていますか?

もし思い通りの動きでない場合は、

  • 各接続の確認
  • スマート・コンフィグレータの設定見直し
  • ソフトウェアのデバッグ

をしてみましょう。私がハマったポイントは次の通りです。

ハマりポイント 解決策
UARTでの送信が正常にできているかわからない オシロスコープで通信波形を測定
UART送信中のみLED1を点灯させることで通信を可視化
Tera Term上の表示が空白だったり数字以外の文字だったり UART送信データを数値からアスキー文字列に変換
ボリュームスイッチの値とTera Term上の表示が連動しない メインルーチンでR_Config_ADC_Set_OperationOn()を呼び出し(ADCEビットをセットしないことにはADCは動かない)
アナログ入力ピンをANI5からANI8に変更(ANI5ピンをアナログ入力として使うにはボード上のショートパッドのショートが必要、ANI8はショート不要)

まとめ

今回はRL78/G15FPBを使って簡単なデモ環境を作成しました。e2 studioを初めて触りましたが、とくにスマート・コンフィグレータの秀逸さに感動しました。オンチップデバッガーで別にICE(インサーキットエミュレータ)を用意することなくデバッグできるのもありがたかったです。

ルネサスMCUのお問い合わせはこちらから!