Atmel ATmega 328 Block DiagramAVR CPU ATmega 328
Atmel ATmega 328 Block Diagram(AVR CPU ATmega 328 P) Pin 구성 (28 -pin PDIP 패키지)
코드 : Atmel 328 P 외부 Interrupt 예제 #include <avr/io. h> #define F_CPU 16000000 UL #include <util/delay. h> #include <avr/interrupt. h> ISR(INT 0_vect) { if(PIND & 0 x 04) PORTB = 0 x 00; // LED 끄기 else PORTB = 0 x 20; // LED 켜기 } void INIT_PORT(void) { DDRB = 0 x 20; // PB 5(디지털 13번 핀) 출력으로 설정 PORTB = 0 x 00; // LED는 꺼진 상태에서 시작 DDRD = 0 x 00; // 버튼 입력 PORTD = 0 x 04; // PD 2(디지털 2번 핀) 풀업 저항 사용 } void INIT_INT 0(void) { EICRA |= (1 << INT 0); // INT 0 인터럽트 활성화 EIMSK |= (1 << ISC 00); // 버튼 상태 변화 감지 sei(); // 전역적으로 인터럽트 허용 } int main(void) { INIT_PORT(); // 포트 설정 INIT_INT 0(); // INT 0 인터럽트 설정 while(1){ } // 이벤트 루프는 아무 일도 하지 않는다. } 필요 준비 자재 : 아두이노 우노 보드 : 1개 AVR JTAG : 1개 USB A TO B 케이블 : 1개 SWITCH : 1개
코드 : Atmel 328 P 핀 변화 Interrupt 예제 #include <avr/io. h> #define F_CPU 16000000 UL #include <util/delay. h> #include <avr/interrupt. h> ISR(PCINT 2_vect) { if(PIND & 0 x 04) PORTB = 0 x 00; // LED 끄기 else PORTB = 0 x 20; // LED 켜기 } void INIT_PORT(void) { DDRB = 0 x 20; // PB 5 (디지털 13번 핀) 출력으로 설정 PORTB = 0 x 00; // LED는 꺼진 상태에서 시작 DDRD = 0 x 00; // 버튼 입력 PORTD = 0 x 04; // PD 2 (디지털 2번 핀) 풀업 저항 사용 } void INIT_PCINT 2(void) { PCICR |= (1 << PCIE 2); // PCINT 2 인터럽트 활성화 PCMSK 2 |= (1 << PCINT 18); // PD 2 핀의 핀 변화 인터럽트 허용 sei(); // 전역적으로 인터럽트 허용 } int main(void) { INIT_PORT(); // 포트 설정 INIT_PCINT 2(); // PCINT 2 인터럽트 설정 while(1){ } // 이벤트 루프는 아무 일도 하지 않는다. } 필요 준비 자재 : 아두이노 우노 보드 : 1개 AVR JTAG : 1개 USB A TO B 케이블 : 1개 SWITCH : 1개
- Slides: 5