Serial.begin (): Proč ne vždy použít 28800?

V mnoha ukázkových kódech online lidé přidají řádek Serial.begin(9600) do bloku nastavení.

Když se podívám na to, co Serial.begin() je v oficiální dokumentaci, říká se, že řídí přenos dat za bit za sekundu.

Takže zřejmá otázka je, proč nepoužívat 28800, nejvyšší přenosovou rychlost? Proč se lidé spokojí s 9600? Jaké je zde omezení?

Komentáře

  • FYI, nejvyšší arduino připojené k USB podporuje, je ve skutečnosti 115200 a 57600 je často druhou nejčastější baud vidíte.

odpověď

Proč lidé usadit se?

Lidé se usadili, protože je to více než dostatečně rychlé. Nejběžnějším použitím je pouze tisk některých věcí na terminálu pro ladění. 9600 baudů je 960 znaků za sekundu nebo 12 x 80 znakových řádků za sekundu. Jak rychle umíš číst? 🙂

Pokud váš program používá pro hromadný přenos dat sériový port, rozhodli byste se to neusadit.

Co je omezení …

Limity seriálu jsou vysoké. Přímo můžete ve svých programech použít 115200 baudů a bude to fungovat. Terminál Arduino umožní maximálně 115200, ale jiné programy, jako je RealTerm, vám umožní běžet výše.

Seriál hardwaru poběží na 1 M baud. Pokud budete číst dokola, uvidíte, že lidé použili až 1 M přímým ovládáním UART. Mohli byste získat výhodu vysoké přenosové rychlosti pro použití, jako je přenos přes bluetooth čip. Pokud používáte hardwarové sériové rozhraní k výměně z čipu na čip na krátkou vzdálenost, pak je přenosová rychlost 1 M zcela možná. Přemýšlejte o všech zařízeních SPI a I2C, která fungují v pohodě při frekvenci 1 MHz.

Na větší vzdálenosti začnete mít při používání logické úrovně (prostý signál 0 až 5 V) problémy s hlukem. Chcete-li použít větší vzdálenosti, přidali byste vysílač a přijímač, který by poskytoval robustní signalizaci, obvykle RS-232 a méně často RS-485. S RS-232 byste mohli běžet mega bit na vzdálenosti 10 „stop.

Rychlost mikroprocesoru bude skutečným limitem. U hardwarového UART musí procesor načíst UART jeden bajt každých 10 bitů (pro N81). Takže když se dostanete na přenosovou rychlost 1 M, bude pro procesor 16 MHz výzvou udržet UART dodávaný s daty. Každých 160 hodinových tiků bude zaslán nový bajt, což je velmi málo řádků kódu. Pro krátký shluk dat můžete tuto rychlost dosáhnout. Zpráva je, že procesoru dojde rychlost, než bude limitem UART.

Všimněte si, toto vše platí pro HardwareSerial , sériové číslo softwaru je velmi odlišné.

Komentáře

  • Vezměte prosím na vědomí, že 2M je archivovatelný pomocí hw seriálu, ale implementace arduino ‚ se zdá být příliš pomalá a posílá spoustu odpadků. Podívejte se na atmega328p ds, kde najdete magický bit pro zdvojnásobení rychlosti. Dodejte také, že přenosová rychlost 9800 je velmi starý standard a hodně senzorů používá tuto hodnotu standardně, i když je lze nakonfigurovat pro více, například xbee, gps a další. Také sériové přes USB použití automatického přenosu přenosové rychlosti, které může přepsat vybranou přenosovou rychlost, ale myslím, že není používáno arduino (ale může to být na leonardo)
  • 9600 8N1 je také de-facto výchozí nastavení. Mnoho zařízení se sériovým rozhraním je dodáváno s tímto nastavením a je třeba je nakonfigurovat, pokud je vyžadována jiná rychlost (nebo databáze, paritní bit, stop bit).
  • “ je to více než dostatečně rychlé “ – dobrá odpověď, ale s tímto bodem trochu nesouhlasím. Většina implementací výstupu ladění blokuje, takže je velmi žádoucí, aby byl výstup ladění co nejrychlejší, aby se zabránilo nadměrným změnám v době provádění kódu.
  • Pokud ‚ Provádíte hromadný přenos dat, v ideálním případě ‚ byste používali SPI, že?

Odpovědět

Kromě všech zajímavých odpovědí stojí za zmínku, že nastavení sériové rychlosti na XXX bitů / s nemusí nutně znamenat XXX bitů / s na hardwaru.

Hodiny – i na bázi křemene – jsou nedokonalé a podléhají driftu. Kromě toho, protože sériové hodiny se obvykle generují pomocí čítače dvou dělitelů a (celočíselných) čítačů se dvěma veličinami, nelze vzhledem k základní frekvenci hodin přesně získat všechny hodnoty. Pomocí bitů start / stop může být asynchronní sériová komunikace tolerantní k určitému posunu hodin. Ale má to omezení.

Například pokud vaše ATmega328PA běží na 1MHz, můžete dosáhnout 9600b / s při 0,2% chyby. Ale při 14400b / s je chyba -3,5% (ve skutečnosti komunikuje rychlostí 13900b / s). A při 28800b / s je chyba + 8,5% (ve skutečnosti komunikuje rychlostí 31200b / s).Všechny tyto údaje pocházejí z datového listu ATmega48PA-88PA-168PA-328PA, p200 .

Toto není problém, když dvě identická zařízení komunikují společně (protože ve skutečnosti komunikují stejnou rychlostí). může to být problém při komunikaci mezi různými zařízeními.

Zvýšení základní frekvence není nutné výrazně zlepšit přesnost. Například spuštění stejného ATmega328PA jako výše na 2MHz ve skutečnosti neposkytuje lepší výsledky, protože jsou většinou způsobeny chybami zaokrouhlování. Ale jeho běh 1,8432MHz dává velmi přesné bps od 2400b / s až po 57,6kHz.

Odpověď

Myslím, že je to druh tradice používat přenosovou rychlost, která není nejpomalejší (300), ale také ne taková, která by nakonec mohla způsobit problémy v některých nastaveních (28800 nebo dokonce 115200). Sériový port PC (nejčastěji USB adaptér FTDI232) si poradí s vyššími rychlostmi, ale váš hardware pro vlastní potřebu nemusí. 9600 b / s se tedy etablovalo jako nějaký druh standardní přenosové rychlosti pro příklady kódu.

Odpověď

Zpět v mlze času „Zlatý standard“ pro vzdálené klávesnice (pomocí telefonního modemu a dálnopisů, pokud si je pamatujete) byl 9600 baudů, zpočátku dosažitelných pouze prostřednictvím vyhrazené telefonní linky. Čas jde pomalu; technologický pokrok, rychle; a paměť se pohybuje ještě pomaleji než čas (zdá se). Můžeme běžně komunikovat, alespoň na několik metrů, o několik řádů rychleji než 9600 baudů. To, co bylo kdysi považováno za zlatý standard, již není zlato, ale stále se o něm uvažuje jako o standardu.

tl; dr: Je to historie, nikoli technologie.

Odpověď

Myslím, že hlavním důvodem, proč lidé většinu času používají 9600, je to, že se jedná o výchozí přenosovou rychlost v Arduino IDE. Rychlejší datové rychlosti by také mohly být nespolehlivé, pokud musí sériový signál cestovat dlouhou cestu – i když netuším, proč byla zvolena jako optimální rychlost.

Odpovědět

Doba lidské reakce

Protože schopnost zastavit sériový monitor, když vaše Arduino mlátí na port je vyžadován uživateli na 100% času a je vyžadována maximální přenosová rychlost menší než 100% času.

9600 baudů je kompromisem mezi „snadným zabitím utečeného procesu“ a „otravně pomalým“.

Komentáře

  • 100% hej … zajímavé;)

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *