Mi az a Serial.begin (9600)?

Tudom, hogy ezzel inicializálunk valamit:

Serial.begin(9600); 

De szeretném tudod, mit is jelent valójában?

Megjegyzések

Válasz

Serial.begin(9600) valójában nem nyomtat ki semmit. Ehhez a Serial.print("Hello world!") fájlt szeretné használni a szöveg nyomtatásához” Helló Világ!” a soros konzolhoz. Inkább 9600 bit / s sebességgel inicializálja a soros kapcsolatot.

A soros kapcsolat mindkét oldalát (pl. Az Arduino és a számítógépét) be kell állítani, hogy ugyanolyan sebességű soros kapcsolatot használjon, hogy bármilyen típusú legyen. érthető adatok. Ha nincs összhangban a két rendszer szerint a sebesség, akkor az adatok elromlanak.

Az Arduino alapértelmezett értéke 9600 bit / másodperc, és tökéletesen megfelelő a felhasználók többségének, de megváltoztathatja más sebességre: Serial.begin(57600) az Arduino-t 57600 bit / másodperces sebességre állítaná be. Be kell állítania bármilyen szoftvert, amelyet a számítógépén használ (például Az Arduino IDE soros monitorja) ugyanolyan sebességre, hogy lássa az elküldött adatokat.

Megjegyzések

  • A Baud és a BPS két különböző dolog … ‘ nem találja meg azt a linket, amelyet most kerestem.
  • mi van, ha beteszem a ” sorozatot .begin (0); ” vagy ” Sorozat.begin (4000); ” . Úgy értem, szeretném tudni, mi a különbség a számok között?
  • A Serial.begin-t használjuk a kommunikáció sebességének beállítására, bit / másodpercben. Egy bájt egyenlő 8 bittel, de a soros kapcsolatok indító és leállító bitet küldenek, hogy azonosítsák a vevő rendszer adott bájtjának kezdetét és végét. Így 10 bitre van szükség egy karakter elküldéséhez. A Serial.begin(0) használata azt mondja az Arduino-nak, hogy a soros sebességgel 0 bit / másodperc sebességgel kell kommunikálnia. Ahogy várható volt, ez azt jelenti, hogy az Arduino soha nem küld semmilyen adatot. A Serial.begin(4000) miatt az Arduino másodpercenként 4000 bit sebességgel fog adatokat küldeni. Ez nem szabványos, de egyébként rendben van.
  • Röviden: a szám megváltoztatása megváltoztatja a sebességet. Ha a számot kisebbé teszi (pl. Serial.begin(300)), akkor az Arduino lassabban küldi az adatokat. Ha növeli, mondjuk 57600-ra, akkor gyorsabban küld adatokat. Mind a küldő rendszernek, mind a fogadó rendszernek meg kell állapodnia arról, hogy milyen sebességet kell használni: a számítógép ‘ számítógépes soros programja – például az Arduino Serial Monitor ablak – lehetővé teszi, hogy beállítsa a sebességet számítógépe fog adatokat fogadni, de csak a közös sebességek közül választhat: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600 és 11520 bit / sec. ‘ t nem adhat meg más sebességet, például 4000-et. A 9600 általában jó.
  • Baud and BPS are two different things... can't find the link I was looking for now. – Itt ‘ s egy magyarázat: C függelék: ” baud ” vs. ” bps ”

Válasz

Egy kép 1000 szót ér, ezért azt mondják: (1024 szó, ha számítógéppel dolgozol), ezért felteszek néhány képet …

Az Uno-t úgy állítottam be, hogy 9600 baudon küldje a “Fab” szót, és az eredményeket egy logikai elemzőn rögzítettem.

Soros vesszők - 3 betű

A pirossal árnyalt részek a bájtok közötti” tétlen “időszakot jelentik.

A fenti grafikus megjegyzésből kiderül, hogy A Tx (továbbítás) adatsor általában magas (1), amíg alacsonyra nem csökken, hogy jelezze a karakter (bájt) kezdetét. Ez a kezdő bit . Ezután a 8 adatbit (fehér pontokkal jelezve) ) adatátviteli sebességgel (másodpercenként 9600 minta) jelennek meg. Ezután a vonal ismét magasra kerül. Ez a stopbit (a piros rész). Ezután meglátjuk a következő karakter kezdő bitjét, és így tovább. A “stop” rész korlátlanul hosszú lehet, de legalább egy bit hosszúságúnak kell lennie.


Az első karakterről (“F” betű vagy 0x46 vagy 0b01000110) további részletek itt látható:

Soros vesszők - egyetlen bájt

  • A – nincs adat (a Tx magas)

  • B – A “kezdő bit”. A vonal alacsonyan van, hogy elmondja a vevőnek, hogy egy karakter (bájt) elkezdi küldeni. A vevő másfél órás várakozással várja a mintát a sorból.

  • C – Első karakter érkezik (“F” betű vagy 0x46 vagy 0b01000110). Nincs órajel mint olyan, a bejövő adatokból egyszerűen mintát vesznek az baud (átviteli) sebességgel. Az SPI kommunikációval ellentétben az adatok érkeznek először a legkevésbé jelentős bitre (abban az esetben, ha nem bájtenként 8 bitet küldünk). Így látjuk a 01100010-et (nem pedig a 01000110-et).

  • D – A leállító bit. Ez mindig magas, annak érdekében, hogy meg tudjuk különböztetni a bájt végét és a következő kezdetét. Mivel a kezdő bit nulla, a leállító bit pedig egy, mindig egyértelmű az átmenet az egyik bájtról a másikra.

  • E – A kezdő bit a következő karakter.


A logikai elemző rögzítéséből kiderül, hogy a T1 - T2 értéke 0,1041667 ms, és ahogy történik azaz 1/9600:

1 / 9600 = 0.00010416666 seconds 

Így a 9600-as sebesség megadja a másodpercenként bitek számát és az inverz a bitek közötti időintervallum .


Egyéb szempontok

  • A soros vesszők nem önállóak (ellentétben az SPI-vel vagy az I2C-vel és másokkal), ezért a feladónak és a fogadónak is meg kell állapodniuk az órajelben.

  • Az órajel nem pontos az Arduino esetében, mert a hardvernek le kell osztania a rendszer óráját, hogy soros órát kapjon, és az osztás nem mindig pontos. Szinte mindig van hiba, az összeg meg van adva az adatlapon (egy 16 MHz-es rendszerórára idézett ábrák, például az Uno-n):

    Soros adatátviteli hiba

  • Megváltoztathatja az adatbitek számát, nem kell küldenie Közülük 8, valójában 5–9 bitet küldhet.

  • Opcionálisan lehet egy paritás bit is elküldve az adatbitek után.

    • Ha “páratlan” paritást ad meg, akkor a paritásbitet úgy állítják be, hogy az 1-bit összes száma páratlan legyen.
    • Ha “páros” paritást ad meg , a paritásbitet úgy állítják be, hogy az 1-bites teljes szám páros legyen.
    • Ha nem ad meg paritást, a paritásbit kihagyásra kerül.

    Ez segíthet a vevőnek észlelni, hogy az adatok helyesen érkeztek-e vagy sem.

  • A paritásbitet a stopbit előtt küldjük el.

  • 9 adatbit esetén (a SeaTalk protokollban használva) a paritásbitet 9. adatbitnek rendeli át . Ezért nem lehet mind a 9 adatbit és egy paritásbit.

  • Két stopbit is lehet. Ez alapvetően csak meghosszabbítja a bájtok közötti időt. Az “olden nap “ez azért volt, hogy a lassú elektromechanikus berendezések képesek legyenek feldolgozni az előző bájtot (pl. kinyomtatni).


Lehetséges korrupció

Ha elkezdi hallgatni a soros adatokat egy adatfolyam közepén, teljesen lehetséges, hogy a stream közepén lévő 0 bitet kezdő bitként értelmezzük, majd a vevő ezt követően mindent helytelenül értelmez.

Az egyetlen igazi módja ennek a helyreállításnak az, ha időnként elég nagy rés van (pl. 10 bit hosszú), hogy ez ne történhessen meg.


Fordított logika

Az itt látható bitek (logikai szint) nincsenek invertálva. Vagyis az 1 bites MAGAS, a 0 bites LOW. Ha olyan RS232 berendezéssel rendelkezik, amely valószínűleg valami olyasmit küld, mint -12 V 1 bitesnél és +12 V 0 bitesnél. Ez azért fordított, mert az egyik kisebb th-vel egy nulla, feszültségenként.

Ha vannak ilyen eszközei, akkor feszültségátalakítást és logikai inverziót kell végrehajtania. Az olyan chipek, mint a MAX232 , mindkettőt megteszik az Ön számára. Az ilyen berendezések meghajtásához szükséges -12 V feszültséget úgy is meg tudják adni, hogy néhány felhasználó által biztosított kondenzátor segítségével belsõ módon létrehozzák.


Fordulatszám-szabály hüvelykujj

Mivel egy kezdő bit, 8 adatbit és egy stopbit segítségével összesen 10 bitünk van, gyors ökölszabályként kiszámíthatja a bájtok számát másodperc alatt továbbíthat, ha elosztja a bitsebességet 10-gyel.

Pl. 9600 BPS sebességgel 960 bájtot küldhet másodpercenként.


A reprodukálandó kód:

 void setup() { Serial.begin(9600); Serial.print("Fab"); } void loop () { }  

Válasz

; TLDR; Inicializálja a soros kommunikációs portot és beállítja az adatátviteli sebességet. Az eszközt, amellyel kommunikál (vagy az Arduino IDE soros monitort), megfelelő átviteli sebességre kell állítania. A port inicializálása után elkezdhet karaktereket küldeni vagy fogadni. Arduino soros hivatkozás

Megjegyzések

  • Nem csökkenteni vagy tiszteletben tartani @ Nick- A Gammon ‘ kiválóan lefedi ezt a témát.

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