Sériová komunikace RS232 a komunikace s využitím sběrnic Flashcards

1
Q

Sériová komunikace RS232

A

Pokud chceme použít Arduino pro komunikaci s dalšími zařízeními, jako je počítač, další Arduino, nebo úplně jiný mikrokontroler, můžeme k tomu využít sériový UART. Minimálně jeden má každá verze Arduina a je možné jej využít k odesílaní a přijímání dat z/do libovolného zdroje.

Zkratka UART by se dala přeložit jako univerzální asynchronní přijímač/vysílač. Jedná se hardware, který pomocí dvou pinů (většinou označovaných jako RX a TX) odesílá a přijímá data. Standard RS-232 umožňuje propojení a plně duplexní sériovou komunikaci dvou zařízení. Není to tedy sběrnice v pravém slova smyslu, ale dvou-bodový spoj. Ve sféře osobních počítačů byl vytlačen USB, ale v průmyslu je stále používán pro svou jednoduchost a funkčnost.

Na běžných sériových portech v PC lze dosáhnout rychlost maximálně 115200 Bd.

Baud (Bd) je jednotka modulační rychlosti (také symbolová nebo znaková rychlost, anglicky baud rate) udávající počet změn stavu přenosového média za jednu sekundu.

Když do Arduina přijdou informace po sériové lince, nezpracovávají se hned, ale jsou uchovány v „zásobníku“ (anglicky buffer). Ten dokáže uchovat až 64 bytů. Čtení poté probíhá tak, že se vezme první byte z bufferu, zpracuje se procesorem, jeho místo se uvolní a uchované byty se posunou dopředu. Poté se vezme další byte, zpracuje se atd.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Spuštění a ukončení komunikace

A

Tato knihovna, která je standardní součástí vývojového prostředí Arduina, používá hardawarový UART, který je na digitálních pinech 0 (RX) a 1 (TX).

Spuštění sériové linky se provede funkcí:
Serial.begin(speed)
parametr: speed - rychlost komunikace v baudech
návratová hodnota: není

Po spuštění sériové linky, bychom měli počkat (alespoň na reálném Arduinu) až bude sériová linka k dispozici. To se udělá konstrukcí

Serial.begin(9600); //nastartujeme sériovou linku s rychlostí 9600 baud
while(!Serial) {;} //dokud není sériová linka připravena, čekáme
Serial.prinln(“Serial ready”); //sériová linka k dispozici

Ukončení práce se sériovou linkou, například pokud chceme používat piny 0 a 1 jako obyčejné digitální piny, provedeme funkcí: Serial.end()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Čtení dat ze sériové linky

A

Před tím, než začneme číst data ze sériové linky, měli bychom zkontrolovat, jestli nám nějaká přišla. To se udělá funkcí:
Serial.available()
návratová hodnota: počet bytů, které mohou být přečteny

Typicky tuto funkci používáme v cyklu:
while(Serial.available() > 0) { //dokud je co číst
int inByte = Serial.read(); //načti byte
Serial.print(inByte, DEC); //vypiš ho
}

Čtení po bytech provádíme funkcí:
Serial.read()

návratová hodnota: byte načtený ze sériové linky, nebo -1 pokud nic v bufferu není. Typ návratové hodnoty: int

Pokud chceme s načtenými daty procovat jako s řetězcem (Stringem), použijeme funkci:
Serial.readString()

návratová hodnota: String z dat načtených z bufferu

Pokud očekávám ze sériové linky celé číslo, mohu ho načíst touto funkcí:
Serial.parseInt()

návratová hodnota: celé číslo, načtené ze sériové linky. Typ návratové hodnoty: long

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Odesílání dat na sériovou linku

A

Pro odeslání binárních dat (bez konverze) na sériovou linku použijeme funkci, resp. její varianty:
Serial.write(val)
Serial.write(str)
Serial.write(buf, length)

parametr: val - byte, která má být odeslán
parametr: str - řetězec, který bude odeslán jako série bytů
parametr: buf - pole, které bude odesláno jako série bytů
parametr: length - počet bytů, které mají z pole být odeslány
návratová hodnota: počet odeslaných bytů

Pro odeslání dat na sériovou linku ve formě ASCII textu (čitelného pro člověka) používáme funkci, resp její variantu:
Serial.print(val)
Serial.print(val, format)
Serial.println - vypise s odradkovanim

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Sériová komunikace

A

Mezi další způsoby sériové komunikace patří např.:

SPI
I2C
OneWire

Na rozdíl od UART toto jsou opravdu sběrnice, tedy je možná komunikace mezi více než dvěma zařízeními.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

SPI - Neboli Serial Peripheral Interface je sériová sběrnice sloužící k propojování zařízení.

A

Sběrnice je tvořena čtveřicí signálových vodičů. První signálový vodič je společný a slouží pro přenos dat od master zařízení směrem ke slave zažízením (MOSI – master out slave in), druhý společný vodič, také slouží k přenosu dat od slave zařízení k master zařízení (MISO – master in slave out). Pomocí třetího společného vodiče posílá master zařízení všem slavům hodinový signál (SCK - serial clock) no a konečně čtvrtý zmiňovaný vodič vede od master zařízení ke každému slave zařízení jednotlivě a slouží k výběru, které slave zařízení je cílem komunikace (SS - Slave Select). V reálu samozřejmě nesmíme zapomenout na zem GND a napájení +5V.

Protože sběrnice SPI používá společný hodinový signál, říkáme že data se přenáší synchronně. Komunikace je plně duplexní – master zařízení může odesílat i přijímat data současně od slave zařízení, kterého vybere nastavením příslušného SS vodiče.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

I2C - Neboli Inter-Integrated Circiut je sériová sběrnice sloužící k propojování zařízení.

A

Sběrnice je tvořena dvojicí signálových vodičů; z tohoto důvodu se můžeme v dokumentaci setkat i s označením TWI (Two Wire Serial Interface), které používají například někteří výrobci mikrořadičů (Atmel). První signálový vodič slouží pro obousměrný přenos dat (SDA – serial data), druhým vodičem pak zařízení typu master posílá všem ostatním zařízením hodinové signály (SCK – serial clock). V praxi je navíc nutné k této dvojici vodičů přidat i společnou signálovou zem (GND – ground).

Protože sběrnice I2C používá společný hodinový signál, říkáme že data se přenáší synchronně. Komunikace je však pouze poloduplexní – v jeden okamžik může master zařízení buď vysílat, nebo přijímat data ze slave zařízení. Které slave zařízení bude komunikovat je určeno pomocí jeho unikátní (typicky 7 bitové) adresy.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

OneWire - je sériová sběrnice sloužící k propojování zařízení. Typicky k připojení teplotních senzorů a apod.

A

Sběrnice má jen jeden signálový vodič a označovaný DATA. Realně je samozřejmě nutné vést ještě GND a případně +5V i když napájet je možné i z datového vodiče.

Komunikace je polo duplexní – master (mikro - kontrolér) zařízení může data buď odesílat, nebo přijímat od slave zařízení. Každé slave zařízení má 64-bitovou adresu která ho jednoznačně identifikuje.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly