답변:
Serial.begin(9600)
실제로 아무것도 인쇄하지 않습니다. 이를 위해 Serial.print("Hello world!")
"Hello world!"라는 텍스트를 인쇄 할 수 있습니다. 시리얼 콘솔에. 오히려 초당 9600 비트로 직렬 연결을 초기화합니다.
알기 쉬운 데이터를 얻으려면 직렬 연결 (예 : Arduino와 컴퓨터)의 양쪽 모두 동일한 속도의 직렬 연결을 사용하도록 설정해야합니다. 두 시스템에서 속도가 생각하는 것 사이에 불일치가 있으면 데이터가 왜곡됩니다.
초당 9600 비트가 Arduino의 기본값이며 대부분의 사용자에게 완벽하게 적합하지만 다른 속도로 변경할 수 있습니다 Serial.begin(57600)
. Arduino가 초당 57600 비트로 전송하도록 설정합니다. 전송되는 데이터를 보려면 컴퓨터에서 사용중인 소프트웨어 (예 : Arduino IDE의 직렬 모니터)를 동일한 속도로 설정해야합니다.
Serial.begin(0)
하면 Arduino에게 초당 0 비트의 직렬 통신을해야합니다. 예상 한대로 Arduino는 데이터를 전혀 보내지 않습니다. Serial.begin(4000)
Arduino가 초당 4000 비트로 데이터를 전송하게합니다. 이것은 비표준이지만 그렇지 않으면 괜찮습니다.
Serial.begin(300)
:) Arduino가 데이터를 더 느리게 보냅니다. 57600으로 늘리면 데이터가 더 빨리 전송됩니다. 송신 시스템과 수신 시스템 모두 사용 속도에 동의해야합니다. Arduino 직렬 모니터 창과 같은 컴퓨터의 직렬 프로그램을 사용하면 컴퓨터가 데이터를받는 속도를 설정할 수 있지만 공통으로 만 선택할 수 있습니다 속도 : 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600 및 11520 비트 / 초 4000과 같은 다른 속도는 입력 할 수 없습니다. 9600이 일반적입니다.
Baud and BPS are two different things... can't find the link I was looking for now.
-여기에 하나의 설명이 있습니다 : 부록 C : "baud"vs. "bps"
그림은 1000 단어의 가치가 있으므로 (컴퓨터로 작업하는 경우 1024 단어) 그래서 일부 그림을 게시 할 것입니다 ...
9600 보드에서 "Fab"을 보내도록 Uno를 설정하고 결과를 로직 분석기에서 캡처했습니다.
빨간색으로 표시된 부분은 바이트 사이의 "유휴"기간입니다.
위의 그래픽에서 Tx (전송) 데이터 라인은 문자의 시작 (바이트)을 나타 내기 위해 낮게 떨어질 때까지 일반적으로 높습니다 (1). 이것은 시작 비트 입니다. 그런 다음 8 개의 데이터 비트 (흰색 점으로 표시)가 전송 속도 (초당 9600 개 샘플)로 나타납니다. 그 후 라인이 다시 높아집니다. 정지 비트 (빨간색 부분)입니다. 그런 다음 다음 문자의 시작 비트 등이 표시됩니다. "정지"부분은 무한정 길 수 있지만, 적어도 하나의 비트 길이 여야합니다.
첫 번째 문자 (문자 "F"또는 0x46 또는 0b01000110)에 대한 자세한 내용은 여기에서 볼 수 있습니다.
A-데이터 없음 (Tx가 높음)
B- "시작 비트" 수신자에게 문자 (바이트)가 전송을 시작한다고 알리기 위해 행이 줄어 듭니다. 수신기는 라인을 샘플링하기 전에 1.5 클럭 시간을 기다립니다.
C-첫 문자가 도착합니다 (문자 "F"또는 0x46 또는 0b01000110). 클럭 비트가 없으므로 들어오는 데이터는 단순히 전송 속도로 샘플링됩니다. SPI 통신과 달리 데이터는 가장 중요도가 낮은 비트부터 먼저 도착합니다 (바이트 당 8 비트를 보내지 않는 경우). 따라서 우리는 01000110이 아닌 01100010을 봅니다.
D-정지 비트 이 바이트의 끝과 다음 바이트의 시작을 구별 할 수 있도록 항상 높습니다. 시작 비트는 0이고 정지 비트는 1이므로 항상 한 바이트에서 다음 바이트로 명확하게 전환됩니다.
E-다음 문자의 시작 비트
로직 분석기 캡처에서 T1 - T2
0.1041667 ms이며 1/9600입니다.
1 / 9600 = 0.00010416666 seconds
따라서 9600의 속도는 초당 비트 수를 제공 하고 그 반대는 비트 사이 의 시간 간격 입니다.
직렬 통신은 SPI 또는 I2C 및 기타와 달리 자체 클록이 아니므로 송신자와 수신자 모두 클록 속도에 동의해야합니다.
하드웨어가 직렬 클록을 얻기 위해 시스템 클록을 나누어야하고 분할이 항상 정확한 것은 아니기 때문에 Arduino의 클록 속도는 정확하지 않습니다. 거의 항상 오류가 있으며, 그 양은 데이터 시트에 나와 있습니다 (Uno와 같은 16 MHz 시스템 클록에 대해 인용 된 그림).
데이터 비트 수를 다양하게 지정할 수 있으며 그 중 8 개를 전송할 필요가 없으며 실제로 5 ~ 9 비트를 보낼 수 있습니다.
선택적으로 데이터 비트 다음에 패리티 비트가 전송 될 수 있습니다 .
이를 통해 데이터가 올바르게 도착했는지 여부를 수신자가 감지 할 수 있습니다.
패리티 비트는 정지 비트보다 먼저 전송됩니다.
9 개의 데이터 비트 (SeaTalk 프로토콜에서 사용)의 경우 패리티 비트는 9 번째 데이터 비트로 용도 변경됩니다. 따라서 9 개의 데이터 비트와 패리티 비트를 모두 가질 수는 없습니다.
두 개의 정지 비트를 가질 수도 있습니다. 이것은 기본적으로 바이트 사이의 시간을 연장시킵니다. "구시대"에서 이것은 느린 전자 기계 장비가 이전 바이트를 처리 할 수 있도록 (예를 들어, 인쇄하기 위해)되었다.
스트림 중간에서 직렬 데이터를 청취하기 시작하면 스트림 중간의 0 비트가 시작 비트로 해석되어 수신자가 그 이후의 모든 내용을 잘못 해석 할 수 있습니다.
이를 복구하는 유일한 방법은 때때로 발생할 수없는 충분한 간격 (예 : 10 비트 길이)을 두는 것입니다.
여기에 표시된 비트 (논리 수준)는 반전되지 않습니다. 즉, 1 비트는 HIGH이고 0 비트는 LOW입니다. RS232 장비를 사용하는 경우 1 비트의 경우 -12V, 0 비트의 경우 + 12V와 같은 신호를 보낼 수 있습니다. 1은 전압 방식으로 0보다 작기 때문에 반전됩니다.
이러한 장치가있는 경우 전압 변환 및 논리 반전을 수행해야합니다. MAX232 와 같은 칩 은 모두 당신을 위해 할 것입니다. 또한 몇 가지 사용자 제공 커패시터를 사용하여 내부적으로 장비를 생성함으로써 이러한 장비를 구동하는 데 필요한 -12V를 제공 할 수 있습니다.
시작 비트 1 개, 데이터 비트 8 개 및 정지 비트 1 개로 총 10 비트가 있으므로 빠른 경험을 위해 비트 전송률을 10으로 나누어 초당 전송 가능한 바이트 수를 계산할 수 있습니다. .
예 : 9600 BPS에서는 초당 960 바이트를 보낼 수 있습니다.
재현 할 코드 :
void setup()
{
Serial.begin(9600);
Serial.print("Fab");
}
void loop ()
{
}
TLDR; 직렬 통신 포트를 초기화하고 전송 속도를 설정합니다. 통신중인 장치 (또는 Arduino IDE Serial Monitor)가 일치하는 전송 속도로 설정되어 있어야합니다. 포트를 초기화하면 문자를 보내거나받을 수 있습니다. 아두 이노 시리얼 레퍼런스
컴퓨터 시스템 내부에서 작동하는 프로그램을 지정합니다. 숫자는 속도를 지정합니다. Serial.print는 표시 할 텍스트를 지정합니다.