마이크로프로세서 I - 라인트레이서 보고서
본 자료는 5페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
해당 자료는 5페이지 까지만 미리보기를 제공합니다.
5페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

마이크로프로세서 I - 라인트레이서 보고서에 대한 보고서 자료입니다.

목차

Ⅰ.로봇의 구성

Ⅱ.라인트레이서란?

Ⅲ. DC모터의 구동이해

Ⅳ. 라인트레이서의 센서입력원리와 출력방법의 이해

Ⅴ. 라인트레이서의 운동경로에 대한 이해

Ⅵ. 라인트레이서의 역학의 이해

Ⅶ. 결론

본문내용

{ LED_OFF; // LED OFF
time_r = time; //time_r에 time 한 값을 저장
time_l = time; //time_l에 time 한 값을 저장
}
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0x00; //Tiemr1 Overflow 요청 시간, PWM의 주기
sensor_data = PINA; //snsor_data 변수를 portA에서 들어오는 신호 값으로
mark_check(); //mark_check 함수 실행
cal_speed(); //cal_speed 함수 실행
cal_trim(); //cal_trim 함수 실행
line_trace_forward(); //line_trace_forward 함수 실행
Millisecond++;
if (MARK_COUNT == 4) // 마크체크가 4번이면
{
delay_ms(300);
DDRD=0x00; // 포트D를 입력으로 설정(각각의 모터 드라이브 모두 LOW 값을 줌→open)
PORTD=0xf0; // 포트D의 상위 4비트 Pull Up(각각의 모터 드라이브 모두 high 값을 줌→브레이크)
delay_ms(3000);
DDRD=0xf0; // 포트D 에 5번,6번,7번,8번 출력 나머지는 입력
PORTD=0x00; // 포트D의 초기값 설정
MARK_COUNT++; // 마크카운터 한번 더
}
if (MARK_COUNT >=9) // 마크체크가 9번 이상이면
{
delay_ms(300);
PORTD=0xf0; // 포트D의 상위 4비트 Pull Up(각각의 모터 드라이브 모두 high값을 줌→브레이크)
DDRD=0x00; // 포트D를 입력으로 설정(각각의 모터 드라이브 모두 LOW값을 줌→open)
PORTB=0x03; // 포트B의 1번, 2번 출력(LED ON)
TIMSK=0x00; // 타이머0 인터럽트 중지
}
}
void main(void) //메인함수 시작
{
PORTA=0x00; // 포트A의 초기값 설정
DDRA=0xf0; // 포트A 의 1번,2번,3번,4번 입력 나머지는 출력
DDRB=0x03; // 포트B 의 1,2번 출력 , 나머지는 입력
PORTB=0x00; // 포트B의 초기값 설정
PORTD=0x00; // 포트D의 초기값 설정
DDRD=0xf0; // 포트D 에 5번,6번,7번,8번 출력 나머지는 입력
TCCR0=0x04; // 프리스케일러
TCNT0=0x00; // TCNT0 리셋
OCR0=0x00; // TCNT0값과 비교하여 OC0 단자에 출력신호를 발생
TCCR1A=0x81; // setup timer1
TCCR1B=0x0c; // 분주비256
TCNT1H=0x00;
TCNT1L=0x00; // 1초마다 타이머1이 동작하게 한다
OCR1AH=0x00;
OCR1AL=0x00; // 듀티비 결정. 업카운트시 0
OCR1BH=0x00;
OCR1BL=0x00; // Timer/Counter 2 initialization
TCCR2=0x66;
TCNT2=0x00; // Clock source: System Clock
OCR2=0x00; // Clock value: Timer 2 Stopped
MCUCR=0x0f; //외부 인터럽트와 칩 설정
GICR=0xD0;
SREG |=0x80; // 전역 인터럽트 인 에이블
#asm("sei") // 인터럽트 실행
MARK_COUNT=0; //초기 MARK_CONT 를 0
right_pass = left_pass = FALSE; // right_pass, left_pass 를 0
r_mark_cnt = l_mark_cnt = 0; // r_mark_cnt, l_mark_cnt를 0
mark_check_time=0; //mark_check_time 을 0
speed_limit = 182; //speed_limit 을 182로
speed_ptr=0; //speed_ptr 을 0 으로
}
- 라인트레이서를 하고 느낀 점
이번에는 마이크로프로세서 I 의 최종 Term project인 라인트레이서를 하게 되었다. 이것은 이제까지 배운 소스를 통해서 소스 작성법을 익히고, 그것을 실용화로 시키는 것 이였다. 처음에 막상 소스를 작성하라고 하였을 때는 막막하기만 하였다. 하지만 처음부터 하나씩 하나씩 익히면서 그간 배운 것을 정리해 보았다. 뚜렷한 답은 나오지는 않았지만, 그래도 틀을 잡을 수 있는 실마리는 제공 되었다. 그것을 통해서 프로그램의 틀을 작성하고, 그 다음 세부적인 소스를 삽입하였다. 인터넷도 검색해보고, 책도 찾아보고, 조교형에게 여쭤보기도 하고, 동원할 수 있는 방법을 모두 동원하였다. 대회 5일 전, 대부분의 소스를 작성하고 실제 코스에서 돌려 보기로 하였다. timer의 숫자를 바꿔가면서 비율을 맞추고 소스의 추가나 삭제를 해 보면서 실제코스에서의 도는 모습을 관찰하였다. 비공식 이였지만, 37초가 나왔고 대회 때에도 그 기록을 기대하면서 대회를 기다렸다. 대회 당 일, 똑같은 소스에 하드웨어적인 요소를 전혀 바꾸지 않고, 코스를 돌아보았다. 하지만, 그 때 당시의 기록에 훨씬 못 미치는 기록이 나왔다. 그 자리에서 할 수 있는 것은 소프트웨어적인 소스를 바꾸는 것 보다는 하드웨어적인 요소를 바꾸는 것이 더 빠르게 느껴졌다. 그래서 그것을 고쳐 보았지만, 잘 되지 않았다. 대회시간이 되어서 완주를 기대하며, 참가를 하였다. 기록은 44초 정도 나왔다. 실망이 컸다. 기록이 너무 뒤쳐졌기 때문이었다. 하지만 완주라도 했기 때문에 다행이라고 생각은 하였다. 라인트레이서가 환경의 영향을 많이 받아서 인지는 몰라도 그것이 다른 조원에게도 영향을 미친 것 같았다. 이번 라인트레이서를 통해서 소스의 사용법을 정확히 알았고, AVR에 대한 공부도 많이 하게 되었다. 조금 더 나은 소스를 짜려면 프로그램을 자기가 직접 작성해보고, 그것이 기계에 어떻게 적용되나 확실히 알아야 자기만의 소스가 나오는 것을 이번 라인트레이서를 통해 느꼈다. 그리고 마지막으로 한 학기동안 수고하신 교수님과 조교형에게 감사하다는 말씀을 전해 드리고 싶다.
  • 가격2,800
  • 페이지수17페이지
  • 등록일2014.01.15
  • 저작시기2014.1
  • 파일형식한글(hwp)
  • 자료번호#902138
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니