회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
26 개발용역 HOT제작의뢰입니다4 wons 4020 2008.11.24
25 개발용역 HOT개발의뢰1 열심이 3639 2008.09.20
24 개발용역 HOT제작의뢰 부탁한 kit 설명( 회로도 첨부) 띠앙 6735 2008.09.11
23 개발용역 HOTUSB용 ISP Programmer용 제작 의뢰4 띠앙 4100 2008.09.01
22 개발용역 HOT풍력을 이용한 빨래 건조대 똘이 4726 2008.07.31
21 개발용역 HOT물체감지 선별 제작의뢰 입니다. 진도령 3907 2008.06.16
20 개발용역 HOT윈도우 디바이스 드라이버 강의건3 빛나는 영혼 4773 2008.05.21
19 개발용역 HOTMCU 개발 마니아 10907 2008.05.16
18 개발용역 HOTRF를 이용한 도어락을 제작3 프리스타일 4394 2008.03.30
17 개발용역 HOT마이컴 동영상 강좌(임베디드)6 마이컴넷 7290 2008.03.26
16 개발용역 HOT저렴하게 개발해드립니다. 한올 4725 2008.01.08
15 개발용역 HOTled마이컴 의뢰드립니다 완전문외한이라 ....1 차예준 4705 2007.12.30
14 개발용역 HOT간단한 10진 카운터 PCB 제작의뢰요1 대구동이 7895 2007.12.02
13 개발용역 HOT로봇 mcu개발 의뢰1 정모양ㅋㅋ 4383 2007.11.21
12 개발용역 HOT온도센서 질문입니다.1 Genesis 4439 2007.11.19
11 개발용역 HOT엔지니어 구함 열씨미 아버지 4575 2007.11.07
10 개발용역 HOT디지털도어락 질문입니다.5 얼룩이리 5209 2007.11.06
9 개발용역 HOTLED 제어 가능 하신분..2 shin 4613 2007.10.29
8 개발용역 HOT기기제작 가능하신분??1 AK 4599 2007.10.25
7 개발용역 HOTRGB 컨트롤러 문의드립니다..3 섬세한샛다 5290 2007.10.12
Prev 1 ... 3 4 5 6 7 8 9 10 11 12 Next
  • 등불은 바람 앞에 흔들리는 인간의 마음과 같다.
    - 팔만대장경
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.