Electronika
Protocollen voor seriële communicatie
TechTalk
Root server » TechTalk » Electronica » Seriële communicatie
Seriële communicatie wordt nog volop gebruikt, bijvoorbeeld tussen verschillende componenten in een apparaat of tussen verschillende apparaten onderling. We bespreken drie protocollen die gebruikt kunnen worden met een arduino board.
-

-

RS-232

Dit is de meest bekende en meest eenvoudige communicatieprotocol. Er is één verbinding nodig (communicatie in één richting) of twee draden bij duplex communicatie. Dit protocol wordt doorgaans gebruikt voor de communicatie tussen verschillende apparaten. Er is geen master en geen slave: data wordt door een apparaat verstuurd en door het andere apparaat ontvangen.

Data kan over tientallen meters verstuurd worden, dit protocol is ideaal als er bijvoorbeeld een sensor op afstand uitgelezen moet worden.

Een klassiek voorbeeld is de arduino die data naar een lcd panel of een seriële printer stuurt. Er bestaan twee versies van het protocol, die enkel verschillen in de spanningen die gebruikt worden. De klassieke RS-232 werkt met positieve en negatieve spanningen en de TTL versie die met spanningen van 0 en 5V werkt en een omgekeerde logica gebruikt. Matrixprinters met een seriële interface gebruiken RS-232 terwijl lcd panelen de TTL versie gebruiken.

Links naar pagina's:

Een arduino kan serieel communiceren via bepaalde vaste poorten, maar men kan ook een software seriële poort creëren die meer mogelijkheden biedt.


I2C

Dit is een minder bekend protocol, maar die veel gebruikt wordt in apparaten zelf. Het werd ontworpen in de jaren 1980 om de verschillende delen van een apparaat met elkaar te verbinden (televisietoestel, videorecorder,...). De verbinding kan slechts een paar tientallen centimeters overbruggen en de basisversie is niet snel. Het protocol wordt nog volop gebruikt door bijvoorbeeld real time clocks (arduino), geheugenchips (EEPROM), intelligente sensoren, en dergelijke meer.

In een videorecorder waren er verschillende processoren (hoofdprocessor, display processor, servo processor) en randapparatuur zoals de tuner, de klok en een geheugen IC.

Philips, die aan de basis van het protocol ligt, bestaat niet meer, het is een naam die op bepaalde apparaten "Made in China" geplakt wordt. De norm wordt nu beheerd door NXP, een onderdelenfabricant.

Het protocol kan met meerdere masters en meerdere slaves werken, waarbij op een bepaald ogenblik slechts één master aktief kan zijn. Er zijn twee communicatielijnen: een datalijn (SDA)en een kloklijn (SCL). Data wordt ingelezen op het ogenblik dat de kloklijn hoog gemaakt wordt. Communicatie is didirectioneel en de apparaten trekken de lijnen naar de massa (in rust zijn d elijnen hoog door een pull up weerstand). Het protocol is zeer eenvoudig en is goed gestandardiseerd.

Normaal levert de aktieve master de klokpulsen maar een slave kan de klok laag maken als die niet klaar is. Verschillend ekloksnelheden zijn mogelijk, maar een nauwkeurige timing is niet nodig. Het is de aktieve master die de kloksnelheid bepaalt.

Een bericht bestaat uit één of meerdere datablokken. Een datablok, dat is één byte die verstuurd wordt (het is dus een protocol met een hoge overhead als er veel data verstuurd moet worden). Als de master een bericht wilt sturen, dan veroorzaakt hij een startconditie en stuurt het adres op de bus. Het adres bestaat uit 7 of 10 bits. Dan wordt er een read of write bit gestuurd om aan te geven of de master data zal versturen of ontvangen.

Data wordt gelezen op het ogenblik dat de klok hoog is. De datalijn mag niet veranderen als de klok hoog is. Een wijziging van de datalijn als de klok hoog is is een startconditie (overgang van hoog naar laag) of een stopconditie (overgang naar hoog). De restart conditie is een nieuwe start conditie zonder dat de master de bus tussendoor vrijgeeft.

Een slave die zijn adres op de bus ziet passeren (na een start conditie) zal een ack signaal produceren. Ziet de processor geen ack, dan wordt het adres niet gebruikt. Dataoverdracht gebeurt in datablokken van 1 byte en de ontvanger stuurt een ack op het einde om aan te geven dat de gegevens ontvangen zijn. Als alle data verstuurd is, stuurt d eprocessor een stop conditie om aan te geven dat de bus vrij is. De master stuurt ook een stop als er na het versturen van een adres geen ack komt van een slave, dit ook om de bus opnieuw vrij te geven.

Een nack code wordt door de slave verstuurd als de opdracht niet uitgevoerd kon worden (write richting slave). Een nack code wordt ook door de master verstuurd als er geen data meer verstuurd moet worden (read richting master). De master kan dan een nieuw bevel geven (restart conditie) of de bus vrijgeven (stop conditie).

Iedere slave moet een uniek adres hebben. ER zijn 127 mogelijke adressen, maar een aantal adressen zijn gereserveerd (broadcast). Bepaalde slave componenten hebben jumpers om de adres in te stellen.

Het 64k EEPROM geheugen gebruikt het I2C protocol. Een of meerdere opeenvolgende bytes kunnen gelezen worden met een enkele instructie.

Het protocol heeft slechts twee lijnen nodig, en dit is interessant bij een arduino, die maar een beperkt aantal digitale lijnen heeft. De te gebruiken library heet Wire. De digitale poort 13 kan niet gebruikt worden, want er zit reeds een led op de poort aangesloten, waardoor een hoog niveau met pull up weerstand niet bereikt kan worden.

Een pen dient zowel als ingang en als uitgang. De poorten moeten als INPUT_PULLUP gedefinieerd worden. Een pen hoog maken is niet toegestaan, want een ander component kan terzelfdertijd de poort laag trekken. Om dergelijke condities tegen te gaan worden de extra modules uitgerust met beveiligingsweerstanden.


SPI

Dit is een recenter en sneller protocol die met unidirectionele lijnen werkt om één van de beperkingen van I2C te omzeilen. Het is mogelijk data over langere afstanden te versturen door middel van lijnversterkers, maar in de praktijk worden de gegevens slechts over een paar meters verstuurd. Er zijn 4 communicatielijnen nodig.

De norm wordt gebruikt door bepaalde apparaten zoals SD geheugenkaarten. Een SD interfacekaart bevat niet veel meer dan een kaarthouder en een connector.

Om het protocol te kunnen gebruiken moet de library SPI gebruikt worden. De digitale lijnen 11, 12 en 13 worden hiervoor gebruikt, samen met lijn 4 voor de chipselectie.

Om een geheugenkaart te lezen moet men ook de library SD gebruiken. Deze bevat de nodige routines om met de datakaart te werken (FAT-16 of FAT-32 geformateerd).

Een voorbeeld waar gegevens op de geheugenkaart geschreven worden staat uitgelegd op de pagina opslaan van gegevens op een datakaart (opmaken van logs).

Een voorbeeld van een SD kaarthouder staat rechts, je ziet de 4 communicatielijnen: Chip Select, Master Out Slave In, Serial Clock en Master In Slave Out en de voedingslijnen. De kaarthouder bevat enkel een 3.3V voeding voor kaarten die enkel op 3.3V werken.


CAN

De CAN bus is een seriële databus. Bij een bussysteem worden er meer apparaten op eenzelfde lijn aangesloten. Een van de kenmerken van de CAN bus is dat deze met prioriteiten werkt: een apparaat met een lagere prioriteit stopt met zenden als er een apparaat met een hogere prioriteit zendt.

De apparaten hebben geen echte adressen: een adres is in feite een proiriteitslevel. Alle apparaten op de bus kunnen de data lezen en daarop reageren indien nodig (softwarebepaald in het apparaat).

De bus werd oorspronkelijk gebruikt in auto's om het aantal kabels te beperken, haar het protocol wordt veelvuldig in de industrie gebruikt.

De busspanningen zijn niet compatibel met de spanningen die door een arduino (of een andere microcontroller) gebruikt worden. Een specifieke IC MCP2515 voert de vertaling uit tussen SPI (locale communicatie tussen bijvoorbeeld een processor en de busdriver) en CANbus (communicatie tussen verschillende apparaten.

Het apparaat hier is een deel van het motormanagement. Het stuurt de informatie betreffende de ingangen door naar de bus en zet de uitgangen hoog of laag naargelang de ontvangen data.


Andere communicatieprotocollen

We zullen hier niet alle protocollen bespreken, maar ons beperken tot de meest interessante protocollen.

De meeste LCD schermen gebruiken een parallel protocol over 4 of 8 bits. Om niet een aantal poorten van de arduino te blokkeren hebben de meeste lcd schermen ook een seriële interface (TTL). De interface vertaalt de opdrachten via de seriële poort in een parallele communicatie.

Een LCD scherm heeft tot 16 pennen, waarvan er 7 voor de datacommunicatie gebruikt worden (over 4 bits). Een dergelijke verbinding zou nagenoeg alle digitale poorten van een arduino gebruiken, terwijl de communicatie ook over één enkele pen zou kunnen gebeuren. De parallele verbinding laat echter meer instructies toe, terwijl de seriële verbinding beperkt is in een paar basisopdrachten (scherm wissen, lijnsprong,...). De andere pennen van de lcd module dienen om de backlighting te regelen en voor de voeding. ele

Publicités - Reklame

-