회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
36 드론/로봇/라인트레이서 HOT악마라인트레이서 제작관련 다양한 질문;1 youngbboy 1029 2007.11.27
35 드론/로봇/라인트레이서 HOT악마라인트레이서 부품도 질문입니다2 youngbboy 1251 2007.11.24
34 전기전자 아무거나 HOT진로 방향 조언좀.. 부탁드립니다^^10 뱀뷀뷀 998 2007.11.23
33 전기전자 아무거나 HOT적외선 센서 op4213 mexico 에 관해서 입니다...1 러셀 1182 2007.11.21
32 전기전자 아무거나 HOTkeil컴파일러3 얼간이 839 2007.11.20
31 전기전자 아무거나 HOT공학용어 뜻풀이 ㅡ.,ㅡ;;9 챠리스만 1136 2007.11.19
30 전기전자 아무거나 HOT밧데리추천쫌 해주세요4 あさひ 853 2007.11.17
29 전기전자 아무거나 HOT알람시계4 짐 정주스 978 2007.11.17
28 전기전자 아무거나 HOTLCD에ADC출력이 잘안되요 ㅠㅠㅠ4 맹우기 1414 2007.11.17
27 전기전자 아무거나 HOTADC 0804 문의...4 shin 991 2007.11.16
26 전기전자 아무거나 HOTPads 자료 올리려구 했습니다만..6 하루 832 2007.11.13
25 전기전자 아무거나 HOTAC Termination 에서 좀 아시는 분...ㅠㅠ1 하루 791 2007.11.13
24 전기전자 아무거나 HOT롬 라이터기 사용법 문의.,..6 shin 1266 2007.11.09
23 전기전자 아무거나 HOT음성칩관련 질문1 빛나는 영혼 1118 2007.11.09
22 전기전자 아무거나 HOTDMX 5121 날뽕녀 1054 2007.11.09
21 전기전자 아무거나 HOT라인트레이서에 신호등을 추가할려고합니다.5 맥커터 1361 2007.11.05
20 전기전자 아무거나 HOT파워에 대한 질문7 빛나는 영혼 1073 2007.11.05
19 전기전자 아무거나 HOTpads관련한2 똥글뱅이 873 2007.11.01
18 전기전자 아무거나 HOT구리판? 알루미늄판?7 챠리스만 1625 2007.10.30
17 전기전자 아무거나 HOTLED 저항 문의..17 shin 1692 2007.10.28
  • 지식보다는 상상력이 더욱 중요하다.
    - 알베르트 아인슈타인
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.