• Feed
  • Explore
  • Ranking
/
/
    ATmega128A

    ATmega128A 핀 I/O 설정하기

    LED 다루기부터 해야겠어요 호호
    박
    박형진
    2025.03.22
    ·
    3 min read

    #include <avr/io.h>
    • 이런 헤더를 많이들 보게 될 텐데, 이 헤더는 AVR Pin I/O를 설정하는 'DDRx'라고 불리는 레지스터와, I/O 세부설정을 위한 'PORTx'라고 불리는 레지스터들을 설정하기 위한 헤더다.

    • 학교에서 가르쳐주는 기초 C만 배워서 생소했는데, <[Directory]/[Filename]>의 형식인 거다.

      • avr 디렉터리 하위의 io.h 파일.

    Pin I/O Mapping

    DDRx I/O Direction Register

    • x 문자의 자리에는 A-G 사이의 문자가 들어간다.

      • PA, PB, PC, PD... 요렇게 핀 맵이 있으니까...

        • DDRA, DDRB, DDRC, DDRD ...

    • 어떤 핀을 입력으로 쓸 건지, 출력으로 쓸 건지 설정한다.

      • 해당 비트 1로 설정 -> 출력으로 쓰겠다.

      • 해당 비트 0으로 설정 -> 입력으로 쓰겠다.

    • (당연하게도) DDRA, DDRB ... 레지스터에는 각각 한 바이트씩 들어간다.

      • DDRA를 예시로 들면, 1, 3, 6번 핀을 출력으로 쓰고, 나머지는 입력으로 쓰고 싶다면...

        • PA7 -> 0

        • PA6 -> 1

        • PA5 -> 0

        • PA4 -> 0

        • PA3 -> 1

        • PA2 -> 0

        • PA1 -> 1

        • PA0 -> 0

    DDRA = 0b01001010
    // 또는
    DDRA = 0x4A

    아하!!!!!!!!!

    PORTx, I/O 설정 Register

    • x 자리에는 A - G 사이의 문자가 들어간다.

      • 상동!

    • PORTx는 DDRx의 설정을 어떻게 했느냐에 따라 설정 시 동작이 다른데...

      • 출력 핀이라면...

        • PORTx의 해당 비트가 1이면 -> Output High(5v)

        • PORTx의 해당 비트가 0이면 -> Output Low(GND)

          => 해당 비트를 1, 0으로 바꾸면 핀 출력 전압을 제어할 수 있다!

      • 입력 핀이라면...

        • PORTx의 해당 비트가 1이면 -> Pull-Up 저항 사용 => 별다른 신호가 없다면 1 간주.

          • 초기값이 뭔지 몰라서 확실한 상태로 만들고 싶다면...

        • PORTx의 해당 비트가 0이면 -> Pull-Up X => Tri-State(Hi-Z)







    - 컬렉션 아티클