회원가입 ID/PW 찾기
AA

안녕하세요__)

아트마님께서 업로드해주신 코드를 봤습니당.. 혹시 컴파일러가 ICC이신지요 +_+?;;

타이머1오버플로우 핸드러부분입니다.

CLRBIT(PORTG,SV_OUTPUT);

SETBIT(PORTG,SV_OUTPUT);

이부분인데요 CLRBIT, SETBIT가 뭔지를 모르겠습니당 -_-;;


함수 init_servo부분입니다.
 TCCR1B = 0x00; //stop 
Q :초기화단계에서 타이머를 정지시키는건 모든 초기화가 완료되기 전에 인터럽트가 발생하는것을 방지하기 위해서 인가요?
 
 TCNT1H = 0xF4; //setup
 TCNT1L = 0x48;
Q :인터럽트가 발생하는 시간을 설정하는데 있어서 사람들마다 각각 차이가 많이나더군요. 다수의 모터의 제어에 있어서 타이머1이 발생하는 시간은 아무렇게 줘도 상관이 없는건가요?
 
 OCR1AH = 0x0B;
 OCR1AL = 0xB8;
 OCR1BH = 0x0B;
 OCR1BL = 0xB8;
 OCR1CH = 0x0B;
 OCR1CL = 0xB8;
 ICR1H  = 0x0B;
 ICR1L  = 0xB8;
 TCCR1A = 0x00;
Q : 가장 궁금한 부분입니다. 모드형태가 노멀모드인데 왜 OCR과 ICR값을 설정을 해주는지 모르겠습니다;;; 그리고 0BB8이라고 설정하신 부분도 궁금합니다..;;; 

TCCR1B = 0x02; //start Timer

SVMove함수가 하는 일이 무엇인지 모르겠습니다 __);;;;

마지막으로!!!;;;

업로드 해주신 코드를 눈으로 컴파일을 해보았습니다.

1.
void SetSVAngle(1400, 10)
{
    sv_speed = speed;   // 10=10
     sv_target = ang;      //  1400=1400
    
  
   if(speed == SPEED_MAX) 참이 아니므로 점프;;
  {
      sv_angle = ang;
  }
}

2.오버플로발생->오버플로루틴으로 점프!

3.
#pragma interrupt_handler timer1_ovf_isr:15
void timer1_ovf_isr(void)
{
 //TIMER1 has overflowed
 
  TCCR1B = 0x00; //stop
 
// Place your code      

   
  if( (sv_angle + sv_speed) < sv_target)  // 1번. 1400+10 < 1400 이므로 거짓입니다.
      sv_angle += sv_speed;
     else if( (sv_angle - sv_speed) > sv_target)  //2번. 1400-10 > 1400 이므로 역시 거짓입니다.
      sv_angle -= sv_speed;
     else
      sv_angle = sv_target; // 3번. 1400=1400
          
 
  if(sv_flag == 1) // 4번. sv_flag가 0으로 초기화되었기 때문에 점프
     {
      sv_flag = 0;
         CLRBIT(PORTG, SV_OUTPUT);  
  sv_rate = PULS_OFF - sv_angle; // low level time
   
  }
     else            // 5번. sv_flag가 0에서 1로 바뀌고 SETBIT???을 실행합니다.
{
   
  sv_flag = 1;
     SETBIT(PORTG, SV_OUTPUT); 
  sv_rate = sv_angle;   //  1400=1400
  
 }

  
   //TIMER1 has overflowed             // 6번, 비주얼 C로 계산을 해봤습니다. TCNT1의 값 : 64000
  TCNT1H =(BYTE)(((65535 - sv_rate + 1)& 0xff00) >> 8);
  TCNT1L =  (BYTE)(((65535 - sv_rate + 1) & 0x00ff));
  
  TCCR1B = 0x02; //start Timer
 
}

6번과정에서 TCNT1이 카운트를 해서 주기를 만들어내면 그값으로 모터가 움직이게 되는건가요?

제대로 해석한건지 자신이 없네요 ^_^;;;

댓글 2
  • No Profile

    님원하시는대로 iccavr로 올려드렸습니다. ㅋㅋ

    CLRBIT(PORTG,SV_OUTPUT);

    SETBIT(PORTG,SV_OUTPUT);

    이것은 매크로인데

    clrbit는 해당 비트를 0으로 만드는 매크로이며

    setbit는 해당 비트를 1로 만드는 매크로입니다.

    인터넷 검색해보시면 많이 나올듯합니다..

    아마 common.h 헤더파일에 정의해서 에러나지 않나싶습니다.

    직접 정의해서 사용해주세요.
     

  • No Profile
    SVMove

    원하는 각을 원하는 속도로 서보모터를 이동하게 하는 함수입니다.

    요 함수를 불러내주시면 원하는 각도로 이동하게하는데 이때 지정된 속도로 이동합니다.

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
224 자유주제 HOT이제는 가을인가 봅니다4 뺘쑝 12005 2007.09.02
223 마이크로프로세서 HOT레귤레이터에 관해서1 챠리스만 689 2007.09.01
222 자유주제 HOT납땜해본지도 어언4개월;;8 아크마 11853 2007.08.31
221 자유주제 HOT취업3 빛나는 영혼 15761 2007.08.31
마이크로프로세서 HOT코드 분석중에 의문점이 있어서 ^_^;2 챠리스만 845 2007.08.31
219 마이크로프로세서 HOT모터에 대해서 질문잇어요4 sinpk 741 2007.08.30
218 마이크로프로세서 HOT아래 질문에 관한 파일 첨부합니다.2 챠리스만 702 2007.08.30
217 자유주제 HOT아나아나아나ㅠㅠ8 빠라삐리뽀 12646 2007.08.30
216 마이크로프로세서 HOT타이머 우선순위에 관해서1 챠리스만 679 2007.08.29
215 자유주제 HOT속독법2 빛나는 영혼 12075 2007.08.28
214 자유주제 HOT질문!1 정진교 12228 2007.08.28
213 자유주제 HOT오늘부터 다짐한게 있어요..5 아크마 12786 2007.08.28
212 개발용역 HOT[개발 의뢰] 간단한 Reversible Motor 제어기 하늘바라기 6954 2007.08.27
211 자유주제 HOT[개발 의뢰] 간단한 Reversible Motor 제어기 하늘바라기 13883 2007.08.27
210 자유주제 HOT거참..2 빛나는 영혼 13116 2007.08.27
209 마이크로프로세서 HOT라인트레이서를 제작하려고하는데20 따라쟁이 1475 2007.08.26
208 마이크로프로세서 HOT제가 맞게 하고 있는지 궁금해서요...3 아우슈비츠 729 2007.08.25
207 자유주제 HOT코인이 없는데 어떡하면 되나요3 코알라 16634 2007.08.25
206 자유주제 HOT멀티3 빛나는 영혼 12512 2007.08.25
205 자유주제 HOT이제....마지막 프로젝트를....4 빠라삐리뽀 12280 2007.08.23
  • 군자의 사귐은 담담함이 물과 같고, 소인의 사귐은 달콤함이 단술과 같다.
    - 장자
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.