Serial.begin (): Miksi et aina käyttäisi 28800: ta?

Monissa esimerkkikoodissa online-käyttäjät lisäävät rivin Serial.begin(9600) asennuslohkoon.

Kun tiedän, mikä Serial.begin() on virallisessa dokumentaatiossa, se sanoo hallitsevansa bitin sekunnissa tiedonsiirtoa.

Joten ilmeinen kysymys on, miksi et käyttäisi 28800, suurin siirtonopeus? Miksi ihmiset tyytyvät 9600: een? Mikä tässä on rajoitus?

Kommentit

  • FYI on korkein USB-tuettu liitetty arduino 115200, ja 57600 on usein toiseksi yleisin näkemäsi baudi.

Vastaa

Miksi ihmiset asettuvat?

Ihmiset asettuvat asumaan, koska se on enemmän kuin tarpeeksi nopeaa. Yleisin käyttö on vain tulostaa joitain tavaroita virheenkorjausta varten. 9600 baudia on 960 merkkiä sekunnissa tai 12 x 80 merkkiriviä sekunnissa. Kuinka nopeasti voit lukea? 🙂

Jos ohjelmasi käyttää sarjaporttia joukkotiedonsiirtoon, et halua ratkaista.

Mikä on rajoitus …

Sarjarajat ovat korkeat. Suoraan voit käyttää ohjelmissasi 115200 baudia ja se vain toimii. Arduino-terminaali sallii enintään 115200, mutta muut ohjelmat, kuten RealTerm, antaisivat sinun ajaa korkeammalle.

Laitteistosarja toimii 1 M baudin nopeudella. Jos luet ympäri, näet, että ihmiset ovat käyttäneet jopa 1 M hallitsemalla suoraan UART: ta. Saatat hyötyä suurista tiedonsiirtonopeuksista esimerkiksi Bluetooth-sirun kautta lähettämisen yhteydessä. Jos käytät laitteiston sarjaliitäntää vaihtaaksesi sirusta siruksi vain lyhyellä etäisyydellä, 1 M baud on täysin mahdollista. Ajattele kaikkia SPI- ja I2C-laitteita, jotka toimivat hienosti 1 MHz: n kellotaajuudella.

Suuremmilla etäisyyksillä sinulla on ongelmia melun kanssa, kun käytät logiikkatason (tavallinen 0 – 5 V) signalointia. Suurempien etäisyyksien käyttämiseksi sinun tulisi lisätä lähetin-vastaanotin vankan signaloinnin tarjoamiseksi, yleensä RS-232 ja harvemmin RS-485. RS-232: n avulla voit käyttää megabittiä 10 jalan etäisyydellä.

Mikroprosessorin kellotaajuus on todellinen raja. Laitteiston UART: n kanssa prosessorin on ladattava yksi tavu UART: lle. joka 10 bittiä (N81: lle). Joten kun saavutat 1 M baudin, 16 MHz: n prosessorille on haastavaa pitää UART mukana tiedoissa. Uusi tavu lähetetään 160 kellokohtaisen välein, mikä on hyvin vähän rivejä Lyhyen tietopurskeen saavuttamiseksi saatat saavuttaa kyseisen nopeuden. Viesti on, prosessorin nopeus loppuu ennen kuin UART on raja.

Huomaa, että tämä kaikki koskee HardwareSerial , ohjelmistosarja on hyvin erilainen.

Kommentit

  • Huomaa, että 2M on arkistoitavissa hw-sarjan kanssa, mutta arduino ’ -sovelluksen toteutus tuntuu liian hitaalta ja lähettää paljon roskaa. Löydä taika-bitti nopeuden kaksinkertaistamiseksi kohdasta atmega328p ds. Lisää myös, että 9800 baudia on hyvin vanha standardi, ja paljon antureista käyttää tätä arvoa vakiona, vaikka ne voidaan määrittää useammalle, kuten xbee, gps ja paljon muuta. Myös usb-sarjakäyttöinen automaattisen baudinopeuden neuvottelu noita voi ohittaa valitun baudanopeuden, mutta mielestäni arduino ei käytä sitä (mutta se voi olla Leonardossa).
  • 9600 8N1 on myös tosiasiallinen oletusasetus. Monet sarjaliitännällä varustetut laitteet toimitetaan tämän asetuksen mukana, ja ne on määritettävä, jos tarvitaan toinen nopeus (tai tietokokonaisuudet, pariteettibitti, pysäytysbitti).
  • ” se on yli tarpeeksi nopea ” – Hyvä vastaus, mutta olen hieman eri mieltä tästä asiasta. Suurin osa virheenkorjausulostulototeutuksista estää, joten on erittäin toivottavaa tehdä virheenkorjausuloste mahdollisimman nopeasti estämään liialliset muutokset koodin suoritusajassa.
  • Jos ’ Suoritatko joukkotiedonsiirtoa. Ihannetapauksessa ’ käytät SPI: tä, eikö?

Vastaa

Kaikkien mielenkiintoisten vastausten lisäksi on syytä mainita, että sarjanopeuden asettaminen arvoon XXX bittiä / s ei välttämättä tarkoita XXX bittiä / s laitteistossa.

Kellot – jopa kvartsipohjaiset – ovat epätäydellisiä ja alttiita ajautumiselle. Lisäksi, koska sarjakello generoidaan yleensä kahden esijakajan ja (kokonaisluvun) laskurin kautta, kaikkia arvoja ei voida saada tarkasti, kun peruskellotaajuus annetaan. Käynnistys- / pysäytysbitien avulla asynkroninen sarjaliikenne voi olla suvaitsevaa joillekin kelloviiveille. Mutta tällä on rajoituksia.

Jos esimerkiksi ATmega328PA-tietokoneesi toimii 1 MHz: n taajuudella, voit saavuttaa 9600 b / s: n virheen 0,2%: lla. Mutta nopeudella 14400b / s virhe on -3,5% (tosiasiallisesti viestintä nopeudella 13900b / s). Ja nopeudella 28800b / s virhe on + 8,5% (tosiasiallisesti tiedonsiirto nopeudella 31200b / s).Kaikki nämä luvut ovat ATmega48PA-88PA-168PA-328PA -taulukosta, p200 .

Tämä ei ole ongelma, kun kaksi samanlaista laitetta kommunikoi yhdessä (kuten itse asiassa kommunikoidaan samalla nopeudella). Se saattaa olla ongelma, kun kommunikoidaan eri laitteiden välillä.

Perustaajuuden lisääminen ei välttämättä paranna merkittävästi tarkkuutta. Esimerkiksi saman ATmega328PA: n suorittaminen kuin yllä taajuudella 2MHz ei todellakaan tuota parempia tuloksia, koska ne johtuvat lähinnä pyöristysvirheistä. Mutta sen suorittaminen 1,8432 MHz antaa erittäin tarkat bps nopeudesta 2400b / s – 57,6 kHz.

Vastaa

Mielestäni se on sellainen perinne käyttää siirtonopeutta, joka ei ole hitain (300), mutta ei myöskään sellainen, joka voisi lopulta aiheuttaa ongelmia joissakin asetuksissa (28800 tai jopa 115200). PC-sarjaportti (useimmiten FTDI232 USB-sovitin) pystyy selviytymään korkeampista nopeuksista, mutta DIY-laitteesi ei välttämättä. Joten 9600 bps on vakiinnuttanut asemansa jonkinlaisena tavallisena siirtonopeudella koodiesimerkkejä varten.

Vastaus

Takaisin ajan sumuihin , etänäppäimistöjen (puhelinmodeemia ja teletyyppejä, jos muistat ne) ”kultastandardi” oli 9600 baudia, alun perin saavutettavissa vain erillisellä puhelinlinjalla. Aika liikkuu hitaasti; tekniikan kehitys nopeasti; ja muisti liikkuu jopa hitaammin kuin aika (näyttää). Voimme rutiininomaisesti kommunikoida, ainakin usean metrin yli, parilla suuruusluokalla nopeammin kuin 9600 baudia. Se, mitä kerran pidettiin kultastandardina, ei ole enää kultaa, mutta sitä pidetään edelleen vakiona.

tl; dr: Sen historia, ei tekniikka.

Vastaus

Mielestäni tärkein syy, miksi ihmiset käyttävät 9600: ta suurimman osan ajasta, on se, että se on oletusarvoinen baudinopeus Arduino IDE: ssä. Nopeampi tiedonsiirtonopeus voi myös olla epäluotettava, jos sarjasignaalin on kuljettava pitkiä matkoja – vaikka minulla ei ole aavistustakaan, miksi tämä valittiin optimaaliseksi nopeudeksi.

Ihmisen reaktioaika

Koska pystyy pysäyttämään sarjaliitännän, kun Arduino kaataa porttia div id = ”994784bc68”>

vaaditaan käyttäjiltä 100% ajasta, ja suurin siirtonopeus vaaditaan alle 100% ajasta.

9600 baudia on kompromissi ”helppo tappaa pakeneva prosessi” ja ”ärsyttävän hidas” välillä.

Kommentit

  • 100% hei … mielenkiintoista;)

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *