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 komponenter

Inne i elektroniske enheter må komponenter kommunisere med hverandre. En mikrokontroller (som Arduino) må for eksempel lese data fra en sensor, sende tekst til en skjerm eller kommunisere med en annen mikrokontroller. Til dette bruker vi serielle kommunikasjonsprotokoller.

Seriell kommunikasjon betyr at data sendes én bit om gangen over én eller noen få ledere. Motsetningen er parallell kommunikasjon, som sender flere bit samtidig (f.eks. gamle skriverkabler).

De tre viktigste serielle protokollene i elektronikk er:
- UART – enkel, asynkron, punkt-til-punkt
- SPI – rask, full-duplex, master/slave
- I2C – fleksibel, to ledere, mange enheter

UART (Universal Asynchronous Receiver/Transmitter)
UART er den enkleste serielle protokollen. Den er asynkron, som betyr at den ikke bruker et eget klokkesignal. I stedet må sender og mottaker være enige om baudrate (hastighet).

Kjennetegn:
- To ledere: TX (sender) og RX (mottaker) – pluss felles jord (GND)
- Asynkron: Ingen klokkesignal – baudraten må settes likt på begge sider
- Punkt-til-punkt: Kobler sammen kun to enheter
- Full-duplex: Kan sende og motta samtidig (på separate ledere)

Vanlige baudrater: 9600, 19200, 38400, 57600, 115200 bps

Et UART-datapakke (frame) ser slik ut:
- 1 startbit (alltid 0)
- 8 databits (selve informasjonen)
- 0 eller 1 paritetsbit (valgfri feilsjekk)
- 1–2 stoppbit (alltid 1)

✏️UART-kommunikasjon med Arduino

Du kobler en GPS-modul til en Arduino via UART. GPS-modulen sender data med baudrate 9600. Hva må du passe på?

For at kommunikasjonen skal fungere må du:

1. Sette riktig baudrate: I Arduino-koden skriver du Serial.begin(9600) for å matche GPS-modulens hastighet.
2. Koble riktig: GPS-modulens TX → Arduinos RX, og GPS-modulens RX → Arduinos TX. Linjene krysses.
3. Felles jord: Koble GND-pinnene sammen.
4. Spenningsnivå: Sjekk at begge bruker 3,3V eller 5V logikk. Hvis GPS bruker 3,3V og Arduino bruker 5V, trenger du en nivåkonverter for å unngå skade.

Hvis baudraten er feil, vil du se uleselig «søppeltekst» i seriemonitoren.

📝Oppgave 1

Hva betyr det at UART er asynkron?

SPI (Serial Peripheral Interface)
SPI er en rask, synkron protokoll som bruker et klokkesignal. Den følger master/slave-prinsippet der én enhet (master) styrer kommunikasjonen.

SPI bruker 4 ledere:
- MOSI (Master Out Slave In): Data fra master til slave
- MISO (Master In Slave Out): Data fra slave til master
- SCK (Serial Clock): Klokkesignal fra master
- SS/CS (Slave Select / Chip Select): Velger hvilken slave som er aktiv (én per slave)

Kjennetegn:
- Synkron: Klokkesignal styrer overføringen
- Full-duplex: Sender og mottar data samtidig
- Høy hastighet: Typisk 1–50 MHz
- Flere slaver: Trenger én SS-linje per slave-enhet

Typiske bruksområder: SD-kort, TFT-skjermer, rask sensorkommunikasjon.

✏️SPI med flere slaver

Du har en Arduino (master) koblet til en temperatursensor og et SD-kort via SPI. Forklar hvordan masteren velger hvilken enhet den kommuniserer med.

SPI bruker Slave Select (SS)-linjer for å velge aktiv enhet:

- Temperatursensoren er koblet til SS-pinne 10
- SD-kortet er koblet til SS-pinne 4
- MOSI, MISO og SCK deles 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/motta 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/motta data

Bare én slave kan være aktiv om gangen. Lav (LOW) = aktiv, høy (HIGH) = inaktiv.

📝Oppgave 2

Forklar hva som menes med «full-duplex» kommunikasjon i SPI, og hvordan dette skiller seg fra «half-duplex».

I2C (Inter-Integrated Circuit)
I2C (uttales «I-squared-C» eller «I-to-C») er en synkron protokoll som bruker bare to ledere for å kommunisere med mange enheter.

De to lederne:
- SDA (Serial Data): Datalinje (toveis)
- SCL (Serial Clock): Klokkesignal fra master

Kjennetegn:
- Synkron: Klokkesignal styrer overføringen
- Half-duplex: Data sendes én vei om gangen på SDA
- Adressebasert: Hver enhet har en unik 7-bits adresse (0x00–0x7F)
- Multi-master/multi-slave: Flere mastere og opptil 128 slaver på samme buss
- Moderat hastighet: Standard 100 kHz, fast mode 400 kHz, high-speed 3,4 MHz

Typiske bruksområder: sensorer (temperatur, akselerometer), OLED-skjermer, sanntidsklokker (RTC), EEPROM-minne.

✏️Adressering i I2C

Du har tre I2C-sensorer koblet til en Arduino: en temperatursensor (adresse 0x48), et akselerometer (adresse 0x68) og en OLED-skjerm (adresse 0x3C). Forklar hvordan masteren velger riktig enhet.

I I2C brukes adresser i stedet for separate select-linjer:

1. Alle tre enhetene er koblet til de samme to lederne (SDA og SCL).
2. Når Arduinoen vil lese temperatur, sender den en startbetingelse fulgt av adressen 0x48 og en lese-bit.
3. Kun temperatursensoren (som har adresse 0x48) svarer – de andre ignorerer meldingen.
4. Etter kommunikasjonen sender Arduinoen en stoppbetingelse.

Fordelen med I2C er at du trenger bare 2 ledere uansett hvor mange enheter du har (opptil 128 med 7-bits adresser). Ulempen er at det er langsommere enn SPI og at adresser kan kollidere hvis to enheter har samme fabrikkadresse.

📝Oppgave 3

Hvor mange ledere trenger I2C for datakommunikasjon (utenom jord)?

Oppsummering

EgenskapUARTSPII2C
Ledere2 (TX, RX)4+ (MOSI, MISO, SCK, SS)2 (SDA, SCL)
Synkron/asynkronAsynkronSynkronSynkron
DuplexFull-duplexFull-duplexHalf-duplex
HastighetOpptil 115200 bps1–50 MHz100 kHz – 3,4 MHz
Antall enheter2 (punkt-til-punkt)1 master + flere slaverFlere mastere + slaver
AdresseringIngenSlave Select-linjer7-bits adresser

- UART er enklest og brukes ofte for debugging og GPS-moduler.
- SPI er raskest og brukes for skjermer og minnekort.
- I2C er mest fleksibel med tanke på antall enheter og brukes for sensorer.
📝Oppgave 4

Du skal designe et værstasjonsystem med Arduino. Systemet trenger: en temperatursensor, en luftfuktighetssensor, en barometrisk trykksensor, en OLED-skjerm for visning, og et SD-kort for logging. Hvilken seriell protokoll ville du valgt for hver komponent, og begrunn valgene.

📝Oppgave 5

Forklar hva som skjer hvis to UART-enheter er konfigurert med ulik baudrate (f.eks. 9600 og 115200). Hva vil mottakeren se?

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.