diff --git a/course/en/21-digital-electronics.md b/course/en/21-digital-electronics.md new file mode 100644 index 0000000..c07d3b9 --- /dev/null +++ b/course/en/21-digital-electronics.md @@ -0,0 +1,57 @@ +# Numbers in digital electronics + +Digital electronics connects bit patterns to physical signals, registers, measurements and protocols. Numbers do not merely describe mathematics: they control pins and encode observations of the physical world. + +## PREDICT + +If an 8-bit GPIO register contains `0x81`, which bits are set? + +## STEP — logical and physical levels + +Logical zero and one are abstractions. Physical circuits use voltage ranges interpreted as LOW and HIGH; exact thresholds come from the component datasheet. + +Signals can be active-low, meaning the asserted function corresponds to an electrically LOW line. Naming conventions vary. + +## GPIO registers and masks + +For `PORT = 10100001₂ = 0xA1`, individual bits may control separate functions. + +Typical software operations include setting a bit with `PORT |= (1 << 3)`, clearing it with `PORT &= ~(1 << 3)`, and toggling it with XOR. + +Real hardware must be checked against its datasheet. Some registers provide dedicated SET/CLEAR aliases, write-one-to-clear flags or other semantics for which ordinary read-modify-write is inappropriate. + +## Datasheets and register maps + +Register documentation commonly specifies addresses or offsets, bit positions, field widths, reset values, access properties and meanings of encoded field values. + +A value such as `0x82` is only meaningful once its register and field definitions are known. + +## ADC and DAC + +An idealized N-bit ADC provides (2^N) digital codes. A 10-bit converter has 1024 codes, usually numbered 0 through 1023. + +A simple idealized unipolar conversion can be approximated by + +`V ≈ code / (2^N - 1) × Vref` + +but the exact transfer function, reference, tolerances and endpoint conventions come from the datasheet. + +A DAC maps digital codes in the opposite direction toward an analog output; its width likewise determines the number of available codes. + +## Logic analyzers + +Logic analyzers capture digital samples and may display bits, bytes, hexadecimal values, timestamps or decoded UART/SPI/I²C fields. + +The byte `10100101₂ = 0xA5` might be a command, address, flags or payload. Protocol context supplies meaning. Serial analysis may additionally require bit order, clocking, framing and multi-byte byte order. + +## OBSERVE + +Hardware registers and protocols demonstrate the course's central idea: bit pattern plus representation rules produces meaning. + +## EXPLAIN + +Reading a datasheet constantly requires translating among bit positions, masks, hexadecimal values, numerical quantities and physical behavior. + +## Check yourself + +Which bits are set in `0x81`? How many codes does a 12-bit ADC have? Why can ordinary read-modify-write be wrong for some status registers? diff --git a/course/no/21-digital-elektronikk.md b/course/no/21-digital-elektronikk.md new file mode 100644 index 0000000..aa6eb6a --- /dev/null +++ b/course/no/21-digital-elektronikk.md @@ -0,0 +1,88 @@ +# Tall i digital elektronikk + +I digital elektronikk kobles bitmønstre til fysiske signaler, registre, målinger og protokoller. Tallene er ikke bare matematikk: de styrer pinner og beskriver virkelige måleverdier. + +## PREDICT + +Hvis et 8-bit GPIO-register inneholder `0x81`, hvilke bit er satt? + +## STEP — logisk og fysisk nivå + +En logisk 0 eller 1 er en abstraksjon. Den fysiske kretsen bruker spenningsområder som tolkes som LOW og HIGH. Nøyaktige terskler avhenger av komponent og datablad. + +Et signal kan også være **active-low**. Da betyr det aktive nivået logisk/funksjonelt «på» når den elektriske linjen er LOW. Navn som `/RESET`, `RESET_n` eller lignende brukes ofte, men konvensjonen varierer. + +## GPIO-register + +Tenk et register: + +`PORT = 1010 0001₂ = 0xA1` + +Hver bit kan styre en separat funksjon. En maske kan endre én bit uten å uttrykke hele registerverdien på nytt. + +Sett bit 3: + +`PORT |= (1 << 3)` + +Nullstill bit 3: + +`PORT &= ~(1 << 3)` + +Toggle bit 3: + +`PORT ^= (1 << 3)` + +På virkelig hardware må du lese databladet: enkelte registre har egne SET/CLEAR-registre, write-one-to-clear-flagg eller andre regler som gjør en vanlig read-modify-write feil. + +## Datablad og registerkart + +Et registerkart oppgir typisk: + +- registeradresse eller offset +- bitposisjoner +- feltbredder +- resetverdi +- read/write-egenskaper +- betydningen av feltverdier + +En verdi som `0x82` er først nyttig når vi vet hvilket register den tilhører og hva hvert bitfelt betyr. + +## ADC + +En idealisert N-bit ADC har (2^N) digitale koder. En 10-bit ADC har 1024 koder, normalt 0–1023. + +For en enkel idealisert unipolar modell kan en kode omregnes omtrent som: + +`V ≈ code / (2^N - 1) × Vref` + +Den nøyaktige overføringsfunksjonen, referansen, toleranser og endpoint-definisjonen må hentes fra databladet. + +## DAC + +En DAC gjør motsatt retning: en digital kode påvirker en analog utgang. Også her bestemmer bitbredde antall koder og dermed den idealiserte kvantiseringen. + +## Logic analyzer + +En logic analyzer samler digitale samples. Verktøyet kan vise dem som: + +- bit +- byte +- hex +- dekodede UART/SPI/I²C-felt +- timestamps + +Byte `10100101₂ = 0xA5` kan være kommando, adresse, flagg eller data. Protokollen gir semantikken. + +Ved serielle protokoller må du også kjenne blant annet bitrekkefølge, klokking, framing og byteorden der flerbytefelt brukes. + +## OBSERVE + +Hardware-registre og protokoller er praktiske eksempler på hele kursets hovedidé: bitmønster + avtalt representasjon = mening. + +## EXPLAIN + +Når du leser et datablad, oversetter du kontinuerlig mellom bitposisjoner, masker, hex, desimale størrelser og fysisk funksjon. + +## Sjekk deg selv + +Hvilke bit er satt i `0x81`? Hvor mange koder har en 12-bit ADC? Hvorfor bør du ikke anta at alle statusflagg kan nullstilles med vanlig read-modify-write? diff --git a/exercises/no/10-digital-elektronikk.md b/exercises/no/10-digital-elektronikk.md new file mode 100644 index 0000000..c161d03 --- /dev/null +++ b/exercises/no/10-digital-elektronikk.md @@ -0,0 +1,10 @@ +# Øvelser: digital elektronikk + +1. Skriv `0xA5` som åtte bit og oppgi hvilke bitposisjoner som er 1. +2. Lag en maske som setter bit 6 i et 8-bit register. +3. Lag en maske som tester bit 2 og bit 5. +4. Hvor mange digitale koder har en 8-, 10- og 12-bit ADC? +5. Bruk den idealiserte endpoint-formelen til å beregne omtrent spenning for kode 512 i en 10-bit ADC med `Vref = 3.3 V`. +6. Hvorfor må terskler for HIGH og LOW hentes fra databladet? +7. Hva betyr write-one-to-clear, og hvorfor kan en naiv read-modify-write være farlig? +8. En logic analyzer viser `A5 02`. Nevn informasjon du trenger før du kan tolke disse to bytene som et flerbytefelt. diff --git a/solutions/no/10-digital-elektronikk.md b/solutions/no/10-digital-elektronikk.md new file mode 100644 index 0000000..ce6eb35 --- /dev/null +++ b/solutions/no/10-digital-elektronikk.md @@ -0,0 +1,10 @@ +# Løsninger: digital elektronikk + +1. `10100101₂`; bit 7, 5, 2 og 0 er satt. +2. `1 << 6 = 0x40`. +3. `(1 << 2) | (1 << 5) = 0x24`. +4. 8 bit: 256; 10 bit: 1024; 12 bit: 4096 koder. +5. (512/1023 × 3.3 \approx 1.65\text{ V}). Dette er en idealisert beregning; virkelig ADC-oppførsel må tas fra databladet. +6. Logiske nivåer er elektriske spenningsområder og varierer med teknologi, forsyning og komponentkrav. +7. Write-one-to-clear betyr at et flagg nullstilles ved å skrive 1 til dets bit. En read-modify-write kan derfor utilsiktet skrive 1 tilbake til andre satte flagg og fjerne dem. +8. Blant annet protokoll/feltdefinisjon, feltbredde, byteorden og eventuelt bitrekkefølge/framing.