# RL78\G13マイコン入門
[マイコントレーニングボード MODEL MT-RL78 取扱説明書](https://www.sunhayato.co.jp/dcms_media/other/MT-RL78_Manual_SG11014.pdf)
[RL78/G14ユーザーズマニュアル ハードウェア編](https://www.marutsu.co.jp/contents/shop/marutsu/datasheet/r01uh0186jj0200_rl78g14.pdf)
# Chapter3
[統合開発環境CS+ for CC](https://www.renesas.com/jp/ja/software/D4001151.html)
## オプションバイト
## デバッグ・ツールの設定
# Chapter4
## LEDシフト
### p.187

## スイッチ
### p.200

下記仕様で実装する。
| SW(in) | LED(out) |
| -------- | -------- |
| SW1 押下 | LED1 ON |
| SW1 解放 | LED1 OFF |
| SW2 押下 | LED4 ON |
| SW2 解放 | LED4 OFF |
| SW3 押下 | LED7 ON |
| SW3 解放 | LED7 OFF |
### 練習問題 p.202
#### 練習問題1
SW2が押された回数を2進数でLED0-LED7に出力するコードを作成する。
LED0:LSB
LED7:MSB
## 外部割り込み
### p.204
SW1押下時に1,2を切り替え
1. LED0-LED3を100ms毎に右シフト
1. LED0-LED3を100ms毎に左シフト
### 練習問題 p.209
#### 練習問題1
SW2押下時に1,2を切り替え
1. LED0-LED7を100ms毎に右シフト
1. LED0-LED7を100ms毎に左シフト
#### 練習問題2
SW1押上時に1,2を切り替え
1. LED4-LED7を500ms毎に右シフト
1. LED4-LED7を500ms毎に左シフト
## タイマ割り込み
### p.210
タイマ・アレイ・ユニット0 チャネル0を用いて、500ms周期毎にタイマ割り込みを発生させる。
タイマ割込み内でカウンタをインクリメントし、カウンタの値をLED0-LED7に2進数で表示する。
### 練習問題
#### 練習問題1
タイマ・アレイ・ユニット0 チャネル0を用いて、250ms周期毎にタイマ割り込みを発生させる。
タイマ割込み内でカウンタをインクリメントし、カウンタの値をLED0-LED7に2進数で表示する。
#### 練習問題2
タイマ・アレイ・ユニット0 チャネル0を用いて、100ms周期毎にタイマ割り込みを発生させる。
タイマ割込み内でカウンタをインクリメントし、カウンタの値をLED0-LED7に2進数で表示する。
#### 練習問題3
タイマ・アレイ・ユニット0 チャネル3を用いて、500ms周期毎にタイマ割り込みを発生させる。
タイマ割込み内でカウンタをインクリメントし、カウンタの値をLED0-LED7に2進数で表示する。
## 7セグメントLED表示
### p.222 AM-FND4


* 100msおきにカウンタインクリメント
* 7セグメントLEDへ表示するためにカウンタ値の一の位、十の位を求める
* カウンタ値の一の位、十の位をそれぞれdig0(1桁目) dig1(2桁目)に
ダイナミック点灯で表示する。
### 練習問題
#### 練習問題1
SW1を使ってスイッチ入力回数を数え、
2桁の7セグメントLEDに入力回数を表示する。
## スピーカ出力
### p.233


### 練習問題
#### 練習問題1
3音だけのキーボードを作る
| SW | 音階 |
| --- | --------------- |
| SW1 | 5オクターブのド |
| SW2 | 5オクターブのレ |
| SW3 | 5オクターブのミ |
## DCモータ制御
モータドライバL9110Sを使用する。
[L9110S購入リンク](https://www.amazon.co.jp/dp/B011DT3OAY)
[DCモータ購入リンク](https://www.amazon.co.jp/dp/B01ARL1Y6A)
[L9110Sデータシート](http://me.web2.ncut.edu.tw/ezfiles/39/1039/img/617/L9110_2_CHANNEL_MOTOR_DRIVER.pdf)
[L9110データシート](https://www.elecrow.com/download/datasheet-l9110.pdf)
[ブレッドボード用電源モジュール(MB102)](https://stupiddog.jp/note/archives/1189)
L9110S回路図

L9110真理値表

### p.239
結線
| L9100S | L9100 | MT-RL78 | DCモータ | MB102 |
| ------- | --------- | --------- | ------------- | ----- |
| P3 1pin | U1 IB | P10(LED0) | - | - |
| P3 2pin | U1 IA | P11(LED1) | - | - |
| P3 3pin | U1,U2 VCC | - | - | 5V |
| P3 4pin | U1,U2 GND | GND | - | GND |
| P3 5pin | U2 IB | P12(LED2) | - | - |
| P3 6pin | U2 IA | P13(LED3) | - | - |
| P1 1pin | U1 OB | - | モータ1+端子 | - |
| P1 2pin | U1 OA | - | モータ1ー端子 | - |
| P2 1pin | U2 OB | - | モータ2+端子 | - |
| P2 2pin | U2 OA | - | モータ2ー端子 | - |
### 練習問題
#### 練習問題1
下記仕様のコードを実装する。
* SW1を押すごとに、モータ1の回転方向が反対に変わる
* SW2を押すごとに、モータ2の回転方向が反対に変わる
#### 練習問題2
下記仕様のコードを実装する。
* SW1を押すごとに、モータ1,モータ2の回転方向が反対に変わる
* モータ1とモータ2は、互いに逆方向に回転するようにする。
| モータ1 | モータ2 |
| ------- | ------- |
| 正回転 | 逆回転 |
| 逆回転 | 正回転 |
## DCモータ制御2
## DCモータPWM制御
## ステッピングモータ制御1
[ステッピングモータ購入リンク](https://www.amazon.co.jp/dp/B06XCSCD8T)
[ステッピングモーター(28BYJ-48)を分解して仕組みを調べてみた](https://stupiddog.jp/note/archives/1209)
[ステッピングモーター(28BYJ-48)の動かし方 (ULN2003A使用)](https://stupiddog.jp/note/archives/1235)
結線
| ステッピングモータドライバ | ステッピングモータ | MT-RL78 | MB102 |
| -------------------------- | ------------------ | --------- | ----- |
| 5--12V(-) | - | GND | GND |
| 5--12V(+) | - | - | 5V |
| IN1 | - | P10(LED0) | - |
| IN2 | - | P11(LED1) | - |
| IN3 | - | P12(LED2) | - |
| IN4 | - | P13(LED3) | - |
| A | A | - | - |
| B | B | - | - |
| C | C | - | - |
| D | D | - | - |
| 5--12V(+) | 5--12V(+) | - | - |
### p.259
4相モータ1-2相励磁動作を行う。
### 練習問題
#### 練習問題1
ステッピングモータの回転速度が時間により変わるようにする。
#### 練習問題2
4相モータ1相励磁動作を行う。
#### 練習問題3
4相モータ2相励磁動作を行う。
#### 練習問題4
タイマを使って励磁を行うようにする。
## RCサーボモータ
[SG90購入リンク](https://www.amazon.co.jp/dp/B00VUJYNWG)

RCサーボ仕様
| サーボ位置 | パルス幅 | パルス周期 |
| ---------- | -------- | ---------- |
| 0度 | 0.5ms | 20ms |
| 90度 | 1.45ms | 20ms |
| 180度 | 2.4ms | 20ms |
結線(タイマ割込み)
| RCサーボ | MT-RL78 | MB102 |
| -------- | ------- | ----- |
| PWM | P141 | - |
| Vcc | - | 5V |
| Ground | GND | GND |
結線(PWM制御)
| RCサーボ | MT-RL78 | MB102 |
| -------- | ------- | ----- |
| PWM | P17(TO02) | - |
| Vcc | - | 5V |
| Ground | GND | GND |
### p.275
タイマ割込みでRCサーボモータを動作させる
下記パターンを繰り替えす。
| 経過時間 | 角度 |
| -------- | ----- |
| 0s | 0度 |
| 1s | 30度 |
| 2s | 60度 |
| 3s | 90度 |
| 4s | 120度 |
| 5s | 150度 |
| 6s | 180度 |
| 7s | 150度 |
| 8s | 120度 |
| 9s | 90度 |
| 10s | 60度 |
| 11s | 30度 |
### 練習問題
#### 練習問題1
タイマ割込みでRCサーボモータを動作させる
ボリューム抵抗の抵抗値を%換算する
| 抵抗値 | 角度 |
| ------ | ---- |
| 最小 | 0% |
| 中立 | 50% |
| 最大 | 100% |
下記式が成立するようにRCサーボモータを制御する。
`RCサーボの角度[度]=ボリューム抵抗の抵抗値[%]*180度`
#### 練習問題2
PWM制御によりRCサーボモータを制御する
#### 練習問題3
下記仕様で実装する。
* タイマ割込みでRCサーボモータを動作させる
* SW1を押下している間のみRCサーボモータの回転を停止する。
* SW1を解放すると、RCサーボモータが回転を再開する。
#### 練習問題4
下記仕様で実装する。
* PWM制御によりRCサーボモータを制御する
* SW1を押下している間のみRCサーボモータの回転を停止する。
* SW1を解放すると、RCサーボモータが回転を再開する。
## リレー電源供給モジュール
# p.281
| リレーボード | MT-RL78 |
| ------------ | ------- |
| VCC | VDD |
| IN1 | P01 |
| IN2 | P02 |
| GND | GND |
## UART出力
| UART | Pin | 備考 |
| ---- | --- | ---- |
| RxD0 | P50 | - |
| TxD0 | P51 | - |
| RxD1 | P03 | - |
| TxD1 | P02 | - |
| RxD2 | P14 | LED4 |
| TxD2 | P13 | LED3 |
* 改行コード
マイコンからPCへの受信:LF
PCからマイコンへの送信:CR+LF
結線
| TTL232-RG | MT-RL78 | 備考 |
| --------- | --------- | ---- |
| VCC(赤) | VDD | - |
| GND(黒) | GND | - |
| TXD(橙) | P03(RxD1) | - |
| RXD(黄) | P02(TxD1) | - |
### p.286
下記仕様で実装する。
* RxD1, TxD1を使用する
* ボーレート:9600bps
* データ:8bit
* パリティ:none
* ストップビット:1 bit
* "Hello, NEWTC"
"Hello, RL78"
という文字列をTeraTerm上に表示する。
### 練習問題
#### 練習問題1-1
* RxD1, TxD1を使用する
* ボーレート:19200bps
* データ:8bit
* パリティ:even
* ストップビット:1 bit
* "Hello, NEWTC"
"Hello, RL78"
という文字列をTeraTerm上に表示する。
#### 練習問題1-2
* RxD1, TxD1を使用する
* ボーレート:38400bps
* データ:8bit
* パリティ:even
* ストップビット:2 bit
* "Hello, NEWTC"
"Hello, RL78"
という文字列をTeraTerm上に表示する。
#### 練習問題1-3
* RxD1, TxD1を使用する
* ボーレート:115200bps
* データ:8bit
* パリティ:odd
* ストップビット:1 bit
* "Hello, NEWTC"
"Hello, RL78"
という文字列をTeraTerm上に表示する。
#### 練習問題2
* RxD1, TxD1を使用する
* ボーレート:9600bps
* データ:8bit
* パリティ:none
* ストップビット:1 bit
* SW1を押下するたびに
"Hello, NEWTC"
という文字列をTeraTerm上に表示する。
* SW2を押下するたびに
"Hello, RL78"
という文字列をTeraTerm上に表示する。
#### 練習問題3
* RxD0, TxD0を使用する
* ボーレート:9600bps
* データ:8bit
* パリティ:none
* ストップビット:1 bit
* "Hello, NEWTC"
"Hello, RL78"
という文字列をTeraTerm上に表示する。
## UART入出力
| UART | Pin | 備考 |
| ---- | --- | ---- |
| RxD0 | P50 | - |
| TxD0 | P51 | - |
| RxD1 | P03 | - |
| TxD1 | P02 | - |
| RxD2 | P14 | LED4 |
| TxD2 | P13 | LED3 |
* 改行コード
マイコンからPCへの受信:LF
PCからマイコンへの送信:CR+LF
結線
| TTL232-RG | MT-RL78 | 備考 |
| --------- | --------- | ---- |
| VCC(赤) | VDD | - |
| GND(黒) | GND | - |
| TXD(橙) | P03(RxD1) | - |
| RXD(黄) | P02(TxD1) | - |
### p.304
下記仕様で実装する。
* RxD1, TxD1を使用する
* ボーレート:9600bps
* データ:8bit
* パリティ:none
* ストップビット:1 bit
* TeraTerm上に整数を入力してEnterを押すと
"Index = 入力した整数"のように表示する。
### 練習問題
#### 練習問題1
* RxD1, TxD1を使用する
* ボーレート:9600bps
* データ:8bit
* パリティ:none
* ストップビット:1 bit
* SW1を押す回数を記憶し、1秒ごとにPCに出力する
## 3線シリアルI/O
## 簡易I2C_1
[MCP23017購入リンク](https://www.amazon.co.jp/dp/B07PV6FH4M)
[MCP23017データシート](http://ww1.microchip.com/downloads/jp/DeviceDoc/20001952C_JP.pdf)
| MCP23017 | MT-RL78 | 備考 |
| -------- | ------- | ----------------------------------------- |
| VCC | VDD | - |
| GND | GND | - |
| SCL | P04 | 10kΩでプルアップ |
| SDA | P03 | 10kΩでプルアップ |
| NC | - | - |
| NC | - | - |
| RESET | - | - |
| A0 | - | - |
| A1 | - | - |
| A2 | - | - |
| ITB | - | - |
| B0 | SW | 10kΩでプルアップ, Active Low |
| B1 | - | - |
| B2 | - | - |
| B3 | - | - |
| B4 | - | - |
| B5 | - | - |
| B6 | - | - |
| B7 | - | - |
| ITA | - | - |
| A0 | LED | 電流制限抵抗を入れること, Active Low |
| A1 | - | - |
| A2 | - | - |
| A3 | - | - |
| A4 | - | - |
| A5 | - | - |
| A6 | - | - |
| A7 | - | - |
### p.319
## 簡易I2C_2
[BMP280購入リンク](https://www.amazon.co.jp/dp/B07VPT93YN)
[BMP280データシート](https://cdn-shop.adafruit.com/datasheets/BST-BMP280-DS001-11.pdf)
[BMP280使い方](https://www.denshi.club/cookbook/arduino/spresense/spresensel-24-wire.html)
## テキストLCD
## A/D変換
### p.382
ボリューム抵抗のADC[ANI18]の値を
UART通信でPCのTeraTerm上に表示する。



### 練習問題
#### 練習問題1
ボリューム抵抗の端子間の電圧[V]を表示する。
#### 練習問題2
ボリューム抵抗の抵抗値[Ω]を表示する。
## キーマトリクス
[キーマトリクス購入リンク](https://www.amazon.co.jp/dp/B010Q17I8E)
下記キーマトリクスを使用する。



| ピン番号(Rx, Cx) | ピン番号(1-8) | MT-RL78 | 入出力 | 備考 |
| ---------------- | ------------- | ------- | ---------------- | ----------- |
| R1 | 8 | P60 | 入力(プルアップ) | SW押下でLOW |
| R2 | 7 | P61 | 入力(プルアップ) | SW押下でLOW |
| R3 | 6 | P62 | 入力(プルアップ) | SW押下でLOW |
| R4 | 5 | P63 | 入力(プルアップ) | SW押下でLOW |
| C1 | 4 | P10 | 出力 | LOWで選択 |
| C2 | 3 | P11 | 出力 | LOWで選択 |
| C3 | 2 | P12 | 出力 | LOWで選択 |
| C4 | 1 | P13 | 出力 | LOWで選択 |
| y座標/x座標 | 0 | 1 | 2 | 3 |
| ----------- | --- | --- | --- | --- |
| 0 | '1' | '2' | '3' | 'A' |
| 1 | '4' | '5' | '6' | 'B' |
| 2 | '7' | '8' | '9' | 'C' |
| 3 | '*' | '0' | '#' | 'D' |
### p.399
結線
| TTL232-RG | MT-RL78 | 備考 |
| --------- | --------- | ---- |
| VCC(赤) | VDD | - |
| GND(黒) | GND | - |
| TXD(橙) | P03(RxD1) | - |
| RXD(黄) | P02(TxD1) | - |
下記仕様で実装する。
* RxD1, TxD1を使用する
* ボーレート:9600bps
* データ:8bit
* パリティ:none
* ストップビット:1 bit
* 改行コード
マイコンからPCへの受信:LF
PCからマイコンへの送信:CR+LF
### 練習問題
#### 練習問題1
キーが一つでも押されていたら、LED0を点滅する
#### 練習問題2
押されたキーの文字を、UARTで出力する。
同じキーを押し続けても1階しか表示しない。
キーは同時に1つしか押されないものとする。