フェーズ1

E1-06 プルアップ/プルダウンを体験:入力が「浮く」と不安定になる理由をつかむ

シリーズ:実験シリーズ(フェーズ1)
対応ロードマップ:フェーズ1 / E1-06
今回の役割:入力ピンが浮いた状態では不安定になり、プルアップ/プルダウンで安定することを、配線を変えながら自分の手で確認する。

1. 目的

今回は、入力ピンが“浮く”と安定しないことを体験し、
そのあとで 外部プルアップ外部プルダウン を使うと、入力が安定することを確認します。
E1-05 では、内部プルアップを使ってボタン入力を読みました。
今回は、なぜプルアップ/プルダウンが必要なのか を、配線そのもので見えるようにする回です。

2. 前提・環境

  • 評価ボード:RTK7EKA8M2S00001BE
  • 開発環境:e² studio + FSP
  • 前提:
    • E0-01〜E0-06 が完了している
    • E1-03 の外付けLED配線ができている
    • E1-05 のボタン入力が動いている
  • 使用部品
    • LED × 1
    • 抵抗:1kΩ × 1(LED用)
    • タクトスイッチ × 1
    • 抵抗:10kΩ × 1(プルアップ/プルダウン用)
    • ブレッドボード
    • ジャンパ線
  • 使用するGPIO
    • 外付けLED用のGPIO:P409(J25-9)
    • ボタン入力用のGPIO:P704(J25-10)
    • GND:J25-11
    • 3.3V:評価ボード上の3.3Vピン

3. 回路・配線

今回は、同じ入力ピンで3つの状態 を比べます。

  1. プルなし
    → 押していないときの入力状態が決まらない
  2. 外部プルアップ
    → 押していないとき High、押したとき Low
  3. 外部プルダウン
    → 押していないとき Low、押したとき High

3-1. 今回の見方

今回は、入力ピンの状態をそのままLEDに反映 させます。
つまり、

  • 入力が High のとき:LED点灯
  • 入力が Low のとき:LED消灯

という動きにします。

この形にすると、

  • 入力が浮いて不安定なとき → LEDの様子も安定しない
  • 入力が安定したとき → LEDの動きもはっきりする

という違いが見やすくなります。

3-2. 配線パターンA:プルなし

まずは、入力を安定させる抵抗を入れない状態 を作ります。

  • LED側
    LED用GPIO → 1kΩ抵抗 → LED → GND
  • 入力側
    ボタン入力用GPIO → タクトスイッチ

この段階では、押していないときの入力ピンがどこにも固定されていない 状態になります。

外付けLED配線 ブレッドボード E1 06プル無し

3-3. 配線パターンB:外部プルアップ

次に、外部抵抗でプルアップ を作ります。

  • LED側
    LED用GPIO → 1kΩ抵抗 → LED → GND
  • 入力側
    ボタン入力用GPIO → 10kΩ抵抗 → 3.3V
  • さらに
    ボタン入力用GPIO → タクトスイッチ → GND

このとき、

  • 押していないとき:10kΩで3.3V側へ引かれて High
  • 押したとき:GNDにつながって Low

になります。

外付けLED配線 ブレッドボード E1 06プルアップ

3-4. 配線パターンC:外部プルダウン

最後に、外部抵抗でプルダウン を作ります。

  • LED側
    LED用GPIO → 1kΩ抵抗 → LED → GND
  • 入力側
    3.3V → タクトスイッチ → ボタン入力用GPIO
  • さらに
    ボタン入力用GPIO → 10kΩ抵抗 → GND

このとき、

  • 押していないとき:10kΩでGND側へ引かれて Low
  • 押したとき:3.3Vにつながって High

になります。

外付けLED配線 ブレッドボード E1 06プルダウン

3-5. 注意点

  • プルなし の状態では、入力が毎回同じにならないことがあります
  • 外部プルアップ外部プルダウン は、配線も押したときの値も逆になります
  • 電源を切ってから配線を変更します
  • 3.3Vを使うので、3.3V と GND のショート に注意します

4. 接続手順

4-1. 先に電源を切る

最初に評価ボードの電源を切ります。
今回は配線を何度か変更するため、通電したまま配線しないようにします。

4-2. 外付けLED配線を確認する

まず、E1-03 で作成した外付けLED配線を確認します。

  • LEDの向き
  • 1kΩ抵抗が直列に入っているか
  • GNDがつながっているか

4-3. 配線パターンA:プルなしを作る

最初は、入力ピンが固定されない状態を作ります。
やり方は次のようにします。

  • タクトスイッチの片側を P704
  • もう片側は どこにもつながない

この状態で、入力ピンは HighでもLowでもない、あいまいな状態 になります。

4-4. 配線パターンB:外部プルアップを作る

次に、外部プルアップへ変更します。

  • P704 から 10kΩ抵抗で 3.3V
  • P704 から タクトスイッチ
  • タクトスイッチの反対側を GND

に接続します。

つまり、P704 はふだん 3.3V 側へ引っ張られ、押したときだけ GND 側へ落ちる 配線です。

4-5. 配線パターンC:外部プルダウンを作る

最後に、外部プルダウンへ変更します。

  • P704 から 10kΩ抵抗で GND
  • P704 から タクトスイッチ
  • タクトスイッチの反対側を 3.3V

に接続します。

つまり、P704 はふだん GND 側へ引っ張られ、押したときだけ 3.3V 側へ上がる 配線です。

4-6. 配線を確認する

各パターンで、意図した通りになっているか確認します。
特に、外部プルアップ/プルダウンでは、抵抗がどちら側についているか を落ち着いて見直します。

5. FSP設定

今回は、入力の安定化を外部抵抗で体験するのが目的なので、
内部プルアップ/内部プルダウンは使いません

5-1. LED用GPIO

LED用GPIO:P409 は次のように設定します。

  • Mode:Output mode (Initial Low)

5-2. ボタン入力用GPIO

ボタン入力用GPIO:P704 は次のように設定します。

  • Mode:Input mode
  • Pull-up/down:なし

5-3. 設定変更後の操作

設定を変更したら、Generate Project Content を実行します。

6. コード

今回は、入力ピンを読んで、そのままLEDへ反映 します。
入力が安定していればLEDの動きも安定し、入力が浮いていればLEDの様子も落ち着かない、という見方です。

6-1. 先に考え方

やることは次の2つだけです。

  1. 入力ピンを読む
  2. 読んだ値が High なら LED を点灯、Low なら消灯する

このコードは、プルアップでもプルダウンでも共通で使えます。
違うのは、押したときに High になるか Low になるか です。

6-2. 最小コード

#include "hal_data.h"

void hal_entry(void)
{
    bsp_io_level_t sw_level;

    R_BSP_PinAccessEnable(); // R_BSP_PinRead / PinWrite を使用可能にする

    while (1)
    {
        /* 入力ピンを読む */
        sw_level = R_BSP_PinRead(BSP_IO_PORT_07_PIN_04);

        /* 入力が High ならLED点灯、Lowなら消灯 */
        if (sw_level == BSP_IO_LEVEL_HIGH)
        {
            R_BSP_PinWrite(BSP_IO_PORT_04_PIN_09, BSP_IO_LEVEL_HIGH);
        }
        else
        {
            R_BSP_PinWrite(BSP_IO_PORT_04_PIN_09, BSP_IO_LEVEL_LOW);
        }

        R_BSP_SoftwareDelay(5, BSP_DELAY_UNITS_MILLISECONDS);
    }
}

7. 実行結果

7-1. プルなし

  • LEDの状態が安定しないことがある
  • 触ったり、線の近くに手を近づけたりすると変化することがある
  • 毎回まったく同じ結果になるとは限らない

※環境によっては、見た目では分かりにくいこともあります。
その場合は、入力ピンにつないだジャンパ線を少し長めにして、軽く触ってみると違いが見えやすくなります。

7-2. 外部プルアップ

  • 押していないとき:High → LED点灯
  • 押したとき:Low → LED消灯

入力がはっきり決まるので、LEDの動きも安定します。

7-3. 外部プルダウン

  • 押していないとき:Low → LED消灯
  • 押したとき:High → LED点灯

こちらも、入力がはっきり決まるので、LEDの動きが安定します。

8. ハマりポイントと直し方

8-1. プルなしにしても違いがよく分からない

原因

  • 浮いた入力の変化が、見た目では出にくい
  • 周囲の状態によって不安定さの出方が変わる

直し方

  • 入力ピンにつないだジャンパ線を少し長めにする
  • 線に軽く触れてみる
  • まずは「値が固定されていない状態」を体験できればOKとする

8-2. 外部プルアップにしたのに安定しない

原因

  • 10kΩ抵抗が3.3V側につながっていない
  • タクトスイッチを押してもGND側へ落ちていない
  • FSPで内部プルアップが有効のままになっている

直し方

  • P704 → 10kΩ → 3.3V になっているか確認する
  • P704 → スイッチ → GND になっているか確認する
  • P704 の Pull-up/down が なし になっているか確認する

8-3. 外部プルダウンで押したときに反応しない

原因

  • 10kΩ抵抗がGND側につながっていない
  • タクトスイッチを押しても3.3V側へつながっていない
  • 抵抗とスイッチの位置を取り違えている

直し方

  • P704 → 10kΩ → GND になっているか確認する
  • P704 → スイッチ → 3.3V になっているか確認する
  • ブレッドボードの列を見直す

8-4. プルアップとプルダウンで動きが逆になって混乱する

原因

  • 押したときに High になるか Low になるかが逆だから
  • 配線と判定の対応が頭の中で混ざっている

直し方

  • 次のように整理する
    • プルアップ:未押下 High、押下 Low
    • プルダウン:未押下 Low、押下 High
  • 紙に 未押下 / 押下 を書いて、High/Low をメモしながら確認する

8-5. 3.3Vまわりが不安で配線変更が怖い

原因

  • 3.3V と GND を誤って直接つなぐとショートになる
  • 配線変更のたびに混乱しやすい

直し方

  • 必ず電源を切ってから配線を変える
  • 1パターンごとに写真を撮る
  • 変更前に「抵抗はどちら側か」「スイッチはどちらへ落とすか」を声に出して確認する

9. 今回わかったこと

  • 入力ピンは、どこにもつながっていないと状態が安定しない
  • プルアップ/プルダウンは、押していないときの状態を決めるため に使う
  • 上に引くとプルアップ、下に引くとプルダウン
  • ボタン入力では、何もしないときの値を決めること が大切だと分かる

10. 次回やること

次は、E1-07 チャタリングを“見える化” に進みます。
入力が安定していても、ボタンの接点が細かく揺れることで複数回反応することを確認します。

11. 関連リンク

  • E1-05 ボタン入力でLEDを点ける(ポーリング)(リンク)
  • プルアップ/プルダウン入門(リンク)
  • ボタンが不安定なとき(デバウンス入門)(リンク)
  • GNDとは?なぜ基準点が必要なのか?(リンク)
  • LEDを光らせる(リンク)

-フェーズ1