Study/AVR ATmega128 Easy Processor Kit

6. Easy Processor Kit의 ATmega128 모듈의 LED 제어

자!! 이제 실험할 준비를 다 마쳤으니 실험을 해보도록 해볼께요~~!


오늘은 Easy Processor Kit에 ATmega128 모듈에 있는 LED들을 제어해 보도록 할거에요!!


아래 그림과 같이 Easy Processor Kit의 왼쪽편에 빨간 네모부분에 보시게되면 ATmega128 모듈이 있을겁니다. 밑의 사진은 Cortex-M3인데 해당 위치에 ATmega128 모듈이 있을거에요!


 - LED 켜기


모듈에서 오른쪽에 보시게되면 PE2,3 PD4,5 PWM0,1,2,3 이라고 적힌 작은 LED가 보이죠?ㅎㅎ


아래사진에서 오른편입니다!! 이제 이 LED를 켜보도록 하죠!!



그럼 PE PD PWM은 어디있느냐??

ATmega128 핀 회로도를 한번 봅시다!!




초록색 네모상자들이 보이시나요~~? 눈치가 빠르신 분들은 알텐데 이제 이부분을 저희가 통제해주게 된다면 LED에 불이 들어오게 되는것입니다!!!


easy-pro-kit-base-v12.pdf


ATmega128_V1.1.pdf


혹시 필요하신분 있을까봐 Easy Processor Kit의 여러 소자 회로도들을 첨부해 드릴게요.


ATmega128 회로도들을 통해 알았는데 LED회로도도 옆에 있네요!! 그런데 잠깐?? 다이오드 방향이 반대네요!! 아하!! 그렇다면 저희가 LED를 ON 시키려면 0의 값인 Low 값을 주어야한다는 사실을 알게 되었군요!! ㅎㅎ


자 이제 AVR Studio4를 실행하여 소스코드를 짜도록 합시다!


#include <avr/io.h>

 

int main(void)

{

    DDRE = 0xFF;

    PORTE = 0xFF;

    DDRD = 0xFF;

    PORTD = 0xFF;

    DDRB = 0xFF;

    PORTB = 0xFF; // 포트 E, D, B 각각 출력용으로 설정 후 초기값 설정

 

    while(1)

    {

        PORTE = 0x00;

        PORTB = 0x00;

        PORTD = 0x00; // 각 포트들을 LOW로 입력하여 LED를 킴 끌 때는 0xFF로 설정

    }

}


이렇게 간단히 짜면 됩니다!! ㅎㅎ


불 잘들어 오죠?ㅎㅎ



 - LED 반복점멸


이제 응용해서 LED 반복점멸을 해보도록 할까요??


위의 소스에서 딜레이만 넣어주면 되겠죠??ㅎㅎ


AVR 코딩에서 util에 delay가 있어요 ㅎㅎ delay를 편히 쓰기위해 전처리기 해놓은것이죠.


이것을 헤더에 추가해 주십다!!


#include <avr/io.h>

#include <util/delay.h> // delay를 쓰기위한 전처리기

 

int main(void)

{

    DDRE = 0xFF;

    PORTE = 0xFF;

    DDRD = 0xFF;

    PORTD = 0xFF;

    DDRB = 0xFF;

    PORTB = 0xFF; // 포트 E, D, B를 출력용으로 설정 및 초기값 설정

     

    while(1)

    {

        PORTE = 0x00;

        PORTB = 0x00;

        PORTD = 0x00;

        _delay_ms(5000); // 5초동안 LED를 킴

 

        PORTE = 0xFF;

        PORTB = 0xFF;

        PORTD = 0xFF;

        _delay_ms(5000); // 5초동안 LED를 끔

    }

}


이러면 간단하쥬??ㅎㅎ



 - LED 순차점등


자 이번엔 LED를 순차로 점등시켜 볼까요??


이번에도 딜레이와 PORTE, D B를 잘 활용해주면 되겠죠?ㅎㅎ 코드에 답은 없으니 여러분은 여러분 손을 믿고 머리를 믿고 짜시면 되요 ㅎㅎ 저같은 경우는 이렇게 짰네요~~ 참고만 하세요!!


#include <avr/io.h>

#include <util/delay.h>

 

int main(void)

{

    DDRE = 0xFF;

    PORTE = 0xFF;

    DDRD = 0xFF;

    PORTD = 0xFF;

    DDRB = 0xFF;

    PORTB = 0xFF; // 포트 B, D, E 출력용으로 설정 및 초기값 0xFF로 지정

 

    while(1)

    {

        PORTE = 0x08; // 포트 E 제일 위의 LED 켜기위해 0000 1000 지정

        PORTB = 0xFF; // 포트 B는 다 끔

        PORTD = 0xF0; // 포트 D는 다 끔

        _delay_ms(2000); // 위에서부터 1개의 LED 켜진 상태로 2초간 지연

     

        PORTE = 0x00; // 포트 E LED 다 킴

        PORTB = 0xFF;

        PORTD = 0xF0;

        _delay_ms(2000); // 위에서부터 2개의 LED 켜진 상태로 2초간 지연

     

        PORTE = 0x00;

        PORTB = 0xFF;

        PORTD = 0x20; // 포트 D 제일 위의 LED 켜기 위해 0010 0000 지정

        _delay_ms(2000); // 위에서부터 3개의 LED 켜진 상태로 2초간 지연

 

        PORTE = 0x00;

        PORTB = 0xFF;

        PORTD = 0x00; // 포트 D 다 킴

        _delay_ms(2000); // 위에서부터 4개의 LED 켜진 상태로 2초간 지연

 

        PORTE = 0x00;

        PORTB = 0xEF; // 포트 B 제일 위에 LED 켜기 위해 1110 1111 지정

        PORTD = 0x00;

        _delay_ms(2000); // 위에서부터 5개의 LED 켜진 상태로 2초간 지연

 

        PORTE = 0x00;

        PORTB = 0xCF; // 포트 B 위에서부터 2개의 LED 켜기 위해 1100 1111 지정

        PORTD = 0x00;

        _delay_ms(2000); // 위에서부터 6개의 LED 켜진 상태로 2초간 지연

 

        PORTE = 0x00;

        PORTB = 0x8F; // 포트 B 위에서부터 3개의 LED 켜기 위해 1000 1111 지정

        PORTD = 0x00;

        _delay_ms(2000); // 위에서부터 7개의 LED 켜진 상태로 2초간 지연

 

        PORTE = 0x00;

        PORTB = 0x00; // 포트 B 다 킴

        PORTD = 0x00;

        _delay_ms(2000); // 모든 LED 켜진 상태로 2초간 지연

 

        PORTE = 0xFF;

        PORTB = 0xFF;

        PORTD = 0xFF;

        _delay_ms(2000); // 모든 LED 다 끈 상태로 2초간 지연

    }

}



저 사진은6개까지 불이 들어온 상태입니다~ 잘 되쥬??ㅎㅎ


이상 ATmega128 모듈에 있는 LED 제어였습니다!!


다음시간에는 외부 LED를 컨트롤 해보겠습니다.

,

최근 댓글

최근 트랙백

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

링크

Yuria

카운터

Today :
Yesterday :
Total :