하나의 UART 포트에 추가적인 통신 모듈을 통해 서로 통신을 해야하는 경우가 있습니다.
다음의 경우에는 UART포트에 USB와 블루투스를 함께 통신해야하는 경우입니다. 그런데 문제는 다음의 연결을 모두 만족해야 합니다.
- UART <-> USB
- UART <-> 블루투스
- USB <-> 블루투스
스위치를 달거나 모듈을 달았다 뺏다 할 수 있으면 좋겠지만, 그럴 수 없는 경우입니다.
이런 경우에 UART를 74HC4066 IC를 사용하여 스위치를 쓰듯이 사용할 수 있습니다.
4066 부분의 회로만 가져온 모습입니다. (실제 적용한 모델은 74HC4066PW 입니다.)
- UART_CTR_A0
- UART_CTR_A1
- UART_CTR_B0
- UART_CTR_B1
네개의 핀을 제어해서 MCU의 TX와 RX를 USB와 BT모듈에 선택적으로 연결하게 됩니다.
아두이노용의 코드는 다음과 같습니다.
#define UART_CTR_A0 A0
#define UART_CTR_A1 A1
#define UART_CTR_B0 A4
#define UART_CTR_B1 A5
void UART_MODE_INIT()
{
pinMode(UART_CTR_A0, OUTPUT);
pinMode(UART_CTR_A1, OUTPUT);
pinMode(UART_CTR_B0, OUTPUT);
pinMode(UART_CTR_B1, OUTPUT);
}
void MCU_USB_MODE_SET()
{
digitalWrite(UART_CTR_A0, HIGH);
digitalWrite(UART_CTR_A1, LOW);
digitalWrite(UART_CTR_B0, LOW);
digitalWrite(UART_CTR_B1, LOW);
}
void MCU_BT_MODE_SET()
{
digitalWrite(UART_CTR_A0, LOW);
digitalWrite(UART_CTR_A1, LOW);
digitalWrite(UART_CTR_B0, HIGH);
digitalWrite(UART_CTR_B1, LOW);
}
void BT_USB_MODE_SET()
{
digitalWrite(UART_CTR_A0, LOW);
digitalWrite(UART_CTR_A1, HIGH);
digitalWrite(UART_CTR_B0, LOW);
digitalWrite(UART_CTR_B1, HIGH);
}
보시는대로 세개의 UART 방식을 모두 선택가능합니다.
대신에 4개의 I/O 핀을 사용한다는 문제점이 발생힙니다.
'Study > Coding' 카테고리의 다른 글
nRF52DK 보드를 디버거로 사용하기 (0) | 2020.12.21 |
---|---|
ITS-1500S를 사용하여 핀하나로 조이스틱 버튼 구성하기 (0) | 2020.12.21 |
8MHz 이하의 아두이노 보드에서 WS2812(네오픽셀) 사용하기 (0) | 2020.12.18 |
여러 아날로그 센서값 출력 (1) | 2016.01.19 |
ADC 최소값 최대값 출력 (0) | 2016.01.19 |