이번 포스팅에서는 Serial 에 대해 알아보도록 합시다.
흔한 예제로, Arduino IDE 에 시리얼 통신 간단한 예제를 불러와서
동작시켜보면,
IDE의 시리얼 모니터에서 어떤 값이 계속해서 출력되는 것을
확인해 보신 적이 있을 겁니다.
1. Serial 간단 예제 및 시리얼 모니터
에를 들면!
void setup()
{
Serial.begin(9600);
}
void loop()
{
delay(100);
Serial.print('1');
delay(1000);
}
이러한 예제가 있다고 합시다.
시리얼 모니터를 확인해보면,
이런 식으로,
1이 계속해서 찍히는 결과를 얻을 수 있습니다.
즉, 아두이노가 컴퓨터로
계속해서 1이란 데이터를 보내고 있는 상황이죠.
그런데!
도대체 어떻게 보내는거야?
궁금합니다...
확인해 봅시다.
2. ATmega Datasheet 확인해보기
우선, ATmega2560 데이터시트에서 USART 부분을 확인해 보죠.
프레임 포맷에 대한 얘기가 있네요.
- 스타트 비트 : 1 bit
- 데이터 비트 : 5~9 bit
- 패리티 비트 : no, even or odd bit
- 스탑 비트 : 1 or 2 bit
글귀에 30가지 조합을 만들 수 있다고 하는데,
1가지 * 5가지 * 3가지 * 2가지 = 30가지
이렇게 되네요.
(각 스타트/데이터/패리티/스탑 비트 경우의 수를 곱한 겁니다.)
데이터시트를 조금 더 확인해 봅시다.
이런 글귀가 있는데,
여기서 첫 문장을 유의깊게 봅시다.
"프레임은 시작 비트로 시작하고 그 뒤에 최하위 데이터 비트가 온다."
예를 들어, 0000 0001 을 보낸다고 하면,
0000 0001 순서로 보내는 것이 아니라,
1000 0000 순서로 보내는 것 같네요!
Frame Formats 이 잘 나와 있습니다.
Start bit 는 항상 Low,
Stop bit 는 항상 High.
통신 라인에 어떠한 전달도 하지 않을 때, IDLE line은 항상 High
지금까지의 데이터시트 내용을 살짝 기억해 두고,
직접 확인을 해봅시다.
3. 데이터 눈으로 확인해보기
위의 사진과 같이, Communication 쪽 "TX0→1" 이라고 표기된 핀을 측정해보고자 합니다.
참고로, 전 Arduino Mega 2560 보드를 사용하고 있습니다.
회로도를 보면, 이 핀이 ATmega16에 연결이 되고,
ATmega16에서 USB port로 D+, D- 가 연결됩니다.
아두이노 메가에는 ATMEGA2560과 ATMEGA16이 둘 다 들어있습니다.
회로도 확인해 보세요~!!
https://jauroun.tistory.com/44
[Arduino] Arduino Mega 2560 구성 및 회로도
이번 포스팅에서는 아두이노 메가 2560 (Arduino Mega 2560) 구성 및 회로도에서 알아보도록 하겠습니다. 사실, 가장 처음 이 부분을 다뤘어야 하는데, 이제야 포스팅을 하게 되었네요. 상세하게 하나
jauroun.tistory.com
아까 포스팅 첫 부분에 있던 예제로 구동시켜 보겠습니다.
물론, 처음 시리얼 모니터 화면처럼 계속해서 1을 보내주는 동작을 합니다.
이런 파형이 찍혔네요.
음, 1을 보내주니까 0000 0001 이런 식으로 찍혀야 하는거 아닌가?
근데 왜 저딴 데이터를 날리지? 라고 생각할 수 있겠지만,
1의 아스키코드값은 0x31 입니다.
즉, 1이란 데이터를 날리기 위해, 0011 0001 을 보내줘야 하는 것이죠.
데이터시트에서 확인한 것처럼,
Start bit : Low 출력 이후에,
1000 1100 을 보내고,
Stop bit : High 출력하며 마치네요.
패리티 비트는 사용하지 않는 것 같습니다!!!
또, IDLE 에서도 High를 잘 유지하고 있습니다.
근데 왜 1의 아스키코드 값인 0011 0001 로 보내는 것이 아니라,
1000 1100 을 보내나요?
라는 의문이 생기신다면,
앞에서 데이터시트 확인했던 곳으로 다시 돌아가 보세요.
"프레임은 시작 비트로 시작하고 그 뒤에 최하위 데이터 비트가 온다."
라고 했었죠?
즉, 최하위비트부터 보내주고 있는 것입니다.
그렇기 때문에 위의 파형이 나온 것이죠.
4. Baud rate 9600 ???
setup()에서 serial.begin(9600);
이란 부분이 있었습니다.
Baud rate를 직접 설정해주고 있는데,
9600 bps 즉, 9600 bit per second
1초 당 9600비트를 보낸다 라는 의미입니다.
그런데, 우리는 이 예제에서
start bit : 1 bit
data bit : 8 bit
stop bit : 1 bit
총 10 bits를 보내고 있었죠?
1초 : 9600bit = x초 : 10bit
x = 약 0.001041 = 약 1.041ms
로 계산되죠?
즉, 예제에서 '1'을 보내기 위해 약 1.041ms 가 걸린다는 뜻인가?
오실로스코프 파형을 다시 보시기 바랍니다.
좌측 상단에, 제가 시간을 측정해 뒀습니다.
T=1.04mS
보이시죠? 크, 이것이 나의 센스!
아무튼 10bits 송신하는데 1.04ms가 걸렸네요.
만약, baud rate를 바꾸면,
이 시간이 변경될 겁니다.
어때요, 눈으로 직접 확인해보니 이해가 되셨나요?
부디 도움이 되셨길...
그럼 이만! Bye~!
'전기 > Arduino' 카테고리의 다른 글
[Arduino] Can I set ATmega registers in Arduino IDE? (0) | 2023.02.10 |
---|---|
[Arduino] LCD Keypad Shield (1602) #1 연결 방법 및 예제 (0) | 2023.02.08 |
[Arduino] Cable _ USB A type, B type (0) | 2023.02.07 |
[Arduino] Arduino Mega 2560 구성 및 회로도 (0) | 2023.01.29 |
[Arduino] WS2812 5*5 (RGB LED) #3 example operation_2 (0) | 2023.01.29 |