풀업/풀다운 저항
라즈베리파이, 아두이노와 같은 장치에서 푸시버튼과 같은 디지털 입력장치를 연결할 때 풀업, 풀다운 저항을 연결하는 경우를 많이 보게 됩니다.
디지털 회로에서는 입력 핀이 VCC(전원)과 연결되면 HIGH, GND와 연결되면 LOW로 인식합니다.
컨트롤러에 연결된 푸시버튼이 눌러진 상태에서는 컨트롤러의 입력핀의 전압은 GND와 연결되므로 0V, 즉 LOW 가 됩니다. 그러나 푸시버튼을 누르지 않은 상태라면 입력핀은 VCC(전원), GND 어디에도 연결되지 않아 HIGH 도 LOW도 아닌 상태가 됩니다. 이를 플로팅(floating)상태라고 하며, 노이즈, 정전기 등에 의해 HIGH 또는 LOW가 될 수 있으므로 제어가 불가능한 상태가 됩니다.

풀업(Pull-up) 저항
아래와 같이 연결한 저항을 풀업(Pull-up)저항이라고 합니다. 푸시버튼을 누르지 않은 상태에서는 전류가 컨트롤러의 입력핀으로 흐르기 때문에 HIGH 상태가 되고, 푸시버튼을 누른 상태에서는 전류가 GND로 흐르기 때문에 컨트롤러 입력핀은 LOW 상태가 됩니다.

컨트롤러의 입력핀의 임피던스 (100k~1MOhm)는 풀업 저항에 비해 매우 크기 때문에 아래 그림과 같이 저항이 직렬 연결된 상태에서 풀업 저항 하단에서 전압 강하는 거의 발생하지 않습니다. (저항의 직렬 연결) 그러므로 풀업 저항이 있음에도 불구하고 입력 전압에 가까운 전압이 입력 핀에 걸리게 되어 HIGH로 인식합니다.

풀다운(Pull-down) 저항
아래와 같이 연결한 저항을 풀다운(Pull-down) 저항이라고 합니다. 푸시버튼을 누르지 않는 상태에서는 컨트롤러의 입력핀이 GND와 연결되므로 LOW가 되고, 푸시버튼을 누른 상태에서는 전류가 입력핀으로 흐르기 때문에 HIGH가 됩니다. 이때, 풀다운 저항은 GND로 과도한 전류가 흐르는 것 (Short circuit)을 방지하는 역할을 합니다.

내부 풀업/풀다운 저항
라즈베리파이, 비글본등의 GPIO에는 소프트웨어적으로 활성화 시킬 수 있는 내부 풀업, 풀다운 저항이 있습니다. 이 저항의 크기는 푸시버튼 등 대부분의 입력 장치에 적합하므로 별도의 외부 저항을 연결할 필요가 없습니다. 물론 필요에 따라 외부 저항을 추가하여 사용할 수도 있습니다.
I/O 장치 – 디지털 읽기/쓰기의 초기명령 INIT에서 풀업/풀다운 저항을 설정할 수 있습니다.
