Serial.begin (): Miért ne használná mindig a 28800-at?

A mintakód nagy részében az online felhasználók hozzáadják a Serial.begin(9600) sort a telepítőblokkba.

Amikor utánanézek, mi van Serial.begin() a hivatalos dokumentációban, azt mondja, hogy ellenőrzi a bit / másodperces adatátvitelt.

Tehát a nyilvánvaló kérdés miért nem használja a 28800-at, a legnagyobb átviteli sebesség? Miért elégednek meg az emberek 9600-mal? Mi itt a korlátozás?

Megjegyzések

  • FYI az USB-támogatásokhoz csatlakoztatott arduino legmagasabb értéke 115200, és az 57600 gyakran a második leggyakoribb baud, amit lát.

Válasz

Miért teszik az emberek rendezni?

Az emberek azért telepednek le, mert ez több mint elég gyors. A legelterjedtebb használat csak néhány dolog kinyomtatása a hibakereső terminálra. A 9600 baud 960 karakter másodpercenként, vagy 12 x 80 karakter sor másodpercenként. Milyen gyorsan tud olvasni? 🙂

Ha a program a soros portot használja tömeges adatátvitelhez, úgy dönt, hogy nem rendezi.

a korlátozás …

A soros korlátok magasak. Közvetlenül 115200 baudot használhat a programjaiban, és ez csak működni fog. Az Arduino terminál maximálisan 115200-at tesz lehetővé, de más programok, például a RealTerm lehetővé teszik a magasabb futtatást.

A hardver sorozata 1 M baudra fog futni. Ha körbeolvas, látni fogja, hogy az emberek akár 1 milliót is felhasználtak az UART közvetlen vezérlésével. Előnyös lehet a magas adatátviteli sebesség előnye, például bluetooth chipen keresztüli továbbítás esetén. Ha a hardver soros interfészét chipről chipre cseréli csak rövid távolságra, akkor 1 M baud teljes mértékben megvalósítható. Gondoljon mindazokra az SPI és I2C eszközökre, amelyek kiválóan működnek 1 MHz-es órajel mellett.

Nagyobb távolságok esetén problémákat okoz a zaj, amikor logikai szintű (sima 0 és 5 V) közötti jeleket használ. Nagyobb távolságok használatához adjon hozzá egy adó-vevőt az erőteljes jelzés biztosításához, általában RS-232 és ritkábban RS-485. Az RS-232 segítségével megabitet futtathat 10 “láb távolságon.

A mikroprocesszor órajel lesz az igazi korlát. Hardveres UART esetén a processzornak egy bájtot kell betöltenie az UART-ba. 10 bitenként (N81 esetén). Tehát, amikor eléri az 1 M baudot, a 16 MHz-es processzor számára kihívást jelent az UART adatokkal való ellátása. 160 órajelenként új bájtot fog küldeni, ami nagyon kevés sor kódot. Rövid adatsorozat esetén elérheti ezt a sebességet. Az üzenet az, hogy a processzor elfogy a sebességéből, mielőtt az UART lenne a határérték.

Megjegyzés: ez mind a HardwareSerial , a szoftver sorozata nagyon különbözik.

Megjegyzések

  • Felhívjuk figyelmét, hogy a 2M archiválható a hw soros változatával, de az arduino ‘ megvalósítása túl lassúnak tűnik, és sok szemetet küld. Lásd az atmega328p ds-t, hogy megtalálja a bűvös bitet a sebesség megkétszerezéséhez. Hozzáteszi azt is, hogy a 9800 baud nagyon régi szabvány, és sok Az érzékelők közül az alapértelmezett érték ezt az értéket használja, még akkor is, ha többre is beállítható, például xbee, gps és még sok más. Szintén USB-n keresztüli soros automatikus átviteli sebességű tárgyalási boszorkány felülírhatja a kiválasztott baudot, de azt hiszem, hogy az arduino nem használja (de lehet, hogy a Leonardon is van).
  • A 9600 8N1 szintén de facto alapértelmezett beállítás. Számos soros interfésszel rendelkező készüléket szállítanak ezzel a beállítással, és konfigurálni kell őket, ha más sebességre (vagy adatbázisokra, paritásbitre, stopbitre van szükség).
  • ” több mint elég gyors ” – Jó válasz, de kissé nem értek egyet ezzel a ponttal. A legtöbb hibakeresési kimeneti megvalósítás blokkolva van, ezért nagyon kívánatos a hibakeresési kimenetet a lehető leggyorsabban elkészíteni, hogy megakadályozzuk a kód végrehajtási idejének túlzott változását.
  • Ha ‘ tömeges adatátvitelt végez, ideális esetben ‘ SPI-t használ, igaz?

Válasz

Az összes érdekes válasz mellett érdemes megemlíteni, hogy a soros sebesség XXX bit / s értékre állításához nincs szükség XXX bitre. / s a hardveren.

Az órák – még kvarc alapúak is – tökéletlenek és sodródhatnak. Ezen túlmenően, mivel a soros órát általában két osztó előosztó és (egész) számlálón keresztül generálják, az összes órajelet nem lehet pontosan megadni, ha egy alap órajel frekvenciát adunk meg. A start / stop bitek segítségével az aszinkron soros kommunikáció toleráns lehet bizonyos órás sodródásokkal szemben. Ennek azonban vannak korlátai.

Például, ha ATmega328PA-ja 1MHz-en működik, akkor a hiba 0,2% -ával elérheti a 9600b / s sebességet. De 14400b / s sebességnél a hiba -3,5% (valójában 13900b / s sebességgel kommunikál). 28800b / s sebességnél a hiba + 8,5% (valójában 31200b / s sebességgel kommunikál).Mindezek az ábrák az ATmega48PA-88PA-168PA-328PA, p200 adatlapból származnak.

Ez nem olyan kérdés, amikor két azonos eszköz kommunikál egymással (mivel valójában azonos sebességgel kommunikálnak). Lehet, hogy problémát jelenthet a különböző eszközök közötti kommunikáció során.

Az alapfrekvencia növelésével nem szükséges jelentősen javítani a pontosságot. Például ugyanazt az ATmega328PA-t, mint fent, 2MHz-en futtatni, nem igazán lehet jobb eredményt elérni, mivel ezek többnyire a kerekítési hibák miatt következnek be. De az 1.8432MHz futtatása nagyon pontos bps-t eredményez 2400b / s-tól 57.6kHz-ig.

Válasz

Szerintem ez egy az a fajta hagyomány, hogy olyan átviteli sebességet használjon, amely nem a leglassabb (300), de nem is olyan, amely végül problémákat okozhat egyes beállításokban (28800 vagy akár 115200). A PC-s soros port (leggyakrabban egy FTDI232 USB-adapter) képes megbirkózni a magasabb arányokkal, de a barkácsolási hardver nem biztos, hogy megfelel. A 9600 bps tehát valamiféle szabványos adatátviteli sebességgel bevált a kódpéldákba.

Válasz

Vissza az idő ködébe , a távoli billentyűzetek (telefonos modemet és teletípusokat használva, ha emlékszel ezekre) “arany standard” értéke 9600 baud volt, eredetileg csak dedikált telefonvonalon érhető el. Az idő lassan halad; a technológia gyorsan fejlődik; és az emlékezet még lassabban mozog, mint az idő (úgy tűnik). Rutinosan kommunikálhatunk, legalább néhány méteren át, pár nagyságrenddel gyorsabban, mint 9600 baud. Ami egykor aranystandardnak számított, az már nem arany, de mégis standardnak gondolják.

tl; dr: Ez a történelem, nem a technológia.

Válasz

Azt gondolom, hogy az emberek a legtöbb esetben a 9600-at használják, hogy ez az alapértelmezett baud sebesség az Arduino IDE-ben. Ezenkívül a gyorsabb adatátviteli sebesség is megbízhatatlan, ha a soros jelnek hosszú utat kell megtennie – bár fogalmam sincs, miért ezt választották optimális sebességnek.

Válasz

Emberi reakcióidő

Mivel képes megállítani a soros monitort, amikor az Arduino csapkod a porton a felhasználóknak 100% -ban megkövetelik, és a maximális átviteli sebesség megadására van szükség kevesebb, mint Az esetek 100% -a.

A 9600 baud kompromisszum a “könnyen megöli egy elszabadult folyamatot” és a “bosszantóan lassú” között.

Megjegyzések

  • 100% hé … érdekes;)

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük