root layout

패스트캠퍼스

  1. 강의 질문
  2. AI TECH

Part3. Atmega328p ISR 실습

2026.03.17 13:57 수정

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) 회로도

image.png


감사합니다


답변 

연관 질문

커뮤니티 질문보기