본문 바로가기

프로테우스/MOTOR

서보모터

#include   
#include       

void main(void)
{       
    unsigned int i=0;
    DDRD=0xff;  //PB5,6 입니다.  
 
    while(1)
    {  
        for(i=0; i<100; i++)
        {        
            PORTD=0x01; delay_us(600); PORTD=0x00; delay_ms(23);    
            PORTD=0x02; delay_us(600); PORTD=0x00; delay_ms(23);
            PORTD=0x04; delay_us(600); PORTD=0x00; delay_ms(23);
            PORTD=0x08; delay_us(600); PORTD=0x00; delay_ms(23);
            PORTD=0x10; delay_us(600); PORTD=0x00; delay_ms(23);
            PORTD=0x20; delay_us(600); PORTD=0x00; delay_ms(23);
            PORTD=0x40; delay_us(600); PORTD=0x00; delay_ms(23);
            PORTD=0x80; delay_us(600); PORTD=0x00; delay_ms(23);
        
        }                                                          
    
    }
}

#include 
#include 

 

#define Servo1  PORTD.0
#define Servo2  PORTD.1
#define Servo3  PORTD.2
#define Servo4  PORTD.3
#define Servo5  PORTD.4
#define Servo6  PORTD.5
#define Servo7  PORTD.6
#define Servo8  PORTD.7

 

unsigned char PWM[8]={30};
int count=0;

interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{ 
 interrupt [TIM1_COMPA] void timer1_compa_isr(void){ 
  if(count=1150)count=0;  //23ms
}


 

}

void main(void){
  unsigned char i, k;

  DDRD=0xFF;           
  
  OCR1A=39; TCCR1B=0x0A; TIMSK=0x10;  //16000000/8/(1+39)=50000Hz=20usec
  #asm("sei")
  //delay_ms(1000);
  while(1){
      for(i=30;i<=120;i++){ // 600usec~2400usec까지 2도 단위로 증가
          for(k=0;k<8;k++)PWM[k]=i; // 8개 PWM값 설정
          delay_ms(100);       }
  }
}

'프로테우스 > MOTOR' 카테고리의 다른 글

Relay 제어 (I/O로 FAN 제어 및 LED상태)  (1) 2013.03.25
DC모터 제어해보기  (5) 2011.10.05
스테핑모터 -1상 여자방식  (2) 2011.10.05
스테핑모터 - 시뮬  (0) 2011.10.04