[답변] 캔위성 아두이노 코드 관련 질문 드립니다. ( MUX 사용 )
페이지 정보
본문
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 하나에서 어떻게 여러개의 정보를 번갈아가면서 받아올 수 있는지가 궁금합니다. > > 혹시 관련 설명을 들을 수 있을까요? 또 참고 자료가 있을까요? > >
- 이전글캔위성 아두이노 코드 관련 질문 드립니다. 21.07.13
- 다음글경연대회 관련 질문을 드립니다. 21.07.09
댓글목록
등록된 댓글이 없습니다.