회원가입 ID/PW 찾기
AA

이게 원래 원격도어락인데 이걸 바꾸려고 해요.

 

수신부에 안쓰는 포트에다가 서보모터를 3개 더 연결해서 4개까지 제어를 하려고 하거든요.

 

그래서 송신부에 있는 리모콘으로

1번 - 1번모터 열기    

2번 - 1번모터 닫기

 

3번 - 2번모터 열기

4번 - 2번모터 닫기

 

5번 - 3번모터 열기

6번 - 3번모터 닫기

 

7번 - 4번모터 열기

8번 - 4번모터 닫기

 

이렇게 하려고 하거든요.

 

여기서  어떻게 해야할지 모르겠어요.

수정본
================================================
#include <io51.h>  


/* Port 3 */
//#define SIG_1        P3 |= 0x04
//#define SIG_0        P3 &= ~0x04


 ///////////////////////////////////////////////////
#define SIG1_1        P3 |= 0x04
#define SIG1_0        P3 &= ~0x04

#define SIG2_1        P3 |= 0x10
#define SIG2_0        P3 &= ~0x10

#define SIG3_1        P3 |= 0x40
#define SIG3_0        P3 &= ~0x40

#define SIG4_1        P3 |= 0x80
#define SIG4_0        P3 &= ~0x80
 ///////////////////////////////////////////////////

 

#define BUZ_ON      P3 &= ~0x08
#define BUZ_OFF     P3 |= 0x08


unsigned char rx_dt;

/* 서보모터 관련 */
//90도 , 2.3msec 가 Hi 이면 90도 ,  100usec * 23 = 2.3usec  , 23이어야 하나 24가 더 맞다.
//90도는 잠금 모드
unsigned char ANG = 24;
unsigned char usec_100_serv , pulse = 0;  
// 1일 경우만 서모모터 구동
unsigned char serv_flag = 1;
unsigned int serv_cnt = 0; 
/******************/

//부져 관련
unsigned char BUZ_FLAG = 0; //부저 플레그 값이 1 이면 부져가 울린다.
unsigned int buz_cnt = 0;
//

//led 디스플레이 관련
 unsigned int usec_100_led ;
 unsigned char led_data = 0x01;
//


void inter_init(void)
{

 // 타이머1 은 시리얼통신 (모드1)

 TMOD = 0x22; /* 타이머1모드2 (통신에서 사용) , 타이머0모드2 */
 TR1 = 1;

 /* Xtal 이 20M 일때 20M / 12분주 = 0.6usec */
 /* 0x100 - 167 = 89 , 167 * 0.6usec = 100.2usec 인터럽트 설정 */
 TH0 = 89;
 TL0 = 89; 
 TR0 = 1;
 ET0 = 1;

 /* 보레이트 2370  */
 TH1 = 0xEA;

 ES = 0; // 시리얼 포트 인터럽트 Disable
 
 PS = 1; // 시리얼 통신 인터럽트 우선순위를 높게 잡는다.

 EA = 1;


 PCON = 0; // SMOD = 0
 SCON = 0x50; // 비동기 통신모드1 10비트 프레임 , 스타트비트(1) + 데이타 (8) + 스돕 (1)
}

 

 

 

// 서보 모터 관련
// _ANG 값이 6이면 -90도 , 24이면 +90도
void servo_motor(unsigned char _ANG, unsigned char _SIG)
{
 /*
 전체 주기를 4msec 로 하고
 
 Hi 상태가 2.3msec 일때 +90도
 Hi 상태가 0.7msec 일때 -90도
*/

  switch (pulse)
  {
   /* 2.3msec 또는 0.7msec 후에 해당포트에 0 을 만들어라. */
   case 0:
   if (usec_100_serv >= _ANG)
      {
      //SIG_0; //서모모터 SIG에 Low


 ///////////////////////////////////////////////////
      switch (_SIG)
      {
       case 1:
   SIG1_0;     
        beak;
       case 2:
   SIG2_0;     
        beak;
       case 3:
   SIG3_0;     
        beak;
       case 4:
   SIG4_0;     
        beak;
      }
 ///////////////////////////////////////////////////

 
      pulse = 1;   
      }     

   /* 4msec 이후에 해당포트에 1 을 만들어라 */
   case 1:
   if (usec_100_serv >= 40)
      {
      //SIG_1; //서모모터 SIG에 hi
      pulse = 0; 
      usec_100_serv = 0;   
      }       
  }
 //서보 모터 관련 [끝]
}


 

 

 

  /*100.2uSec interrupt rut*/
interrupt [0x0B] void T0_int(void)
{

 /* 서보 모터 관련 */
 usec_100_serv ++;    
 if (serv_flag == 1)
 {
 serv_cnt ++;
 if (serv_cnt >= 20000) {serv_flag = 0; serv_cnt = 0;} // 2초 이상 돌리면 자동으로 서모모터 구동을 멈춘다.
 servo_motor(ANG); 
 }
 /*****************/

 

//부저 울리기  
 if (BUZ_FLAG == 1) 
 {
  BUZ_ON;
  buz_cnt ++;
  if (buz_cnt >= 1500) // 150msec 정도만 울리게 한다.
  {BUZ_OFF; buz_cnt = 0; BUZ_FLAG = 0;}
 }  
 //


 //LED 디스플레이 하기
 usec_100_led ++;
 if (usec_100_led >= 5000) // 0.5초
 {
  usec_100_led = 0;
         
  P1 |= 0xff; // LED 8개 모두 OFF
  //led_data 는 0000 0001 , 0000 0010 , 0000 0100 , 0000 1000 이렇게 된다.
  P1 &= ~led_data;
  led_data <<= 1;
  if (led_data == 0) led_data = 0x01;
  
 }
 //

}  

 

 

void port_init(void)
{
 
}

void main(void)
{
 unsigned char key[4] = {0xff,0xff,0xff,0xff} , key_cnt = 0 , key_4bit_flag = 0;
 unsigned char rx_dt;

 port_init();
 inter_init();

 while(1)
    {
   while(1)
      if (RI == 1) {rx_dt = SBUF; RI = 0;  break;}

 

      BUZ_FLAG = 1; //부져 울려준다. 부져 울리고 자동으로 0 이 된다.
     
    
   
       //1개의 키(암호)를 입력 받고 분석
       if (key_4bit_flag == 1)  
       {               
      
          key[key_cnt] = rx_dt;    
          key_cnt ++;
    
          
        if (key_cnt >= 4) //분석해본다. 4자리 숫자를...
         {
          //모두 맞다면 문을 열어준다.
          if ((key[0] == '1') )
           {
             {key_4bit_flag = 0; serv_flag = 1;serv_cnt=0; ANG = 6; SIG=1}    // ANG 가 6 이면 -90 도 이고 문을 열어준다.
           }

 ///////////////////////////////////////////////////
   else if ((key[0] == '2'))
   {

   }
   else if ((key[0] == '3'))
   {

          } 
          else if ((key[0] == '4'))
          {
         
       }
          else if ((key[0] == '5'))
   {
  
   }
     else if ((key[0] == '6'))
   {
  
   }
     else if ((key[0] == '7'))
   {

   }


   else if ((key[0] == '8'))
   {

   } 
 ///////////////////////////////////////////////////


   else //틀렸다. 도둑놈인가!
           {
 
           
            key_4bit_flag = 0;
           
           }
         
         }
       }     
       //4개의 키(암호)를 입력 받고 분석[끝]


    //ENT 키 눌리면 처리 => 문이 열리면 닫고, 닫혀 있다면 암호 입력 받는다.
       if (rx_dt == 'E') // ENT 키 입력 받았다면
       {                     
        

         //문이 잠겨 있다면 암호를 받는다. 24 이면 +90도
         if (ANG == 24) {key_4bit_flag = 1; key_cnt=0; }
         else
         //문이 열려 있다면 무조껀 잠근다. 6 은 -90도
         if (ANG == 6) {serv_flag = 1; serv_cnt=0; ANG = 24;}
       }  
       //

 

      } //while (1)

}


==============================================================
첨부되어 있는 자료는 원래 코딩되어있던 수신부 자료에요~~

댓글 2
  • No Profile
    수신부에 안쓰는 포트에다가 서보모터를 3개 더 연결해서

    이거 구현하시려면 서보모터 타이머 부분에서 서보모터를 4개 돌리도록 프로그램을 바꾸면 됩니다.

    의외로 어려운 작업일지도 모릅니다만...홈피에 비슷한 자료가 많이 올라온듯
  • No Profile

    저도 리모콘 공부하는데요 잘 이해를 못해 헤메고 있습니다
    ㅠㅠ

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

search
번호 분류 제목 글쓴이 조회 수 날짜
404 자유주제 HOT처음 뵙겠습니다..3 nazire 4657 2007.10.22
403 자유주제 HOT앗 버그다.. 버그다.. 맛도좋고 몸에 좋은 ...4 빛나는 영혼 4900 2007.10.21
402 자유주제 HOT그동안 잘지내셨는지요 ^^6 뺘쑝 4595 2007.10.21
마이크로프로세서 HOT소스 수정중인데 잘 모르겠어요...2 남뎅이 814 2007.10.21
400 자유주제 HOT하악하악5 아크마 8918 2007.10.21
399 자유주제 HOT인공지능공부하려는데...2 페르세우스 5611 2007.10.20
398 자유주제 HOT전 언제 1등하나요?4 라이언상병 5687 2007.10.20
397 자유주제 HOT와우 속도가 너무 빨라졌네요...ㅎㅎ1 야바 6365 2007.10.19
396 자유주제 HOT책추천좀..도트매트릭스1 홍길동 5865 2007.10.19
395 자유주제 HOT책 추천하나5 빛나는 영혼 6001 2007.10.19
394 자유주제 HOT새사람입니다...(..)4 MATY 6119 2007.10.18
393 중고장터 HOT사진과 같은 모양의 서보혼 구입 원합니다.4 챠리스만 5209 2007.10.18
392 자유주제 HOTㅌ_ㅌ 오늘도 ....6 빠라삐리뽀 6535 2007.10.18
391 자유주제 HOT배터리문제-0-;;4 챠리스만 6462 2007.10.17
390 자유주제 HOT모션컨트롤 전시회..3 commidi 6686 2007.10.17
389 자유주제 HOT아크마님~`3 고문관 6701 2007.10.17
388 자유주제 HOT오랜만에 와보네요^^;;2 바보바다 6629 2007.10.17
387 자유주제 HOTㅋㅋㅋㅋ2 빠라삐리뽀 6853 2007.10.17
386 마이크로프로세서 HOT궁금한것이 있어서 질문올립니다.4 마그마 745 2007.10.16
385 마이크로프로세서 HOTkeil c 컴파일 에러1 초보 컨트롤 1492 2007.10.15
  • 상대를 공경하고 남에게 양보하는 정신을 백성에게 기르게 하면 서로 다투는 것은 없어지게 되고 세상은 저절로 다스려지게 된다.
    - 근사록
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.