- 公開日:2025年08月01日
- | 更新日:2025年09月25日
ADC入力をUARTで送信するシステムを試作してみた
- ライター:NKG
- マイコン
経緯/背景
とあるお客様からの「センサーからのアナログ入力をディジタル値に変換して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の中に必要なものは次の通りです。ルネサスから新しいバージョンが提供されている場合はそちらをご使用ください。
- Windows 10
- 統合開発環境e2 studio ※My Renesasのログイン必須
- COMポートドライバー
- Tera Term
ドキュメント
メンタル
- やる気
- 元気
- モリ*キ!!
初期動作確認
使い慣れていらっしゃる方には不要ですが、e2 studioや評価ボードに初めて触れる方は是非ウォーミングアップを。
- 前述のリンクからPCへ統合開発環境e2 studioインストール
- 「ファイル」->「新規」->「Renesas C/C++ Project」->「Renesas RL78」を選択
- プロジェクトのリストから「Renesas CC-RL C/C++ Executable Project」(もしくは「LLVM for Renesas RL78 C/C++ Executable Project」)を選んで「次へ」
- 「プロジェクト名」に任意の名称を入力し「次へ」
- 「Target Board」のプルダウンリストから「RL78G15_FastPrototypingBoard」を選択、「Configurations」の「Hardware Debug構成を生成」をチェック、すぐ下のプルダウンリストで「COM Port (RL78)」を選択して「次へ」
- 「Use Smart Configurator」をチェックして「次へ」
- プロジェクトのサマリーが表示されて「終了」
これでプロジェクトが生成されました。srcフォルダーの下に”<プロジェクト名>.c”ファイルができていて、main関数もあります。すでにその中にLEDがチカチカするコードが記述されていますので、早速ビルドして実行してみましょう。
- ビルドの前に最適化オプションを変更します。コンパイラによってはこれをしないとビルド時に警告(WARNING)が出てしまいます。「プロジェクト」->「プロパティ」でプロパティ画面を表示し、画面左のリストで「C/C++ビルド」->「設定」、画面中央のリストで「Compiler」->「最適化」画面右に並んでいる「最適化レベル」を「一部の最適化」もしくは「デバッグ優先」を選んで「適用して閉じる」
- 「プロジェクト」->「プロジェクトのビルド」(Ctrl+B)でビルド開始
- エラーがなければ「実行」->「デバッグ」(F11)
- デバッグが始まるとリセットベクタ(cstart.asm)で一旦停止するので「ブレークポイントまで実行」(F8)
- 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
- プロジェクト・エクスプローラーから<プロジェクト名>.scfgをクリックしてスマート・コンフィグレータを起動
- 「コンポーネント」タブで「コンポーネントの追加」から「A/Dコンバータ」を選択
- 設定値は次の通り
- 「コードの生成」ボタンをクリック
スマートコンフィグレータでの機能追加: UART
- プロジェクト・エクスプローラーから<プロジェクト名>.scfgをクリックしてスマート・コンフィグレータを起動
- 「コンポーネント」タブで「コンポーネントの追加」から「UART通信」を選択
- 設定値は次の通り
- 「コードの生成」ボタンをクリック
メインルーチン
スマート・コンフィグレータで生成された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(インサーキットエミュレータ)を用意することなくデバッグできるのもありがたかったです。