회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
6 자유주제 HOT무심코 후원하기를 눌렀다가20 나야소달ㅋ 30674 2007.04.22
5 자유주제 HOT홈페이지 업데이트가 거의 끝났네요..2 아크마 35928 2007.04.20
4 자유주제 HOT홈페이지 로고입니다. 투표해주세요 ㅋ14 보해소주 40293 2007.04.16
3 자유주제 HOT컴박스의 무궁한 발전이 있으시길..18 서주형 45085 2007.04.13
2 자유주제 HOT안녕하세요~9 화언 30840 2007.04.11
1 자유주제 HOT안녕하세요8 아크마 60291 2007.04.10
  • 인간은 입이 하나 귀가 둘이 있다. 이는 말하기보다 듣기를 두 배 더하라는 뜻이다.
    - 탈무드
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.