칩의 동작 환경(동작 주파수, 리셋) 등을 결정하는 3byte 비휘발성 메모리.
설정시 High, Low, Extended퓨즈로 나뉘고, 잘못설정하면 망가짐.
시스템 클록, 분주비, 기동시간(Start-up time)등 설정
온-칩 디버깅(JTAG) 사용 여부, 부트 사이즈, 워치도그 타이머 상시 가동 여부 설정
M103 호환모드 설정 등 추가적인 확장 시스템 옵션 제어
Bring-up: LED점멸(Blink) 프로그램을 작성하고 보드에 다운로드하여 테스트 하는 과정. c로치면 hello world같은 느낌
입력 핀에 전압이 확정되지 않아 0인지 1인지 알 수 없는 불안정한 상태.
버튼을 누르지 않았음에도 누른 것으로 오인식할 수 있음.
저항 사용으로 해결.
저항을 전원(VCC)쪽에 연결, 스위치는 GND
스위치OFF=High
스위치ON=LOW
저항을 GND, 스위치는 VCC
스위치OFF=LOW
스위치ON=High
Drive 용어(전기를 준다)가 나오면 트랜지스터가 들어감
#include <avr/io.h>
int main(void) {
// LED 설정 (출력)
DDRB |= (1 << PB5) | (1 << PB4);
// 버튼 설정 (입력)
DDRD &= ~((1 << PD7) | (1 << PD6));
// 주석 해제 시 내부 풀업, 주석 처리 시 외부 풀업용
// PORTD |= (1 << PD7) | (1 << PD6);
while (1) {
// 7번 핀 확인: 결과가 0일 때(눌렸을 때) 참이 됨
if (!(PIND & (1 << PD7))) {
PORTB |= (1 << PB5);
} else {
PORTB &= ~(1 << PB5);
}
// 6번 핀 확인
if (!(PIND & (1 << PD6))) {
PORTB |= (1 << PB4);
} else {
PORTB &= ~(1 << PB4);
}
}
return 0;
}
#include <avr/io.h>
int main(void) {
// [설정 1] LED 방향 설정 (출력)
// PB5(13번)와 PB4(12번)를 1로 만듭니다.
DDRB |= (1 << PB5) | (1 << PB4);
// [설정 2] 버튼 방향 설정 (입력)
// PD7(7번)과 PD6(6번)을 0으로 만듭니다.
DDRD &= ~((1 << PD7) | (1 << PD6));
while (1) {
// --- 7번 버튼(PD7) -> 13번 LED(PB5) ---
// 외부 풀다운이므로 누르면 1(High)이 됩니다.
if (PIND & (1 << PD7)) {
PORTB |= (1 << PB5); // 누르면 켠다
} else {
PORTB &= ~(1 << PB5); // 떼면 끈다
}
// --- 6번 버튼(PD6) -> 12번 LED(PB4) ---
if (PIND & (1 << PD6)) {
PORTB |= (1 << PB4); // 누르면 켠다
} else {
PORTB &= ~(1 << PB4); // 떼면 끈다
}
}
return 0;
}
내부 PULL-DOWN 기능은 없다고 한다.