많은 샘플 코드에서 온라인 사람들 Serial.begin(9600)
은 설정 블록에 줄 을 추가합니다 .
Serial.begin()
공식 문서에서 무엇을 찾을 때 초당 비트 데이터 전송을 제어한다고 말합니다.
그렇다면 가장 큰 문제는 가장 높은 전송 속도 인 28800을 사용하지 않는 이유입니다. 사람들은 왜 9600에 정착합니까? 여기서 제한은 무엇입니까?
많은 샘플 코드에서 온라인 사람들 Serial.begin(9600)
은 설정 블록에 줄 을 추가합니다 .
Serial.begin()
공식 문서에서 무엇을 찾을 때 초당 비트 데이터 전송을 제어한다고 말합니다.
그렇다면 가장 큰 문제는 가장 높은 전송 속도 인 28800을 사용하지 않는 이유입니다. 사람들은 왜 9600에 정착합니까? 여기서 제한은 무엇입니까?
답변:
사람들은 왜 정착합니까?
사람들은 그것이 충분히 빠르기 때문에 정착합니다. 가장 일반적인 용도는 단지 디버깅을 위해 터미널에 일부 내용을 인쇄하는 것입니다. 9600 보드는 초당 960 자 또는 초당 12 x 80 자입니다. 얼마나 빨리 읽을 수 있습니까? :)
프로그램이 대량 데이터 전송을 위해 직렬 포트를 사용하는 경우 정산하지 않도록 선택합니다.
한계는 무엇입니까?
시리얼의 한계가 높습니다. 직접 프로그램에서 115200 보드를 사용할 수 있으며 작동합니다. Arduino 터미널은 최대 115200을 허용하지만 RealTerm과 같은 다른 프로그램을 사용하면 더 높게 실행할 수 있습니다.
하드웨어 직렬은 1M 보드로 실행됩니다. 주위를 읽으면 사람들이 UART를 직접 제어하여 최대 1M를 사용한 것을 볼 수 있습니다. 블루투스 칩을 통한 전송과 같은 용도로 높은 보오율을 얻을 수 있습니다. 하드웨어 직렬 인터페이스를 사용하여 단거리의 칩을 칩으로 교환하는 경우 1M 보드가 가능합니다. 1MHz 클럭 속도로 잘 작동하는 모든 SPI 및 I2C 장치를 생각해보십시오.
더 먼 거리에서 로직 레벨 (일반 0 ~ 5V) 신호를 사용할 때 노이즈에 문제가 발생하기 시작합니다. 더 먼 거리를 사용하려면 강력한 신호, 일반적으로 RS-232 및 덜 일반적으로 RS-485를 제공하기 위해 트랜시버를 추가합니다. RS-232를 사용하면 10 피트 거리에서 메가 비트를 실행할 수 있습니다.
마이크로 프로세서 클럭 속도는 실제 한계입니다. 하드웨어 UART를 사용하면 프로세서는 10 비트마다 (N81의 경우) 1 바이트를 UART에로드해야합니다. 따라서 1M 전송 속도에 도달하면 16MHz 프로세서가 UART에 데이터를 제공하는 것이 어려울 것입니다. 160 바이트 틱마다 새로운 바이트가 전송되는데, 이는 매우 적은 코드입니다. 짧은 데이터 버스트의 경우 해당 속도를 달성 할 수 있습니다. 메시지는 UART가 한계가되기 전에 프로세서 속도가 부족하다는 것입니다.
이 모든 것은 HardwareSerial에 적용되며 소프트웨어 직렬은 매우 다릅니다.
모든 흥미로운 답변 외에도 직렬 속도를 XXX 비트 / s 로 설정 한다고 해서 하드웨어에서 XXX 비트 / s를 의미 할 필요는 없습니다 .
쿼츠 기반 시계도 불완전하며 드리프트 될 수 있습니다. 또한 직렬 클록은 일반적으로 2의 사전 제수와 (정수) 카운터를 통해 생성되므로 기본 클록 주파수가 주어지면 모든 값을 정확하게 얻을 수 없습니다. 시작 / 정지 비트의 도움으로 비동기 직렬 통신은 일부 클럭 드리프트에 견딜 수 있습니다. 그러나 이것은 한계가 있습니다.
예를 들어, ATmega328PA가 1MHz에서 실행중인 경우 0.2 %의 오류에서 9600b / s를 달성 할 수 있습니다. 그러나 14400b / s에서 오류는 -3.5 %입니다 (실제로 13900b / s에서 통신). 28800b / s에서 오류는 + 8.5 %입니다 (실제로 31200b / s에서 통신). 모든 수치는 ATmega48PA-88PA-168PA-328PA 데이터 시트, p200에서 가져온 것 입니다.
실제로 동일한 속도로 통신하기 때문에 두 개의 동일한 장치가 서로 통신 할 때는 문제 가 되지 않습니다 . 그것은 수있는 다른 장치 사이에서 통신 할 때 문제가 될 수.
기본 주파수를 높이는 것이 정확도를 크게 향상시킬 필요는 없습니다. 예를 들어, 2MHz에서 위와 동일한 ATmega328PA를 실행해도 반올림 오류로 인해 더 나은 결과를 얻을 수는 없습니다. 그러나 1.8432MHz로 실행하면 2400b / s에서 최대 57.6kHz까지 매우 정확한 bps를 제공합니다.
가장 느린 전송 속도 (300)는 아니지만 일부 설정 (28800 또는 115200)에서 결국 문제를 일으킬 수있는 전송 속도를 사용하지 않는 것이 일종의 전통이라고 생각합니다. PC 직렬 포트 (대부분 FTDI232 USB 어댑터)는 더 높은 속도에 대처할 수 있지만 DIY 하드웨어는 그렇지 않을 수 있습니다. 따라서 9600bps는 코드 예제에 대한 일종의 표준 전송 속도로 자리 잡았습니다.