본문 바로가기
임베디드소프트웨어

AVR 디지털 입력/출력 포트의 모든 것 (정의, 설정, 구성 확인)

by Go! Jake 2022. 3. 23.

AVR 마이크로 컨트롤러는 디지털 입력과 출력을 I/O 핀을 통해 어플리케이션을 제어합니다. 이러한 핀은 고 임피던스 입력으로 전압을 감지할 수 있고, 고전압 또는 저전압 디지털 출력으로 전류를 공급하거나 차단할 수 있습니다. 각 포트별로 통상 8개로 묶여 있습니다. 예를 들어, PortA 등으로 지칭하고 PortA의 핀이 PA0 - PA7까지 있습니다.

디지털 입력/출력 포트 

모든 AVR 포트는 범용 디지털 I/O로 사용될 때 읽기-수정-쓰기 기능을 가집니다. 하나의 포트 핀의 입출력 방향은, 다른 포트의 입출력 방향 변경없이 변경할 수 있습니다.

 

핀 드라이버는 직접적으로 LED 표시할 수 있습니다. 모든 포트의 핀은 공급전압 고정 저항이 있는, 각각 선택가능한 풀업 저항을 가집니다. 모든 I/O 핀은 VCC와 GND에 보호 다이오드를 가집니다.

 

I/O 디지털 핀 구성

각 포트는 3가지 레지스터로 구성되어 있습니다.

- DDRx - 데이터 방향 레지스터

- PORTx - 핀 출력 레지스터

- PINx - 핀 입력 레지스터

(위에서 x는 포트 이름인 A, B, C 또는 D입니다.)

 

 

이러한 레지스터는 디지털 입력과 출력 구성을 결정합니다. 또한 I/O 핀은 내부 주변장치와 공유될 수 있습니다. 예를 들어, ADC 컨버터는 I/O 핀에 연결될 수 있습니다. 이 경우 I/O 핀 레지스터는 3상(tri-state)*의 고 임피던스 입력으로 설정됩니다.

 

*3상: 논리 회로의 3가지 출력 상태로, 1의 상태인 'High', 0의 상태인 'Low', 플로팅 상태(고 임피던스) 상태를 의미한다.

레지스터 비트

- DDxn 비트는 DDRx I/O 주소에서 접근됩니다.

- PORTxn 비트는 PORTx I/O 주소에 위치합니다.

- PINxn 비트는 PINx I/O 주소에 위치합니다.

n은 포트 레지스터 비트 수

 

DDxn

DDRx 레지스터에 있는 DDxn 비트는 핀의 방향을 정합니다. 예를 들어, DDxn이 1로 설정되는 경우 Pxn은 출력으로 구성됩니다. 반대로 DDxn이 0으로 설정된 경우, Pxn은 입력 핀으로 구성됩니다.

 

PORTxn

PORTx 레지스터에 있는 PORTxn 비트는 두 가지 기능이 있습니다. 핀의 출력 상태를 제어할 수 있고, 입력 핀의 구성을 제어할 수 있습니다.

 

출력인 경우:

핀이 출력으로 구성되었을 때 비트가 1로 쓰인 경우 포트 핀은 'high'가 됩니다. 만약 비트가 0으로 쓰인 경우 포트 핀은 'low'가 됩니다.

 

입력인 경우:

핀이 입력으로 구성되었을 때 비트가 1로 쓰인 경우 풀업 레지스터는 활성화됩니다. 만약 비트가 0으로 쓰인 경우 포트 핀은 3상(tri-state)이 됩니다.

 

PINxn

PINx 레지스터에 있는 PINxn 비트는 포트 핀으로부터 데이터를 읽기 위해 사용됩니다. 핀이 디지털 입력으로 구성되고 풀업이 활성화되면, 비트는 시그널 상태를 그대로 표시합니다. (High 또는 Low)

참고: 만약 포트가 출력으로 설정되면,  PINx 레지스터를 읽어 포트 핀에 쓰인 데이터를 읽을 수 있습니다.

 

3상 입력인 경우:

PORTx 레지스터가 풀업 저항을 비활성화하면 입력은 3상 상태가 되며 핀은 플로팅 상태가 됩니다. 이 경우 주변 물체에 의한 작은 정전기도 핀의 상태를 바꿀 수 있습니다. 따라서 핀 레지스터에 비트를 읽을 때, 비트의 상태는 예측할 수 없는 상태입니다.

예시

모든 PORTA 핀은 풀업 활성화와 함께 입력으로 설정되어 있습니다.

PORTA로부터 데이터를 읽기:

DDRA = 0x00; PORTA 모두 입력으로 설정
PORTA = 0xFF; 모든 풀업 활성화
data = PINA; 데이터 변수에 PORTA 핀을 읽음

PORTB 3상 입력으로 설정:

DDRB = 0x00; PORTB 모두 입력으로 설정
PORTB = 0x00; 풀업 비활성화 및 모든 핀 3상

portA 하위 4bit (nibble)이 출력으로 설정되고, 상위 4bit (nibble)가 입력으로 사용되고 풀업 활성화:

DDRA = 0x0F; 하위 핀 출력, 상위 핀 입력
PORTA = 0xF0; 출력핀은 0, 입력핀은 풀업 활성화

이 글은 AVR® Fuses - Developer Help (microchipdeveloper.com)을 참조하여 작성되었습니다.

 

댓글