목차
국문초록
1. 서론
2. 이론
2.1 정기구학
2.2 역기구학
2.3 무게중심점의 위치결정
3. 연 구 과 정
4. 연 구 내 용
4.1 ATMEGA128 메인보드
4.2 RC서보모터
4.3 적외선 센서
4.4 Block Diagram
4.5 설계사항
4.6 Organization of Control System
4.7 보행 실험 및 고찰
4.8 실험 결과 및 고찰
5. 결론
참고문헌
부 록(모터구동프로그램)
1. 서론
2. 이론
2.1 정기구학
2.2 역기구학
2.3 무게중심점의 위치결정
3. 연 구 과 정
4. 연 구 내 용
4.1 ATMEGA128 메인보드
4.2 RC서보모터
4.3 적외선 센서
4.4 Block Diagram
4.5 설계사항
4.6 Organization of Control System
4.7 보행 실험 및 고찰
4.8 실험 결과 및 고찰
5. 결론
참고문헌
부 록(모터구동프로그램)
본문내용
HEAD].port = PORT_B;
servo_info[HEAD].pin = 0X40;
servo_info[HEAD].flag = 1;
servo_info[HEAD].position = HEAD_DEFAULT;
}
void Init_Timer1(void)
{
TCCR1A=0x00;
TCCR1B=0x01;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
TIMSK=0x04;
ETIMSK=0x00;
} /* end of Init_Timer1_R() */
// Function name: UART_getchar
// Description : Get a character from the USART1 Receiver buffer
// Return type: char
// Argument : void
char get_motor_value(void)
{
char data = 0x00;
if (!rx_counter1)
return data;
data=rx_buffer1[rx_rd_index1];
if (++rx_rd_index1 == RX_BUFFER_SIZE1) rx_rd_index1=0;
#asm("cli");
--rx_counter1;
#asm("sei");
return data;
}
void UART_ini(void)
{
// USART1 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART1 Receiver: On
// USART1 Transmitter: On
// USART1 Mode: Asynchronous
// USART1 Baud rate: 19200
UCSR1A=0x00;
UCSR1B=0x98;
UCSR1C=0x06;
UBRR1H=0x00;
UBRR1L=0x33;
}
// Function name: UART_GetRecvCounter
// Description : buffer에 담겨진 data의 개수를 return해준다.
// Return type: BYTE
char UART_GetRecvCounter()
{
return rx_counter1;
}
void putchar1(char c)
{
while ((UCSR1A & DATA_REGISTER_EMPTY)==0);
UDR1=c;
}
void main(void)
{
unsigned char sepa;
int RecvTmp;
UART_ini();//UART initialize
Port_ini(); //PORT initialize
Init_Timer1(); //TIMER initialize
servo_ini(); //PIN,PORT,FLAG initialize
#asm("sei") // Interrupt Enable..
while(1)
{
if(UART_GetRecvCounter())
{
sepa = get_motor_value();
putchar1(sepa);
while(!UART_GetRecvCounter()); //recive된 데이터가 없을동안 받은 데이터로 처리한다.
switch(sepa)
{
case 'a':
{
RecvTmp = get_motor_value();
servo_info[0].position = 11200+RecvTmp*142.22;
}
break;
case 'b':
{
RecvTmp = get_motor_value();
servo_info[1].position = 11200+RecvTmp*142.22;
}
break;
case 'c':
{
RecvTmp = get_motor_value();
servo_info[2].position = 11200+RecvTmp*142.22;
}
break;
case 'd':
{
RecvTmp = get_motor_value();
servo_info[3].position = 11200+RecvTmp*142.22;
}
break;
case 'e':
{
RecvTmp = get_motor_value();
servo_info[4].position = 11200+RecvTmp*142.22;
}
break;
case 'f':
{
RecvTmp = get_motor_value();
servo_info[5].position = 11200+RecvTmp*142.22;
}
break;
case 'g':
{
RecvTmp = get_motor_value();
servo_info[6].position = 11200+RecvTmp*142.22;
}
break;
case 'h':
{
RecvTmp = get_motor_value();
servo_info[7].position = 11200+RecvTmp*142.22;
}
break;
case 'i':
{
RecvTmp = get_motor_value();
servo_info[8].position = 11200+RecvTmp*142.22;
}
break;
case 'j':
{
RecvTmp = get_motor_value();
servo_info[9].position = 11200+RecvTmp*142.22;
}
break;
case 'k':
{
RecvTmp = get_motor_value();
servo_info[10].position = 11200+RecvTmp*142.22;
}
break;
case 'l':
{
RecvTmp = get_motor_value();
servo_info[11].position = 11200+RecvTmp*142.22;
}
break;
case 'm':
{
RecvTmp = get_motor_value();
servo_info[12].position = 11200+RecvTmp*142.22;
}
break;
case 'n':
{
RecvTmp = get_motor_value();
servo_info[13].position = 11200+RecvTmp*142.22;
}
break;
}
};
/*} end of main()*/
}
}
servo_info[HEAD].pin = 0X40;
servo_info[HEAD].flag = 1;
servo_info[HEAD].position = HEAD_DEFAULT;
}
void Init_Timer1(void)
{
TCCR1A=0x00;
TCCR1B=0x01;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
TIMSK=0x04;
ETIMSK=0x00;
} /* end of Init_Timer1_R() */
// Function name: UART_getchar
// Description : Get a character from the USART1 Receiver buffer
// Return type: char
// Argument : void
char get_motor_value(void)
{
char data = 0x00;
if (!rx_counter1)
return data;
data=rx_buffer1[rx_rd_index1];
if (++rx_rd_index1 == RX_BUFFER_SIZE1) rx_rd_index1=0;
#asm("cli");
--rx_counter1;
#asm("sei");
return data;
}
void UART_ini(void)
{
// USART1 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART1 Receiver: On
// USART1 Transmitter: On
// USART1 Mode: Asynchronous
// USART1 Baud rate: 19200
UCSR1A=0x00;
UCSR1B=0x98;
UCSR1C=0x06;
UBRR1H=0x00;
UBRR1L=0x33;
}
// Function name: UART_GetRecvCounter
// Description : buffer에 담겨진 data의 개수를 return해준다.
// Return type: BYTE
char UART_GetRecvCounter()
{
return rx_counter1;
}
void putchar1(char c)
{
while ((UCSR1A & DATA_REGISTER_EMPTY)==0);
UDR1=c;
}
void main(void)
{
unsigned char sepa;
int RecvTmp;
UART_ini();//UART initialize
Port_ini(); //PORT initialize
Init_Timer1(); //TIMER initialize
servo_ini(); //PIN,PORT,FLAG initialize
#asm("sei") // Interrupt Enable..
while(1)
{
if(UART_GetRecvCounter())
{
sepa = get_motor_value();
putchar1(sepa);
while(!UART_GetRecvCounter()); //recive된 데이터가 없을동안 받은 데이터로 처리한다.
switch(sepa)
{
case 'a':
{
RecvTmp = get_motor_value();
servo_info[0].position = 11200+RecvTmp*142.22;
}
break;
case 'b':
{
RecvTmp = get_motor_value();
servo_info[1].position = 11200+RecvTmp*142.22;
}
break;
case 'c':
{
RecvTmp = get_motor_value();
servo_info[2].position = 11200+RecvTmp*142.22;
}
break;
case 'd':
{
RecvTmp = get_motor_value();
servo_info[3].position = 11200+RecvTmp*142.22;
}
break;
case 'e':
{
RecvTmp = get_motor_value();
servo_info[4].position = 11200+RecvTmp*142.22;
}
break;
case 'f':
{
RecvTmp = get_motor_value();
servo_info[5].position = 11200+RecvTmp*142.22;
}
break;
case 'g':
{
RecvTmp = get_motor_value();
servo_info[6].position = 11200+RecvTmp*142.22;
}
break;
case 'h':
{
RecvTmp = get_motor_value();
servo_info[7].position = 11200+RecvTmp*142.22;
}
break;
case 'i':
{
RecvTmp = get_motor_value();
servo_info[8].position = 11200+RecvTmp*142.22;
}
break;
case 'j':
{
RecvTmp = get_motor_value();
servo_info[9].position = 11200+RecvTmp*142.22;
}
break;
case 'k':
{
RecvTmp = get_motor_value();
servo_info[10].position = 11200+RecvTmp*142.22;
}
break;
case 'l':
{
RecvTmp = get_motor_value();
servo_info[11].position = 11200+RecvTmp*142.22;
}
break;
case 'm':
{
RecvTmp = get_motor_value();
servo_info[12].position = 11200+RecvTmp*142.22;
}
break;
case 'n':
{
RecvTmp = get_motor_value();
servo_info[13].position = 11200+RecvTmp*142.22;
}
break;
}
};
/*} end of main()*/
}
}
소개글