Salta al contingut

Exercicis de programació i sistemes digitals — Tecnologia i Enginyeria 1r Batxillerat

Aquests exercicis treballen la base de tots els sistemes digitals: els uns i els zeros. Comences amb el sistema binari i les operacions lògiques AND i OR, i simplifiques expressions amb les lleis de l'àlgebra de Boole. Després dissenyes funcions lògiques per a situacions reals, com una alarma que s'activa només si la porta està oberta i el sistema està connectat. Al final programes microcontroladors: quina part d'un programa d'Arduino s'executa una sola vegada i com faries un enllumenat automàtic amb una LDR. Les solucions mostren les taules de veritat. Errors típics: llegir els residus de dalt a baix en passar a binari i confondre la porta OR amb la XOR.

Nivell bàsic

1

Exercici 1

Quin resultat dona l'operació AND entre 1 i 0? I l'OR entre 1 i 0?

Mostra la solució

AND(1,0) = 0 (cal que tots siguin 1); OR(1,0) = 1 (n'hi ha prou que un sigui 1).

2

Exercici 2

Què és un microcontrolador?

Mostra la solució

Un petit ordinador en un sol xip (processador, memòria i pins d'E/S) que executa un programa per controlar sensors i actuadors.

3

Exercici 3

En un programa d'Arduino, quina part s'executa una sola vegada a l'inici i quina es repeteix contínuament mentre el sistema funciona?

Mostra la solució

El setup (configuració) s'executa una sola vegada a l'inici, per exemple per definir quins pins són entrada o sortida. El loop (bucle) es repeteix contínuament, i és on s'hi posa la feina que el sistema ha de fer una vegada i una altra.

4

Exercici 4

Calcula la sortida de les portes següents: (a) NAND amb entrades 1 i 1; (b) NOR amb entrades 0 i 0; (c) NOT amb entrada 1; (d) NAND amb entrades 1 i 0.

Mostra la solució

(a) NAND és la negació d'AND: AND(1,1) = 1, per tant NAND = 0.
(b) NOR és la negació d'OR: OR(0,0) = 0, per tant NOR = 1.
(c) NOT inverteix l'entrada: NOT 1 = 0.
(d) AND(1,0) = 0, per tant NAND = 1.
Regla: la NAND només val 0 quan totes les entrades valen 1.

5

Exercici 5

Converteix el nombre binari 1011 0110 a hexadecimal i el nombre hexadecimal 3C a decimal. (Recorda: A = 10, B = 11, C = 12, D = 13, E = 14, F = 15.)

Mostra la solució

Binari a hexadecimal: es separa en grups de 4 bits. 1011 = 11 = B i 0110 = 6, per tant 1011 01102 = B616.
Hexadecimal a decimal: 3C16 = 3·16 + 12 = 60.
Comprovació de la primera: B616 = 11·16 + 6 = 182, i 101101102 = 128 + 32 + 16 + 4 + 2 = 182.

6

Exercici 6

Quin tipus de variable d'Arduino (int, float, boolean o char) és més adequat per guardar: (a) la temperatura 23,5 °C; (b) el nombre de persones que entren en una sala; (c) si un polsador està premut o no; (d) la lletra «A»?

Mostra la solució

(a) float: té decimals.
(b) int: és un nombre enter.
(c) boolean: només té dos valors, cert (true) o fals (false).
(d) char: guarda un sol caràcter.
Triar bé el tipus estalvia memòria i evita errors d'arrodoniment.

7

Exercici 7

Explica què fa cadascuna d'aquestes instruccions d'Arduino: (a) pinMode(13, OUTPUT); (b) digitalWrite(13, HIGH); (c) delay(500);

Mostra la solució

(a) Configura el pin 13 com a sortida (per governar un LED, un relé…); es posa al setup.
(b) Posa el pin 13 a nivell alt (5 V), per exemple per encendre un LED connectat.
(c) Atura el programa durant 500 mil·lisegons (0,5 s) abans de continuar amb la següent instrucció.

8

Exercici 8

Quina diferència hi ha entre digitalRead() i analogRead() a Arduino? Quin interval de valors dona analogRead() amb l'ADC de 10 bits?

Mostra la solució

digitalRead() llegeix un pin com a entrada digital i retorna només 0 (LOW) o 1 (HIGH); serveix per a polsadors i interruptors.
analogRead() llegeix una tensió entre 0 i 5 V amb l'ADC i retorna un enter entre 0 i 1023 (2102^{10} = 1024 valors); serveix per a sensors analògics com una LDR o un potenciòmetre.

9

Exercici 9

Quants valors diferents es poden representar amb 8 bits? Quin és el nombre decimal més gran que es pot escriure amb 8 bits (sense signe)? I amb 10 bits?

Mostra la solució

Amb n bits es poden representar 2n2^{n} valors.
8 bits: 282^{8} = 256 valors, del 0 al 255; el més gran és 255 (11111111).
10 bits: 2102^{10} = 1024 valors, del 0 al 1023.
El nombre més gran sempre és 2n2^{n} - 1, perquè el 0 també compta.

10

Exercici 10

Digues quan s'utilitza una estructura condicional (if/else) i quan un bucle (for o while) en un programa. Posa un exemple de cadascun.

Mostra la solució

El condicional if/else s'utilitza per prendre una decisió segons una condició, i executa un bloc o un altre (p. ex. si la LDR llegeix poc, encendre el LED, si no, apagar-lo).
El bucle for/while repeteix un bloc de codi mentre es compleix una condició o un nombre determinat de vegades (p. ex. fer pampallugar un LED 5 vegades amb un for).
Sovint es combinen: dins d'un bucle hi pot haver condicionals.

Nivell intermedi

11

Exercici 11

Quina és la sortida d'una porta XOR quan les dues entrades valen 1?

Mostra la solució

0, perquè la XOR val 1 només si les entrades són diferents; si són iguals (1 i 1) dona 0.

12

Exercici 12

Una alarma s'ha d'activar només si la porta està oberta I el sistema d'alarma està activat. Quina porta lògica implementa aquesta condició?

Mostra la solució

La porta AND: la seva sortida només val 1 (l'alarma s'activa) quan totes dues entrades valen 1 alhora (porta oberta i sistema activat).

13

Exercici 13

Quines dues parts bàsiques té un programa d'Arduino i què fa cadascuna?

Mostra la solució

La configuració (setup), que s'executa una vegada a l'inici, i el bucle (loop), que es repeteix contínuament.

14

Exercici 14

Explica com programaries un enllumenat automàtic amb una LDR i un LED (a grans trets).

Mostra la solució

Al setup configuro la LDR com a entrada i el LED com a sortida. Al loop llegeixo la LDR i, amb un condicional, si el valor indica poca llum encenc el LED; si no, l'apago. El bucle es repeteix contínuament.

15

Exercici 15

Un programa d'Arduino executa dins del loop: digitalWrite(8, HIGH); delay(300); digitalWrite(8, LOW); delay(700); Calcula el període, la freqüència del pampallugueig del LED i el percentatge de temps que està encès.

Mostra la solució

Període: T = 300 + 700 = 1000 ms = 1,0 s.
Freqüència: f = 1/T = 1/1,0 = 1 Hz (un parpelleig per segon).
Temps encès: 300/1000 = 30 %.
Si volguéssim un 50 % hauríem de posar delay(500) als dos casos.

16

Exercici 16

Completa la taula de veritat de la porta NAND de dues entrades i explica com es pot obtenir una porta NOT fent servir només una porta NAND.

Mostra la solució

Taula (A, B → S): 0,0 → 1; 0,1 → 1; 1,0 → 1; 1,1 → 0.
Si connectem les dues entrades d'una NAND a un mateix senyal A, resulta S = NAND(A, A) = (A·A)' = A'. Per tant, la NAND amb les entrades unides és una porta NOT.
Amb NAND es poden construir totes les altres portes, per això s'anomena porta universal.

17

Exercici 17

Simplifica amb àlgebra de Boole l'expressió F = (A + B)·(A + Bˉ\bar{B}) i comprova el resultat amb A = 0 i B = 1.

Mostra la solució

Desenvolupem: F = A·A + A·Bˉ\bar{B} + B·A + B·Bˉ\bar{B}.
Com que A·A = A i B·Bˉ\bar{B} = 0: F = A + A·Bˉ\bar{B} + A·B = A·(1 + Bˉ\bar{B} + B) = A·1 = A.
Comprovació amb A = 0 i B = 1: (0 + 1)·(0 + 0) = 1·0 = 0, que és igual a A = 0.

18

Exercici 18

Un programa d'Arduino fa: if (analogRead(A0) > 512) { digitalWrite(8, HIGH); } else { digitalWrite(8, LOW); } (a) A quina tensió d'entrada aproximada correspon el valor 512 amb una referència de 5 V i un ADC de 10 bits? (b) Què fa el LED del pin 8 quan la tensió és de 4 V?

Mostra la solució

(a) Cada unitat de l'ADC val 51023\tfrac{5}{1023} V, o sigui 4,89 mV. Per al valor 512: V ≈ 512·51023=2,50\tfrac{5}{1023} = 2{,}50 V, és a dir uns 2,5 V (la meitat de l'escala).
(b) Amb 4 V la lectura és 45\tfrac{4}{5}·1023 ≈ 818, que és més gran que 512: es compleix la condició i el pin 8 queda a HIGH, de manera que el LED s'encén.

19

Exercici 19

(a) Quants bits calen com a mínim per codificar 20 estats diferents d'una màquina? (b) Quantes files té la taula de veritat d'una funció de 4 entrades?

Mostra la solució

(a) Amb n bits hi ha 2n2^{n} combinacions. 242^{4} = 16 no n'hi ha prou i 252^{5} = 32 ja és suficient: calen 5 bits.
(b) Una funció de 4 entrades té 242^{4} = 16 combinacions, per tant la taula té 16 files.
Cada entrada nova doble el nombre de files.

20

Exercici 20

Quin valor té la variable suma al final d'aquest codi? int suma = 0; for (int i = 1; i <= 7; i++) { if (i % 2 == 1) { suma = suma + i; } } (L'operador % dona el residu de la divisió.) Explica què calcula.

Mostra la solució

El bucle fa que i valgui 1, 2, 3, 4, 5, 6 i 7.
La condició i % 2 == 1 només es compleix quan i és senar, és a dir, per a 1, 3, 5 i 7.
suma = 0 + 1 + 3 + 5 + 7 = 16.
El codi calcula la suma dels nombres senars de l'1 al 7.

21

Exercici 21

Una màquina s'engega (S = 1) si la porta està tancada (P = 1) i, a més, o bé l'usuari prem el botó de marxa (M = 1), o bé el mode automàtic està activat (A = 1). Escriu la funció lògica i calcula S per a (P, M, A) = (1,0,1), (0,1,1), (1,1,0) i (1,0,0).

Mostra la solució

La funció és S = P·(M + A).
(1,0,1): 1·(0 + 1) = 1 → s'engega.
(0,1,1): 0·(1 + 1) = 0 → no s'engega (porta oberta).
(1,1,0): 1·(1 + 0) = 1 → s'engega.
(1,0,0): 1·(0 + 0) = 0 → no s'engega.
La porta tancada és condició necessària en tots els casos.

Nivell avançat

22

Exercici 22

Converteix el binari 101101 a decimal i el decimal 77 a binari.

Mostra la solució

101101 = 32 + 8 + 4 + 1 = 45.
77: dividint per 2, els residus són 1, 0, 1, 1, 0, 0, 1; llegits de baix a dalt, 1001101. Comprovació: 64 + 8 + 4 + 1 = 77.

23

Exercici 23

Simplifica amb l'àlgebra de Boole l'expressió A·B + A·Bˉ\bar{B}.

Mostra la solució

Es treu A factor comú: A·(B + Bˉ\bar{B}) = A·1 = A.
Comprovació: si A = 0, tots dos termes valen 0; si A = 1, un dels dos val 1. El resultat no depèn de B.

24

Exercici 24

Un sistema amb tres sensors (A, B i C) s'ha d'activar si almenys dos estan actius. Escriu la taula de veritat i una funció lògica.

Mostra la solució

La sortida val 1 a les combinacions 011, 101, 110 i 111 (4 de les 8).
Funció simplificada: S = A·B + A·C + B·C. Calen tres portes AND de dues entrades i una OR de tres.

25

Exercici 25

Una funció F de tres variables A, B i C val 1 només per a les combinacions (A,B,C) = 000, 001, 100, 101 i 111, i val 0 en els altres casos. (a) Escriu F com a suma de productes. (b) Simplifica-la amb àlgebra de Boole. (c) Comprova que el resultat coincideix amb la taula.

Mostra la solució

(a) F = A'B'C' + A'B'C + AB'C' + AB'C + ABC.
(b) Agrupem els quatre primers termes: A'B'C' + A'B'C = A'B' i AB'C' + AB'C = AB'; i A'B' + AB' = B'. Així, F = B' + ABC.
Com que B' + ABC = B' + AC (en afegir B' el terme ABC es pot substituir per AC), el resultat és F = B' + A·C.
(c) B' val 1 a 000, 001, 100, 101; A·C val 1 a 101 i 111. La unió dona exactament 000, 001, 100, 101 i 111, igual que la taula.

26

Exercici 26

Escriu en llenguatge d'Arduino el cos del loop d'un termòstat amb histèresi: un relé al pin 7 ha d'engegar una estufa quan la temperatura (variable float temp) sigui inferior a 19 °C i apagar-la quan sigui superior a 21 °C. Explica què fa el programa si temp val 20 °C.

Mostra la solució

Possible codi:
if (temp < 19) { digitalWrite(7, HIGH); }
else if (temp > 21) { digitalWrite(7, LOW); }
Quan la temperatura és 20 °C no es compleix cap de les dues condicions, així que el relé conserva l'estat que tenia (estufa engegada si venia d'escalfar, apagada si venia de refredar-se).
Aquesta banda de 19 a 21 °C és la histèresi: evita que el relé commuti contínuament al voltant d'un únic valor.

27

Exercici 27

Suma en binari els nombres decimals 11 i 7 (escrits amb 4 bits). Dona el resultat en binari i en decimal. Es produeix desbordament si només disposem de 4 bits? Quin és el valor més gran que es pot representar amb 4 bits?

Mostra la solució

11 = 1011 i 7 = 0111.
Sumem bit a bit des de la dreta: 1+1 = 10 (escrivim 0 i portem 1); 1+1+1 = 11 (escrivim 1 i portem 1); 0+1+1 = 10 (escrivim 0 i portem 1); 1+0+1 = 10 (escrivim 0 i portem 1); el darrer que portem és 1.
Resultat: 100102 = 16 + 2 = 18.
Amb 4 bits el valor màxim és 1111 = 15; com que 18 > 15, hi ha desbordament: caldria un 5è bit.

28

Exercici 28

Un semisumador suma dos bits A i B i dona dos resultats: suma S i rest (carry) C. (a) Escriu la taula de veritat. (b) Escriu S i C amb portes lògiques. (c) Calcula amb semisumadors i una porta OR la suma d'un sol bit amb rest d'entrada: 1 + 1 + 1.

Mostra la solució

(a) A,B → S,C: 0,0 → 0,0; 0,1 → 1,0; 1,0 → 1,0; 1,1 → 0,1.
(b) S = A XOR B i C = A·B (porta AND).
(c) Es fa servir un sumador complet: 1 + 1 = 10 (S = 0, C = 1) amb el primer semisumador; després S + rest d'entrada = 0 + 1 = 1 (S = 1, C = 0) amb el segon. El rest final és C = 1 OR 0 = 1.
Resultat: 1 + 1 + 1 = 112 = 3 (S = 1, rest = 1).

29

Exercici 29

Un sensor LM35 dona 10 mV per °C i s'ha connectat a l'entrada analògica d'un Arduino (ADC de 10 bits, referència de 5 V). (a) Escriu la fórmula per passar la lectura a °C. (b) Quina temperatura correspon a una lectura de 75? (c) Quina és la resolució en °C d'aquest ADC? I si fos de 12 bits?

Mostra la solució

(a) V = lectura·5/1023 i T = V/0,010 = lectura·5/1023/0,010 = lectura·0,489.
(b) V = 75·5/1023 = 0,367 V, per tant T = 0,367/0,010 = 36,7 °C.
(c) Un nivell de l'ADC val 5/1023 = 4,89 mV, que equival a 0,49 °C. Amb 12 bits: 5/4095 = 1,22 mV, o sigui 0,12 °C.
Més bits donen més resolució en la mesura.

30

Exercici 30

Un comptador binari de 3 bits (Q2 Q1 Q0) compta del 000 al 111 amb un rellotge de 8 Hz, que fa un pas per cada pols; en arribar a 111 torna a 000. (a) Quants estats té i en quant de temps fa un cicle complet? (b) Quina freqüència té cada bit? (c) Quin valor té el comptador després de 11 polsos si comença a 000?

Mostra la solució

(a) Té 232^{3} = 8 estats. Amb 8 polsos per segon, un cicle complet dura 88=1\tfrac{8}{8} = 1 s.
(b) Q0 canvia a cada pols: la seva freqüència és 82=4\tfrac{8}{2} = 4 Hz. Q1 divideix per 2 de nou: 2 Hz. Q2: 1 Hz.
(c) 11 polsos: 11 mòdul 8 = 3, per tant el comptador marca 011.

T'encalles amb aquest tema?

A L'Acadèmia de Vic t'ajudem amb classes individuals. Escriu-nos per WhatsApp.

Escriu-nos per WhatsApp (604 95 79 95)

Més informació: Reforç de Batxillerat a Vic · Classes particulars

Preguntes freqüents

Com es passa un nombre decimal a binari?

Dividint successivament per 2 i llegint els residus de baix a dalt, des de l'últim fins al primer. 13 en binari és 1101.

Quan dona 1 una porta AND?

Només quan totes les seves entrades són 1. Si alguna entrada és 0, la sortida és 0.

Altres temes de Tecnologia i Enginyeria 1r Batxillerat

Utilitzem cookies d'analítica per millorar el web. Política

base44
Edit with Base44