Summary of Pull-up Resistors explained
This tutorial explains the necessity of pull-up resistors in microcontroller circuits to prevent floating input pins. It details how these resistors ensure a defined high or low state, specifically when used with buttons or switches. The article covers the operational mechanics of connecting resistors to VCC, the trade-offs between strong (low resistance) and weak (high resistance) pull-ups, and provides a calculation rule for selecting resistor values (typically 10kΩ) based on input impedance to avoid voltage divider issues.
Parts used in Pull-up Resistor Project:
- Microcontroller (MCU)
- Pull-up Resistor
- Button or Switch
- VCC (High Voltage Source)
- Ground Connection
- Input Pin
Pull-up resistors are very common when using microcontrollers (MCUs) or any digital logic device. This tutorial will explain when and where to use pull-up resistors, then we will do a simple calculation to show why pull-ups are important.
Suggested Reading
Concepts that you should be familiar with before proceeding:
What is a Pull-up Resistor
Let’s say you have an MCU with one pin configured as an input. If there is nothing connected to the pin and your program reads the state of the pin, will it be high (pulled to VCC) or low (pulled to ground)? It is difficult to tell. This phenomena is referred to as floating. To prevent this unknown state, a pull-up or pull-down resistor will ensure that the pin is in either a high or low state, while also using a low amount of current.
For simplicity, we will focus on pull-ups since they are more common than pull-downs. They operate using the same concepts, except the pull-up resistor is connected to the high voltage (this is usually 3.3V or 5V and is often refereed to as VCC) and the pull-down resistor is connected to ground.
Pull-ups are often used with buttons and switches.
With a pull-up resistor, the input pin will read a high state when the button is not pressed. In other words, a small amount of current is flowing between VCC and the input pin (not to ground), thus the input pin reads close to VCC. When the button is pressed, it connects the input pin directly to ground. The current flows through the resistor to ground, thus the input pin reads a low state. Keep in mind, if the resistor wasn’t there, your button would connect VCC to ground, which is very bad and is also known as a short.
So what value resistor should you choose?
The short and easy answer is that you want a resistor value on the order of 10kΩ for the pull-up.
A low resistor value is called a strong pull-up (more current flows), a high resistor value is called a weak pull-up (less current flows).
The value of the pull-up resistor needs to be chosen to satisfy two conditions:
- When the button is pressed, the input pin is pulled low. The value of resistor R1 controls how much current you want to flow from VCC, through the button, and then to ground.
- When the button is not pressed, the input pin is pulled high. The value of the pull-up resistor controls the voltage on the input pin.
For condition 1, you don’t want the resistor’s value too low. The lower the resistance, the more power will be used when the button is hit. You generally want a large resistor value (10kΩ), but you don’t want it too large as to conflict with condition 2. A 4MΩ resistor might work as a pull-up, but its resistance is so large (or weak) that it may not do its job 100% of the time.
The general rule for condition 2 is to use a pull-up resistor (R1) that is an order of magnitude (1/10th) less than the input impedance (R2) of the input pin. An input pin on a microcontroller has an impedance that can vary from 100k-1MΩ. For this discussion, impedance is just a fancy way of saying resistance and is represented by R2 in the picture above. So, when the button is not pressed, a very small amount of current flows from VCC through R1 and into the input pin. The pull-up resistor R1 and input pin impedance R2 divides the voltage, and this voltage needs to be high enough for the input pin to read a high state.
For example, if you use a 1MΩ resistor for the pull-up R1 and the input pin’s impedance R2 is on the order of 1MΩ (forming a voltage divider), the voltage on the input pin is going to be around half of VCC, and the microcontroller might not register the pin being in a high state. On a 5V system, what does the MCU read on the input pin if the voltage is 2.5V? Is it a high or a low? The MCU doesn’t know and you might read either a high or a low. A resistance of 10k to 100kΩ for R1 should avoid most problems.
Read more: Pull-up Resistors explained
-
What is a floating pin?
A floating pin occurs when an MCU input has nothing connected to it, making the state difficult to determine. -
How do pull-up resistors prevent unknown states?
They ensure the pin stays in either a high or low state while using a low amount of current. -
Where is a pull-up resistor connected?
The pull-up resistor is connected to the high voltage, usually referred to as VCC. -
What happens if you press a button without a pull-up resistor?
Connecting VCC directly to ground would create a short circuit, which is very bad. -
What resistor value is generally recommended for pull-ups?
A resistor value on the order of 10kΩ is typically suggested. -
What is a strong pull-up?
A low resistor value is called a strong pull-up because more current flows through it. -
Why shouldn't the resistor value be too large?
If the resistance is too large, it may not do its job 100% of the time due to weak performance. -
What is the general rule for choosing the pull-up resistor value relative to input impedance?
The pull-up resistor should be an order of magnitude less than the input impedance of the pin.
