ルネサスＲＸマイコンの刺客ＲＸ１４０

![IMG_0304s.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58667/be262e7c-032e-f1ff-e10f-c20fc5981c72.jpeg)

## 最近気がついた、コストパフォーマンスが高い RX マイコン

自分は、RX マイコンのトップグレードばかりに目がいって、安価な入門レベルのマイコンにあまり興味が無かったのです。

ところが、先日 チップワンストップで、RX マイコンのデリバリーを調べていたら、凄い事に目が行きました。

![RX140_cost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58667/fa9c2673-0fc4-2ed3-4e02-074975a16387.png)

「３２ビットマイコンで１６５円は確かに安いけど、チープなんでしょ！？」と聞こえてきそうですが、主なスペックを観てみましょう～

- RXv2 コア（32 ビット CISC コア）
- 広い電源電圧範囲（1.8V ～ 5.5V）
- 最大 48MHz 動作（1.8V ～ 5.5V）
- 64 ピン LFQFP（0.5mm ピッチなので、ハンダ付けは少々辛い）
- 64K プログラム領域
- 16K RAM（ワーク領域）
- 4K データ EEPROM（不揮発性メモリ 1,000,000 の書き換え）
- 単精度浮動小数点演算命令サポート
- DSP 命令サポート
- MTU2（マルチファンクションタイマ、6 チャネル）
- RTC（リアルタイムクロック、バッテリーバックアップは出来ません）
- SCI 3 チャネル（64K、64ピンの場合）
- I2C 1 チャネル
- RSPI 1 チャネル
- CTSU（静電容量式タッチセンサ）
- 12bit A/D 変換器
- 8bit D/A 変換器（2 チャンネル）
- 最大 12 本の拡張タイマ機能、MTU、CMT、TMR、LPT
- 低消費電流（高速動作モード：58µA/MHz）

RX140 は、RX100 系の中で、RXv2 コアを搭載する戦略的なモデルです。
他にも色々な機能があり、これなら、殆どの電子工作や実験などにかなりマッチすると思います。

これだけコストパフォーマンスが高いと、他と比べるまでも無いように思えてきます。

難点をあえて挙げるとすると、パッケージが QFP である点くらいでしょうか？

電池で長時間動く機器を作る場合は、32ビットとしてはかなり低消費電流ですが、クロックを落とすとか、色々と工夫は必要かもしれません。
動作モードを「中速」にして、クロックを落とすと、さらに低消費になります。
クロック速度は、内部 PLL によりかなり自由に設定出来ます。
8/16 ビットマイコンとは異なり、バンクを気にせず、浮動小数点も扱え、制限なくプログラム出来る事は、かなりメリットが高いと思います。

R8C/M120 の 100 円マイコンはそろそろ卒業してもいいかもしれませんね w

コストだけで考えると、60 円とかのマイコンもありますが、トータルで考えると、かなりコストパフォーマンスが高いマイコンであるように思います。

---

## 開発環境

[RX マイコンフレームワーク](https://github.com/hirakuni45/RX)では、[RX140](https://github.com/hirakuni45/RX/tree/master/RX140) を全面サポートしています。

コンパイラは、Renesas GNU-RX gcc-8.3.0 で、C++17 のプログラムが出来ます。
RAM が 16K もあるし、ROM も 64K あるので、かなり自由度の高いプログラムが出来ると思います。
※ ROM 64K は、大きなプログラムは厳しいですが、入門用としては十分実用になると考えています。

シリアルによる、フラッシュプログラムもサポートしています。（SCI_sample を書き込んだ様子）

```bash
/d/Git/RX/SCI_sample/RX140 % make run
make
make[1]: Entering directory '/d/Git/RX/SCI_sample/RX140'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/d/Git/RX/SCI_sample/RX140'     
rx_prog -d RX140 --progress  --write --verify sci_sample.mot
Write:  ################################################## 100 %
Verify: ################################################## 100 %
```
---

## Ex サンプルプログラム

現在、RX140 で動作確認をしています。
ROM が 64K 以内に収まる事がマストなので、動作しない物もありますが、現状、動作を確認したリストです。
これから、増やしていく予定です。

|プロジェクト|内容|
|:-:|:-:|
|FIRST_sample|LED 点滅|
|SCI_sample|SCI 接続|
|RAYTRACER_sample|320x240 レイトレーシング|
|FreeRTOS|３つのタスク起動|
|FLASH_sample|データフラッシュの操作|

- SCI_sample/RX140

```
Start SCI (UART) sample for 'RX140 DIY' 48[MHz]
SCI PCLK: 24000000 [Hz]
SCI Baud rate (set): 115200 [BPS]
  Baud rate (real): 115384 (0.16 [%])
  SEMR_BRME: true
  SEMR_BGDM: true
CMT Timer (set):  100 [Hz]
  Timer (real): 100 [Hz] (0.00 [%])
#
```

- RAYTRACE_sample/RX140

```
RX140 DIY Start for Ray Trace: 320, 240
# Render time: 1936ms (1)
help
    clear     clear screen
    render    renderring 320x240
    full      renderring 320x240
#
```

- FreeRTOS/RX140

```
Start FreeRTOS V10.4.4+, sample for 'RX140 DIY' 48[MHz]
Task3: 0
Task3: 1
Task2: 0
Task3: 2
Task2: 1
Task3: 3
Task2: 2
Task3: 4
Task2: 3
Task3: 5
Task1: 0
Task3: 6
Task2: 4
Task3: 7
Task2: 5
Task3: 8
Task2: 6
Task3: 9
Task2: 7
Task3: 10
```

- FLASH_sample/RX140

```
Start Data Flash sample for 'RX140 DIY' 48 [MHz]
Flash drive clock: 24 [MHz]
Data Flash total size: 0x00001000
Data Flash block size: 1024 bytes
Data Flash word size: 1 byte
# help
Data Flash Size: 4096, Block Num: 4, Block Size: 1024, Word: 1
erase [bank] (erase 0 to 4)
check [bank] (erase check 0 to 4)
r[ead] org [end] (read)
write org data... (write)
uid (unique ID list)
# uid
Unique ID0: 05081601
Unique ID1: 5A221C0E
Unique ID2: 310018FF
Unique ID3: 574B4400
# r 0 f
0x0000: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
# write 0 1 2 3 4 5 6 7 8 9 a b c d e f aa
# r 0 f
0x0000: 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F AA
#
```

---

## 専用基板

マイコンの単価が安くても、動かす手段がユニバーサル基板だと、手軽とまではいかないので、専用基板を制作しています。
専用基板なら、ブレッドボードに乗せて使う事も出来、応用範囲が広がり、手軽に実験出来ると思います。
CH340 USB シリアル変換も載せる予定なので、直ぐに PC と繋いでプログラムを書き込めます。
C++ の勉強会を開く場合の教材として利用する予定です。

準備が出来たら「領布」したいと思います、半完成の状態で 1000 円くらいと思います。