Tilbake
4.5
Serielle kommunikasjonsprotokoller

4.5 Serielle kommunikasjonsprotokoller

I2C, SPI og UART - protokoller for kommunikasjon mellom elektroniske enheter.

55 min
5 oppgaver
I2CSPIUARTSeriell kommunikasjonBussystemer
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 5 oppgaver

Seriell kommunikasjon mellom komponentar

Inne i elektroniske einingar må komponentar kommunisere med kvarandre. Ein mikrokontrollar (som Arduino) må til dømes lese data frå ein sensor, sende tekst til ein skjerm eller kommunisere med ein annan mikrokontrollar. Til dette brukar vi serielle kommunikasjonsprotokollar.

Seriell kommunikasjon betyr at data blir send éin bit om gongen over éin eller nokre få leiarar. Motsetnaden er parallell kommunikasjon, som sender fleire bit samtidig (f.eks. gamle skrivarkablar).

Dei tre viktigaste serielle protokollane i elektronikk er:
- UART – enkel, asynkron, punkt-til-punkt
- SPI – rask, full-duplex, master/slave
- I2C – fleksibel, to leiarar, mange einingar

UART (Universal Asynchronous Receiver/Transmitter)
UART er den enklaste serielle protokollen. Han er asynkron, som betyr at han ikkje brukar eit eige klokkesignal. I staden må sendar og mottakar vere einige om baudrate (hastigheit).

Kjenneteikn:
- To leiarar: TX (sendar) og RX (mottakar) – pluss felles jord (GND)
- Asynkron: Ingen klokkesignal – baudraten må settast likt på begge sider
- Punkt-til-punkt: Koblar saman berre to einingar
- Full-duplex: Kan sende og motta samtidig (på separate leiarar)

Vanlege baudratar: 9600, 19200, 38400, 57600, 115200 bps

Ei UART-datapakke (frame) ser slik ut:
- 1 startbit (alltid 0)
- 8 databits (sjølve informasjonen)
- 0 eller 1 paritetsbit (valfri feilsjekk)
- 1–2 stoppbit (alltid 1)

✏️UART-kommunikasjon med Arduino

Du koblar ein GPS-modul til ein Arduino via UART. GPS-modulen sender data med baudrate 9600. Kva må du passe på?

For at kommunikasjonen skal fungere må du:

1. Setje riktig baudrate: I Arduino-koden skriv du Serial.begin(9600) for å matche hastigheita til GPS-modulen.
2. Koble riktig: TX til GPS-modulen → RX til Arduino, og RX til GPS-modulen → TX til Arduino. Linjene blir kryssa.
3. Felles jord: Koble GND-pinnane saman.
4. Spenningsnivå: Sjekk at begge brukar 3,3V eller 5V logikk. Viss GPS brukar 3,3V og Arduino brukar 5V, treng du ein nivåkonverter for å unngå skade.

Viss baudraten er feil, vil du sjå uleseleg «søppeltekst» i seriemonitoren.

📝Oppgave 1

Kva betyr det at UART er asynkron?

SPI (Serial Peripheral Interface)
SPI er ein rask, synkron protokoll som brukar eit klokkesignal. Han følgjer master/slave-prinsippet der éi eining (master) styrer kommunikasjonen.

SPI brukar 4 leiarar:
- MOSI (Master Out Slave In): Data frå master til slave
- MISO (Master In Slave Out): Data frå slave til master
- SCK (Serial Clock): Klokkesignal frå master
- SS/CS (Slave Select / Chip Select): Vel kva slave som er aktiv (éin per slave)

Kjenneteikn:
- Synkron: Klokkesignal styrer overføringa
- Full-duplex: Sender og mottek data samtidig
- Høg hastigheit: Typisk 1–50 MHz
- Fleire slavar: Treng éi SS-linje per slave-eining

Typiske bruksområde: SD-kort, TFT-skjermar, rask sensorkommunikasjon.

✏️SPI med fleire slavar

Du har ein Arduino (master) kobla til ein temperatursensor og eit SD-kort via SPI. Forklar korleis masteren vel kva eining han kommuniserer med.

SPI brukar Slave Select (SS)-linjer for å velje aktiv eining:

- Temperatursensoren er kobla til SS-pinne 10
- SD-kortet er kobla til SS-pinne 4
- MOSI, MISO og SCK blir delte av begge

Når Arduinoen vil lese temperatur:
1. Sett SS-pinne 10 LOW (aktiver sensor)
2. Sett SS-pinne 4 HIGH (deaktiver SD-kort)
3. Send/mottak data via MOSI/MISO

Når Arduinoen vil skrive til SD-kort:
1. Sett SS-pinne 4 LOW (aktiver SD-kort)
2. Sett SS-pinne 10 HIGH (deaktiver sensor)
3. Send/mottak data

Berre éin slave kan vere aktiv om gongen. Låg (LOW) = aktiv, høg (HIGH) = inaktiv.

📝Oppgave 2

Forklar kva som er meint med «full-duplex» kommunikasjon i SPI, og korleis dette skil seg frå «half-duplex».

I2C (Inter-Integrated Circuit)
I2C (uttalast «I-squared-C» eller «I-to-C») er ein synkron protokoll som brukar berre to leiarar for å kommunisere med mange einingar.

Dei to leiarane:
- SDA (Serial Data): Datalinje (toveis)
- SCL (Serial Clock): Klokkesignal frå master

Kjenneteikn:
- Synkron: Klokkesignal styrer overføringa
- Half-duplex: Data blir send éin veg om gongen på SDA
- Adressebasert: Kvar eining har ei unik 7-bits adresse (0x00–0x7F)
- Multi-master/multi-slave: Fleire masterar og opptil 128 slavar på same buss
- Moderat hastigheit: Standard 100 kHz, fast mode 400 kHz, high-speed 3,4 MHz

Typiske bruksområde: sensorar (temperatur, akselerometer), OLED-skjermar, sanntidsklokker (RTC), EEPROM-minne.

✏️Adressering i I2C

Du har tre I2C-sensorar kobla til ein Arduino: ein temperatursensor (adresse 0x48), eit akselerometer (adresse 0x68) og ein OLED-skjerm (adresse 0x3C). Forklar korleis masteren vel riktig eining.

I I2C blir adresser brukte i staden for separate select-linjer:

1. Alle tre einingane er kobla til dei same to leiarane (SDA og SCL).
2. Når Arduinoen vil lese temperatur, sender han ein startbetingelse følgt av adressa 0x48 og ein lese-bit.
3. Berre temperatursensoren (som har adresse 0x48) svarar – dei andre ignorerer meldinga.
4. Etter kommunikasjonen sender Arduinoen ein stoppbetingelse.

Fordelen med I2C er at du treng berre 2 leiarar uansett kor mange einingar du har (opptil 128 med 7-bits adresser). Ulempa er at det er langsamare enn SPI og at adresser kan kollidere viss to einingar har same fabrikkadresse.

📝Oppgave 3

Kor mange leiarar treng I2C for datakommunikasjon (utanom jord)?

Oppsummering

EigenskapUARTSPII2C
Leiarar2 (TX, RX)4+ (MOSI, MISO, SCK, SS)2 (SDA, SCL)
Synkron/asynkronAsynkronSynkronSynkron
DuplexFull-duplexFull-duplexHalf-duplex
HastigheitOpptil 115200 bps1–50 MHz100 kHz – 3,4 MHz
Tal på einingar2 (punkt-til-punkt)1 master + fleire slavarFleire masterar + slavar
AdresseringIngenSlave Select-linjer7-bits adresser

- UART er enklast og blir ofte brukt for debugging og GPS-modular.
- SPI er raskast og blir brukt for skjermar og minnekort.
- I2C er mest fleksibel med tanke på tal på einingar og blir brukt for sensorar.
📝Oppgave 4

Du skal designe eit værstasjonsystem med Arduino. Systemet treng: ein temperatursensor, ein luftfuktsensor, ein barometrisk trykksensor, ein OLED-skjerm for vising, og eit SD-kort for logging. Kva seriell protokoll ville du valt for kvar komponent, og grunngje vala.

📝Oppgave 5

Forklar kva som skjer viss to UART-einingar er konfigurerte med ulik baudrate (f.eks. 9600 og 115200). Kva vil mottakaren sjå?

Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.