/*======================================================================================
Project : DC¸ðÅÍµå¶óÀÌ¹ö È®Àåº¸µå¸¦ ÀÌ¿ëÇÑ DC¸ðÅÍ Á¦¾îÇÏ±â 
Version : 
Date    : 2011-07-28
Author  : Kyung Nam Lee
Company : LKEMBEDDED 
Compiler: CodevisionAVR + AVRStudio
Comment: DC¸ðÅÍ°¡ Á¤È¸Àü ¿ªÈ¸Àü ÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. 

¡Ø¡ØÁÖÀÇ»çÇ×¡Ø¡Ø
10p ÇÃ·§ ÄÉÀÌºíÀ» ¾Æ·¡¿Í °°ÀÌ ¿¬°áÇØÁÖ¼¼¿ä!
ATmega2560 È®ÀåÇü °³¹ßº¸µå PORTC <------------->DC¸ðÅÍµå¶óÀÌ¹ö È®Àåº¸µå - 10ÇÉ ¹Ú½ºÇì´õ Ä¿³ØÅÍ (PORT1)
======================================================================================*/
#include <mega2560.h>
#define CW1 PORTC.0
#define CWC1 PORTC.1
#define CW2 PORTC.2
#define CCW2 PORTC.3
#define EN1 PORTC.4
#define EN2 PORTC.5
unsigned int duty=0;
unsigned int MotorDir=0;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
    static unsigned int cnt,cnt2=0;
    cnt++;cnt2++;     
    if(cnt==duty)
    {
      EN1=EN2=0;
    }   
    if(cnt==50)
    {
      EN1=EN2=1;   
      cnt=0;
    }    
    if(cnt2==500)
    {
        duty++; 
        if(duty>50) 
        {
            duty=0; 
            duty=1;// pwm pluseÀÇ initialization value
            MotorDir^=1;  //direction Select variable value 
         
        }
        cnt2=0;
    }
    TCNT0+=0x06;
}

void main(void)
{
// Port C initialization
PORTC=0x00; // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
DDRC=0xff;  // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 

TCCR0A=0x00;//Normal Mode Operation(Overflow Interrupt Enable) 
TCCR0B=0x03;//64Prescale Select
TCNT0=0x06;// Timer/Count Register initialization

TIMSK0=0x01;// Timer(s)/Counter(s) Interrupt(s) initialization
#asm("sei")// Global enable interrupts
duty=1;// pwm pluseÀÇ initialization value
while (1)
      {
        switch(MotorDir)
        {
        case 0: CW1=1;CWC1=0;CW2=1;CCW2=0;break; //forward direction
        case 1: CW1=0;CWC1=1;CW2=0;CCW2=1;break; //reverse direction      
        }     
        
   
      };
}
