728x90
스탑워치 전
트랜지스터와 인터럽트 테스트용으로 생성
/*
* Course2.c
*
* Created: 2025-07-21
* Author : gnsdl
*/
#include <avr/io.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#define F_CPU 16000000UL
#include <util/delay.h>
int index = 0;
unsigned char digit[] = {0x28, 0xb3, 0xba, 0x78};
void setup() {
DDRA = 0xff;
DDRB = 1; // PB0 출력
DDRE = 0; // PE4 입력z
DDRD = 0x04;
PORTD = 0x04; // 천의자리만 켜기
PORTE = 48; // PE4 내부 풀업 켜기 (0b00110000)
EIMSK = 0x30; // INT4 인터럽트 활성화 (0b00110000)
EICRB = 0x0b; // INT4 rising edge (0b00001100)
sei(); // 전역 인터럽트 허용
}
int main() {
setup();
while (1) {
// 계속 대기
}
}
ISR (INT4_vect)
{
_delay_ms(50); // crude debounce (needs <util/delay.h>)
PORTA = digit[index];
index = index + 1;
if (index >= 5) {
index = 0;
}
}
ISR (INT5_vect)
{
PORTA = 0x00;
}
택트 오른쪽 누르면 인터럽트4번 실행되어 FND가 1씩 증가함
가끔 디바운스가 안되어서 2에서 바로 3으로 올라가는 경우가 있다.
스탑워치 하며 해결해보려고함..
'하드웨어 > atmega128' 카테고리의 다른 글
atmega128 - interrupt 사용하여 택트버튼으로 LED 켜기 #13 (0) | 2025.07.14 |
---|---|
atmeaga - esp8266 펌웨어 올리기 (0) | 2025.03.27 |
atmega128 - ESP8266 모듈 baud rate 변경 #11 (0) | 2025.03.27 |
atmega128 - ESP8266 모듈을 이용해 웹서버에 get request보내기 #10 (0) | 2025.03.26 |
atmega128 - 터미널 테스트 출력 #9 (0) | 2025.03.17 |