회원가입 ID/PW 찾기

1) 지식 창고는 본인이 작성한 콘텐츠(팁/노하우/리소스/강좌 등)을 무료 혹은 가상화폐인 납포인트를 통해 공유하는 공간입니다.
2) 본인이 작성한 콘텐츠에 대해서만 지식 창고에 등록할 수 있으며, 저작권에 위배되는 콘텐츠는 사전경고 없이 삭제될 수 있습니다.
3) 콘텐츠 구매 및 첨부파일 다운로드는 회원그룹 '연구원' 이상 가능하오니, 경험치를 쌓아 진급한 후에 이용 부탁드립니다.
4) 무료 콘텐츠의 본문은 구매절차 없이 즉시 이용할 수 있으며, 판매 납포인트가 있는 콘텐츠는 구매 후 이용할 수 있습니다.
5) 콘텐츠 판매에 따른 납포인트 수익은 지정한 비율(50%)에 따라 판매자에게 지급하며, 납포인트 수익을 통해 진급을 빨리할 수 있습니다.
6) 구매 후 평가를 하면 구매 납포인트의 20%를 돌려 드립니다.

콘텐츠 수 2,652
판매자 아크마 판매 납포인트 무료 평점 4.1점 / 총 14명 참여

/*

8051을 이용해 IR리모콘으로 RC서보모터 제어

8051을 이용해서 IR리모콘(TV리모콘과 같은)로 RC서보모터를 원격조정하는 것입니다...
만들당시 회로는 너무 간단해서 회로도는 그리지 않았습니다.;;
사진은 차후에 올려드리겠습니다.
작성자 :   김대영(아크마)
 작성일 : 2004년 12월 8일
 VERSION : 0.1

*/

// 컴파일러 : 마이크로비젼 7.0

#include <at89x52.h>
 /*
645
1382
2119
18432
*/

#define TIME_SEC    20000
#define RATE_8952   0.000001085069444
#define PULS_LEFT       900
#define PULS_MID       2000
#define PULS_RIGHT      5000
#define PULS_OFF        18432
#define SPEED_1        1
#define SPEED_2        2
#define SPEED_3       3
#define SPEED_4       4
#define SPEED_5       5
#define SPEED_6       6
#define SPEED_20      20

#define TIMER0_ON  TR0 = 1
#define TIMER0_OFF   TR0 = 0
#define TIMER1_ON       TR1 = 1
#define TIMER1_OFF   TR1 = 0
#define TIMER_IT0_ENABLE ET0 = 1
#define TIMER_IT0_DISALBE ET0 = 0
#define TIMER_IT1_ENABLE ET1 = 1
#define TIMER_IT1_DISABLE ET1 = 0
#define IT_ENABLE  EA = 1
#define IT_DISABLE   EA = 0
#define SERVO_PORT  P2_7
#define TRUE    1
#define FALSE    0  


#define REMOCON_RIGHT  P1_4                         
#define REMOCON_DOWN  P1_3                         
#define REMOCON_STOP  P1_2                         
#define REMOCON_UP   P1_1                         
#define REMOCON_LEFT  P1_0  

#define REMOCON_TEST  P1_5                      

char old_right=1;
char old_down=1;
char old_stop=1;
char old_up=1;
char old_left=1;

typedef unsigned int  word;
typedef unsigned char  byte;
typedef char   bool;

byte flag = 0;
word speed;
word rate= PULS_MID;//PULS_MID;
word angle  = PULS_MID;
word target = PULS_MID;
bool chat_flag = FALSE;

long delay_count =0;
long delay_count_h=0;
int led_num = 0;


void delay_s(unsigned int iSec)
{
 int iCnt;
 
 while(iSec)
 {
  for(iCnt=0; iCnt < TIME_SEC; iCnt++);
         iSec--;
 }
}
  
void delay_t(unsigned int iTime)
{
 while(iTime--);
}
 

//타이머 초기화
bool InitTimer(void)
{    


    TMOD = 0x11;  // TMOD 1(16bit timer/counter) setting - use TH, TL, [hgigh : M1 = 0, M0 = 1]  [low : M1 = 0, M0 = 1]

 TH0 = 0x4C;
   TL0 = 0x00;
 TH1 = 0x4c;
 TL1 = 0x00;
       
    TIMER_IT0_ENABLE;
    TIMER_IT1_ENABLE;
 
 TIMER0_ON;
 IT_ENABLE;
 
    return 1;

}

//인터럽트 초기
bool InitInt()
{

 PX0 = 1 ;  
 IT0 = 1 ; 
 EX0 = 1 ;  
 EX1 = 1 ;
 IT_ENABLE;

}

// 서보 이동속도 설
void SetSpeed(word s)
{
 speed = s;
}
void test()
{
 char cnt;

 for(cnt=0;cnt<3;cnt++)
 {
 REMOCON_TEST = 1;
 delay_s(1);
 REMOCON_TEST = 0;
 delay_s(1);
 }
 }


int main(void)
{

 char flag_h = 0;

 delay_t(1);
    delay_s(1);
      
    InitTimer();
 InitInt();

 SetSpeed(SPEED_3);
    rate = 92;
    
 P0_3 = 0;
    
 while(1)
 {

  chat_flag = TRUE;

  if(old_left!=REMOCON_LEFT)
  {
   old_left = REMOCON_LEFT; 
  /*
   if(REMOCON_LEFT==0)
   {
    if(target-100 >= PULS_LEFT)
     target-=100;  
   }
   */
    if(REMOCON_LEFT==0)
   {
    target=PULS_LEFT;  
   }else
   {
    target  = angle;
    }

  }


  
  if(old_right!=REMOCON_RIGHT)
  {
   old_right = REMOCON_RIGHT;

   if(REMOCON_RIGHT==0)
   {
    target=PULS_RIGHT;  
   }else
   {
    target  = angle;
    }
    }

  
  if(old_up!=REMOCON_UP)
  {
   old_up = REMOCON_UP;

   if(REMOCON_UP==0)
   {
    if(speed < SPEED_20)
    {
     speed+=3;
    }  
   }
  }

  
  if(old_down!=REMOCON_DOWN)
  {
   old_down = REMOCON_DOWN;

   if(REMOCON_DOWN==0)
   {
    if(speed > SPEED_1)
    {
     speed-=3;
    }
   }
  }

 

  delay_count++;
  if(delay_count>40000)
  {
   delay_count = 0;

   switch(led_num)
   {
    case 0:
     P0_0 = 0;
     P0_1 = 1;
     P0_2 = 1;
     break;
    case 1:
     P0_0 = 1;
     P0_1 = 0;
     P0_2 = 1;
     break;
    case 2:
        P0_0 = 1;
     P0_1 = 1;
     P0_2 = 0;
     break;
   }

   led_num++;
   if(led_num > 2)
    led_num = 0;
    }
  
 
    delay_count_h++;
  if(delay_count_h>3000)
  {
   delay_count_h=0;
   if(angle >= PULS_MID-100 && angle <= PULS_MID+100)
     {
    if(flag_h)
     P0_3 = 0;
    else
     P0_3 = 1;
 
      flag_h = ~flag_h;
     }else
     {
       P0_3 = 0;
     }
  }

      /* target = PULS_MID;

     delay_s(15);

     target = PULS_MID + 300;

     delay_s(15);
 
     target = PULS_MID - 500;

      delay_s(15);
  */
 }      
}

 

void T0_int (void) interrupt 1
{

 TIMER0_OFF;         

     if(flag == 0)
     {
      flag = 1;
        SERVO_PORT = 0;
  rate = PULS_OFF - angle; // low level time
     }
    
     else
     {
  flag = 0;
       SERVO_PORT = 1;
  rate = angle;
 }
   
     if(angle + speed < target)
      angle += speed;
     else if(angle - speed > target)
      angle -= speed;
     else
      angle = target;
    
     TH0 = ~(byte)((0xff00 & rate) >> 8);
     TL0 = ~(byte)(0x00ff & rate);

    TIMER0_ON;
}


void ext_int(void) interrupt 0
{
 IT_DISABLE;
/*
 if(chat_flag)
 {//채터링처리
  if(target+100 <= PULS_RIGHT)
   target+=100;
  else
   target = PULS_LEFT;
 }else
     chat_flag = FALSE;
*/
 IT_ENABLE;
 
}



크리에이티브 커먼즈 코리아 저작자표시 Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락/3.0에 따라 이용하실 수 있습니다


모르는 것이 무엇인지 스스로 정리하고 질문하는 습관을 가집시다.
무성의/광범위하거나 직접 해보지 않고 올리는 질문은 서로를 피곤하게 합니다.
질문쪽지는 사절이오니 게시판에 글을 남겨주세요. 그래야 다같이 공유할 수 있으니까요.


profile
깨봉 2008.04.28 17:28

유용한 자료인거 같습니다.

profile
뿡뿡이 2008.05.18 19:30

공부하는데 참고하겠습니다^^; 감사요~

profile
쿠키오 2008.09.12 11:14
좋은정보 감사~
profile
초코파잉 2008.10.10 09:37
좋은 정보 감사합니다..^^
profile
용군 2008.10.17 17:21
좋은 자료 감사 해요~^^
profile
☆☆ 2008.11.21 10:06
좋은자료감사합니다~~
profile
삼제갈 2009.11.13 14:00
좋은 자료 감사합니다. ^^
profile
토마토리눅스 2009.12.16 20:39
왕 초보입니다.
회로구성및 간단한 설명을 부탁드립니다.
profile
그런건가 2010.03.22 21:33
어흑.. 간단한 회로도가 필요합니다..
profile
별별이 2010.06.04 21:21
음...굉장히..기내요ㅎ
profile
달리는찰스 2010.06.15 14:14
주석이 있었으면 더 좋았을텐데ㅡ.ㅜ
좋은 정보 감사합니다ㅋ
profile
아이네이아스 2011.01.09 02:49

좋은 자료 감사합니다..

profile
밥볍 2011.11.07 17:42

좋은 자료 감사해요 ^^

profile
조커-J 2012.07.25 09:54
좋은 자료 감사드립니다~ ^^
search
List of Articles
번호 분류 제목 평점 포인트 판매자 등록일 구매수 조회 수
공지 공공의 목적으로 공유하고자 하는 소프트웨어는 '소프트웨어 자료실'에 업로드를 요청드립니다.
공지 구매후 평점 댓글을 남겨주시면 구매포인트의 20%를 돌려드립니다.
512 드론/로봇/라인트레이서 scount 작동 동영상 [9] 무료 아크마 2007-10-23 0 2922
511 드론/로봇/라인트레이서 scout 로봇 점프 동영상 [15] 무료 아크마 2007-10-23 0 3616
510 드론/로봇/라인트레이서 뱀로봇(snake) 으 자연스럽군.. [21] 무료 아크마 2007-10-23 0 3693
509 드론/로봇/라인트레이서 축구 로봇 [15] 무료 아크마 2007-10-23 0 3879
» 자작품 & 회로도 모음 8051을 이용해 IR리모콘으로 RC서보모터 제어 [14] 무료 아크마 2007-10-23 0 2615
507 마이크로프로세서 전자 주사위 [12] 무료 나니오 2007-10-22 0 5543
506 마이크로프로세서 맥박 센서 [11] 무료 나니오 2007-10-22 0 5062
505 마이크로프로세서 8051 라인트레이서 회로도 [13] 무료 나니오 2007-10-22 0 5545
504 강좌 & 팁 Cuckoo뻐꾸기 발진기 [5] 무료 나니오 2007-10-22 0 2505
503 Allego & OrCAD Power 회로기판 설계의 철칙 10개 항목 [19] 무료 나니오 2007-10-22 0 3251
502 마이크로프로세서 DC모터 제어법 [32] 무료 나니오 2007-10-22 0 9258
501 마이크로프로세서 BIM433 과 8051 회로도 [4] 무료 리숙 2007-10-21 0 7065
500 마이크로프로세서 마이크로프로세서란? [23] 무료 라이언상병 2007-10-20 0 5482
499 마이크로프로세서 ISP(In System Programming) GENDER 회로도입니다. [4] 무료 아크마 2007-10-19 0 3618
498 Analog & Mixed-Signal 설계 PIC 시리즈의 사용법 [12] 무료 하루 2007-10-17 0 2377
497 마이크로프로세서 맨날 구경만 하다가..(AD컨버팅을 위한 Kalman Filter) [43] 무료 commidi 2007-10-15 0 7003
496 펌웨어 & 코딩언어 아스키표(ASCII TABLE) [4] 무료 나니오 2007-10-13 0 1635
495 펌웨어 & 코딩언어 네트워크 기본용어 정리 [5] 무료 나니오 2007-10-13 0 1756
494 드론/로봇/라인트레이서 AVR을 이용한 MB_Linemouse 동영상강좌3 Sensor [27] 무료 아크마 2007-10-13 0 3776
493 머신러닝, AI & 알고리즘 Java를 이용한 정렬 알고리즘(쉘) [1] 무료 나루 2007-10-11 0 3878
  • 사랑은 너무 어려 양심이 무엇인지 모른다. 그러나 양심이 사랑에서 태어나는 것을 누가 모르는가?
    - 셰익스피어
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.