포트(port)란 uC가 외부 기기와의 데이터를 주고받는 통로를 말한다. 입력되는 신호를 받고 출력 신호를 내보낼 수 있는 핀으로서 AVR에서는 8개씩 묶어서 포트A, 포트B, 포트C, … 와 같은 식으로 이름이 붙어 있는 것이 일반적이다. 예를 들어 포트D는 8개의 핀으로 구성되며 각 핀은 PD0, PD1, … PD7과 같이 이름이 붙어 있다. 특히 AVR의 경우는 입/출력전류 드라이브 능력이 40mA정도로 높은 편이며 내부에 풀업 저항 (20k~50k)을 내장하여 선택적으로 사용할 수 있으므로 스위치나 센서 등을 연결하는 경우 회로를 간략화할 수 있다.  포트핀의 구조도는 아래와 같다.


[그림 1] avr의 포트 핀 회로도


 풀업(pull-up) 저항이란 디지털 회로에서 논리적으로 H레벨을 유지하기 위해서 포트핀과 Vcc를 연결하는 저항을 말한다. 보통은 uC외부에서 연결해야 하지만 AVR은 모든 포트핀에 풀업저항을 내장하고 있어서 SFR을 적절히 설정하면 선택적으로 연결할 수 있다.


포트와 관련된 레지스터

 AVR은 각각의 포트에 3개의 관련 I/O레지스터를 가지는데 다음과 같다.

       ① DDRX (Data Direction Register) 레지스터

       ② PORTX (Data Register) 레지스터

       ③ PINX (Port Input Pin Address) 레지스터

모두 8비트 레지스터이고 ATmega8(A)의 경우는 X는 B, C, 혹은 D가 된다. 먼저 포트가 입력으로 쓰일지 출력으로 쓰일지 방향을 정해야 하는데

  • DDRX의 해당 비트가 '1' 이면 출력,

  • DDRX의 해당 비트가 '0'이면 입력

으로 지정된다. 그리고

  • 출력인 경우 PORTX 에 출력값을 쓰고,

  • 입력인 경우에는 PINX에서 값을 읽어들인다.

입력값을 읽는 레지스터와 출력값을 내보내는 레지스터가 다르다는 것에 유의해야 한다. 또한 DDRx의 설정과 무관하게 PINx레지스터를 이용하여 해당 핀의 전압 값을 읽어 들일 수 있다. 만약 포트핀이 출력으로 설정되었다면 PINXn 비트는 PORTXn비트의 값과 같아지고 입력으로 설정되었다면 PINXn비트는 핀에 인가되는 전압값에 의해서 그 값이 결정된다.


 또 한 가지 알아야 할 것은 포트핀이 입력으로 설정된 경우 PORTX레지스터는 풀업 저항을 연결할 것인지 아닌지를 결정한다는 것이다. 이를 아래 [표 1]에 도시하였다. PUD비트는 MCUCR의 b4이다.


[표 1] portx 레지스터의 설정에 따른 동작

DDRXn

PORTXn

PUD

I/O

풀업저항

비고

0

0

×

입력

연결 안 됨

3스테이크(하이임피던스)

0

1

0

입력

연결됨

내부에서 풀업

1

0

×

출력

연결 안 됨

'0' 출력 (sink)

1

1

×

출력

연결 안 됨

'1' 출력 (source)


PORTX 레지스터는 비트별로 그 값을 각각 지정해 줄 수 있다. 즉 같은 포트라도 어떤 핀은 입력으로 다른 핀은 출력으로 사용할 수 있다. 다음은 ATmega8(A)의 포트에 관련된 레지스터를 정리해 놓은 것이다.



예를 들어서 ATmega8(A)의 2번 핀은 PD0/RxD 두 가지 기능이 있다. 이 핀을 포트핀(즉 PD0)으로 사용하고 싶다면 DDRD0 비트를 설정하여 입력/출력 방향을 결정해야 한다. 그 다음 출력일 경우 PORTD0 비트를 이용하여 출력할 값을 내보내면 되고 입력일 경우 PIND0 비트값을 읽어들여서 핀에 인가되는 전압값을 읽어들이면 된다.


포트핀의 내부 저항값과 등가 회로

 AVR 포트핀이 출력으로 쓰일 때 데이터쉬트에서 발췌한 전압-전류 곡선이 [그림 1]에 도시되어 있다.

[그림 2] 포트 핀의 전압-전류 곡선 (Vcc=5V) : (a) 출력=1 (b) 출력 = 0


이 그림에서 직선 (엄밀히 말하면 곡선이지만 곡률이 거의 0이므로 직선이라고 가정한다)의 기울기가 바로 저항값이 되며 이 직선의 기울기가 실온일 경우 약 25 정도 된다는 것은 쉽게 알 수 있다. 이는 포트핀의 내부저항이 약 25Ω정도 된다는 것을 의미하며 이것을 근거로 포트핀의 테브낭 등가회로를 작성해 보면 [그림 2]와 같다.


[그림 3] (a) 출력 = 1 인 경우 (b) 출력 = 0 인 경우


포트핀의 내부저항이 약 25Ω이라는 사실을 아는 것은 매우 중요한데, 그 이유는 이 등가회로를 이용하면 주변 회로의 전압-전류를 정량적으로 계산할 수 있기 때문이다.


 예를 들면 포트핀에 센서를 연결했을 경우 센서의 데이터쉬트에서 필요한 정보를 얻은 후에 실제 전압-전류값을 정량적으로 계산할 수 있다.



Posted by 살레시오
,