ATmega128 시작

김준혁·2026년 3월 27일

Fuse Bits

칩의 동작 환경(동작 주파수, 리셋) 등을 결정하는 3byte 비휘발성 메모리.
설정시 High, Low, Extended퓨즈로 나뉘고, 잘못설정하면 망가짐.

Low Fuse

시스템 클록, 분주비, 기동시간(Start-up time)등 설정

High Fuse

온-칩 디버깅(JTAG) 사용 여부, 부트 사이즈, 워치도그 타이머 상시 가동 여부 설정

Extended Fuse

M103 호환모드 설정 등 추가적인 확장 시스템 옵션 제어

Program Test

Bring-up: LED점멸(Blink) 프로그램을 작성하고 보드에 다운로드하여 테스트 하는 과정. c로치면 hello world같은 느낌

Floating State

입력 핀에 전압이 확정되지 않아 0인지 1인지 알 수 없는 불안정한 상태.
버튼을 누르지 않았음에도 누른 것으로 오인식할 수 있음.
저항 사용으로 해결.

Pull-up Resistor

저항을 전원(VCC)쪽에 연결, 스위치는 GND
스위치OFF=High
스위치ON=LOW

PULL-Down Resistor

저항을 GND, 스위치는 VCC
스위치OFF=LOW
스위치ON=High

회로

Drive 용어(전기를 준다)가 나오면 트랜지스터가 들어감

Pull-up

#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;
}

Pull-Down

#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 기능은 없다고 한다.

profile
임베디드

0개의 댓글