Dalam banyak kode contoh online, orang menambahkan baris Serial.begin(9600)
di blok pengaturan.
Ketika saya mencari apa yang Serial.begin()
ada di dokumentasi resmi, ia mengatakan bahwa ia mengontrol bit per transfer data per detik.
Jadi pertanyaan yang jelas adalah, mengapa tidak menggunakan 28800, tingkat transfer tertinggi? Mengapa orang puas dengan 9600? Apa batasannya di sini?
Jawaban:
Orang puas karena lebih dari cukup cepat. Penggunaan yang paling umum adalah hanya untuk mencetak beberapa hal pada terminal untuk debuggin. 9600 baud adalah 960 karakter per detik, atau 12 x 80 karakter per detik. Seberapa cepat Anda bisa membaca? :)
Jika program Anda menggunakan port serial untuk transfer data massal, Anda akan memilih untuk tidak menyelesaikan.
Batas serial tinggi. Secara langsung Anda dapat menggunakan 115200 baud dalam program Anda dan itu hanya akan berfungsi. Terminal Arduino akan memungkinkan maksimum 115200, tetapi program lain seperti RealTerm akan membiarkan Anda berjalan lebih tinggi.
Serial perangkat keras akan berjalan ke 1 M baud. Jika Anda membaca di sekitar, Anda akan melihat orang-orang telah menggunakan hingga 1 M dengan langsung mengendalikan UART. Anda mungkin mendapatkan keuntungan dari baud rate yang tinggi untuk penggunaan seperti mentransmisikan melalui chip bluetooth. Jika Anda menggunakan antarmuka serial perangkat keras untuk bertukar dari chip ke chip hanya dengan jarak pendek, maka 1 M baud benar-benar layak. Pikirkan semua perangkat SPI dan I2C yang beroperasi dengan baik pada clock rate 1 MHz.
Pada jarak yang lebih jauh, Anda akan mulai memiliki masalah dengan noise ketika menggunakan pensinyalan level logika (0 hingga 5V). Untuk menggunakan jarak yang lebih besar, Anda akan menambahkan transceiver untuk memberikan pensinyalan yang kuat, umumnya RS-232 dan RS-485 yang kurang umum. Dengan RS-232 Anda bisa menjalankan bit mega pada jarak 10 kaki.
Kecepatan clock mikroprosesor akan menjadi batas sebenarnya. Dengan UART perangkat keras, prosesor harus memuat satu byte ke UART setiap 10 bit (untuk N81). Jadi ketika Anda mendapatkan 1 M baud itu akan menjadi tantangan bagi prosesor 16 MHz untuk menjaga UART disertakan dengan data. Byte baru akan dikirim setiap 160 jam, yang sangat sedikit baris kode. Untuk ledakan data singkat, Anda mungkin mencapai tingkat itu. Pesannya adalah, prosesor akan kehabisan kecepatan sebelum UART adalah batasnya.
Catatan, ini semua berlaku untuk HardwareSerial , serial perangkat lunak sangat berbeda.
sumber
Selain semua jawaban yang menarik, perlu disebutkan bahwa pengaturan kecepatan serial ke XXX bits / s tidak perlu menyiratkan XXX bits / s pada perangkat keras.
Jam - bahkan berdasarkan kuarsa - tidak sempurna dan dapat terbawa arus. Selain itu, karena jam seri biasanya dihasilkan melalui power-of-two pre-divisor dan (integer) counter, semua nilai tidak dapat diperoleh secara akurat mengingat frekuensi clock dasar. Dengan bantuan bit start / stop, komunikasi serial asinkron mungkin toleran terhadap beberapa penyimpangan jam. Tapi ini ada batasnya.
Misalnya, jika ATmega328PA Anda berjalan pada 1MHz, Anda dapat mencapai 9600b / s pada 0,2% kesalahan. Tetapi pada 14400b / s kesalahannya adalah -3,5% (sebenarnya berkomunikasi pada 13900b / s). Dan pada 28800b / s, kesalahannya adalah 8,5% (sebenarnya berkomunikasi pada 31200b / s). Semua angka tersebut berasal dari lembar data ATmega48PA-88PA-168PA-328PA, p200 .
Ini bukan masalah ketika dua perangkat identik berkomunikasi bersama (karena pada kenyataannya berkomunikasi dengan kecepatan yang sama ). Ini mungkin menjadi masalah ketika berkomunikasi antara perangkat yang berbeda.
Meningkatkan frekuensi basis tidak perlu meningkatkan akurasi secara signifikan. Misalnya, menjalankan ATmega328PA yang sama seperti di atas pada 2MHz tidak benar-benar memberikan hasil yang lebih baik karena kebanyakan disebabkan oleh kesalahan pembulatan. Tetapi menjalankannya 1.8432MHz memberikan bps yang sangat akurat dari 2400b / s hingga 57.6kHz.
sumber
Saya pikir itu adalah semacam tradisi untuk menggunakan kecepatan transfer yang bukan yang paling lambat (300) tetapi juga bukan yang akhirnya dapat menyebabkan masalah dalam beberapa pengaturan (28800 atau bahkan 115200). Port serial PC (paling sering adaptor USB FTDI232) dapat mengatasi tingkat yang lebih tinggi tetapi perangkat keras DIY Anda mungkin tidak. Jadi 9600 bps telah memantapkan dirinya sebagai semacam transfer rate standar untuk contoh kode.
sumber
Kembali dalam kabut waktu, "standar emas" untuk keyboard jarak jauh (menggunakan modem telepon, dan teletype, jika Anda ingat itu) adalah 9600 baud, awalnya hanya dapat dicapai melalui saluran telepon khusus. Waktu terus berjalan, perlahan; kemajuan teknologi, dengan cepat; dan ingatan bergerak lebih lambat dari waktu (tampaknya). Kami dapat berkomunikasi secara rutin, setidaknya lebih dari beberapa meter, dengan beberapa pesanan lebih cepat dari 9600 baud. Apa yang pernah dianggap sebagai standar emas bukan lagi emas, tetapi masih dianggap sebagai standar.
tl; dr: Ini sejarah, bukan teknologi.
sumber
Saya pikir alasan utama orang menggunakan 9600 sebagian besar waktu adalah bahwa itu adalah baud rate default di Arduino IDE. Selain itu, kecepatan data yang lebih cepat juga bisa tidak dapat diandalkan jika sinyal serial harus menempuh perjalanan jauh - walaupun saya tidak tahu mengapa ini dipilih sebagai kecepatan optimal.
sumber
Waktu Reaksi Manusia
Karena dapat menghentikan monitor serial ketika Arduino Anda meronta-ronta pada port diperlukan oleh pengguna 100% dari waktu, dan memiliki kecepatan transfer maksimum diperlukan kurang dari 100% dari waktu.
9600 baud adalah kompromi antara "mudah untuk membunuh proses pelarian" dan "sangat lambat".
sumber