- 강의 질문
- AI TECH
Part3. Atmega328p ISR 실습
3번(INT1) 핀에서 Switch 입력이 들어올 때마다 LED를 1초간 키는 코드
안녕하세요.
현재 외부 인터럽트를 이용한 회로를 실제로 구성했을 때
LED가 켜지지 않는 문제가 발생하고 있습니다.
회로는 Tinkercad 시뮬레이션에서는 정상적으로 동작하는 것을 확인하였으며,
LED 또한 5V에 직접 연결했을 때 정상적으로 켜지는 것을 확인했습니다.
하지만 동일한 회로를 실제로 구성했을 때는 정상 동작하지 않는 상황 입니다.
코드와 배선을 함께 첨부드립니다.
이미 해결하신 분이 계시거나, 강사님께서 확인해주실 수 있다면 도움을 부탁드립니다 !
추가로, 코드 문제(디바운싱 등) 또는 INT1 설정 문제일 가능성을 고려하여
INT0로 배선 및 코드를 변경하여 테스트도 진행해보았습니다.
그러나 해당 경우에도 아두이노 보드의 L(내장 LED)만 버튼 입력 시 꺼졌다가 켜지는 반응을 보이고,
외부 LED는 정상적으로 동작하지 않는 상황입니다.
확인 부탁드립니다. 감사합니다.
1) 코드 ( 13번 ( PB5, 스위치, 출력) / 3번 ( PD3, LED, 입력, INT1 ))
#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
#include <avr/interrupt.h>
#define sbi(PORTX, BitX) (PORTX |= ( 1 << BitX ))
// PB5 ( 13번, LED ), PD3(INT1) ( 3번, Switch ), PD2(INT0) ( 2번, Switch )
SIGNAL(INT1_vect)
{
PORTB = 0x20; // PB5를 HIGH로 출력하여 LED 켬
_delay_ms(1000);
}
int main(void)
{
sbi(SREG, 7); // 전체 인터럽트 허용
sbi(EIMSK, INT1); // 개별 인터럽트 허용, 외부 인터럽트 INT1 허용
EICRA = 0x04; // 0000 0100, INT1. falling edge에서 인터럽트 발생 설정
DDRD = 0x00; // 0 -> port D 전체를 입력 설정
PORTD = 0x08; // 0000 1000, PD3 (INT1) 내부 풀업 저항 활성화
DDRB = 0x20; // 1 -> 0010 0000, PB5 출력 설정 ( 13번 )
while (1)
{
PORTB = 0x00; // PB5를 LOW로 출력하여 LED 끔
}
}
2) 회로도

감사합니다