Et elektrisk signal er en spænding, der varierer over tid. Den grundlæggende forskel på analoge og digitale signaler er, at et analogt signal er kontinuert – det kan antage alle værdier inden for et interval – mens et digitalt signal er diskret – det kan kun antage et begrænset antal niveauer, i praksis næsten altid to: lav (0) og høj (1).
Et analogt signal varierer glat og uden spring. Mellem 0 V og 5 V findes uendeligt mange mulige værdier, for eksempel 1,37 V eller 3,982 V, og selv meget små ændringer bærer information.
De fleste fysiske størrelser i den virkelige verden er analoge. Typiske eksempler er:
Fordi alle mellemværdier har betydning, er analoge signaler følsomme over for støj: en forstyrrelse, der lægger 50 mV oven i signalet, ændrer direkte på den målte værdi.
Et digitalt signal kender kun to niveauer: lavt (tæt på 0 V) og højt (tæt på forsyningsspændingen, for eksempel 5 V eller 3,3 V). Modtageren afgør niveauet med en tærskel: ligger spændingen under tærsklen, tolkes den som 0; ligger den over, tolkes den som 1.
Tærsklen gør digitale signaler robuste over for støj: lidt støj på forbindelsen ændrer ikke fortolkningen, så længe signalet bliver på den rigtige side af tærsklen. Til gengæld kan signalet kun sige "høj" eller "lav" – ingen mellemværdier.
Eksempler på digitale signaler:
| Egenskab | Analogt signal | Digitalt signal |
|---|---|---|
| Værdier | Kontinuert: alle værdier i et interval | Diskret: typisk kun to niveauer (0/1) |
| Information | Ligger i den præcise spændingsværdi | Ligger i mønsteret af høje og lave niveauer |
| Støj | Følsom: støj ændrer direkte på værdien | Robust: tærskler filtrerer moderat støj fra |
| Eksempler | Temperatur, lys, lyd, joystick | Knapper, LED, UART, I²C, SPI |
| Læsning på mikrocontroller | Kræver ADC (fx analogRead()) | Læses direkte (fx digitalRead()) |
En mikrocontroller arbejder internt digitalt, så et analogt sensorsignal skal konverteres, før programmet kan bruge det. Det gør en ADC (analog-til-digital-konverter) i to trin:
Antallet af niveauer bestemmes af ADC'ens opløsning \(N\) i bit. En \(N\)-bit ADC deler referencespændingen \(V_{\text{ref}}\) i \(2^N\) trin, og den målte spænding beregnes som:
På Arduino Uno R3 har ADC'en 10 bit, så analogRead() giver et heltal mellem 0 og 1023, hvor 1023 svarer til 5 V. På Uno R4 WiFi kan opløsningen sættes op til 14 bit med analogReadResolution(14), hvilket giver værdier fra 0 til 16383 og dermed finere trin.
Hvad gør man, når en pin kun kan være høj eller lav, men enheden skal have "halv effekt"? Svaret er PWM (Pulse Width Modulation): signalet skifter hurtigt mellem høj og lav, og forholdet mellem høj-tid og periode – duty cycle \(D\) – bestemmer den gennemsnitlige spænding:
PWM er altså en digital måde at justere den gennemsnitlige effekt til en enhed: selve signalet er stadig kun høj eller lav, men fordi det skifter hurtigt, oplever en LED, en motor eller et varmelegeme det som et mellemniveau. Jo større duty cycle, jo mere gennemsnitlig effekt.
Det bruges typisk til at styre LED-lysstyrke, motorhastighed og servoer. Læs mere på siden om PWM.
analogRead()).