CANSAT COPETITION KOREA

누구나 참여할 수 있는 캔위성 체험·경연대회 홈페이지 입니다.

MEMBER
MEMBER
MEMBER

[답변] 캔위성 아두이노 코드 관련 질문 드립니다. ( MUX 사용 )

페이지 정보

  • 작성자 : 관리자
  • 작성일 : 21-07-16 12:48
  • 댓글 : 0건   조회 : 187회

본문

Serial 통신을 통해서 여러 정보를 받는 방법은 몇 가지가 있을 수 있습니다.


1. MUX 방식 ( Cansat 에서 활용하는 방법 )

  - CPU ==> 모듈로 전송 방법 

    . 공통된 선을 이용하여 CPU 에서 모듈로 데이터 전송

    . CPU 쪽의 데이터 신호가 충분히 가용하여 몇개의 모듈로 데이터 전송 가능

 - 모듈 ==> CPU 로 전송 방법

   . CPU 가 받는 신호가 1개 선에서 받아야 하므로, MUX 를 이용하여 수신할 모듈 선을 선택 후 데이터 획득.

   . 순간적으로 1개의 모듈에서만 데이터를 받을 수 있으며,

   . MUX 가 허용하는 만큼 받을 수 있음 ( CANSAT 에서 MUX 는 8개 포트 중에서 1개의 포트를 선택하고 있음 )


2. 다 채널 방식 ( CPU 가 여러 채널을 이용 가능 할때 사용하는 방식 )

  - 일반적으로 Arduino UNO 는 1개 채널을 가지고 있어서 사용 불가하지만,

  - 아두이노 메가의 경우 4개의 채널을 가지고 있어서 4개 채널을 동시에 사용 가능

 - 단점,

    . 4개가 동시에 데이터를 보내고 있으므로, 

    . 개별적으로 계속해서 수신할 때마다 처리를 해야 하므로

    . CPU 의 부하가 증가에 따라 원하지 않는 결과 (데이터 놓치는 등)가 발생 할 가능성이 증가함.


캔위성 소스 부분에서는 

 1. loop 부분에서 필요한 시점을 돌려가면서 수행하고,

 2. 각각의 통신 모드에 대해서 속도 설정과  MUX 를 이용한 수신할 포트를 설정 하고 있음. 


-- 통신 모드 설정 -- 

void hyRxMode_Set(unsigned char iMode)

{

switch(iMode)

{

case RxMode_CAMERA      :

case RxMode_CAMERA_SIZE :

case RxMode_CAMERA_IMAGE: PL_PORT_SPEED_SET(115200) ; hyRxMode = iMode ; hyRxMode_PortSet(RxMode_CAMERA_PORT) ; break;

case RxMode_IMU         : PL_PORT_SPEED_SET(115200) ; hyRxMode = iMode ; hyRxMode_PortSet(RxMode_IMU_PORT)    ; break;

case RxMode_GPS         : PL_PORT_SPEED_SET(9600)   ; hyRxMode = iMode ; hyRxMode_PortSet(RxMode_GPS_PORT)    ; break;

case RxMode_ATLM        : PL_PORT_SPEED_SET(115200) ; hyRxMode = iMode ; break;

case RxMode_DTLM        : PL_PORT_SPEED_SET(115200) ; hyRxMode = iMode ; break;

   case RxMode_M4          : PL_PORT_SPEED_SET(115200) ; hyRxMode = iMode ; hyRxMode_PortSet(RxMode_M4_PORT)    ; break; 

   case RxMode_M5          : PL_PORT_SPEED_SET(115200) ; hyRxMode = iMode ; hyRxMode_PortSet(RxMode_M5_PORT)    ; break;

   case RxMode_M6          : PL_PORT_SPEED_SET(115200) ; hyRxMode = iMode ; hyRxMode_PortSet(RxMode_M6_PORT)    ; break;

   case RxMode_M7          : PL_PORT_SPEED_SET(115200) ; hyRxMode = iMode ; hyRxMode_PortSet(RxMode_M7_PORT)    ; break;

}

}


-- 수신한 데이터 대기열에서 데이터를 처리하는 상황에서는 대기열에서 읽고 이를 해당 모드에 따라 처리하고 있음. --

switch( hyRxMode )

{

 case RxMode_CAMERA      :  Gs_Tx_QueueIn(b); break;

 case RxMode_CAMERA_SIZE  :  Gs_Tx_QueueIn(b); hyCamera_Receive_Size(b) ;  break;

 case RxMode_CAMERA_IMAGE :  Gs_Tx_QueueIn(b); hyCamera_Receive_Image(b);  break;

 case RxMode_GPS          :  hyGps_RecvByte(b); break;

 case RxMode_IMU          :  hyImu_RecvByte(b); break;

      case RxMode_M4           :  hyMsg_RecvByte(b); break;

      case RxMode_M5           :  hyMsg_RecvByte(b); break;

      case RxMode_M6           :  hyMsg_RecvByte(b); break;

      case RxMode_M7           :  hyMsg_RecvByte(b); break;

default                  :  Gs_Tx_QueueIn(b) ; break;

            }



> > > 안녕하세요. 창작부 참가 학생 김민성입니다. > > 다름이 아니라, 기존 캔위성에서 GPS, IMU, Camera를 serial통신을 이용해서 정보를 받아오는 것으로 이해했는데, > > Serial port 하나에서 어떻게 여러개의 정보를 번갈아가면서 받아올 수 있는지가 궁금합니다. > > 혹시 관련 설명을 들을 수 있을까요? 또 참고 자료가 있을까요? > >

댓글목록

등록된 댓글이 없습니다.

대회소개 경연대회 체험캠프 자료실 커뮤니티 지난대회소개

전체메뉴닫기