)

ATmega2560 I/O(입출력) Port 개요

- 10개의 8비트 양방향 병렬 I/O포트 (PORTA~F,H,J,K,L)

- 1개의 6비트 양방향 병렬 I/O포트 (PORTG)

- 각 포트별로 3개의 I/O 레지스터 

  • DDR(Data Direct Register) : 해당 pin(port)를 입력 Rg의 입력으로 사용할지 출력 port의 출력 pin으로 사용할지를 결정
  • PORT(Data Register) :  Microprocessor 내부 Rg로부터 data를 받아 외부 인터페이스 회로에 data를 출력
  • PIN(Port Input Pins Register) : 입력 핀으로 부터 Data를 받아 Input 명령이 실행 될 때 Microprocessor 내부 Rg에 Data를 전달

 

 

 

- DDR, PORT : 읽기/쓰기 가능, PIN : 읽기만 가능

 

ATmega2560 I/O Port 특징

- 최대 40mA 구동 전류

- 선택 가능한 PULL UP 저항 (20K ~ 100K Ohm 내장)

- Vcc, GND 사이에 입력단 보호 다이오드 내장

- 다른 pin에 영향을 주지 않고 한 port핀의 방향을 바꿀 수 있음

- 대부분의 Pin은 I/O Port 이외의 다른 기능(예: Timer I/O Pin, Interrupt Pin, 각종 통신 장치의 I/O Pin 등) 으로 사용

(Miltiplexed) 될 수 있다.

- PINxn에 1(High)을 Write 하면 대응 되는 Data Rg(PORTxn)의 Bit 가 Toggle 된다.

- Port A ~ L 까지 11개 Rg 모두가 같은 구성과 기능을 갖는다.

- PINX Rg (read operation only, reset 불가), PORTX/DDRX(read, write 가능, reset시 0으로 초기화)

 

 

I/O port 보호 회로, pull-up Rg

Protection diodes - 입력 회로에 기준치 이상(이하)의 전압이 인가 되는 경우 입력 I/O Port 회로를 보호하기 위함

: pin에 (Vcc+0.7V)를 넘거나 (gnd-0.7V)보다 낮은 전압이 인가 될 경우 D1, D2이 ON 상태가 되어 과전압을 방지한다

 

Programmable pull-up resistor

: FET switch가 on 상태가 되면 pull-up Rg를 통해 pin 외부에 연결된 switch가 pull-up 상태가 된다.

 

port pin 구성(input/output 설정과 pint 상태)과 부가 기능

- DDRxn과 PORTxn, PUD(MCUCR Rg)에 따른 Port Pin 구성과 상태.

  • pull-up disable bit(PUD) : I/O Port의 pull-up기능을 제어하는 bit
  • PUD Bit가 0 이고, DDRx의 해당 Bit가 0, PORTx 의 해당 Bit가 1 이면 I/O Port의 Pull-up 기능을 Enable 상태(윗 1 Bit 회로도의 FET Switch 가 Closed 상태)로 설정 된다.
  • PUD Bit가 1 이면, DDRx와 PORTx 의 상태에 상관 없이 I/O Port의 Pull-up 기능은 Disable 상태(윗 1 Bit 회로도의 FET Switch 가 Open 된 상태)로 설정 된다.

 

 

 

 

 

//output port로 사용시
DDRL |= 0x01; // PL0를 Output Port로 설정 한다. DDRL의 0번째 Bit가 1로 설정 됨.
PORTL |= 0x01; // PL0 값이 1이 된다. PL0 이외 다른 Bits는 변동 되지 않는다.

//input port로 사용시
//PD0(Port D의 0번 Bit)를 Input Port로 설정 하고 PIND의 0번 Bit의 Data를 입력 받아 PL0에 출력하는 Coding 예
DDRD &= (~0x01); // PD0를 Input Port로 설정 한다.
DDRL |= 0x01; // PL0를 Output Port로 설정 한다.
PORTL &= (~0x01); // Port L의 PL0를 0로 Clear 한다.
PORTL |= (PIND & 0x01); 
// PL0 이외 PORTL 다른 Bits 값은 병경되지 않고, PL0 Bit 만 PIND의 0번 Bit(PD0) 값과 같도록 Setting 된다.

//pull-up resistor 사용시
//PD0(Port D의 0번째 Bit)에 Push Button Switch를 연결 하고 이 SW의 상태를 읽어 PL0에 출력 하는 Coding 예
DDRD &= (~0x01); // PD0를 Input Port로 설정 한다.
PORTD |= 0x01; // Pull-up 저항을 Active 상태로 하기 위함. PUD는 Reset 시 0으로 초기화 되기 때문에 이 예에서는 PUD를 0로 하는 Coding을 생략 하였다.
DDRL |= 0x01; // PL0를 Output Port로 설정 한다. DDRL의 0번째 Bit가 1로 설정 됨.
PORTL &= (~0x01); // Port L의 PL0를 0로 Clear 한다.
PORTL |= (PIND & 0x01); // PIND의 0번 Bit 값과 PL0 값이 같도록 Setting 한다.

 

'arduino,avr' 카테고리의 다른 글

I/O 프로그램 작성시 고려사항  (0) 2022.04.02
adc  (0) 2022.02.24
주사위led 연습문제  (0) 2022.02.23
아두이노/avr serial통신  (0) 2022.02.22
아두이노 기초 : L LED점멸  (0) 2022.02.21

+ Recent posts