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 |