Seri.begin (): Neden her zaman 28800 kullanmıyorsunuz?


34

Örnek kodun birçoğunda, çevrimiçi insanlar Serial.begin(9600)kurulum bloğuna satırı ekler .

Serial.begin()Resmi belgelerde ne olduğuna bakınca , saniye başına veri aktarımını kontrol ettiğini söylüyor.

Öyleyse bariz soru, neden en yüksek aktarım hızı olan 28800'i kullanmıyorsunuz? İnsanlar neden 9600'e razı olurlar? Burada sınırlama nedir?


3
USB desteklerine takılan bir arduino en yüksek FYI aslında 115200 ve 57600 genellikle gördüğünüz en yaygın baud.
BrettAM

Yanıtlar:


48

İnsanlar neden yerleşir?

İnsanlar razı olur çünkü yeterince hızlıdır. En yaygın kullanım, yalnızca hata ayıklama için bir terminalde bazı şeyler yazdırmaktır. 9600 baud, saniyede 960 karakter veya saniyede 12 x 80 karakter satırıdır. Ne kadar hızlı okuyabilirsin? :)

Programınız toplu veri aktarımı için seri bağlantı noktasını kullanıyorsa, yerleşmemeyi tercih edersiniz.

Sınırlama nedir?

Seri üzerindeki limitler yüksektir. Doğrudan programlarınızda 115200 baud kullanabilirsiniz ve bu sadece işe yarayacaktır. Arduino terminali maksimum 115200 izin verecek, ancak RealTerm gibi diğer programlar daha fazla çalışmanıza izin verecek.

Donanım seri 1 M baud çalışacak. Etrafta okursanız, UART'ı doğrudan kontrol ederek insanların 1 M'ye kadar kullandığını göreceksiniz. Bluetooth yongası ile aktarma gibi kullanımlar için yüksek baud oranlarından yararlanabilirsiniz. Çipten çipe kısa bir mesafeyle değişim yapmak için donanım seri arabirimini kullanıyorsanız, 1 M baud tamamen uygulanabilir. 1 MHz saat hızında gayet iyi çalışan tüm SPI ve I2C cihazlarını düşünün.

Daha büyük mesafelerde, mantık seviyesi (düz 0 - 5V) sinyalini kullanırken gürültü ile ilgili sorun yaşamaya başlayacaksınız. Daha büyük mesafeleri kullanmak için, RS-232 ve daha az yaygın olan RS-485 gibi güçlü sinyaller sağlamak için bir alıcı-verici ekleyeceksiniz. RS-232 ile 10''ar feet mesafelerde bir mega bit çalıştırabilirsiniz.

Mikroişlemci saat hızı gerçek sınır olacaktır. Bir donanım UART'sında, işlemci her 10 bitte bir UART'a bir bayt yüklemelidir (N81 için). Bu nedenle, 1 M baud'a ulaştığınızda, 16 MHz işlemcinin UART'ı veri ile birlikte tutması zor olacaktır. Her 160 saat tiksinti yeni bir bayt gönderilecek, bu kod çok az kod satırı. Kısa bir veri patlaması için bu oranı elde edebilirsiniz. Mesaj, UART'ın limiti koymadan işlemcinin hızı tükenecek.

Not, bu tüm Donanım Seri için geçerlidir , yazılım seri çok farklı.


Lütfen 2M'nin hw seri ile arşivlenebildiğini unutmayın, ancak arduino'nun uygulaması çok yavaş görünüyor ve çok fazla çöp gönderiyor. Hızınızı iki katına çıkaracak sihirli parçayı bulmak için atmega328p ds'ye bakın. Ayrıca 9800 baud'un çok eski bir standart olduğunu ve xbee, gps ve daha fazlası için yapılandırılsa bile birçok sensör bu değeri standart olarak kullandığını da ekleyin. Ayrıca usb üzerinden seri kullanım otomatik baudrate görüşme cadısı seçili baudatı geçersiz kılabilir, ancak arduino tarafından kullanılmadığını düşünüyorum (ancak leonardo'da olabilir)
Lesto

1
9600 8N1 aynı zamanda varsayılan bir ayardır. Seri arayüze sahip birçok cihaz bu ayarda sunulur ve başka bir hız (veya veritabanları, eşlik biti, durdurma biti) gerekliyse yapılandırılması gerekir.
Peter Mortensen

"Yeterince hızlı" - İyi cevap, ama bu noktaya biraz katılmıyorum. Hata ayıklama çıktısı uygulamalarının çoğu engelliyor, bu nedenle kod çalıştırma süresindeki aşırı değişiklikleri önlemek için hata ayıklama çıktısını olabildiğince hızlı yapmak çok arzu edilir.
Rev1.0

Toplu veri aktarımı yapıyorsanız, İdeal olarak SPI kullanıyor olmalısınız, değil mi?
tuskiomi

6

Tüm ilginç cevaplar, seri hız ayarı buna değer bahsedilmeden ek olarak XXX bit / s gerekli gelmez XXX bit / donanım üzerinde bu.

Saatler - hatta kuvars esaslı - kusurlu ve sürüklenmeye maruz kalıyor. Ek olarak, seri saat genellikle iki ön bölen gücü ve (tam sayı) sayıcı aracılığıyla üretildiğinden, bir temel saat frekansı verilen tüm değerler doğru bir şekilde elde edilemez. Başlatma / durdurma bitlerinin yardımı ile, asenkron seri iletişim bazı saat kaymalarına toleranslı olabilir. Ancak bunun sınırları var.

Örneğin, ATmega328PA'nız 1 MHz'de çalışıyorsa,% 0.2'lik bir hatayla 9600b / s elde edebilirsiniz. Ancak 14400b / s'de hata% -3.5'tir (aslında 13900b / s'de iletişim kurar). Ve 28800b / s'de hata% + 8,5'tir (aslında 31200b / s'de iletişim kuruyor). Tüm bu rakamlar ATmega48PA-88PA-168PA-328PA veri sayfasından, p200'den alınmıştır .

Bu, iki özdeş cihazın bir arada iletişim kurmasıyla ilgili bir sorun değil (aslında aynı hızda iletişim kurduğu için ). Bu belki farklı cihazlar arasında iletişim kurarken bir sorun olabilir.

Baz frekansı artırmak, doğruluğu önemli ölçüde iyileştirmek zorunda değildir. Örneğin, aynı ATmega328PA'yı 2MHz'de yukarıdaki gibi çalıştırmak gerçekten yuvarlama hataları nedeniyle olduğu gibi daha iyi sonuçlar vermez. Ancak onu çalıştırmak 1.8432MHz, 2400b / s'den 57.6kHz'e kadar çok hassas bps sağlar.


3

Bence en yavaş (300) değil aynı zamanda bazı kurulumlarda (28800 hatta 115200) sorunlara yol açabilecek bir transfer hızı kullanmanın bir tür gelenek olduğunu düşünüyorum. PC seri bağlantı noktası (genellikle bir FTDI232 USB adaptörü) daha yüksek oranlarla baş edebilir, ancak DIY donanımınız olmayabilir. Bu yüzden 9600 bps kod örnekleri için bir çeşit standart transfer hızı olarak kendini kanıtlamıştır.


2

Zamanın geri düştüğünde, uzak klavyeler için "altın standart" (bir telefon modemi kullanarak ve bunları hatırlıyorsanız teletypes) 9600 baud'du, başlangıçta yalnızca özel bir telefon hattı üzerinden elde edilebiliyordu. Zaman yavaş ilerliyor; teknoloji hızla ilerliyor; ve hafıza zamandan daha yavaş hareket eder (göründüğü gibi). 9600 baud'dan daha hızlı bir şekilde birkaç büyüklükte rutin olarak en az birkaç metreden fazla iletişim kurabiliriz. Bir zamanlar bir altın standart olarak kabul edilen artık altın değildir, ancak yine de standart olarak düşünülmüştür.

tl; dr: Tarih değil, teknoloji değil.


0

İnsanların çoğu zaman 9600 kullanmasının asıl nedeni, bunun Arduino IDE'deki varsayılan baud hızı olmasıdır. Ayrıca, seri sinyalin uzun bir yoldan gitmesi gerekiyorsa daha hızlı veri hızları da güvenilmez olabilir - bunun neden optimum hız olarak seçildiğini bilmeme rağmen.


-2

İnsan Reaksiyon Süresi

Çünkü , Arduino'nuz limanda düştüğünde seri monitörü durdurabilmek, kullanıcıların zamanın% 100'ünü gerektiriyor ve maksimum aktarım hızına sahip olmak, zamanın% 100'ünden daha azını gerektiriyor .

9600 baud, "kaçak süreci öldürmek kolay" ile "sinir bozucu derecede yavaş" arasında bir uzlaşmadır.


% 100 hey ... ilginç;)
Angry 84
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.