25
KyungHee Univ. 2-1 ATMega128 I/O Ports

ATMega128 I/O Ports

Embed Size (px)

DESCRIPTION

ATMega128 I/O Ports. ATMega128 I/O Ports. 6 개의 8 비트 양방향 병렬 I/O 포트 (PORTA~F) 1 개의 5 비트 양방향 병렬 I/O 포트 (PORTG) 각 PORT 별 3 개 I/O 레지스터 영역 DDR(Data Direct Register) : 입출력 방향 결정 PORT(Data Register) : 데이터 출력 PORT PIN(Port Input Pins Register) : 포트의 입력 핀 Rg - PowerPoint PPT Presentation

Citation preview

Page 1: ATMega128 I/O Ports

KyungHee Univ. 2-1

ATMega128 I/O Ports

Page 2: ATMega128 I/O Ports

KyungHee Univ. 2-2

ATMega128 I/O Ports

6 개의 8 비트 양방향 병렬 I/O 포트(PORTA~F)

1 개의 5 비트 양방향 병렬 I/O 포트 (PORTG)각 PORT 별 3 개 I/O 레지스터 영역

DDR(Data Direct Register) : 입출력 방향 결정 PORT(Data Register) : 데이터 출력 PORT PIN(Port Input Pins Register) : 포트의 입력 핀

RgDDR, PORT : 읽기 / 쓰기 가능 , PIN : 읽기만 가능

Page 3: ATMega128 I/O Ports

KyungHee Univ. 2-3

ATMega128 I/O Ports 의 특징

특징최대 40mA 구동 전류

LED 1 개 구동 가능선택 가능한 Pull Up 저항 내장

20K – 100K OhmVcc, GND 사이에 입력단 보호 Diode 내장

Read-Modified-Write Cycle 지원다른 pin 의 영향을 주지 않고 한 port 핀의

방향을 바꿀 수 있음 DDRD &= (~0x03); // Input Port : PD0,

PD1 DDRF |= 0x03; // Output Port : PF0, PF1 SBI : Set Bit in I/O Register 과 CBI : Clear Bit in I/O Register instruction

사용

Page 4: ATMega128 I/O Ports

KyungHee Univ. 2-4

ATMega128 I/O Ports

모든 Port 는 다음과 같은 특성을 갖는다 .Bit-selectable pull-up resistorsBit-selectable tri-state outputsSchmitt trigger inputSynchronized to the system clock :

입력신호의 안정성에 기여 (Pin Read Operation 시 1.5Cycle 이전에 Pin 신호가 안정화 되어야 함 ) 같은 port 에 write 한 다음 바로 read 시

nop instruction 필요 (1,5Cycle Delay) : __no_operation();

Symmetrical DC drive capability

Page 5: ATMega128 I/O Ports

KyungHee Univ. 2-5

AVR port architecture

pull-up resistor

schmitt trigger buffer

analog switch

port pin

DDRx

PORTx

PINx

Tri_State

Page 6: ATMega128 I/O Ports

KyungHee Univ. 2-6

ATMega128 I/O Ports

I/O Port input structureProtection diodesProgrammable pull-up resistor

port pin pull-up resistor

Page 7: ATMega128 I/O Ports

IO Port Register

Port A-G 동일

7

Page 8: ATMega128 I/O Ports

SFIOR: Special Function IO Reg.

PUDPUD Set 1 : Pull-Up DiableDDxn = 0, PORTxn = 1 로 설정되어도 이 bit

가 우선함

8

Page 9: ATMega128 I/O Ports

Port A 부가 기능

외부 memory 확장하위 8bit address 와 8bit dataALE 신호

9

Page 10: ATMega128 I/O Ports

Port B 부가 기능

Timer/Counter OutputSPI Bus Interface

10

Page 11: ATMega128 I/O Ports

Port C 부가 기능

외부 memory 확장상위 8bit address

11

Page 12: ATMega128 I/O Ports

Port D 부가 기능

Timer/Counter Input USART Interface External Interrupt TWI Serial Interface

12

Page 13: ATMega128 I/O Ports

Port E 부가 기능

External Interrupt Timer/Counter Input and Output Analog Comparator UART Interface

13

Page 14: ATMega128 I/O Ports

Port F 부가 기능

ADC InputJTAG interface

14

Page 15: ATMega128 I/O Ports

Port G 부가 기능

RTC OscillatorExternal memory interface

ALE/RD/WR

15

Page 16: ATMega128 I/O Ports

ATMega128 I/O Ports

Port 이용 프로그램 작성시 고려 할 점Input pins 1.5 clock cycle delay 를 갖는다 .

Read Operation 을 실행하기 1.5 clock cy-cle 전에 Input Pin 의 상태가 안정 되어야 한다 .

I/O 관련 프로그램을 Transportable, Readable, More bug free 하게 작성 하기 위한 예

• PORTF 의 PF0,PF1 를 Output Port 로 정의 하는 경우 DDRF |= b00000011; 와 같이 코딩 하는 것 보다

아래 와 같이 코딩 하는 것이 보다 적정 하다 . DDRF |= ( 1<< PF0) | (1 << PF1);

16

Page 17: ATMega128 I/O Ports

AVR I/O port programming WinAVR\avr\include\avr\iom128.h File 에 Port

사용에 관련된 정의가 있다 . 예

/*Data Register, Port B */#define PORTB _SFR_IO8(0x18)// SFR: Special Function Registers// _SFR_IO8(0x18): Memory $32($20 + $18) 번지 ,// I/O Port $18 번지 + SFR Offset($20)

……/*Port B Data Register – PORTB */#define PB7 7#define PB6 6#define PB5 5#define PB4 4#define PB3 3#define PB2 2#define PB1 1#define PB0 0

17

Page 18: ATMega128 I/O Ports

AVR I/O port programming iom128.h 에서 #define 을 이용하여 정의한 Sym-

bol 은 아래와 같이 이해하기 쉬운 프로그램 작성을 가능하게 한다 .예

PORTB = 0x05;DDRB = 0x0A;

SPCR = (1<<SPE) | (1<<MSTR);DDRB |= (1<<DDB2) | (1<<DDB0);

temp0 = PINB;

18

Page 19: ATMega128 I/O Ports

AVR I/O port programming AND, OR, XOR 논리 연산을 이용한 Bit Operation

예 //toggle bit 5PORTB = PORTB ^ 0x20; // invertPORTB ^= 0x20; // invert again another way

//Set bits 7 and 2PORTB = PORTB | 0x84;PORTB |= (1<<PB7)|(1<<PB2) ; // More portable

//Clear bit 0 and 1PORTB = PORTB & 0xfc;PORTB &= ~((1<<PB0)|(1<<PB1)); //More porta-

ble

19

Page 20: ATMega128 I/O Ports

AVR I/O port programming Mask 를 사용 하여 개별 Bit 값을 알 수 있다 .

예 //Port D 의 PD0 bit 가 1 인가를 Test 한다 .if(PIND & 0x01){take_some_action();}위 예에서 0x01 을 mask 라 한다 .

D5 Bit 가 0 인가를 Test 한다 .if(~PIND & 0x20){take_action();}

avr-libc function bit_is_set() 과 bit_is_clear() 를 사용 하여 아래와 같이 프로그램 할 수도 있다 .if (bit_is_set(PINC, PC2) {return 0;}

while (bit_is_clear(SPSR,SPIF)) {}

20

Page 21: ATMega128 I/O Ports

AND, OR, Shift Operation 과 Mask을이용 한 programming 예 BCD Packing

Unsigned char x1, x0 에 10 진 수 2,1 이 저장 되어 있다 . 이 를 unsigned char y0 에 BCD Code 로 Packing 하라 .

BCD UnPackingUnsigned char y0 에 Packed BCD 수 0x12 가

저장 되어 있다 . 이 를 unsigned char x1, x0 에 UnPacking 하라 .

21

Page 22: ATMega128 I/O Ports

BCD Packing, UnPacking 예#include <avr/io.h>

#define LSD_BCD 0x0f#define MSD_BCD 0xf0

unsigned char x1=0x01, x0=0x02;unsigned char y0=0;

int main(void){

unsigned char tmp;// Packing

y0 = x1 << 4;y0 = y0 & MSD_BCD;tmp = x0 & LSD_BCD;y0 |= tmp;

22

Page 23: ATMega128 I/O Ports

BCD Packing, UnPacking 예// Unpacking

x1 = 0;x0 = 0;tmp = y0;x0 = tmp & LSD_BCD;tmp = tmp >> 4;x1 = tmp & LSD_BCD;

}

23

Page 24: ATMega128 I/O Ports

AVR I/O port programming 예#include <avr/io.h>void port_init(void){

PORTD |= 0x03; // External SW Pull Up DDRD &= (~0x03; // Input Port: PD0, PD1 PORTF = 0x00; DDRF |= 0x03; // Output Port: PF0, PF1

}

int main(void){port_init();

// PIND(PD0, PD1) 의 상태를 PORTF 에 출력 한다 .while(1){

PORTF = PIND & 0x03;

}}

24

Page 25: ATMega128 I/O Ports

AVR I/O port interfacing

25

Pull-up 기능은 Switch 를 외부 저항 없이 Input Port 에 Interface 할 수 있게 한다 . 그러나 Leakage current 가 증가 할 우려가 있다 .

외부 조건 ( 정전기 , 부하에 의한 고전압 발생 등 )에 대한 I/O Port protection 에 대한 고려가 필요 함 .

LED Drive Circuits적절한 Current Limit Resistors 의 선택이 필요함 .

Motor or relay drive circuitsInductive 에 의한 고전압을 제거 하는 Diode 필요

5V to 3.3V or 3.3V to 5V interfacingVoltage thresholds 가 같은 logic families Chip

을 사용 하거나 ,Interface Chip : 74LVC244, TXB0108 등 이용