I2C, SPI og UART - protokoller for kommunikasjon mellom elektroniske enheter.
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
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)
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.
Kva betyr det at UART er asynkron?
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.
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.
Forklar kva som er meint med «full-duplex» kommunikasjon i SPI, og korleis dette skil seg frå «half-duplex».
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.
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.
Kor mange leiarar treng I2C for datakommunikasjon (utanom jord)?
Oppsummering
| Eigenskap | UART | SPI | I2C |
|---|---|---|---|
| Leiarar | 2 (TX, RX) | 4+ (MOSI, MISO, SCK, SS) | 2 (SDA, SCL) |
| Synkron/asynkron | Asynkron | Synkron | Synkron |
| Duplex | Full-duplex | Full-duplex | Half-duplex |
| Hastigheit | Opptil 115200 bps | 1–50 MHz | 100 kHz – 3,4 MHz |
| Tal på einingar | 2 (punkt-til-punkt) | 1 master + fleire slavar | Fleire masterar + slavar |
| Adressering | Ingen | Slave Select-linjer | 7-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.
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.
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.