회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
148 마이크로프로세서 HOT8051키트로 정확한시간을 만들려고합니다.2 가진e 884 2007.11.10
147 마이크로프로세서 HOTisp와 jtag차이점점..4 볼매(승훈) 2142 2007.11.07
146 마이크로프로세서 HOTADD Component 문의2 shin 929 2007.11.07
145 마이크로프로세서 HOT얼마전에 9핀용 부트로더를 구입하여 로더기를 제작하려하는데요...1 악당 868 2007.11.05
144 마이크로프로세서 HOT스테핑모터에 관하여8 あさひ 1729 2007.11.05
143 마이크로프로세서 HOT갑자기 물음표가 떠오릅니다8 고문관 629 2007.11.04
142 마이크로프로세서 HOTat89c2051에 대해서 질문이요^^3 머스트비 841 2007.10.30
141 마이크로프로세서 HOTAT89c51에 PWM...5 shin 1019 2007.10.29
140 마이크로프로세서 HOT아트멜 AT89C51 핀 기능....5 shin 987 2007.10.29
139 마이크로프로세서 HOT그래픽 LCD 제어가 전혀 안되네요..ㅜㅠ5 임낙 1483 2007.10.27
138 마이크로프로세서 HOT8051 질문7 shin 616 2007.10.27
137 마이크로프로세서 HOT용어 설명좀 해주세요 ㅜㅜ 무슨뜻인지 모르겠네요2 sinpk 1139 2007.10.23
136 마이크로프로세서 HOT아~~ 이놈의 서보모터6 고문관 796 2007.10.23
마이크로프로세서 HOT소스 수정중인데 잘 모르겠어요...2 남뎅이 818 2007.10.21
134 마이크로프로세서 HOT궁금한것이 있어서 질문올립니다.4 마그마 753 2007.10.16
133 마이크로프로세서 HOTkeil c 컴파일 에러1 초보 컨트롤 1506 2007.10.15
132 마이크로프로세서 HOT8051 질문입니다...1 무한질주 600 2007.10.14
131 마이크로프로세서 HOTRS232 / RS482 / RS485에 대해서64 아크마여친 12151 2007.10.13
130 마이크로프로세서 HOTled제어 .....5 고문관 737 2007.10.12
129 마이크로프로세서 HOT전원부에 관해서.4 챠리스만 602 2007.10.12
Prev 1 ... 38 39 40 41 42 43 44 45 46 47 ... 50 Next
  • 일은 인간생활의 피할 수 없는 조건이며, 인간 복지의 참된 근본이다.
    - 톨스토이
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.