Why does a microcontroller sometimes detect a signal change when nobody presses a button? This can happen when a digital input is left floating. Pull-up and pull-down resistors help prevent unwanted signal changes by establishing a defined default logic state. Choosing the right resistor depends on current consumption, noise sensitivity, and signal timing. This article explains how these resistors work, how to calculate suitable values, and when to use internal or external resistors.

Figure 1. Pull-Up vs. Pull-Down Resistor Circuit Diagrams Using 10 kΩ Resistors and a 5 V Supply. The illustrated inputs must tolerate 5 V.
The main difference between pull-up and pull-down resistors is the default logic level they establish in a digital circuit. A pull-up resistor connects a signal line to the positive supply voltage (VCC), maintaining HIGH (1) when the signal is not actively driven. A pull-down resistor connects the signal line to ground (GND), maintaining LOW (0) under the same condition. As shown in Figure 1, both configurations use a 5 V supply, 10 kΩ resistors, and pushbutton switches. The pull-up circuit produces HIGH when the switch is released and LOW when pressed, while the pull-down circuit operates in the opposite way.
A pull-up resistor keeps a signal HIGH when no other component actively drives it LOW. In the left circuit of Figure 1, resistor R1 (10 kΩ) connects the signal line to +5 V, while the switch connects it to GND.
• Switch released: The signal remains near 5 V (HIGH).
• Switch pressed: The signal drops to approximately 0 V (LOW).
When the switch is pressed, the resistor limits current to approximately 0.5 mA, preventing a direct short circuit between the supply and ground.
A pull-down resistor keeps a signal LOW when no other component actively drives it HIGH. In the right circuit of Figure 1, resistor R2 (10 kΩ) connects the signal line to GND, while the switch connects it to +5 V.
• Switch released: The signal remains near 0 V (LOW).
• Switch pressed: The signal rises to approximately 5 V (HIGH).
When the switch is pressed, approximately 0.5 mA flows through the resistor to ground. This configuration is useful when a digital input must remain LOW until activated.
Digital inputs require voltages within specified ranges to reliably identify HIGH and LOW logic states. When an input has no defined electrical connection or driving source, its voltage may become unpredictable. Pull-up and pull-down resistors provide a controlled electrical bias that helps maintain reliable digital input behavior. [1]
A floating input is a digital input pin that has no defined voltage because it is not connected to an active signal source or an appropriate biasing circuit.
Most CMOS microcontroller GPIO inputs have high input impedance, meaning they draw very little input current. When left floating, the pin voltage can be influenced by electrical noise, leakage currents, nearby signal traces, and capacitive coupling. [1]
This can cause several problems:
• Unpredictable readings: The input may register HIGH or LOW without an intentional signal.
• False triggering: Electrical interference may cause unintended input transitions.
• Unstable operation: A floating control signal may result in unexpected circuit behavior.
For example, an unconnected microcontroller input may change its reported logic state when a person touches a nearby wire or when electrical interference affects the circuit.
Pull resistors address floating-input problems by providing a weak but defined electrical connection to a reference voltage. This prevents an undriven signal line from being determined primarily by stray electrical charge, leakage currents, or external interference.
When properly selected, the resistor maintains the input voltage within a valid logic range during periods when no other component controls the signal. This makes unintended transitions less likely and improves the stability of digital input readings. [1]
However, pull resistors do not eliminate all electrical noise or mechanical switch bounce. Their effectiveness depends on the resistor value, input characteristics, circuit layout, and operating conditions. Additional filtering or debouncing may still be necessary in some applications.
Pull-up and pull-down resistors have similar electrical characteristics, but their effects on signal transitions and current flow depend on the circuit configuration. The following table compares their logic behavior, power consumption, noise sensitivity, and switching performance under equivalent conditions.
| Parameter | Pull-Up Resistor | Pull-Down Resistor |
| Logic Levels and Switching Behavior | ||
| Default logic level | HIGH (1) | LOW (0) |
| Signal voltage when undriven | Near VCC | Near 0 V |
| Opposite logic state | LOW when another device pulls the signal toward GND | HIGH when another device drives the signal toward VCC |
| Current Consumption and Power Dissipation | ||
| Current in default state | Ideally zero under no-load conditions; small leakage current may exist | Ideally zero under no-load conditions; small leakage current may exist |
| Current in opposite state | Current flows from VCC through the resistor to the device pulling the signal LOW | Current flows from the device driving the signal HIGH through the resistor to GND |
| Power dissipation | Primarily dissipates power when the signal is driven LOW | Primarily dissipates power when the signal is driven HIGH |
| Noise Sensitivity and Switching Speed | ||
| Noise sensitivity | Depends on resistance, input thresholds, wiring, and interference | Depends on the same electrical factors |
| Effect of resistance | Lower resistance provides stronger pull-up bias against leakage and interference | Lower resistance provides stronger pull-down bias against leakage and interference |
| Resistor-controlled transition | The pull-up resistor controls the rising edge when the switch opens or an active driver releases the line [2] | The pull-down resistor controls the falling edge when the switch opens or an active driver releases the line |
| Switching speed | The resistor-controlled rising edge becomes slower as resistance or signal capacitance increases | The resistor-controlled falling edge becomes slower as resistance or signal capacitance increases |
Neither resistor type is inherently faster, more power-efficient, or more noise-resistant. With equal resistance, supply voltage, and comparable circuit conditions, their electrical performance is similar. The pull resistor controls the return edge when the switch opens, or an active driver releases the line. A push-pull output actively drives both states, so its transition time is not generally determined by the pull resistor alone.
The correct pull-up or pull-down resistor value depends on current limits, input logic thresholds, and signal transition time. A low resistance increases current consumption, while a high resistance may reduce noise immunity and slow signal transitions. To select a suitable value, calculate the allowable resistance range using Ohm's law, device datasheet specifications, and RC timing requirements.
Ohm's law determines the resistance needed to limit current when a pull-up or pull-down resistor is driven to its opposite logic state.
Formula:
R = V / I
Where:
• R = Resistance in ohms (Ω)
• V = Voltage across the resistor in volts (V)
• I = Current through the resistor in amperes (A)
For a pull-up resistor, current flows when the signal is driven LOW. For a pull-down resistor, current flows when the signal is driven HIGH.
A conservative minimum resistance can be calculated using:
Rmin = VCC,max / Iallow
Where VCCmax is the maximum supply voltage and I_allow is the permitted current through the resistor and connected output device.
Example: Calculating a resistor for a 3.3 V circuit
Assume a regulated 3.3 V supply and a maximum permitted current of 1 mA.
Rmin = 3.3 V / 0.001 A
Rmin = 3,300 Ω = 3.3 kΩ
A standard 3.9 kΩ resistor can be selected, assuming the stated voltage and current limits.
The resulting current is:
I = 3.3 V / 3,900 Ω
I ≈ 0.846 mA
The approximate resistor power dissipation is:
P = V² / R
P = (3.3 V)² / 3,900 Ω
P ≈ 2.79 mW
These calculations assume the full 3.3 V appears across the resistor. Final selection must account for supply voltage variations, resistor tolerance, and the connected device's specified output voltage and current capability.
Current calculations alone do not guarantee reliable operation. The resistor must also maintain a valid input voltage when the connected device is not actively driving the signal.
Check these electrical specifications in the device datasheet:
• VIH,(min): Minimum voltage guaranteed to be recognized as HIGH.
• VIL,(max): Maximum voltage guaranteed to be recognized as LOW.
• Ileak,(max): Maximum opposing leakage current affecting the signal.
For a pull-up resistor, the maximum resistance permitted by leakage current is:
RPU,max = (VCC,min - VIH,min) / Ileak,max
For a pull-down resistor:
RPD,max = VIL,max / Ileakmax
Example: Checking leakage current in a 3.3 V circuit
Assume the following illustrative device specifications:
| Parameter | Value |
| Minimum supply voltage | 3.3 V |
| Minimum HIGH input voltage | 2.0 V |
| Maximum LOW input voltage | 0.8 V |
| Maximum opposing leakage current | 1 µA |
Pull-up calculation:
RPU,max = (3.3 V - 2.0 V) / 0.000001 A
RPU,max = 1.3 MΩ
Pull-down calculation:
RPD,max = 0.8 V / 0.000001 A
RPD,max = 800 kΩ
These results represent the maximum resistance values based only on the assumed leakage current and logic thresholds, not recommended resistor values. Actual selection must account for additional leakage paths, supply variations, resistor tolerance, noise margin, and signal timing.
Pull resistors interact with the total capacitance of a signal line to form a resistor-capacitor (RC) circuit. This capacitance includes microcontroller inputs, PCB traces, connectors, and wiring.
The RC time constant is:
τ = R × C
Where:
• τ = Time constant in seconds (s)
• R = Pull resistance in ohms (Ω)
• C = Total signal capacitance in farads (F)
For a first-order RC circuit, the approximate transition time between 10% and 90% of the voltage change is:
t10-90 ≈ 2.2 × R × C
This represents the resistor-controlled rising edge for a pull-up resistor or falling edge for a pull-down resistor.
Example: Calculating transition time
Assume:
• Pull resistance = 3.9 kΩ
• Total capacitance = 100 pF
t10-90 = 2.2 × 3,900 × (100 × 10⁻¹²)
t10-90 ≈ 0.858 µs
The calculated transition time is approximately 0.86 µs. Increasing resistance or capacitance increases the transition time.
For standard open-drain I²C interfaces, rise time is measured between 30% and 70% of the signal voltage. The applicable equation is:
t30-70 ≈ 0.8473 × R × C
Therefore, the maximum pull-up resistance allowed by a specified rise-time limit is:
Rmax = trmax / (0.8473 × C)
Where:
• Rmax = Maximum pull-up resistance (Ω)
• trmax = Maximum permitted rise time (s)
• C = Total bus capacitance (F)
This equation applies to a first-order RC rise measured between 30% and 70%, consistent with I²C pull-up resistor calculations.
Common pull-up and pull-down resistor values include 1 kΩ, 4.7 kΩ, 10 kΩ, 47 kΩ, and 100 kΩ. Each value offers a different balance between current consumption, noise resistance, and signal transition time. The table compares their calculated performance at 3.3 V and 5 V.
| Resistor Value | Current at 3.3 V | Current at 5 V | 10%–90% RC Transition Time at 100 pF | Practical Characteristics |
| 1 kΩ | 3.30 mA | 5.00 mA | 0.22 µs | Strong bias and fast transitions, but higher current consumption |
| 4.7 kΩ | 0.70 mA | 1.06 mA | 1.03 µs | Good balance of current consumption and transition speed |
| 10 kΩ | 0.33 mA | 0.50 mA | 2.20 µs | Common choice for general-purpose GPIO and pushbutton inputs |
| 47 kΩ | 0.070 mA | 0.106 mA | 10.33 µs | Lower current, but greater sensitivity to leakage and slower transitions |
| 100 kΩ | 0.033 mA | 0.050 mA | 21.97 µs | Very low current, but requires careful leakage and timing checks |
Note: Current values assume the full supply voltage is across the resistor, as occurs when another device drives the signal to the opposite logic state. Transition times use an ideal first-order RC model with 100 pF capacitance. Actual performance depends on circuit conditions.
I²C Timing Consideration: Do not compare these 10%–90% transition times directly with I²C's 30%–70% rise-time limits. At 100 pF, a 4.7 kΩ pull-up gives approximately 398 ns (30%–70%), exceeding the 300 ns maximum specified for I²C Fast-mode (400 kHz). A 2.2 kΩ pull-up gives approximately 186 ns under the same ideal RC conditions, meeting that rise-time requirement. Other I²C electrical requirements must also be checked.
Microcontrollers may provide built-in pull-up or pull-down resistors, reducing the need for additional components. However, external resistors offer greater control over resistance values and signal behavior. The following table compares their characteristics, limitations, and applications.
| Parameter | Internal Pull-Up/Pull-Down Resistors | External Pull-Up/Pull-Down Resistors |
| Location | Integrated into the microcontroller | Connected externally to the signal line |
| Resistance Value | Determined by the microcontroller design, often with a broad tolerance | Selected according to circuit requirements and resistor tolerance |
| Configuration | Enabled or disabled through GPIO configuration, where supported | Established by the physical circuit connection |
| Additional Components | No external resistor required | Requires a separate resistor |
| Power-Up Behavior | Availability and default state depend on the microcontroller's reset configuration | Can establish a defined signal state before firmware initialization, provided the relevant supply is available |
| Arduino Uno R3 | Supports internal pull-up resistors of approximately 20–50 kΩ; no configurable internal pull-down [4,5] | Supports external pull-up or pull-down resistors |
| Original ESP32 | Supports internal pull-up and pull-down on eligible GPIOs; GPIO34–39 have neither [6] | External resistors can provide bias on GPIO34–39 |
An external resistor is needed when the microcontroller lacks the required internal pull-up or pull-down function, when its built-in resistance cannot meet the circuit's electrical requirements, or when a reliable default state is required before firmware initialization. For example, the Arduino Uno R3 requires an external resistor for a pull-down configuration, while the original ESP32 requires external biasing on GPIO34–39 when those inputs need a defined default state. [4,5,6] External resistors are also useful when precise resistance selection is necessary for signal timing or noise immunity.
The following two case studies demonstrate how pull resistors improve signal reliability in I²C communication and MOSFET switching circuits. Both examples use calculated design values.
A microcontroller communicates with an I²C sensor at 400 kHz using a 3.3 V supply. Both SDA and SCL require pull-up resistors to provide HIGH logic levels. [2,3]
Assume the following specifications:
• Supply voltage: 3.3 V
• Bus capacitance: 100 pF
• Maximum rise time: 300 ns
• LOW output voltage: 0.4 V at 3 mA [3]
Minimum resistance:
Rmin = (3.3 − 0.4) / 0.003 = 967 Ω
Maximum resistance:
Rmax = (300 × 10⁻⁹) / (0.8473 × 100 × 10⁻¹²) = 3.54 kΩ
A standard 2.2 kΩ pull-up resistor on each line gives an estimated rise time of:
tr = 0.8473 × 2,200 × 100 × 10⁻¹² = 186 ns
This meets the 300 ns Fast-mode I²C rise-time limit under the assumed conditions. Actual bus capacitance and device specifications must be verified.
A 3.3 V microcontroller controls a 12 V LED load through a low-side N-channel MOSFET. During startup, the GPIO may become high-impedance, leaving the MOSFET gate floating and potentially causing unintended switching.
Connecting a 10 kΩ pull-down resistor between the MOSFET gate and source keeps the gate voltage near 0 V when the GPIO is undriven [7].
When the GPIO outputs 3.3 V, the resistor current is:
I = 3.3 V / 10,000 Ω = 0.33 mA
The resistor draws approximately 0.33 mA while the GPIO is HIGH.
For reliable operation, connect the MCU ground, MOSFET source, and 12 V supply return together. Select a MOSFET with guaranteed RDS(on) at a gate voltage the GPIO can deliver, since VGS(th) alone does not guarantee adequate conduction. Use an LED load with suitable current limiting to prevent excessive current.
The 10 kΩ resistor provides gate bias, not complete transient protection. Additional protection may be needed depending on the circuit's switching conditions and electrical environment.
Choosing between a pull-up and pull-down resistor depends on the required default logic state, the connected device's output configuration, and the microcontroller's capabilities. Both can provide reliable digital input operation when properly selected, but the correct choice must match the circuit's intended behavior.
Choose a pull-up resistor when the signal must remain HIGH until another component actively pulls it LOW. Pull-ups are particularly suitable for:
• Active-low pushbuttons: The microcontroller detects a press when the input changes to LOW.
• Open-drain outputs: Devices such as I²C peripherals require pull-up resistors to establish HIGH levels. [2,3]
• Microcontrollers with internal pull-ups: Devices such as the Arduino Uno R3 can reduce external component requirements. [4]
• Active-low control signals: Certain reset and interrupt inputs require a defined HIGH state when inactive.
Before selecting a pull-up, verify the connected devices' voltage ratings, LOW-level sink-current capability, and required signal timing.
Choose a pull-down resistor when the signal must remain LOW until another component actively drives it HIGH. Pull-downs are suitable for:
• Active-high pushbuttons: The microcontroller detects a press when the input changes to HIGH.
• MOSFET gate control: A gate-to-source pull-down can help keep a low-side N-channel MOSFET OFF when its driver is inactive. [7]
• Control and enable inputs: Some devices require a LOW state during startup or reset to prevent unintended activation.
• Microcontrollers with internal pull-downs: Supported ESP32 GPIO pins can provide LOW-level bias without external resistors. [6]
The final selection should prioritize the required inactive state and device compatibility rather than assuming one resistor configuration is universally better.
Technical References
[1] Texas Instruments. “Implications of Slow or Floating CMOS Inputs.” Texas Instruments, 1994. Application Report SCBA004E, Rev. E, July 2021.
[2] Arora, Rajan. “I2C Bus Pullup Resistor Calculation.” Texas Instruments, 2015. Application Report SLVA689A, Rev. A, October 2026.
[3] NXP Semiconductors. “I²C-bus specification and user manual.” NXP Semiconductors, October 1, 2021. User Manual UM10204, Rev. 7.0.
[4] Arduino. “Arduino UNO Rev3.” Arduino, n.d. Accessed October 19, 2026.
[5] Atmel Corporation. “ATmega328P: 8-bit AVR Microcontroller with 32K Bytes In-System Programmable Flash.” Atmel Corporation, 2015. Datasheet 7810D–AVR–01/15.
[6] Espressif Systems. “ESP32 Series.” Espressif Systems, July 2026. Datasheet, Version 5.3.
[7] Green, Peter B., and Liz Zheng. “Gate drive for power MOSFETs in switching applications: A guide to device characteristics and gate drive techniques.” Infineon Technologies, April 20, 2022. Application Note AN_2203_PL18_2204_004502, Version 1.0.