• Feed
  • Explore
  • Ranking
/
/
    ATmega128A

    ATmega128A, LED 두 개 번갈아 깜빡이기

    호호호 아직까진 할만하넹...
    박
    박형진
    2025.03.22
    ·
    2 min read

    #define F_CPU 16000000UL
    
    #include <avr/io.h>
    #include <util/delay.h>
    
    void SetPins(){
        DDRA = 0b00000011; // PA0, 1만 Out...
    	PORTA = 0b00000000; // PA0, 일단 0으로...
    }
    
    int main(void){
        SetPins();
    	
    	while(1){
    		PORTA = 0b00000001;
    		_delay_ms(1000);
    		PORTA = 0b00000010;
    		_delay_ms(1000);
    	}
    }
    4245

    코드 설명

    util/delay.h

    • avr-libc의 문서에 써진 Description을 보면, "Convenience Functions for busy-wait delay loops"라고 되어 있다.

      • "Busy-Wait을 위한 편리한 기능들"

      • Busy-Wait? -> 다른 작업 다 때려치우고 다 됐나? 다 됐나? 다 됐나? 다 됐나? 계속 확인하는 것.

    F_CPU?

    • util/delay.h에서 제공하는 Delay functions를 사용하기 위해서는 외부 Xtal의 Clock을 해당 이름으로 Define해 주어야 한다.

      • 하지 않으면 1MHz 속도로 동작한다고 가정하고 컴파일이 되긴 하는데, Warning이 뜬다.

    나의 경우...

    • SetPins 함수에서 핀의 초기 설정을 담당하도록 했다.

      • PA0, PA1번 핀만 출력으로 설정했다.

        => DDRA = 0b00000011; // PA0, 1만 Out...

      • 그리고 초기 PORTA Register는 전부 0으로!

        • GND 출력 중인 상태로 세팅!

    • 그리고 Main에서 PA0, 1이 1초 간격으로 번갈아가며 Output-High 되도록 설정. 끝.


    코드 ATmega128A에 업로드하는 방법

    1. 상단 탭 [Build] > [Build Solution] (단축키 F7)

    2. 상단 탭 [Tools] > [Device Programming]

    3. [Tool], [Device], [Interface] 선택 후 [Apply]

    4. 해당 창 좌측면 탭, [Memories]

      1. [flash] 메뉴 경로 텍스트 상자 우측 [...] 버튼 클릭

      2. 프로젝트 폴더 내에서 빌드된 .hex 파일을 선택.

      3. [Program] 버튼 누르기







    - 컬렉션 아티클