Microprocessor/ATMEGA 128 아트메가128 ( 타이머카운터 / rand활용 / 별로 엑스그리기 ) [20120524]
  • 728x90
    반응형

       

       

    안녕하세요 L입니다.  

    오늘 AVR 시간에는 잠시 C연습문제   

    별로 X그리기를 해보고   

    Rand 난수생성 함수 사용과   

    아트메가에서의 타이머카운터 사용법에대해 알아 보겠습니다.   

    본문 강의 자료는 첨부파일에 있어요 !



       

    6장 타이머카운터 사용법.ppt


       

     C연습문제

       

    Ex) * X 그리기   

         

    < 프로그램 설명 >

        cnt 

      

    0

    1

    2

    3

    4

    5

    6

    0

    *

      

      

      

      

      

    *

    1

      

    *

      

      

      

    *

      

    2

      

      

    *

      

    *

      

      

    3

      

      

      

    *

      

      

      

    4

      

      

    *

      

    *

      

      

    5

      

    *

      

      

      

    *

      

    6

    *

      

      

      

      

      

    *

       

    num

         

    별이그려지는 지점

       

        0.0     0.6

        1.1     1.5

        2.2     2.4

        3.3

        4.2    4.4

        5.1    5.5

        6.0    6.6

         

    공통점은 서로같거나 합이 6이된다는 사실이다.

         

    결과  

          

     Atmega128 타이머카운터 

       

    < 사용 헤더파일 환경설정 >   

          

    < TCCR0 (T/C Control Register) >   

          

    < TCNT0 (Timer Counter Register) >   

            

    < TIMSK (Interrupt Mask Register) >   

          

    < 1초마다 LED 깜빡이는 프로그램 구현 >   

           

    Ex) 랜덤으로 20 LED켜지도록 하기.

    난수를 발생하여 LED on/off 각각 0.5초간 유지    

    ------------------------------------------------------

       

    #include <.h>

    #include<stdlib.h>

    #define CPU_CLOCK    16000000

    #define TICKS_PER_SEC    1000

    #define PRESCALER    64

       

    volatile unsigned int g_elapsed_time;

    void sleep(unsigned int elapsed_time);

    void __vector_16(void) __attribute__ ((signal, used, externally_visible));

    void initLED(void);

       

    int main(void)

    {

        initLED();

        TCCR0 = 0x04;

        TCNT0 = 0x06;

        TIMSK = 0x01;

        SREG = SREG | (1 << 7);

        int cnt = 0;

        int r;

        while(cnt <= 20)

        {

            r = (rand()%2);

            if(r==0)

            {

                PORTF = 0x00;

                sleep(500);

            }

            else if(r==1)

            {

                PORTF = 0xFF;

                sleep(500);

            }    

            ++cnt;

        }

    }

    void initLED(void)

    {

        DDRF = 0xFF;

        PORTF = 0x00;

    }

       

    void sleep(unsigned int elapsed_time)

    {

        g_elapsed_time = 0x00;

        for(; g_elapsed_time < elapsed_time;);

    }

    void __vector_16(void)

    {

        TCNT0 = 6;

        ++g_elapsed_time;

    }

    ------------------------------------------------------

          

    결과 : 동영상참고

       


       

       

    궁금하신 점은 댓글로 남겨 주세요 !!   

    오늘도 좋은 하루 되세요 

       

       

       

    728x90
    반응형
상단으로