회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
15 중고장터 HOTATS-20.000MHz 50개 빅세일 4747 2007.10.23
14 중고장터 HOTatmega128 pcb 팝니다. 보싸먹자 7417 2007.10.23
13 중고장터 HOT사진과 같은 모양의 서보혼 구입 원합니다.4 챠리스만 5227 2007.10.18
12 중고장터 HOT[판매] RC서보모터 RC-31112 아크마 5181 2007.10.09
11 중고장터 HOT[판매] SRF 04 초음파센서3 아크마 5241 2007.10.09
10 중고장터 HOT[판매] 5V DC어댑터 아크마 5016 2007.10.08
9 중고장터 HOT[전공서적] 회로이론 ALEXANDER , SADIKU4 아크마 6372 2007.10.08
8 중고장터 HOT라인트레이서 구합니다13 곰팅이 4934 2007.10.08
7 중고장터 HOT0.68옴 저항 1W, 2W 판매2 아크마 3939 2007.10.03
6 중고장터 HOT스테핑 모터 2개 파실분 댓글 달아주세요2 뺘쑝 3428 2007.10.02
5 중고장터 HOT라인트레이서4 날라 3514 2007.09.12
4 중고장터 HOT[판매]오실로스코프 100Mhz3 아크마 4659 2007.06.21
3 중고장터 HOT흥창 100Mhz 5510 오실로 스코프5 살러만 6236 2007.06.13
2 중고장터 HOT89c51 파라요!!11 아크마 4413 2007.05.28
1 중고장터 HOT중고 장터가 문을 열었습니다. 아크마 4399 2007.05.20
  • 벗을 사귐에는 과하여 넘치지 말지니 넘치면 아첨하는 자가 생기리라.
    - 채근담
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.