Today I was visiting a group on Facebook. It is related to Microcontroller based projects. People are very friendly there. I came across a post which was related to Pull Up resistor. That post ignited me to write a small article explaining this concept. So in this article I am going to explain you the concept of Pull-Up and Pull-Down resistor, their significance and their working.
Why do we need them?
The pull up and pull down resistors are used for preventing a node from floating. Consider following images.
Fig 1: An Example of Floating node
Fig 2: Another Example of Floating Node
So lets consider Fig 1. When the switch is pressed, voltage at input pin will be equal to VCC. But when switch is open (Not pressed), state of input pin is undefined. We can’t be sure about the voltage level of the Input Pin. So we can write the states of Input Pin based on switch state as:
Switch_State Input_Pin_State Open(Not Pressed) Undefined Closed (Pressed) High (Equal to VCC)
Table 1
Similarly for Fig 2 we can write the table as
Switch_State Input_Pin_State Open(Not Pressed) Undefined Closed (Pressed) Low (Equal to GND)
Table 2
So we can see that, if we use the Switch as input device to a microcontroller in these configuration, the device is going to face some undefined states (Floating State). So it may lead to ambiguous readings from the switch. Everyone connecting a switch to a microcontroller must avoid these configuration for their switches.
Pull Down Resistor:
Pull down resistor will pull a floating node to logic level low i.e. 0. So after connecting to a Pull down resistor the Fig 1 will look like as follow:
Fig 3: Using a Pull Down Resistor
So now we connected a very High value resistor from the floating node to Ground. Lets see how its going to help us.
Switch_State Input_Pin_State Open(Not Pressed) Low Closed (Pressed) High (Equal to VCC)
Table 3
When the switch is in Open state the resistor will try to pull down the node to Ground level. Hence it is named as Pull Down Resistor.
Pull Up Resistor:
By now you must have guessed the use of pull up resistor. The pull up resistor pulls up the floating node to a High logic value. So the Fig 2 circuit using a pull up resistance will look like :
Fig 4 : Using Pull Up Resistor
Here the resistor R1 will serve the purpose of pulling the Input Pin high when the switch is not pressed. But now the Voltage at Input Pin will be slightly less than VCC based on your R1 value. But as you are using it as input to a Microcontroller, so it is not going to cost you in terms of errors as for Digital Devices there is a threshold between High and Low level. Every other variation is not of much use. So the table for switch with pull up resistor will be
Switch_State Input_Pin_State Open(Not Pressed) High(Little less than VCC) Closed (Pressed) Low (Equal to GND)
Table 4
Can I eliminate Resistor?
No you can’t. If you are thinking of providing two different state by directly connecting the two pins of Switch to two different logic levels then believe me you are going to do a blunder. Yes, your guess is right, the Input Pin will not be in a Floating State now when the switch is not pressed. But as soon as you are going to press the switch, the VCC node will be shorted to Ground and you circuit will go down.
So what is difference in using either of them?
Not much. As you might have observed in their truth table that both configurations are opposite in Logic Level. So for Switch configuration with Pull Up resistor you have to read logic low to know when the switch is pressed. Opposite is the case with the Pull Down Configuration. In this case you have to read High logic level to know when the switch is pressed.
So I hope this article might have brought some sort of clarity. Please provide with your extremely valuable feedback.