풀업/풀업저항은 쉽게 말하자면..... 스위치 입력을 위한 장치 입니다.

일반적으로 Atmel社의 AVR은 스위치 입력이 들어왔을 때 LOW(0V) 입니다.

다시말하면 AVR은 입력 포트에서(DDRA = 0x00) 0V 가 감지되면 입력이라고 인식하게끔 프로그래밍 합니다

그럼 스위치가 눌러지지 않은 보통 상태에서는? 포트에 '0V가 아니다' 할 정도의 전류를 흘려 보냅니다

그것이 '풀업을 걸어준다'입니다. 

풀업은 보통 VCC(5v)에 연결해 놓는데, 입력포트에 과전류 유입을 막기 위해 저항을 하나 달아줍니다.

그것이 '풀업저항'입니다. 보통 4.7k 짜리 저항을 많이 답니다.  (2)번그림

보통 MCU에서는 (1)번 같이 설치 해 놓으면, 스위치 입력이 없을때는 0V(LOW)도 아니고 5V(HIGH)도 아니고..

보통상태(정상상태) 를 명확히 구분짓기 어렵습니다..


그런데 Atmel社의 AVR은 (2)번같이 풀업장치를 만들지 않아도 내부 풀업을 사용할 수 있도록 제작되습니다

즉 (1)번 그림과 같이 설치해도 보통상태와 스위치 입력상태를 확실히 구분지을 수 있다는 이야깁니다.

프로그래밍 소스에서 PORTA = 0xFF 라고 처음에 포트초기값을 설정해 주면 

내부 풀업 장치가 작동합니다. (우와 신기해) 납땜 수고를 덜 수 있죠

그래서 (1)번이 꼭 틀렸다고는 할 수 없습니다. :-) 소스코딩으로 손봐준다면 2번처럼 같이 동작하는겁니다


예제 : AT90S2313의 B 포트 8개를 모두 일반적인 스위치 입력(Active LOW) 으로 /Codevision

#include <90s2313.h>

void main(){
DDRB = 0x00;                 // B포트의 성격 : 입력
PORTB = 0xFF;              // B포트 모두(11111111 = FF) 풀업을 걸어줌

while(){
//반복문 입력
..........
}

Posted by 음악공학