Tudom, hogy ezzel inicializálunk valamit:
Serial.begin(9600);
De szeretném tudod, mit is jelent valójában?
Megjegyzések
- A dokumentáció jól leírja. arduino.cc/en/Serial/begin
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. ASerial.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.
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ó:
-
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):
-
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.