회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
15 Software & IDEs HOT어셈블리 프로그래밍에서 질문이 있습니다.1 strongman 1154 2009.08.07
14 Software & IDEs HOT데이터 전송 모듈... 류짜장 1041 2008.12.16
13 Software & IDEs HOT8051 신호등 만들때 헤더파일 문제.1 마모루 1490 2008.11.16
12 Software & IDEs HOT길찾기 알고리즘3 인조사람 1199 2008.10.20
11 Software & IDEs HOTMFC로 길찾기 구현 남뉴 1681 2008.10.05
10 Software & IDEs HOT완전초보입니다. 잘부탁드립니다.4 초보민 993 2008.09.19
9 Software & IDEs HOTMatlab 시리얼통신을 통한 그래프만들기..;;1 GreatSSang 3704 2008.09.16
8 Software & IDEs HOT검색엔진의 문자열 논리연산 구현! 도와주세요 ㅡㅜ1 델리트 1097 2008.08.13
7 Software & IDEs HOT윈도우 상에서 비주얼 2005를 이용한 시리얼 포트 프로그래밍2 .ㅇㅈㅇㅈ 1075 2008.07.04
6 Software & IDEs HOTLCMS, DirectX SDK, Visual Studio 6, Platform SDK 호환성 문제 아크마 2258 2008.04.19
5 Software & IDEs HOT칼씨 사용법은 없나요??2 돌격대장 1080 2008.04.13
4 Software & IDEs HOT비쥬얼비튜디오 20057 あさひ 1005 2008.02.02
3 Software & IDEs HOTapi 관련해서 물어봅니당..ㅠ2 화언 735 2008.02.01
2 Software & IDEs HOT8051도트입니다1 판도라 1094 2008.01.30
1 Software & IDEs HOT나누미질문이요...4 악당 1035 2007.10.12
  • 패배를 극복하는 법을 배워야 한다. 그럴때에 당신의 인격이 향상된다.
    - 닉슨
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.