Está en la página 1de 238

INSTITUTO POLITÉCNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERÍA


MECÁNICA Y ELÉCTRICA

UNIDAD PROFESIONAL ADOLFO LOPEZ MATEOS.

DEPARTAMENTO DE INGENIERÍA ELÉCTRICA.

ACADEMIA DE ELECTRÓNICA.

APUNTES DE ELECTRÓNICA III.

AUTOR: ING. DANIEL AVELINO GÓMEZ

FECHA DE ELABORACIÓN: ENERO_JUNIO DE 2019.

FECHA DE APLICACIÓN: DESDE AGOSTO DE 2019.

1
2
3
4
5
6
7
8
9
10
11
12
13
INTRODUCCIÓN

Estos apuntes se realizaron para cubrir el temario de la asignatura “Electrónica III”, del
Departamento de Ingeniería Eléctrica en el Instituto Politécnico Nacional que se imparte en el
sexto semestre de la carrera de ingeniería eléctrica, unidad Zacatenco.

La información incluida en estos apuntes se obtuvo de fuentes que se citan al final en la


Bibliografía y la experiencia de varios años de impartir esta materia, además se hace uso de
imágenes y tablas que ejemplifican de una mejor manera los temas desarrollados, para lograr un
aprendizaje significativo. Igualmente se detallan problemas resueltos con los que el alumno puede
guiarse y estudiar de manera autónoma (aprender a aprender).

En la primera unidad se abordan los sistemas numéricos, donde el estudiante aprende a convertir
un número de base 10 a binario, octal y hexadecimal, y viceversa, para emplearlos en la aritmética
binaria y hexadecimal, así como en los códigos.

En la segunda unidad el alumno aprende a diseñar y comprobar el funcionamiento de los


circuitos digitales y dispositivos de memoria, empleando el simulador Digital Works.

En la tercera unida el estudiante aprende la arquitectura del microcontrolador Atmega 328P, el


cual se emplea en la placa Arduino, que se utilizara para realizar el trabajo al final del semestre.

En la cuarta unidad el estudiante aplica las instrucciones del Atmega 328P, para resolver
problemas, utilizando el simulador Atmel Studio 7.0.

En la quinta unidad el estudiante utiliza los puertos de la placa Arduino, para comunicarse con
el mundo exterior, el convertidor analógico para medir la temperatura y las interrupciones para
controlar un proceso.

En la sexta unidad el estudiante realiza un proyecto de interés personal en el área de ingeniería


eléctrica, empleando la placa Arduino.

En el programa no se especifican los temas Teoría de los conjuntos, Algebra Booleana y Mapas
de Karnaugh, sin embargo, son temas muy importantes (conocimiento previo) que presento de
manera rápida y fácil, para que el estudiante pueda aprender el nuevo conocimiento, acorde al
nuevo modelo educativo por competencias.

Por ultimo quiero decir que carece de validez la enseñanza que no resulta en un aprendizaje.

Espero que estos apuntes sean un recurso valioso y práctico para encauzar adecuadamente los
procesos de enseñanza y de aprendizaje, de los estudiantes con necesidades educativas de calidad.

14
ÍNDICE

UNIDAD I: Sistemas de Numeración………………………………………………...…16


1.1 Sistemas de numeración signado……………………………………………...…. 16
1.2 Conversión de sistemas decimal a cualquier base………………………………….25
1.3 Conversión de cualquier base a sistema decimal……………………………….......28
1.4 Relación entre los sistemas binarios, octal y hexadecimal……………………...….29
1.5 Sistemas de numeración signado y sus conversiones………………………………31
1.6 Aritmética binaria y hexadecimal…………………………………………………..34
1.7 Códigos……………………………………………………………………………..46

UNIDAD II: Circuitos digitales y dispositivos de memoria…………..………………...61


2.1 Señales analógicas y digitales………………………………………………………61
2.2 Compuertas lógicas…………………………………………………………………73
2.3 Flip-Flops……...……………………………………………………………………81
2.4 Codificadores………………………………………………………………………89
2.5 Decodificadores…………………………………………………………………….93
2.6 Multiplexores……………………………………………………………………….95
2.7 Circuitos aritméticos………………………………………………………………..99
2.8 Estructura y funcionamiento general de las memorias………………………..…..122
2.9 Clasificación de las memorias……………………………………………………..131
2.10 Conexiones de memorias……………………………………………………….134

UNIDAD III: Arquitectura general de una computadora………………………………137


3.1 Diagrama general de una computadora……………………………………………137
3.2 Buses……………………………………………………………………………….142
3.3 Arquitectura de la unidad microprocesador………………………………………..146
3.4 Modelo de programación…………………………………………………………..150

UNIDAD IV: Programación básica de la unidad microprocesadora.…………………153


4.1 Modos de direccionamiento……………………………………………………….153
4.2 Herramientas de programación……………………………………………………161
4.3 Instrucciones………………………………………………………………………167
4.4 Ejemplos de programación básica………………………………………………176

UNIDAD V: Programación de periféricos…….………………………………………179


5.1 Puertos Digitales…………………………………………………………………..179
5.2 Adquisición de señales analógicas………………………………………………188
5.3 Interrupciones……………………………………………………………………..205

UNIDAD VI: Aplicación de microcontroladores en ingeniería eléctrica…………….211


6.1 Planteamiento del proyecto……………………………………………………….211
6.2 Aceptación del proyecto…………………………………………………………..214
6.3 Supervisión…………………………………….………………………………….222
6.4 Pruebas de aceptación…………………………………….……………………….226
6.5 Demostración y exhibición del proyecto………………………………………….233

15
UNIDAD I: Sistemas de Numeración.
1.1 SISTEMAS DE NUMERACIÓN NO SIGNADO.

En la tecnología digital se utilizan muchos sistemas de números. Los más comunes son
los sistemas decimal, binario, octal y hexadecimal.

El sistema decimal es sin duda el más conocido por nosotros ya que es una
herramienta de uso cotidiano. Si analizamos algunas de sus características podremos
entender mejor los demás sistemas de numeración.

Sistema decimal.

El sistema decimal se compone de diez números o símbolos. Estos 10 símbolos son


0, 1, 2, 3, 4, 5, 6, 7, 8, 9; al utilizar estos símbolos como dígitos de un número podemos
expresar cualquier cantidad.

El sistema decimal, también conocido como sistema de base 10, es un sistema de valor
posicional en el cual el valor de un digito depende de su posición.

Consideremos el número decimal 45310.

Sabemos que el digito 4 representa en realidad cuatro centenas, el 5 representa cinco


decenas, y el 3 representa tres unidades.

En esencia el cuatro porta el valor máximo de los tres dígitos; a este se le conoce como
el digito más significativo (MSD). El número tres tiene el menor valor y se le denomina
digito menos significativo (LSD).

Lo anterior se puede resumir así:

16
Como vamos a representar cantidades en diferentes bases, es conveniente usar
subíndices para indicar la base a la que pertenecen.

La representación de las cantidades 199210 y 3,141610 (valor de pi, π) es:

199210 = 1*103+ 9*102+ 9*101+ 2*100 = 100010 + 90010 + 9010 + 210.

3,141610 = 3*100+ 1*10-1+ 4*10-2+1*10-3+ 6*10-4 = 3 + 0,1 + 0,04 + 0,001 + 0,0006.

(Notar las potencias negativas 10-1 =0,1, 10-2 = 0,01, 10-3 =0,001 y 10-4 = 0,0001).

Desafortunadamente, el sistema numérico decimal no se presta para una implantación


conveniente en sistemas digitales.

En el sistema binario solamente hay dos símbolos o posibles valores digitales, el cero
y el 1. No obstante este sistema de base 2 se puede utilizar para representar cualquier
cantidad que se pueda denotar en decimal u otros sistemas numéricos.

En general se necesitaran muchos dígitos para expresar una cantidad determinada.

El Sistema Binario: Es el sistema de numeración que utiliza internamente el hardware


de las computadoras actuales. Se basa en la representación de cantidades utilizando
los dígitos 1 y 0. Por lo tanto, su base es 2.

Cada dígito de un número representado en este sistema se denomina bit (Contracción


de las palabras en inglés binary digit).

Conversión Decimal a Binario: Para convertir números enteros de decimal a binario,


la forma más simple es dividir sucesivamente el número decimal y los cocientes que se
van obteniendo entre 2, hasta que el cociente en una de las divisiones se haga 0.

La unión de todos los residuos obtenidos escritos en orden inverso nos proporciona el
número equivalente expresado en el sistema binario.

Ejemplos:

 Convertir el número decimal 1010 a binario.

17
 Convertir el número decimal 199210 a binario.

 Convertir el número decimal 8610 a binario.

Conversión de Binario a Decimal.

Para determinar su equivalente en el sistema decimal simplemente se toma en cuenta


la suma de los productos de cada valor digital (0 o 1) por su valor posicional.

18
Ejemplo:

o Convertir a número decimal el número binario 1010112.

1 0 1 0 1 12

1 * 20 = 110

1 * 21 = 210

0 * 22 = 010

1 * 23 = 810

0 * 24 = 010

1 * 25 = 3210

Suma 4310

Solución 1010112 = 43 10

El Sistema Octal: Es un sistema de numeración cuya base es 8 y utiliza para la


representación de cantidades, los siguientes símbolos:

0, 1, 2, 3, 4, 5, 6, 7.

Este sistema también es de los llamados posiciónales y la posición de sus cifras se mide
con relación a la coma decimal que en caso de no aparecer se supone implícitamente a
la derecha del número.

La aritmética en este sistema es similar a la de los sistemas decimal y binario, por lo


tanto entraremos en su estilo.

Ejemplo 1:

¿Qué número decimal representa el número octal 47018?

Un número octal por tanto puede convertirse fácilmente en su equivalente decimal


multiplicando cada digito octal por su valor posicional.

4*83 + 7*82 +0*81 +1*80= 2048+ 448+ 0+ 1= 249710.

Ejemplo 2:

¿Qué número decimal representa el número octal 3728?

3728 = 3 x (82) + 7 x (81)+ 2 x (80)

= 3 x 64 + 7 x 8 + 2 x 1

= 250 10

19
Ejemplo 3:

¿Qué número decimal representa el número octal 24,68?

Nota. Las fracciones las separaremos con coma y no por punto.

24,68 = 2 x (81) + 4 x (80)+ 6 x (8-1)

= 2 x (8) + 4 x (1)+ 6 x (0,125)

=20,7510.

Conversión de decimal a octal.

Un entero decimal se puede convertir en octal mediante el uso del mismo método de
división repetida que se usó en la conversión decimal a binario, pero con un factor de
división de 8 en lugar de 2.

Ejemplo.

¿Qué número octal representa el número decimal 26610?

266 / 8 = 33 + residuo de 2

3 3/ 8 = 4 + residuo de 1 Resultado

4 /8=0 + residuo de 4 …………………………….26610= 4128

Note que su primer residuo se transforma en el digito menos significo (LSD) del número
octal y el ultimo residuo se convierte más significativo (MSD).

Conversión de octal a binario.

La ventaja principal del sistema numérico octal es la facilidad con la cual puede
realizarse la conversión entre números binarios y octales.

La conversión de octal a binario se lleva a cabo convirtiendo cada digito octal en su


equivalente binario de tres bits.

Los ocho dígitos posibles se convierten como se indica en la siguiente tabla.

Octal 0 1 2 3 4 5 6 7

Binario 000 001 010 011 100 101 110 111

Por medio de estas conversiones cualquier digito octal se convierte en binario


convirtiéndolo de manera individual.

20
Ejemplo.

Convertir el número octal 4728 a binario (usar 3 bits para representar cada cifra):

4 7 2

100 111 010

Por tanto el número octal 4728 es equivalente al binario 1001110102.

Conversión de binario a octal.

La conversión de enteros binarios en octales es simplemente la operación inversa del


proceso anterior.

Los bits del número binario se conjuntan en grupos de tres comenzando por el LSB.

Luego cada grupo se convierte en su equivalente octal.

Primer caso.

Ejemplo.

Para ilustrar lo antes dicho, consideremos la conversión de 1001110102 en octal.

1 0 0 1 1 1 0 1 0

4 7 28

Segundo caso.

Algunas veces el número binario no tendrá grupos de 3 bits. En esos casos podemos
agregar uno o dos ceros a la izquierda del MSB del número binario a fin de completar
el último grupo.

Ejemplo.

Para ilustrar lo antes dicho, consideremos la conversión de 110101102 en octal.

0 1 1 0 1 0 1 1 0

3 2 68

Note el cero agregado para completar el grupo de 3 bits.

21
Teorema Fundamental de la Numeración (TFN).

Se trata de un teorema que relaciona una cantidad expresada en cualquier sistema de


numeración con la misma cantidad expresada en el sistema decimal.

Ejemplo: Supongamos la cantidad 201,13 expresada en el sistema de numeración de


base tres que utiliza los dígitos para la representación de cantidades 0, 1 y 2 ¿Cuál será
la representación de la misma cantidad en el sistema decimal?

201,13 = 2*32+ 0*31+ 1*30+ 1*3-1 = 18+0+1+0,333=19,33310.

Recordar que usamos la coma decimal, en lugar del punto.

El Sistema Hexadecimal: Es un sistema posicional de numeración en el que su base


es 16, por tanto, utilizará 16 símbolos para la representación de cantidades. Estos
símbolos son:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

Se le asignan los siguientes valores absolutos a los símbolos A, B, C, D, E, F:

SIMBOLO VALOR
ABSOLUTO

A 10

B 11

C 12

D 13

E 14

F 15

La conversión de hexadecimal a decimal es similar a las conversiones anteriores.

Ejemplo 1: ¿Qué número decimal representa el número hexadecimal 2CA16 utilizando


el TFN (Teorema Fundamental de la Numeración)?

22
2*162+ C*161+ A*160= 2*162+ 12*161+10*160= 51210+19210+1010= 71410.

Ejemplo 2: ¿Qué número decimal representa el número hexadecimal 35616 utilizando


el TFN (Teorema Fundamental de la Numeración)?

35616= 3 x 162 + 5 x 161 + 6 x 160

=76810 + 8010 + 610

= 85410.

Conversión de decimal a hexadecimal.

Recordemos que efectuamos la conversión de decimal a binario por medio de la


división repetida por dos y de decimal a octal por medio de la división repetida por 8.

De igual manera la conversión de decimal a hexadecimal se puede efectuar por medio


de la división repetida por 16.

Ejemplo 1.

Convierta el número decimal 42310 a hexadecimal.

Solución:

423 /16 = 26 + residuo de 710 …………………716

26 / 16 = 1 + residuo de 1010 ………….….A16 Resultado

1 /16 = 0 + residuo de 1 ………………..116

Respuesta 42310= 1A716

Ejemplo 2.

Convierta el número decimal 21410 a hexadecimal.

Solución.

214 /16 =13 + residuo de 610…….…….616

Resultado

13 /16 = 0 + residuo de 1310…………….D16

23
Respuesta 21410 = D616.

Conversión de hexadecimal a binario.

Al igual que el sistema numérico octal, el sistema hexadecimal se usa principalmente


para abreviar la representación de números binarios. Es una tarea relativamente simple
convertir un número hexadecimal a binario.

Cada digito hexadecimal se convierte en su equivalente binario usando 4 bits.

Ejemplo.

Convertir el número hexadecimal 9F216 a binario (usar 4 bits para representar cada
cifra).

9 F 216 = 9 F 2

1001 1111 0010

Por lo tanto: 9F216 = 1001111100102.

Conversiones de binario a hexadecimal.

Esta conversión es exactamente la operación reciproca del proceso anterior. El número


binario se agrupa en conjunto de cuatro bits y cada grupo se convierte en su digito
hexadecimal equivalente.

Ejemplo.

Convertir el número binario 1011101001102 a hexadecimal.

1110 1010 610

1011101001102 = 1011 1010 0110

B16 A16 616

= BA616

24
1.2 CONVERSIÓN DE SISTEMA DECIMAL A CUALQUIER BASE.

Este tipo de conversión se utiliza para cambiar un número N de base 10 a cualquier otra
base (b). Para ello, se deben realizar dos pasos por separado:

1. Convertir la parte entera del número N10, dividiéndola, sucesivamente, entre b,


hasta obtener un cociente más pequeño que b. La parte entera del número que
estamos buscando lo compondrá el último cociente y los restos que se hayan
ido obteniendo, tomados en orden inverso.

2. Convertir la parte fraccionaria del número N10, multiplicándola, repetidamente,


por b, hasta obtener un cero en la parte fraccionaria o hasta que se considere
oportuno, ya que, puede ser que el cambio de base de una fracción exacta se
convierta en una fracción periódica. La parte fraccionaria del número buscado lo
formarán las partes enteras de los números que se hayan ido obteniendo en
cada producto, tomados en ese mismo orden.

Ejemplo1.

Para convertir el número 13,312510 a base 2, en primer lugar hay que dividir,
sucesivamente, la parte entera del número, en este caso (1310), entre 2, hasta obtener
un cociente más pequeño que 2.

13 L 2
1 6L2
0 3L2
1 1L2
1

Como el último cociente vale 1, ya es más pequeño que el divisor 2, tenemos que parar
de dividir. Por tanto,

1310 = 11012

El segundo paso consiste en convertir la parte fraccionaria del número (0,312510). Para
ello, se deben realizar los siguientes cálculos:

0,3125 x 2 = 0,625

0,625 x 2 = 1,25; seguimos trabajando solo con la parte fraccionaria.

0,25 x2= 0,5

0,5 x2= 1,0; terminamos porque la parte fraccionaria es cero

La parte fraccionaria desaparece después de realizar cuatro multiplicaciones. Así pues,

0,312510 = 0,01012. Recuerde que usamos la coma en lugar del punto.


En resumen.

25
13,312510 = 1101,01012.

Para comprobar si los cálculos están bien hechos, podemos realizar la conversión
inversa, es decir, podemos pasar el número 1101,01012 a base 10. De manera que,
usando el TFN los cálculos son:

1101,01012 = 1 * 23 + 1 * 22 + 0 * 21 + 1* 20 + 0 * 2-1 + 1 * 2-2 + 0 * 2-3 + 1 * 2-4 =

= 8 + 4 + 0 + 1 + 0 + 0,25 + 0 + 0,0625 = 13,312510.

1101,01012 = 13,312510.

Ejemplo 2.

Convertir: 220,910 a binario.

Para la parte entera tenemos:

Dando como resultado de la parte entera: 220D = 11011100B.

Posteriormente se procede a realizar las operaciones para la parte fraccionaria para


pasarlo a binario.

0,9x2=1,8
0,8x2=1,6
0,6x2=1,2
0,2x2=0,4 Observa cómo se vuelve a repetir esta cantidad.
0,4x2=0,8
0,8x2=1,6

Lo anterior implicaría que tenemos una fracción periódica (nunca termina).


Quedando la parte fraccionaria de la siguiente manera:

26
0,9𝐷 = 0,111001𝐵

Dando como resultado total:

220, 9𝐷 = 11011100,111001𝐵

Para comprobar pasaremos el resultado obtenido en el Sistema Binario al Sistema


Decimal.

11011100,111001𝐵 = 11011100B + 0,111001B

Entero fracción

Convirtiendo la parte entera a decimal queda de la siguiente forma:

11011100 = 0𝑥20 + 0𝑥21 + 1𝑥22 + 1𝑥23 + 1𝑥24 + 0𝑥25 + 1𝑥26 + 1𝑥27

= 4 + 8 + 16 + 64 + 128

= 22010.

Para comprobar la parte fraccionaria obtenida en el Sistema Binario al Sistema


Decimal, tenemos:

0,111001 = 1𝑥2−1 + 1𝑥2−2 + 1𝑥2−3 + 0𝑥2−4 + 0𝑥2−5 + 1𝑥2−6


1 1 1 0 0 1
= 1 + 2 + 3 + 4 + 5 +
2 2 2 2 2 26
=0,5+0,25+0,125+ 0,015625

=0,890625 ≈0,9

27
1.3 CONVERSIÓN DE CUALQUIER BASE A SISTEMA DECIMAL.

Si se tiene un número en base n, por ejemplo 1637(base 7), el proceso para convertirlo
a base decimal es el siguiente:

Entonces 163(7) equivale a 9410 en base decimal.

Ejemplo.

Aplicar este proceso para convertir el número binario 10012 a decimal.

Entonces 1001(2) equivale a 910 en base decimal.

Este método es útil para números grandes, ya que para números pequeños se puede
utilizar el cálculo mental según las potencias de la base, como se explicó anteriormente.
De ser los números muy grandes, habría que conocer las tablas de multiplicar de las
diferentes bases, lo que resultaría tedioso. De ahí la utilización de éste sencillo método
de multiplicaciones y sumas.

De todos modos, es altamente recomendable conocer las tablas de multiplicar del 2, del
8, y del 16; debido al amplio uso que se le da a éstos sistemas en informática y sistemas
de computación.

28
1.4 RELACIÓN ENTRE LOS SISTEMAS BINARIOS, OCTAL Y
HEXADECIMAL.

Los sistemas octal y hexadecimal son la abreviatura de los sistemas binarios, es


decir, representarlos de forma más compacta.

Ejemplo 1.

Convertir el número binario 101101112 a octal y hexadecimal.

Número en binario convertido a grupos de 3: 010 110 111


Cero agregado
Equivalente en base ocho 2 6 7

Resultado: 101101112 = 2678 = 267O (octal)

Número en binario convertido a grupos de 4: 1011 0111

Equivalente en base dieciséis B 7

Por lo tanto 101101112 = 2678 = B7!6.

Comprobación.

101101112 = 1 + 2 + 4 + 16 + 32 + 128 = 18310.

2678 = 7 + 6 x 8 + 2 x 64 = 7 + 48 + 128 = 18310.

B716 = 7 + 11 x 16 = 7 + 176 = 18310.

Ejemplo 2.

Convertir el número hexadecimal 9B16 a binario y octal.

Donde 916 = 10012 y B16 = 10112. Por lo tanto 9B16 = 100110112.

100110112 010 011 011

2 3 3 Equivalente octal.

Por lo tanto: 9B16 = 100110112 = 2338.

29
Comprobación.

9B16 = 11 + 9 x 16 = 11 + 144 = 15510.

100110112 = 1 + 2 + 8 + 16 + 128 = 15510.

2338 = 3 + 3 x 8 + 2 x 64 = 3 + 24 + 128 = 15510.

Ejemplo 3.

Convertir el número octal 3578 a binario y hexadecimal.

Donde 38=0112, 58=1012 y 78= 1112.

3578 = 0111011112.

Dado que 3578 = 0111011112, reagrupándolos en grupos de 4 bits, tenemos:

11102 = E16 y 111116 = F16. El cero que está a la izquierda no se toma en cuenta.

Por lo tanto 3578 = 0111011112 = EF16.

Comprobación.

3578 = 7 x 80 + 5 x 81 + 3 x 82 = 7 x 1 + 5 x 8 + 3 x 64 = 7 + 40 + 192 = 23910.

111011112 = 1x20 + 1x21 + 1x22 + 1x23 + 0x24 + 1x25 + 1x26 + 1x27

= 1 + 2 + 4 + 8 + 0 + 32 + 64 + 128.

= 23910.

EF16 = F x 160 + E x 161

= 15 x 1 + 14 x 16

= 15 + 224

= 23910.

30
1.5 SISTEMAS DE NUMERACIÓN SIGNADO Y SUS CONVERSIONES.

En los apartados anteriores solo vimos números no signados (positivos), pero en la


práctica nos encontramos con números negativos, por lo cual veremos los
complementos a 1 y 2.

i. Complemento a dos.

El complemento a dos de un número N, compuesto por n bits, se define como:

C2N = 2n – N.

Veamos un ejemplo: tomemos el número N = 4510 = 1011012, que tiene 6 bits, y


calculemos su complemento a dos:

N = 4510; n = 610; 26 = 6410 y, por tanto: C2N = 6410 – 4510 = 1910 = 0100112.

ii. Complemento a uno.

El complemento a uno de un número N, compuesto por n bits es, por definición, una
unidad menor que el complemento a dos, es decir:

C1N = C2N – 1.

Y, por la misma razón:

C2N = C1N + 1.

Calculemos el complemento a uno del mismo número del ejemplo anterior:

Siendo N = 4510 = 1011012, y su complemento a dos C2N = 0100112

C1N = C2N – 1 = 0100112 – 0000012 = 0100102

C1N = 0100102

Da la sensación de que calcular el complemento a uno no es más que una forma


elegante de complicarse la vida, y que no va a ser más sencillo restar utilizando el
complemento a dos, porque el procedimiento para calcular el complemento a dos es
más difícil y laborioso que la propia resta. Pero es mucho más sencillo de lo que parece.

En realidad, el complemento a uno de un número binario es el número resultante de


invertir los UNOS y CEROS de dicho número.

Por ejemplo si:

31
N = 1101001012.

Obtenemos su complemento a uno invirtiendo ceros y unos, con lo que resulta:

C1N = 0010110102.

Y su complemento a dos es:

C2N = C1N + 1 = 0010110102 + 1 = 0010110112.

Ejemplo de cálculo de complementos a uno y dos. Sea:

N = 01101101012.

El complemento a uno es (invierte ceros y unos):


C1N = 10010010102.

Y el complemento a dos es (súmale 1):

C2N = 10010010112.

Representación de números enteros con signo.

Existen tres representaciones que han sido usadas para manejar internamente números
enteros con signo en las computadoras digitales. Estas son:

 Magnitud y signo.
 Complemento a 1 (complementos a la base disminuida).
 Complemento a 2 (complemento a la base).

La más sencilla de las tres es la representación en magnitud y signo; sin embargo, es la


que ocasiona mayores problemas al realizar operaciones aritméticas. Esta
representación fue usada en las primeras computadoras digitales pero en la actualidad
ha caído en desuso.

Las dos representaciones que usan complemento permiten efectuar operaciones


aritméticas con relativa facilidad, esto ha contribuido a que ambas hayan sido adoptadas
en las computadoras actuales, siendo la representación en complemento a 2 la más
usada. A continuación se muestra esto.
Ejemplo.

32
Considere el número decimal +15 empleando un bit más para su representación
(magnitud y signo).

+1510 = 011112, si se pone un cero a su izquierda no altera su valor y permite representar


el signo +.

Si realizamos su complemento a uno tenemos;

011112 complemento a uno 100002

Como se observa el bit del signo ha cambiado, por lo que se trata del -1510, esto es:

-1510 = -011112 = 100002, si realizamos su complemento a uno nuevamente tenemos:

100002 complemento a uno 011112 = +1510.

Considere nuevamente el número decimal +15 empleando un bit más para su


representación, pero ahora utilizando complemento a dos.

+1510 = 011112 complemento a uno 100002, sumarle 1 para complemento a 2.

+1510 = 011112 complemento a dos 100012.

Como se observa el bit del signo también ha cambiado, por lo que se trata del -1510, en
complemento a 2, es decir:

-1510 = -011112 = 100012, si realizamos su complemento a dos nuevamente tenemos:

100012 complemento a uno 011102, sumarle 1 para complemento a 2 011112.

Obteniendo, el +15 = 011112.

En conclusión el complemento a uno y dos nos permiten obtener respectivamente los


números negativos a partir de los positivos y viceversa, donde el MSB representa el
signo, de acuerdo a lo siguiente:

0 representa los positivos, y el 1 representa los negativos.

33
1.6 ARITMÉTICA BINARIA Y HEXADECIMAL.

La Unidad Aritmético Lógica, en la CPU del procesador, es capaz de realizar


operaciones aritméticas, con datos numéricos expresados en el sistema binario.
Naturalmente, esas operaciones incluyen la adición, la sustracción, el producto y la
división. Las operaciones se hacen del mismo modo que en el sistema decimal, pero
debido a la sencillez del sistema de numeración, pueden hacerse algunas
simplificaciones que facilitan mucho la realización de las operaciones.

Suma en binario.

Para aprender a sumar, con cinco o seis años de edad, tuviste que memorizar las 100
combinaciones posibles que pueden darse al sumar dos dígitos decimales. La tabla de
sumar, en binario, es mucho más sencilla que en decimal. Sólo hay que recordar cuatro
combinaciones posibles:

+ 0 1
0 0 1
1 1 0+1

Las sumas 0 + 0, 0 + 1 y 1 + 0 son evidentes:

0+0=0
0+1=1
1+0=1

Pero la suma de 1+1, que sabemos que es 2 en el sistema decimal, debe escribirse en
binario con dos cifras (10) y, por tanto 1+1 es 0 y se arrastra una unidad, que se suma
a la posición siguiente a la izquierda. Veamos algunos ejemplos:

Ejemplo 1.

Sumar los números binarios 1001002(3610) y 100102(1810).

1001002……………. 3610
+ 0100102 …………..1810
1101102…………….5410

Se observa que no se ha tenido ningún acarreo en las sumas parciales.

34
Ejemplo 2.

Sumar 110012 (2510) y 100112 (1910).

Ejemplo 3.

Sumar 12510 =125D = 11111012 = 1111101B y 8610 = 86D = 10101102 = 1010110B.


Observar que se puede usar el subíndice 10 o D para el decimal y el subíndice 2 o B para
el binario.

125D………………………………1111101B
+ 86D………………………………1010110B
211D……………………………. 11010011B

Otros ejemplos.

0102 + 1012 = 1112 210 + 510 = 710

0011012 + 1001012 = 1100102 1310 + 3710 = 5010

10110112 + 10110102 = 101101012 9110 + 9010 = 18110

1101110112+ 1001110112 = 10111101102 44310 + 31510 = 75810

Sustracción en binario.

La técnica de la resta en binario es, nuevamente, igual que la misma operación en el


sistema decimal. Pero conviene repasar la operación de restar en decimal para
comprender la operación binaria, que es más sencilla. Los términos que intervienen en
la resta se llaman minuendo, sustraendo y diferencia.

- 0 1
0 0 1
1 1+1 0

Las restas 0 - 0, 1 - 0 y 1 - 1 son evidentes:

35
0–0=0
1–0=1
1–1=0

La resta 0 - 1 se resuelve, igual que en el sistema decimal, tomando una unidad prestada
de la posición siguiente: 10 - 1, es decir, 210 – 110 = 1. Esa unidad prestada debe
devolverse, sumándola, a la posición siguiente. Veamos algunos ejemplos:

1112 – 1012 = 0102 710 – 510 = 210

100012 – 010102 = 001112 1710 – 1010 = 710

110110012 – 101010112 = 001011102 21710 – 17110 = 4610

1111010012 – 1011011012 = 0011111002 48910 – 36510 = 12410

A pesar de lo sencillo que es el procedimiento de restar, es fácil confundirse. Tenemos


interiorizado el sistema decimal y hemos aprendido a restar mecánicamente, sin
detenernos a pensar en el significado del arrastre. Para simplificar las restas y reducir
la posibilidad de cometer errores hay varias soluciones:

 Dividir los números largos en grupos. En el siguiente ejemplo, vemos cómo se divide
una resta larga en tres restas cortas:

1001100111012 1001 1001 1101


- 0101011100102 - 0101 0111 0010
0100001010112 0100 0010 1011

 Restar en binario usando el complemento a uno.

Y, por fin, vamos a ver cómo facilita la resta el complemento a uno. La resta binaria de
dos números puede obtenerse sumando al minuendo el complemento a uno del
sustraendo. Veamos algunos ejemplos:

Primer ejemplo:

36
Segundo ejemplo:

 Restar en binario usando el complemento a dos.

Ahora utilizaremos el complemento a 2, que es el que emplea la tarjeta JM60 que


usaremos en el curso.

Primer ejemplo:

Segundo ejemplo:

Otros ejemplos de complemento a dos.

Hagamos la siguiente resta, 9110 – 4610 = 4510, en binario:

10110112 – 01011102 = 01011012

Tiene alguna dificultad, cuando se acumulan los arrastres a la resta siguiente. Pero esta
misma resta puede hacerse como una suma, utilizando el complemento a dos del
sustraendo:

37
En el resultado de la suma nos sobra un bit, que se desborda por la izquierda. Pero,
como el número resultante no puede ser más largo que el minuendo, el bit sobrante se
desprecia.

Hagamos esta otra resta, 21910 – 2310 = 19610, utilizando el complemento a dos:

21910 = 110110112
2310 = 000101112
C2 de 23 = 11101001

El resultado de la resta será: 110110112 + 111010012 = 1110001002.

Despreciando el bit que se desborda por la izquierda, llegamos al resultado correcto:

110001002 = 19610.

Multiplicación binaria.

Hay varios métodos de hacer la multiplicación binaria, a continuación se muestra la


manera en que aprendimos a multiplicar.

Comprobación

1x20 + 1x21 + 0x22 + 0x23 + 0x24 + 1x25 + 1x26 = 1 + 2 + 32 + 64 = 9910

38
Este método de trabajar es bueno, pero no es práctico para computadoras porque el
tipo de desplazamiento requerido hace que sea difícil su implementación.

Uno de los métodos para la multiplicación usado por las computadoras es la suma
repetida. Para multiplicar 7 x 55 por ejemplo, la computadora puede sumar 7 veces el
55. Para números más grandes, este método es lento.

Un método más rápido para computadoras y microprocesadores usa un algoritmo de


sumar y desplazar a la derecha.

Los números a multiplicar se almacenan en 2 registros (B y C). El resultado se genera


en un registro especial llamado acumulador(A), el cual se inicializa a cero.

Para empezar, debemos checar si el digito del multiplicador es 1 o cero. Si el digito es


1, el multiplicando se le sumara al acumulador. Después el acumulador se desplazara
una posición a la derecha. El siguiente digito del multiplicador es checado y se repite el
paso anterior, hasta llegar al bit más significativo del multiplicador.

A continuación se muestra el proceso para el mismo ejercicio que se realizó antes.

Comprobación

1x20 + 1x21 + 0x22 + 0x23 + 0x24 + 1x25 + 1x26 = 1 + 2 + 32 + 64 = 9910

39
División binaria.

La división también se puede realizar de varias maneras. A continuación se muestra la


manera en que aprendimos a dividir.

Se intenta dividir el dividendo por el divisor, empezando por tomar en ambos el mismo
número de cifras (100 entre 110, en el ejemplo). Si no puede dividirse, se intenta la
división tomando un dígito más (1001 entre 110).

Si la división es posible, entonces, el divisor sólo podrá estar contenido una vez en el
dividendo, es decir, la primera cifra del cociente es un UNO. En ese caso, el resultado
de multiplicar el divisor por 1 es el propio divisor. Restamos las cifras del dividendo del
divisor y bajamos la cifra siguiente.

El procedimiento de división continúa del mismo modo que en el sistema decimal.

Otro método de la división la cual es fácil de implementar para computadoras y


microprocesadores es ejecutando restas sucesivas. El divisor es restado del dividendo
y de cada sucesivo residuo hasta que un acarreo (borrow) se presenta. El cociente
deseado es uno menos que el número de sustracciones al producirse un acarreo.
Este método es simple, pero para números grandes es lento.
Para acelerar la división con números grandes se usa el algoritmo de resta y
desplazamiento a la izquierda y puede ser usado en computadoras.
El proceso es similar al que aprendimos para hacer divisiones.

El divisor se resta del digito más significativo del dividendo. Si el bit de sobreflujo o
acarreo producido por la resta es cero entonces la resta fue posible y se pone en 1 el
registro del cociente. El resultado de la resta es desplazado a la izquierda un lugar. El
divisor es restado del resultado desplazado. Cuando el bit de sobreflujo o acarreo es 1
porque el divisor es más grande, se pone 0 en el siguiente bit del registro del cociente.
El divisor es agregado al resultado de la resta para restituir el valor. Este número es
desplazado a la izquierda y se procede a resta nuevamente hasta terminar.

40
A continuación se muestra un ejemplo para comprenderlo mejor.
Dividir 32810 entre 810.

32810 = 1010010002 = 1x28 + 1x26 + 1x23 = 256 + 64 + 8 = 32810.

810 = 10002 = 1x23 = 810.

32810 ÷ 810 = 4110.

1010010002 entre 10002 = 1010012.

Registro de cociente = 1010012 = 1x25 + 1x23 + 1x20 = 32 + 8 +1 = 4110

41
Aritmética hexadecimal.

En el sistema hexadecimal, al igual que en el sistema decimal, binario y octal, se pueden


hacer diversas operaciones matemáticas. Entre ellas se encuentra la resta entre dos
números en sistema hexadecimal, la que se puede hacer con el método de
complemento a 15 o también utilizando el complemento a 16. Además de éstas,
deberemos manejar adecuadamente la suma en sistema hexadecimal, explicada a
continuación:

Suma.

La adición de los números hexadecimales se efectúa de manera similar a la adición


decimal, siempre y cuando recuerde que el mayor digito hexadecimal es (F) y no 9 para
realizar esta operación se sugiere el siguiente procedimiento:

1.-sume los dos dígitos hexadecimales en decimal, insertando mentalmente el


equivalente decimal para números mayores de 9.

2.-Si la suma es 15 o menos, esta puede expresarse directamente como un digito


hexadecimal.

3.-Si la suma es mayor o igual a 16, reste 16 y acarree un 1 hacia el digito de la siguiente
posición.

Ejemplo.

Sumar los números hexadecimales 3A943B16 y 3A943B16.

1 11 Acarreos
3A943B16 Donde: B16 + 516 = 1110 + 510 = 1610 = 1016 (0 y llevamos 1).
+ 23B7D516 116 + 316 + D16 = 410 + 1310 = 1710 = 1116 (1 y llevamos 1).
5E4C1016 116 + 416 + 716 = 510 + 710 = 1210 = C16 (no hay acarreo).
916 + B16 = 910 + 1110 = 2010 =1416 (4 y llevamos 1).
116 + A16 + 316 = 410 + 1010 = 1410 = E16 (no hay acarreo).
316 + 216 = 516 (no hay acarreo).

Resta Hexadecimal.

Las restas Hexadecimales se pueden resolver fácilmente utilizando el complemento a


15 o el complemento a 16. Estos procesos hacen que una resta se convierta en una
suma en sistema hexadecimal.

Complemento a 15.

Podemos hacer la resta de dos números hexadecimales utilizando el complemento a


15.

Para ello tendremos que sumar al minuendo el complemento a quince del sustraendo,
y finalmente sumarle el bit de overflow (bit que se desborda).

42
Para entender la resta en complemento a 15 lo analizaremos con un ejemplo. Esta es
la resta que tenemos que resolver:

A4FC916
- DE816
———————

Primero tenemos que hacer que el minuendo y el sustraendo tengan la misma cantidad
de números. Para ello, añadiremos ceros al sustraendo hasta que sean suficientes.

A4FC916
- 00DE816
—————————

Después, crearemos un nuevo número con la misma cantidad de números que el nuevo
sustraendo. Como en el sistema hexadecimal el mayor número que tenemos es el 15,
que corresponde a la letra F, tendremos que escribir la F tantas veces como números
tiene el sustraendo. La resta se hace siguiendo las normas generales de la resta común.

FFFFF16
- 00DE816
—————————
FF21716 complemento a 15 de 00DE816.

La diferencia obtenida se denomina el complemento a 15. Recuerda el valor


correspondiente a cada letra al operar. Ahora tendremos que sumar el minuendo y el
complemento a 15 utilizando la suma en sistema hexadecimal, mencionada
anteriormente.

A4FC916
+ FF21716
—————————
1A41E016

Con la suma obtenemos el resultado 1A41E016, pero no es la respuesta final. Te habrás


dado cuenta que este nuevo número tiene más cifras que los números iníciales que
teníamos que restar. Tenemos que quitar el número de la izquierda (en este caso, el 1)
y sumarlo.

A41E016 Comprobación
+ 116
—————— Sumamos la diferencia con el sustraendo,
A41E116.
para obtener el minuendo.
Por lo tanto. Hexadena que presto la F a C.

A4FC916 116 + 816 = 916


- 00DE816 E16 + E16 = C16 + 1016 = 1410 + 1410 = 1210 + 1610
————————— Como F presto a C, esta se convirtió en E.
A41E116. 116 + D16 = E16 = 1410.
416 + 016 = 416.
A16 + 016 = A16.
Complemento a 16.

43
También podemos hacer la resta de dos números hexadecimales utilizando el
complemento a 16, siguiendo un proceso similar que en el caso del complemento a 15.

Para resolver la resta, tendremos que sumar al minuendo el complemento a dieciséis


del sustraendo.

Esta es la resta que tenemos que resolver (la misma del ejemplo anterior):

A4FC916
- DE816
—————————

Primero tenemos que hacer que el minuendo y el sustraendo tengan la misma cantidad
de números, al igual que ocurre en el proceso del complemento a 15.

Para ello, añadiremos ceros al sustraendo hasta que sean suficientes.

A4FC916
- 00DE816
—————————

Después, crearemos un nuevo número con la misma cantidad de números que el nuevo
sustraendo.

Como en el sistema hexadecimal el mayor número que tenemos es el 15, que


corresponde a la letra F, tendremos que escribir la F tantas veces como números tiene
el sustraendo. La resta se hace siguiendo las normas generales de la resta común.

FFFFF16
- 00DE816
—————————
FF21716
.

Ahora tenemos que sumarle 1 a la diferencia obtenida. Este paso es muy importante,
ya que es la diferencia entre hacer la resta en complemento a 15 u 16, y se suele olvidar
fácilmente. Además, recuerda que estás sumando en sistema hexadecimal, siguiendo
el mismo proceso explicado anteriormente.

FF21716
+ 116
—————————
FF21816 complemento a 16 de 00DE816

A la diferencia obtenida incrementada en uno le denominaremos el complemento a 16.


Ahora tendremos que sumar el minuendo y el complemento a 16.

44
A4FC916
+ FF21816
—————————
1A41E116.

Con la suma obtenemos el resultado 1A41E1.

Te habrás dado cuenta que este nuevo número tiene más cifras que los números
iníciales que teníamos que restas, cosa imposible en una resta (que la diferencia sea
mayor que el minuendo y el sustraendo).

Por eso, y estando en complemento a 16, tendremos que despreciar (eliminar) el


número de la izquierda. En este caso es el 1.

La respuesta, por lo tanto, es A41E1.

En ambos casos la respuesta obtenida deberá ser la misma, ya que hemos resuelto la
misma resta en sistema hexadecimal.

Por lo tanto, podremos comprobar que hemos operado bien comparando las respuestas
obtenidas en complemento a 15 y en complemento a 16 para una misma resta.

Finalmente realizaremos la misma resta como lo hacemos en forma decimal.

Ejemplo.

Restar el número hexadecimal DE816 de A4FC916 como lo haría en forma análoga al


sistema decimal.

E
A 4 F C 916 Donde: 916 - 816 = 116
- D E 816 C16 – E16, no se puede hacer y pedimos una hexadena al siguiente (F)
A 4 1 E 116 C16 + 1016 = 1210 + 1610 = 2810; 2810 – E16 = 2810 – 1410 = 1410 = E16.
E16 – D16 = 1410 – 1310 = 110 = 116.
A416 = A416.

Obteniendo el mismo resultado que con complemento a 16.

45
1.7 CÓDIGOS.

No toda la información que maneja un sistema digital es numérica, e inclusive, para la


información numérica a veces no es conveniente utilizar el sistema binario descrito
antes. Por ello es conveniente idear formas diferentes de representar (codificar)
información diversa usando solamente ceros y unos.

CÓDIGOS NUMÉRICOS.

Existen varias situaciones en las que no es conveniente utilizar el binario natural para
manejar información numérica, entre ellas se pueden mencionar las siguientes:

 Cuando se busca una conversión más sencilla decimal - binario (códigos BCD).
 Cuando además de lo anterior se van a manejar números negativos (Códigos
BCD autocomplementarios).
 Cuando se busca minimizar errores de censado en “encoders” de posición de
una cantidad a otra (código gray).
 Cuando se quiere detectar errores en transmisión de datos (código de paridad).
 Cuando se quiere detectar y corregir errores en transmisión de datos (código
Hamming)

A continuación se tratan algunos de estos códigos.

CÓDIGO BCD (Binario Codificado en Decimal).

Los códigos BCD nos permiten representar cada uno de los dígitos decimales (0,...,9)
mediante 4 bits.

El más sencillo de los códigos BCD es el BCD8421 o BCD “natural”, que consiste
simplemente en representar cada dígito decimal por su binario equivalente. Así
tenemos:

Dígito BCD8421 Dígito BCD8421


Decimal Decimal
0 0000 5 0101
1 0001 6 0110
2 0010 7 0111
3 0011 8 1000
4 0100 9 1001

46
La conversión con el sistema decimal se realiza directamente, en grupos de cuatro bits
por cada dígito decimal con ponderación 8421.

Este código tiene aplicación en visualizadores (displays) hechos con leds o LCD, los
cuales poseen previamente convertidores que transforman el grupo de cuatro bits BCD
en otro especial, llamado 7 segmentos.

Ejemplo 1.
Codificar en BCD el número decimal 85 (recuerda usar 4 bits).

85

1000 0101

Conversión directa típica entre un número en decimal y un BCD.

Ejemplo 2.

¿Qué número decimal representa el número binario 0011100101012?


(Recuerda agruparlos en 4 bits).

0011 1001 01012 = 39510.

En el código BCD: los cuatro primeros bits representan el 3.Los siguientes cuatro
representan el 9 y los últimos cuatro el 5.

Es muy importante comprender la diferencia entre conversión de un número decimal


binario y la codificación binaria de un número decimal. En cada caso el resultado final
es una seria de bits. Los bits obtenidos de la conversión son dígitos binarios. Los bits
obtenidos de la codificación son combinaciones de unos ceros arregladas de acuerdo a
las reglas del código usado. Por tanto es extremadamente importante tener en cuenta
que una serie de unos y ceros en un sistema digital puede algunas veces representar
un número binario y otras veces representar alguna otras cantidad discreta de
información como se especifica en un código binario dado. El código BCD por ejemplo,
ha sido escogido de tal manera que es un código y una conversión binaria directa
siempre y cuando los números decimales sean algún entero entre 0 y 9.

Para números mayores que 9, la conversión y la codificación son completamente


diferentes. Este concepto es tan importante que vale la pena repetirlo usando otro
ejemplo: la conversión binaria del decimal 1310 es 11012; la codificación decimal 1310
con BCD es 00010011BCD.

Decimal Conversión Binaria Codificación BCD

1310 11012 0001 0011BCD

47
Suma BCD.
Las operaciones aritméticas se hacen siguiendo las reglas convencionales. La mayor
dificultad se encuentra en la generación de acarreos.

 Si a + b < 10 no existe acarreo y no se debe corregir:

Ejemplo : 3D 0011BCD
+5D + 0101BCD
8D 1000BCD

 Si 9 < a + b < 16 y no existe acarreo, se debe corregir sumando 6D(01102):

Ejemplo :
6D 0110BCD
+ 8D + 1000BCD
14D 1110BCD error

Al sumar en binario 0110 + 1000 se obtiene un código BCD inválido, que hay que
corregir para producir un resultado correcto, es decir un acarreo y 0100. Esto es:

0110BCD
+ 1000BCD
1110BCD Código BCD invalido
+ 0110BCD Factor de correción
1 0100BCD Esto significa el numero 14D( 0001 0100BCD)

 Si a + b > 16 y existe acarreo, se debe corregir también sumando 6D(01102):

Ejemplo:

9D 1001BCD
+ 8D + 1000BCD
17D 10001BCD error

En este caso el resultado es válido (tienen significado en decimal) pero incorrecto (ya
que es el número 11 en BCD). La corrección es:

1001BCD
+ 1000BCD
10001BCD error
+ 0110BCD Factor de corrección.

10111BCD Esto significa el número 17D (0001 0111BCD).

48
La principal ventaja del código BCD es la facilidad relativa para convertir a y
desde decimal. Sólo se requiere recordar los grupos codificados de 4 bits para los
dígitos decimales del 0 al 9. Esta facilidad de conversión es especialmente importante
desde el punto de vista de circuitos, porque en un sistema decimal son los circuitos
lógicos los que ejecutan las conversiones a y desde decimal.

El código BCD se usa en máquinas digitales siempre y cuando se aplique información


digital, ya sea como entradas o mostradas como salidas.

Los voltímetros digitales, contadores de frecuencia y relojes digitales usan todos BCD,
porque despliegan la información de salida en decimal. Las calculadoras electrónicas
usan BCD porque los números de entrada vienen en decimal vía el teclado y los
números de salida son mostrados en decimal.

BCD no es a menudo usado en computadoras digitales modernas de alta velocidad por


dos buenas razones. Primero, como ya fue señalado, el código BCD para un
número decimal dado requiere más bits que el código binario directo y es por
consiguiente menos eficiente. Esto es importante en computadoras digitales porque el
número de lugares en memoria donde estos bits pueden ser almacenados es limitado.
Segundo, los procesos aritméticos para números representados en código BCD son
más complicados que en binario ordinario y requieren así de circuitería más compleja.
La circuitería más compleja contribuye a una disminución en la velocidad a la cual tienen
lugar las operaciones aritméticas. Las calculadoras que usan BCD son, por
consiguiente, considerablemente más lentas en su operación que las computadoras.

CÓDIGO BCD EXCESO-3.



El código BCD exceso-3 se obtiene a partir del código BCD natural, simplemente
sumando 310 (00112) a cada código BCD de cada dígito decimal. Esto se resume en la
siguiente tabla.

Dígito BCD Dígito BCD


Decimal EXCESO-3 Decimal EXCESO-3
0 0011 5 1000
1 0100 6 1001
2 0101 7 1010
3 0110 8 1011
4 0111 9 1100

Este código resulta de utilidad en aplicaciones donde se requiere realizar operaciones


aritméticas usando complementos. Este código es llamado autocomplementario porque
el complemento a 9 de un número decimal puede ser obtenido complementando cada
bit individualmente y el resultado sigue siendo un código válido en BCD exceso 3.
Ejemplo: Representar el número 90710 en BCD exceso-3 y usar el complemento a 1
para encontrar el complemento a 9 del número:
90710 = 1100 0011 1010exc-3
0011 1100 0101exc-3 complemento a 1
= 09210 complemento a 9.

49
CÓDIGO BCD 2421.
Este es otro código BCD autocomplementario, y su nombre (2421) indica la ponderación
de sus bits para obtener su equivalente en decimal y viceversa, en la siguiente tabla se
ilustra este código.

Dígito BCD Dígito BCD


Decimal 2421 Decimal 2421

0 0000 5 1011

1 0001 6 1100

2 0010 7 1101

3 0011 8 1110

4 0100 9 1111

Ejemplo: Representar el número 90710 en BCD 2421 y usar el complemento a 1 para


encontrar el complemento a 9 del número:
90710 = 1111 0000 11012421
0000 1111 00102421 complemento a 1
= 09210 complemento a 9.

CÓDIGO 2 DE 5 (BIQUINARIO).
El código 2 de 5 es un código multibit no ponderado, es decir, los códigos no pueden
obtenerse usando una expresión polinomial; este código está diseñado para la detección
de errores en diferentes tipos de cálculos y operaciones con registros de corrimiento.
Se usan cinco bits para representar los dígitos decimales (0-9). Como el nombre lo
implica sólo dos de los cinco bits son 1.

Dígito Código Dígito Código


Decimal 2 de 5 Decimal 2 de 5

0 00011 5 01100

1 00101 6 10001

2 00110 7 10010

3 01001 8 10100

4 01010 9 11000

Ejemplo: Representar el número decimal 23710 en código 2 de 5.


23710 = 00110 01001 100102 de 5.

50
CÓDIGO GRAY.

El código Gray es un tipo especial de código binario que no es ponderado (los dígitos
que componen el código no tienen un peso asignado).

Su característica es que entre una combinación de dígitos y la siguiente, sea ésta


anterior o posterior, sólo hay una diferencia de un dígito. Por eso también se le llama
código progresivo.

Esta progresión sucede también entre la última y la primera combinación. Por eso se
le llama también código cíclico. (Ver la tabla que se muestra abajo).

El código Gray es utilizado principalmente en sistemas de posición, ya sea angular o


lineal. Sus aplicaciones principales se encuentran en la industria y en robótica.

En robótica se utilizan unos discos codificados para dar la información de posición


que tiene un eje en particular. Esta información se da en código Gray.

La tabla siguiente es una lista del código Gray de cuatro bits para números decimales
del 0 al 15. Los números binarios se muestran en la tabla como una referencia. Como
los números binarios, el código Gray puede tener cualquier número de bits.

DECIMAL BINARIO GRAY


0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110
5 0101 0111
6 0110 0101
7 0111 0100
8 1000 1100
9 1001 1101
10 1010 1111
11 1011 1110
12 1100 1010
13 1101 1011
14 1110 1001
15 1111 1000

Analizando la tabla se observa que:

Cuando un número binario pasa de: 01112 a 10002 (de 7 a 8 en decimal) o de


11112 a 00002 (de 15 a 0 en decimal) cambian todas las cifras.

Para el mismo caso pero en código Gray: 0100 a 1100 (de 7 a 8 en decimal) o de
1000 a 0000 (de 15 a 0 en decimal) sólo ha cambiado una cifra.

51
La característica de pasar de un código al siguiente cambiando sólo un dígito asegura
menos posibilidades de error.

No es ponderado ni es un código aritmético; esto es, no hay pesos específicos


asignados a las posiciones de los bits. El carácter importante del código Gray es que
exhibe solo un cambio de bit único de un número de código al siguiente. Esta propiedad
es muy importante para muchas aplicaciones, tales como codificadores de posición
axial, donde la susceptibilidad a errores se incrementa con el número de cambios de bit
entre números adyacentes en una secuencia.

CONVERSIÓN DE BINARIO A CÓDIGO GRAY.

La conversión entre el código binario y el código Gray a veces es muy útil.


Primeramente, mostraremos cómo convertir un número binario a un número de código
Gray. Se aplican las siguientes reglas:

 El bit más significativo (el más a la izquierda) en el código Gray es el mismo que
el MSB correspondiente en el número binario.
 Yendo de izquierda a derecha, sume cada par adyacente de bits del código
binario, para obtener el siguiente bit del código Gray. Descarte acarreos.

Ejemplo: Paso 1. El digito del código Gray más a la izquierda es el mismo que el digito
del código binario más a la izquierda.

1 0 1 1 0 Binario
1 Gray

Paso 2. Sume el bit de código binario más a la izquierda el bit adyacente.

1 + 0 1 1 0 Binario
1 1 Gray

Paso 3. Sume el siguiente par adyacente.

1 0 + 1 1 0 Binario
1 1 1 Gray

Paso 4. Sume el siguiente par adyacente y descarte el acarreo.

1 0 1 + 1 0 Binario
1 1 1 0 Gray

Paso 5. Sume el último par adyacente.

1 0 1 1 +0 Binario
1 1 1 0 1 Gray

La conversión ha sido completada; el código Gray es 11101.

52
CONVERSIÓN DE GRAY A BINARIO.

Para convertir de código Gray a Binario, se utiliza un método similar, pero con algunas
diferencias. Se aplican las siguientes reglas:

 El bit más significativo (el más a la izquierda) es el código binario es el mismo


que el bit correspondiente en el código Gray.
 Sume cada bit generado del código binario al bit del código Gray en la siguiente
poción adyacente. Descarte acarreos.

Ejemplo:

Paso 1. El digito del código binario más a la izquierda es el mismo que el digito del
código Gray más a la izquierda.

1 1 0 1 1 Gray
1 Binario

Paso 2. Sume el último bit del código binario que se acaba de generar al bit del código
Gray en la siguiente posición. Descarte acarreos. (En negrilla bit que se suman).

1 1 0 1 1 Gray
1 0 Binario

Paso 3. Sume el último bit del código binario que se acaba de generar al bit del código
Gray en la siguiente posición.

1 1 0 1 1 Gray
1 0 0 Binario

Paso 4. Sume el último bit del código binario que se acaba de generar al bit del código
Gray en la siguiente posición.

1 1 0 1 1 Gray
1 0 0 1 Binario

Paso 5. Sume el último bit del código binario que se acaba de generar al bit del código
Gray en la siguiente posición. Descarte acarreos.

1 1 0 1 1 Gray
1 0 0 1 0 Binario

La conversión ha sido completada; el código binario es 100102.

53
APLICACIÓN A SENSORES ÓPTICOS.

La principal característica del código Gray (que sólo cambia un bit entre dos códigos
consecutivos) es muy utilizada en sensores ópticos para codificar la posición (angular o
lineal) mediante discos o cintas codificadas en Gray, dependiendo del caso.

Por ejemplo, en la siguiente figura se ilustra la codificación en dos colores (blanco y


negro) de un disco que será montado sobre la flecha de un motor. Se usa el código Gray
de 4 bits para codificar la posición angular de la flecha. Cada sector en el disco tiene un
código de posición de 0 a 15. Se usarán sensores opto electrónicos reflectivos para
determinar la posición de la flecha en un sector o sea, con una resolución de 1/16 de
vuelta, o de 22.5°. Si se desea una mejor resolución se deberán usar más bits, y por lo
tanto mayor número de sectores.

Aunque el disco pudiera ser codificado en binario natural, el hacerlo en Gray tiene la
ventaja de que si el sensor queda ubicado entre dos sectores, la lectura tomada
producirá un error de cuando mucho media posición. En cambio, si es en binario este
error puede ser tan grande como 180°.

54
CÓDIGOS ALFANUMÉRICOS.

Muchas aplicaciones de sistemas digitales (especialmente en las computadoras o la


transmisión de textos) requieren del procesamiento de datos como números, letras y
símbolos especiales. Para manejar estos datos usando dispositivos digitales, cada
símbolo debe estar representado por un código binario. El código alfanumérico más
generalizado en la actualidad es el denominado ASCII (American Standard Code for
Information Interchange). Este es un código de 7 bit. La siguiente tabla muestra una
parte del código ASCII:

Rango (hexadecimal Caracteres


0 al 19 códigos de control y comunicaciones
30 al 39 dígitos del 0 al 9
41 al 5A letras mayúsculas de la A a la Z
61 al 7A letras minúsculas de la “a” a la z

Ejemplo: la palabra "Start" se representa en código ASCII como sigue

1010011 1110100 1100001 1110010 1110100

S t a r t

55
CÓDIGO DE SIETE SEGMENTOS.

Un dispositivo muy generalizado por su sencillez y bajo costo en dispositivos digitales


de visualización es el exhibidor o display de siete segmentos, el cual consiste en un
arreglo de siete indicadores luminosos (LED’s) u opacos (cristal líquido) arreglado como
se muestra en la siguiente figura. Existen dos tipos de exhibidores de siete segmentos
construidos con LED’s, estos son los de ánodo común y los de cátodo común, los cuales
se muestran también en la figura.

Este tipo de displays permite la representación de información de tipo numérico


principalmente, sin embargo, también permite algunos caracteres alfabéticos, tales
como: a, A, b, c, C, d, E, F, G, H, y, j, L, o, O, p, q, r, s, u, z.

En la siguiente tabla se muestra el código de 7 segmentos para un display de cátodo


común para los dígitos decimales y el equivalente en BCD:

Decimal Entradas en Salidas para el display


binario. de 7 segmentos
Números A B C D a b c d e f g
0 0 0 0 0 1 1 1 1 1 1 0
1 0 0 0 1 0 1 1 0 0 0 0
2 0 0 1 0 1 1 0 1 1 0 1
3 0 0 1 1 1 1 1 1 0 0 1
4 0 1 0 0 0 1 1 0 0 1 1
5 0 1 0 1 1 0 1 1 0 1 1
6 0 1 1 0 1 0 1 1 1 1 1
7 0 1 1 1 1 1 1 0 0 0 0
8 1 0 0 0 1 1 1 1 1 1 1
9 1 0 0 1 1 1 1 1 0 1 1
10 1 0 1 0 x x x X x x x
11 1 0 1 1 x x x X x x x
12 1 1 0 0 x x x X x x x
13 1 1 0 1 x x x X x x x
14 1 1 1 0 x x x X x x x
15 1 1 1 1 x x x X x x x

56
CÓDIGOS PARA DETECCIÓN Y CORRECCIÓN DE ERRORES.

Los sistemas digitales pueden cometer errores de vez en cuando. Aunque los
dispositivos en circuito integrado tales como microprocesadores, compuertas lógicas o
circuitos de memoria carecen de partes móviles y por lo tanto tienen alta confiabilidad,
pero los dispositivos que tienen interacción con partes móviles son menos confiables.
Se pueden producir errores por polvo en las cabezas lectoras de una unidad de disco.

También es muy común la ocurrencia de errores en la transmisión de datos a distancia.


Los datos que se transmiten por modem (a través de línea telefónica) pueden recibirse
incorrectamente si la línea tiene ruidos. También las perturbaciones en el suministro de
energía eléctrica pueden producir errores. En resumen, cuando se leen, escriben o
transmiten caracteres de un sitio a otro, pueden producirse errores.

TRANSMISIÓN SERIE Y PARALELO.

Existen dos métodos básicos para transmitir información entre dos dispositivos digitales,
como se ilustra en la siguiente figura, la transmisión de datos digitales en paralelo ocupa
una línea física por cada bit de los datos a enviar, esto hace que este tipo de transmisión
sea usada en distancias relativamente cortas (unos cuantos metros), ya que de otra
manera se vuelve muy costosa

Por otro lado, la transmisión de datos a distancias muy grandes (del orden de cientos
de metros a miles de kilómetros) hace necesario usar menos líneas físicas, en este caso
puede usarse el esquema de la figura siguiente o transmisión en serie, la cual utiliza una
sola línea para enviar el número de bits que se desee.

La transmisión en serie resulta económica por el número reducido de líneas que requiere
e incluso el hecho de que permite usar en lugar de líneas conductoras, el aire o el vacío,
cuando en lugar de pulsos eléctricos se usa radiación electromagnética (luz, ondas de
radio, ultrasonido, etc.). A cambio de esta economía, el transmisor y el receptor se
vuelven un poco más complejos, además de que el trayecto que recorre la información
(por ser largo) se vuelve más susceptible a interferencias.

57
CÓDIGO DE PARIDAD.

Un método muy simple, pero ampliamente utilizado por su sencillez para detectar
errores en transmisión de datos consiste en añadir un bit de paridad (p) a cada carácter,
normalmente en la posición más significativa.

En el código de paridad par, el bit de paridad (p) se elige de manera que el número de
bits 1 del dato sea un número par incluyendo el bit de paridad. En el código de paridad
impar, el bit de paridad se elige de modo que el número de bits 1 (incluyendo el de
paridad) del dato sea impar.

De esta manera, cuando cambia un bit durante la transmisión, el número de unos en el


carácter recibido tendrá la paridad equivocada y el receptor sabrá que se ha producido
un error.

Ejemplo: La siguiente tabla muestra un código de paridad par de 8 bits para los
caracteres ASCII “FIE.”

Ejemplo Si un transmisor envía la información anterior y hay errores en la transmisión,


suponiendo que el receptor recibe la información, mostrada en la siguiente tabla, donde
se anotan los datos que llegaron erróneos y si se detectó o no el error, agrega en la
columna vacía (bits erróneos) cuantos bits cambiaron en la transmisión.

Como puede verse, el código de paridad no siempre resulta efectivo para detectar
errores. ¿Qué tipo de errores si detecta y cuáles no?

58
CÓDIGO DE HAMMING.

Richard Hamming (1950) ideó un método no sólo para detectar errores sino también
para corregirlos, y se conoce como código Hamming. En él se añaden k bits de paridad
a un carácter de n bits, formando un nuevo carácter de n + k bits. Los bits se enumeran
empezando por 1, no por 0, siendo el bit 1, el de la izquierda, el más significativo. Todo
bit cuyo número sea potencia de 2 es un bit de paridad y todos los demás se
utilizan para datos.

Para un carácter ASCII de 7 bits, se añaden 4 bits de paridad. Los bits 1, 2, 4 y 8 son
bits de paridad; 3, 5, 6, 7, 9, 10 y 11 son los 7 bits de datos. Cada bit de paridad
comprueba determinadas posiciones de bit y se ajusta de modo que el número total
de unos en las posiciones comprobadas sea par, si se trata de paridad par.

Las posiciones de los bits comprobados por los de paridad son:

El bit 1 comprueba los bits 1, 3, 5, 7, 9 y 11.

El bit 2 comprueba los bits 2, 3, 6, 7, 10 y 11.

El bit 4 comprueba los bits 4, 5, 6 y 7.

El bit 8 comprueba los bits 8, 9, 10 y 11.

En general, el bit n es comprobado por los bits b1, b2,....,bj, tales que b1 + b2 + .... + bj
= n. Por ejemplo, el bit 5 es comprobado por los bits 1 y 4 porque 1 + 4 = 5. El bit 6 es
comprobado por los bits 2 y 4 porque 2 + 4 = 6.

Ejemplo: Usando paridad par, construir el código de Hamming para el carácter "b".

Código ASCII para "b" (62H = 110 0010)

D6=1 D5=1 D4=0 D3=0 D2=0 D1=1 D0=0

Código de Hamming para "b"

D6 D5 D4 D3 D2 D1 D0

1,3,5,7,9,11(para 2 unos) 4,5,6,7(para tener 2 unos) 8,9,10,11(para 2 unos)

2,3,6,7,10,11(para tener 2 unos)

59
Explicación

El bit 1 se puso a cero porque los bits 3 y 5 están en uno, para tener paridad par.

El bit 2 se puso a cero porque los bits 3 y 10 están en uno, para tener paridad par.

El bit 4 se puso a uno porque el bit 5 está en uno, para tener paridad par.

El bit 8 se puso a uno porque el bit 10 está en uno, para tener paridad par.

El carácter ASCII "b" se representa por el número binario 1100010.

El código de Hamming para "b" en binario es 00111001010.

Ejemplo:

Considere que pasaría si el bit 1 se modificara durante la transmisión. El carácter


recibido sería 10111001010 en lugar de 00111001010. El receptor comprobaría los 4
bits de paridad con los resultados siguientes:

Bit de paridad 1 incorrecto (los bits 1, 3, 5, 7, 9 y 11 contienen tres unos).

Bit de paridad 2 correcto (los bits 2, 3, 6, 7, 10 y 11 contienen dos unos).

Bit de paridad 4 correcto (los bits 4, 5, 6 y 7 contienen dos unos).

Bit de paridad 8 correcto (los bits 8, 9, 10 y 11 contienen dos unos).

El número total de unos en los bits 1, 3, 5, 7, 9 y 11 debería de ser par, ya que se está
usando paridad par. El bit incorrecto debe ser uno de los bits comprobados por el bit de
paridad 1, es decir, uno de los bits 1, 3, 5, 7, 9 u 11. Como el bit de paridad 2 es correcto,
sabemos que los bits 2, 3, 6, 7, 10 y 11 son correctos, de forma que el error no estaba
en los bits 3, 7 u 11. Esto deja los bits 1, 5 y 9. El bit de paridad 4 es correcto, lo cual
significa que los bits 4, 5, 6 y 7 no contienen errores. Esto reduce la elección al 1 o 9. El
bit de paridad 8 también es correcto y, por lo tanto, el bit 9 es correcto. Por consiguiente,
el bit incorrecto debe ser el 1. Dado que se recibió como un 1, debería haberse
transmitido como un 0. En esta forma se pueden corregir los errores.

60
UNIDAD II: Circuitos digitales y dispositivos de memoria.
2.1 SEÑALES ANALÓGICAS Y DIGITALES.

La electrónica se divide en dos categorías.

a) Electrónica analógica:

Trata de circuitos en los que las señales eléctricas pueden tomar infinidad de valores
dentro de un rango determinado.

Ejemplo del espectro medido de una señal de televisión analógica.

b) Electrónica digital:

Se encarga de estudiar los circuitos en los que las señales eléctricas sólo pueden tomar
dos valores: 1 o 0 (nivel alto, nivel bajo). La electrónica digital ha alcanzado una gran
importancia debido a que es utilizada para realizar autómatas y por ser la piedra angular
de los sistemas microprogramados como son los ordenadores o computadoras.

61
Una señal analógica es un tipo de señal generada por algún tipo de fenómeno
electromagnético y que es representable por una función matemática continua en la que
es variable su amplitud y periodo (representando un dato de información) en función del
tiempo. Algunas magnitudes físicas comúnmente portadoras de una señal de este tipo
son eléctricas como la intensidad de corriente, la tensión y la potencia, pero también
pueden ser hidráulicas como la presión, térmicas como la temperatura, mecánicas, etc.

En la naturaleza, el conjunto de señales que percibimos son analógicas, así la luz, el


sonido, la energía etc., son señales que tienen una variación continua. Incluso la
descomposición de la luz en el arco iris vemos como se realiza de una forma suave y
continúa.

Una onda senoidal es una señal analógica de una sola frecuencia. Los voltajes de la
voz y del video son señales analógicas que varían de acuerdo con el sonido o
variaciones de la luz que corresponden a la información que se está transmitiendo.

Por otro lado, las señales digitales adquieren uno de dos valores a través del tiempo,
como se puede apreciar en la figura anterior. Su comportamiento se puede equiparar al
de un interruptor (o switch) que tiene uno de dos estados: encendido o apagado. Las
ventajas de este tipo de transmisión es, primero, su inmunidad a las interferencias ya
que al digitalizar una señal se elimina el “ruido” producido por el medio ambiente,
produciendo una señal más pura y de mayor resolución (si se cumplen otros requisitos
que no son importantes en este momento); y, segundo, que puede codificarse usando
el sistema binario que se basa en los dígitos 1(encendido) y 0 (apagado). Ese tipo de
código se presta al almacenamiento; o sea, se puede guardar en memorias de las
utilizadas en cámaras digitales y discos duros de computadoras.

62
Las señales de cualquier circuito o comunicación electrónica son susceptibles de ser
modificadas de forma no deseada de diversas maneras mediante el ruido, lo que ocurre
siempre en mayor o menor medida. Para solucionar esto la señal suele ser
acondicionada antes de ser procesada.

Ejemplo de ruido en una señal analógica

La gran desventaja respecto a las señales digitales es que en las señales analógicas
cualquier variación en la información es difícil su recuperación, y esta pérdida afecta en
gran medida al correcto funcionamiento y rendimiento del dispositivo analógico. Un
sistema de control digital (como un ordenador, etc.) no tiene capacidad alguna para
trabajar con señales analógicas, de modo que necesita convertirlas en señales digitales
para poder trabajar con ellas.

Un sistema digital es cualquier dispositivo destinado a la generación, transmisión,


procesamiento o almacenamiento de señales digitales. También un sistema digital es
una combinación de dispositivos diseñado para manipular cantidades físicas o
información que estén representadas en forma digital; es decir, que sólo puedan tomar
valores discretos.

Antes de ver el tema 2.2 compuertas lógicas, considero apropiado dar un


repaso a la teoría de los conjuntos y el álgebra booleana, que no están
considerados en el programa de estudios en forma explícita (conocimiento
previo).

63
REPASO.

Teoría de los conjuntos.

Un conjunto es una colección de elementos u objetos bien definidos, en tal forma que
se puede afirmar con certeza si cualquier objeto dado pertenece o no a la agrupación.

Para denotar a los conjuntos, se usan letras mayúsculas y sus elementos con letras
minúsculas.

Cuando un elemento x1 pertenece a un conjunto A se expresa de forma simbólica como:


x1A.

En caso de que un elemento y1 no pertenezca a este mismo conjunto se utiliza la


notación: y1A.
Existen cuatro formas de enunciar a los conjuntos:

1) Por extensión o enumeración: los elementos son encerrados entre llaves y separados
por comas. Es decir, el conjunto se describe listando todos sus elementos entre llaves.

2) Por comprensión: los elementos se determinan a través de una condición que se


establece entre llaves. En este caso se emplea el símbolo | que significa “tal que". En
forma simbólica es:

A= {x | P(x)} = {x1, x2, x3, …….., xn}

Que significa que el conjunto A esta formado de todos los elementos x tales que la
condición Pxes verdadera, como x1, x2, x3, etc.

3) Diagramas de Venn: son regiones cerradas que sirven para visualizar el contenido de
un conjunto o las relaciones entre conjuntos.

4) Por descripción verbal: Es un enunciado que describe la característica que es común


para los elementos.

Ejemplo.

Dada la descripción verbal “el conjunto de las letras vocales”, expresarlo por extensión,
comprensión y por diagrama de Venn.

Solución.

Por extensión: V = a, e, i, o, u




Por comprensión: V x | x es una vocal 

64
Por diagrama de Venn:

a e

o u

Operaciones con conjuntos.

Para realizar operaciones con conjuntos necesitamos un marco de referencia llamado


conjunto universo (U) y un conjunto vacío carente de elementos, que se denota por:o
bien por

a) La unión de los conjuntos A y B es el conjunto de todos los elementos de A con


todos los elementos de B sin repetir ninguno y se denota como A∪ B. Esto es:

A∪B x | xA y/o xB 


Gráficamente:

65
b) La intersección de los conjuntos A y B es el conjunto de los elementos de A que
también pertenecen a B y se denota como A∩ B. Esto es:

A ∩ B x | xA y xB 



Gráficamente:

c) El complemento del conjunto A con respecto al conjunto universal U es el


conjunto de todos los elementos de U que no están en A y se denota como A'.
Esto es:

A'𝐴̅xU | xA

Gráficamente:

66
Ejemplo.

Sean los conjuntos:

U = {a, b, c, d, e, f, g, h, i, j, k, l, m, n}.

A = {a, d, e, g, h, k, l, n}.

B = {a, c, f, g, k, l, m}.

Obtener:

a) A ∪ B, b) A ∩ B, c) A' y d) B’.

Solución.

a) A∪ B = {a, c, d, e, f, g, h, k, l, m, n}.

b) A∩ B = {a, g, k, l}.

c) A' = {b, c, f, I, j, m}.

d) B' = {b, d, e, h, i, j, n}.

Propiedades de los conjuntos.

Sean los conjuntos A, B, C dentro del universo U. Las seis propiedades que rigen las
operaciones con esos conjuntos son las siguientes:

1. Propiedades de identidad:

A∪A.
A∪U U.
A∩U A.
A∩

2. Propiedades de idempotencia:

A∪A A.
A∩A A.

3. Propiedades de complemento:

A∪A' U.
A∩A' 

67
4. Propiedades asociativas:

A∪B∪C A∪B ∪C


A∩B∩C A∩B ∩C

5. Propiedades conmutativas:

A∪B B ∪A.


A∩B B ∩A.

6. Propiedades distributivas:

A∪B ∩CA∪B∩A∪C
A∩B ∪CA∩B∪A∩C

Leyes de D’MORGAN.

Estas leyes establecen los complementos de la unión e intersección entre conjuntos:

Primera ley. El complemento de la unión de dos conjuntos es la intersección de sus


complementos.

(A ∪ B)' = A'∩B'.

En el diagrama de la izquierda, A∪ B viene dada por la región en blanco y (A ∪ B)' está


representado por el área sombreada verticalmente. Por su parte en el diagrama de la
derecha, A' es la región sombreada horizontalmente, B' es el área sombreada
verticalmente, por lo que A'∩B' está representado por la superficie cuadriculada. Las
regiones resultantes son iguales.

68
Segunda ley. El complemento de la intersección de dos conjuntos es la unión
de sus complementos:

(A ∩ B)' = A'∪B'.

En el diagrama de la izquierda, A∩B está dada por la región sombreada


horizontalmente y (A∩ B)' está representado por el área sombreada verticalmente. Por
su parte, en el diagrama de la derecha, A' es la región sombreada horizontalmente, B'
es el área sombreada verticalmente, por lo que A'∪B' está representado por la superficie
que no es blanca. Las regiones resultantes son iguales.

Para demostrar las leyes de De Morgan, realizaremos los siguientes ejercicios.

1. − (𝐴 ∩ 𝐵) ∪ (𝐴 ∩ 𝐵̅) = 𝐴 ∩ (𝐵 ∪ 𝐵̅) = 𝐴 ∩ Ω = A.

2. − (𝐴̅ ∩ 𝐵) ∪ (𝐴̅ ∩ 𝐵̅) = 𝐴̅ ∩ (𝐵 ∪ 𝐵̅) = 𝐴̅ ∩ Ω = 𝐴̅.

3. − (𝐴 ∩ 𝐵) ∪ (𝐴 ∩ 𝐵̅) ∪ (𝐴̅ ∩ 𝐵) ∪ (𝐴̅ ∩ 𝐵̅) =

Del ejercicio 1 y 2 tenemos:

(𝐴 ∩ 𝐵) ∪ (𝐴 ∩ 𝐵̅) ∪ (𝐴̅ ∩ 𝐵) ∪ (𝐴̅ ∩ 𝐵̅) = 𝐴 ∪ 𝐴̅ = Ω.

4. − (𝐴 ∩ 𝐵) ∪ (𝐴 ∩ 𝐵̅) ∪ (𝐴̅ ∩ 𝐵) =

Considerando ejercicio 1 tenemos:

(𝐴 ∩ 𝐵) ∪ (𝐴 ∩ 𝐵̅) ∪ (𝐴̅ ∩ 𝐵) = 𝐴 ∪ (𝐴̅ ∩ 𝐵) = (𝐴 ∪ 𝐴̅) ∩ (𝐴 ∪ 𝐵) = Ω ∩ (𝐴 ∪ 𝐵) =

= (𝐴 ∪ 𝐵).

5.- Demostrar la primera ley de De Morgan.

Considerando ejercicio 3, tenemos que:

(𝐴 ∩ 𝐵) ∪ (𝐴 ∩ 𝐵̅) ∪ (𝐴̅ ∩ 𝐵) ∪ (𝐴̅ ∩ 𝐵̅) = Ω.

Considerando ejerció 4, tenemos:

69
(𝐴 ∩ 𝐵) ∪ (𝐴 ∩ 𝐵̅) ∪ (𝐴̅ ∩ 𝐵) = (𝐴 ∪ 𝐵).

Por lo tanto:

(𝐴 ∪ 𝐵) ∪ (𝐴̅ ∩ 𝐵̅) = Ω.

Proponiendo:

(𝐴 ∪ 𝐵) ∪ ̅̅̅̅̅̅̅̅̅̅
(𝐴 ∪ 𝐵) = Ω.

Si comparamos estas dos expresiones, podemos concluir que:

̅̅̅̅̅̅̅̅̅̅ ̅∩𝑩
(𝑨 ∪ 𝑩) = (𝑨 ̅ ).

Demostrando la primera ley de De Morgan.

6. − (𝐴 ∪ 𝐵) ∩ (𝐴 ∪ 𝐵̅) = 𝐴 ∪ (𝐵 ∩ 𝐵̅) = 𝐴 ∪ Φ = 𝐴.

7. − (𝐴̅ ∪ 𝐵) ∩ (𝐴̅ ∪ 𝐵̅) = 𝐴̅ ∪ (𝐵 ∩ 𝐵̅) = 𝐴̅ ∪ Φ = 𝐴̅.

8. − (𝐴 ∪ 𝐵) ∩ (𝐴 ∪ 𝐵̅) ∩ (𝐴̅ ∪ 𝐵) ∩ (𝐴̅ ∪ 𝐵̅) =

Utilizando los resultados de los ejercicios 7 y 8, tenemos:

(𝐴 ∪ 𝐵) ∩ (𝐴 ∪ 𝐵̅) ∩ (𝐴̅ ∪ 𝐵) ∩ (𝐴̅ ∪ 𝐵̅) = 𝐴 ∩ 𝐴̅ =Φ.

9. − (𝐴 ∪ 𝐵) ∩ (𝐴 ∪ 𝐵̅) ∩ (𝐴̅ ∪ 𝐵) =

Considerando el ejercicio 6, tenemos:

(𝐴 ∪ 𝐵) ∩ (𝐴 ∪ 𝐵̅) ∩ (𝐴̅ ∪ 𝐵) = 𝐴 ∩ (𝐴̅ ∪ 𝐵) = (𝐴 ∩ 𝐴̅) ∪ (𝐴 ∩ 𝐵) = Φ ∪ (A ∩ 𝐵) =

= (A ∩ 𝐵).

9.- Demostrar la segunda ley de De Morgan.

Considerando el ejercicio 7, tenemos que:

(𝐴 ∪ 𝐵) ∩ (𝐴 ∪ 𝐵̅) ∩ (𝐴̅ ∪ 𝐵) ∩ (𝐴̅ ∪ 𝐵̅) = Φ.

Considerando el resultado del ejercicio 9, tenemos que:

(𝐴 ∪ 𝐵) ∩ (𝐴 ∪ 𝐵̅) ∩ (𝐴̅ ∪ 𝐵) = (A ∩ 𝐵).

(A ∩ 𝐵) ∩ (𝐴̅ ∪ 𝐵̅) = Φ.

Proponiendo:

(A ∩ 𝐵) ∩ ̅̅̅̅̅̅̅̅̅̅
(A ∩ 𝐵) = Φ.

Si comparamos estas dos expresiones, podemos concluir que:

̅̅̅̅̅̅̅̅̅̅ ̅∪𝑩
(𝐀 ∩ 𝑩) = (𝑨 ̅ ).

Demostrando la segunda ley de De Morgan.

70
Álgebra de Boole.

La herramienta fundamental para el análisis y diseño de circuitos digitales es el Álgebra


Booleana. Esta álgebra es un conjunto de reglas matemáticas (similares en algunos
aspectos al álgebra convencional), que tienen la virtud de corresponder al
comportamiento de circuitos basados en dispositivos de conmutación (interruptores,
relevadores, transistores, etc.).

El álgebra booleana es un sistema algebraico definido en un conjunto B, el cual contiene


dos o más elementos y entre los cuales se definen dos operaciones denominadas "suma
u operación OR" (+) y "producto o multiplicación u operación AND" (.), es decir, la suma
es la unión de conjuntos (U) y la multiplicación es la intersección () de conjuntos.

Si consideramos lo anterior y además, cambiamos  por 0 y Ω por 1, tenemos:

1. Propiedades de identidad:

A∪A; A + 0 = A.
A∪U U; A + 1 = 1.
A∩U A; A . 1 = A.
A∩ 

2. Propiedades de idempotencia:

A∪A A; A + A = A.
A∩A A; A . A = A.

3. Propiedades de complemento:

A∪A' U; A + A' = 1.


A∩A'  A' = 0.

4. Propiedades asociativas:

A∪B∪C A∪B ∪C A+B+C A+B + C 


A∩B∩C A∩B ∩C A . B . C A . B . C

5. Propiedades conmutativas

A∪B B ∪A; A + B = B + A.


A∩B B ∩A; A . B = B . A.

6. Propiedades distributivas

A∪B ∩CA∪B∩A∪C A+B . CA+B.A +C


A∩B ∪CA∩B∪A∩C  A.B + CA . B+A . C

71
Primera ley de De Morgan.

̅̅̅̅̅̅̅̅̅̅ ̅∩𝑩
(𝑨 ∪ 𝑩) = (𝑨 ̅ ); ̅̅̅̅̅̅̅̅̅̅ ̅. 𝑩
(𝑨 + 𝑩) = (𝑨 ̅ ).

Segunda ley de De Morgan.

̅̅̅̅̅̅̅̅̅̅ ̅∪𝑩
(𝐀 ∩ 𝑩) = (𝑨 ̅ ); ̅̅̅̅̅̅̅̅ ̅+𝑩
(𝐀. 𝑩) = (𝑨 ̅ ).

El ejercicio 3, que realizamos para usarlo como base para demostrar la primera ley de
De Morgan es muy importante porque nos permite introducir el concepto de mintérminos
(la suma de productos dará 1), como se muestra a continuación.

(𝐴 ∩ 𝐵) ∪ (𝐴 ∩ 𝐵̅ ) ∪ (𝐴̅ ∩ 𝐵) ∪ (𝐴̅ ∩ 𝐵̅ ) = Ω.

(𝐴. 𝐵) + (𝐴. 𝐵̅ ) + (𝐴̅. 𝐵) + (𝐴̅. 𝐵̅ ) = 1.

mintérminos

En la mayor parte de los ejercicios de estos apuntes usaremos los mintérminos, es decir,
nos centraremos en los resultados que producen 1(esto se conoce como lógica positiva).

Si recordamos el ejercicio 8 que tomamos como partida para la demostración de la


segunda ley de De Morgan, nos permitirá introducir el concepto de MAXTÉRMINOS (el
producto de las suma dará 0), como se muestra a continuación.

(𝐴 ∪ 𝐵) ∩ (𝐴 ∪ 𝐵̅ ) ∩ (𝐴̅ ∪ 𝐵) ∩ (𝐴̅ ∪ 𝐵̅ ) = Φ.

(𝐴 + 𝐵) . ̅)
(𝐴 + B . ̅ + 𝐵)
(A . ̅+B
(A ̅) = 0.

MAXTERMINOS

72
2.2 COMPUERTAS LÓGICAS.

Las computadoras digitales utilizan el sistema de números binarios, que tiene dos dígitos
0 y 1. Un dígito binario se denomina un bit. La información está representada en las
computadoras digitales en grupos de bits. Utilizando diversas técnicas de codificación
los grupos de bits pueden hacerse que representen no solamente números binarios sino
también otros símbolos discretos cualesquiera, tales como dígitos decimales o letras de
alfabeto. Utilizando arreglos binarios y diversas técnicas de codificación, los dígitos
binarios o grupos de bits pueden utilizarse para desarrollar conjuntos completos de
instrucciones para realizar diversos tipos de cálculos.

La información binaria se representa en un sistema digital por cantidades físicas


denominadas señales, Las señales eléctricas tales como voltajes en el sistema digital
representan una variable binaria igual a 1 o 0. Por ejemplo, un sistema digital
particular puede emplear una señal de 3 volts para representar el binario "1" y 0.5
volts para el binario "0".

La siguiente ilustración muestra un ejemplo de una señal binaria.

Como se muestra en la figura anterior, cada valor binario tiene una desviación aceptable
del valor nominal. La región intermedia entre las dos regiones permitidas se cruza
solamente durante la transición de estado. Las terminales de entrada de un circuito
digital aceptan señales binarias dentro de las tolerancias permitidas y los circuitos
responden en las terminales de salida con señales binarias que caen dentro de las
tolerancias permitidas. La lógica binaria tiene que ver con variables binarias y con
operaciones que toman un sentido lógico. La manipulación de información binaria se
hace por circuitos lógicos que se denominan compuertas.

Las compuertas son bloques del hardware que producen señales en binario 1 o 0
cuando se satisfacen los requisitos de entrada lógica. Las diversas compuertas lógicas
se encuentran comúnmente en sistemas de computadoras digitales. Cada compuerta
tiene un símbolo gráfico diferente y su operación puede describirse por medio de una
función algebraica. Las relaciones entrada - salida de las variables binarias para cada
compuerta pueden representarse en forma tabular en una tabla de verdad.

A continuación se detallan los nombres, símbolos, gráficos, funciones algebraicas, y


tablas de verdad de las compuertas más usadas.

73
Compuerta SI o Buffer.

Símbolo de la función lógica SI a) Contactos, b) Normalizado y c) No normalizado.

La compuerta lógica SI, realiza la función booleana igualdad. En la práctica se suele


utilizar como amplificador de corriente (buffer en inglés).

La ecuación característica que describe el comportamiento de la compuerta SI es:

F=A

Su tabla de verdad es la siguiente:

Tabla de verdad de la compuerta SI


Entrada A Salida A
0 0
1 1

Compuerta Y (AND).

Símbolo de la función lógica Y a) Contactos, b) Normalizado y c) No normalizado

La compuerta lógica Y, más conocida por su nombre en inglés AND, realiza la función
booleana de producto lógico. Su símbolo es un punto (·), aunque se suele omitir. Así, el
producto lógico de las variables A y B se indica como AB, y se lee A y B o simplemente
A por B.

74
Su tabla de verdad es la siguiente:

Tabla de verdad de la compuerta AND


Entrada A Entrada B Salida AB
0 0 0
0 1 0
1 0 0
1 1 1

La ecuación característica que describe el comportamiento de la puerta AND,


considerando los unos (mintérminos) en la salida, tenemos que:

F = A.B = AB.

Se puede definir la puerta AND, como aquella compuerta que entrega un 1 lógico sólo
si todas las entradas están a nivel alto 1.

Compuerta O (OR).

Símbolo de la función lógica O a) Contactos, b) Normalizado y c) No normalizado.

La compuerta lógica O, más conocida por su nombre en inglés OR, realiza la operación
de suma lógica.

Su tabla de verdad es la siguiente:

Tabla de verdad de la compuerta OR


Entrada A Entrada B Salida A + B
0 0 0
0 1 1
1 0 1
1 1 1

La ecuación característica que describe el comportamiento de la puerta OR,


considerando los ceros (MAXTÉRMINOS) es:

F = (A + B) = A + B.

75
Si hubiésemos seleccionados los unos (usando mintérminos), tendríamos:

𝐹 = 𝐴̅𝐵 + 𝐴𝐵̅ + 𝐴𝐵; dado que A + A = A, entonces AB + AB = AB, por lo tanto

tenemos:

𝐹 = 𝐴̅𝐵 + 𝐴𝐵̅ + 𝐴𝐵 + 𝐴𝐵 = 𝐴̅𝐵 + 𝐴𝐵 + 𝐴𝐵̅ + 𝐴𝐵 = (𝐴̅ + 𝐴). 𝐵 + 𝐴. (𝐵̅ + 𝐵).

F = B + A = A + B, que es el resultado obtenido empleando MAXTÉRMINOS.

Podemos definir la compuerta OR como aquella que proporciona a su salida un 1 lógico


si al menos una de sus entradas está a 1.

Compuerta O-exclusiva (XOR).

Símbolo de la función lógica O-exclusiva. a) Contactos, b) Normalizado y c) No


normalizado

La compuerta lógica O-exclusiva, más conocida por su nombre en inglés XOR, realiza
la función booleana 𝐴̅𝐵 + 𝐴𝐵̅. Su símbolo es el más (+) inscrito en un círculo.

Su tabla de verdad es la siguiente:

Tabla de verdad de la compuerta XOR


Salida A B
Entrada A Entrada B
0 0 0
0 1 1
1 0 1
1 1 0

La ecuación característica que describe el comportamiento de la puerta XOR,


empleando mintérminos, es:

𝐹 = 𝐴̅𝐵 + 𝐴𝐵̅ = 𝐴 ⊕ 𝐵.

Su símbolo es el más (+) inscrito en un círculo.

76
Se puede definir esta compuerta como aquella que da por resultado uno, cuando los
valores en las entradas son distintos. ej.: 1 y 0, 0 y 1 (en una compuerta de dos
entradas). Si la compuerta tuviese tres o más entradas, la XOR tomaría la función de
suma de paridad, cuenta el número de unos a la entrada y si son un número impar, pone
un 1 a la salida, para que el número de unos pase a ser par. Esto es así porque la
operación XOR es asociativa, para tres entradas escribiríamos: 𝐴⨁(𝐵 ⊕ 𝐶)o bien
(𝐴⨁𝐵)⨁𝐶.

Su tabla de verdad sería:

XOR de tres entradas


Entrada A Entrada B Entrada C Entrada A B C
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 0
1 1 1 1

Lógica negada.

Compuerta NO (NOT).

Símbolo de la función lógica NO a) Contactos, b) Normalizado y c) No normalizado

La compuerta lógica NO (NOT en inglés) realiza la función booleana de inversión o


negación de una variable lógica.

Su tabla de verdad es la siguiente:

Tabla de verdad de la compuerta NOT


Entrada A ̅
Salida 𝑨
0 1
1 0

77
La ecuación característica que describe el comportamiento de la puerta NOT es:

̅
𝑭 = 𝑨.

Se puede definir como una compuerta que proporciona el estado inverso del que esté
en su entrada.

Compuerta NO-Y (NAND).

Símbolo de la función lógica NO-Y. a) Contactos, b) Normalizado y c) No normalizado

La compuerta lógica NO-Y, más conocida por su nombre en inglés NAND, realiza la
operación de producto lógico negado.

Su tabla de verdad es la siguiente:

Tabla de verdad de la compuerta NAND


Entrada A Entrada B ̅̅̅̅
Salida𝐴𝐵
0 0 1
0 1 1
1 0 1
1 1 0

La ecuación característica que describe el comportamiento de la compuerta NAND,


empleando MAXTÉRMINOS (porque solo hay un cero) es:

F = ( A + B) = AB, aplicando la segunda ley de De Morgan.

Podemos definir a la compuerta NO-Y como aquella que proporciona a su salida un 0


lógico únicamente cuando todas sus entradas están a 1.

78
Compuerta NO-O (NOR).

Símbolo de la función lógica NO-O. a) Contactos, b) Normalizado y c) No normalizado

La compuerta lógica NO-O, más conocida por su nombre en inglés NOR, realiza la
operación de suma lógica negada.

Su tabla de verdad es la siguiente:

Tabla de verdad de la compuerta NOR

Entrada A Entrada B Salida

0 0 1

0 1 0

1 0 0
1 1 0

La ecuación característica que describe el comportamiento de la compuerta NOR


(empleando mintérminos), es:

̅̅̅̅̅̅̅̅̅̅̅
𝐹 = 𝐴̅. 𝐵̅ = (𝐴 + 𝐵), aplicando la primera ley de De Morgan.

Podemos definir la compuerta NO-O como aquella que proporciona a su salida un 1


lógico sólo cuando todas sus entradas están a 0.

79
Compuerta NO O exclusiva (XNOR).

Símbolo de la función lógica equivalencia. a) Contactos, b) Normalizado y c) No


normalizado.

La compuerta lógica no o exclusiva, más conocida por su nombre en inglés XNOR,


realiza la función booleana 𝐴̅. 𝐵̅ + 𝐴. 𝐵. Su símbolo es un punto (·) inscrito en un círculo,
o también se representa como:𝐴 ̅̅̅̅̅̅̅̅
⨁ 𝐵.

Su tabla de verdad es la siguiente:

Tabla de verdad de la compuerta XNOR

Entrada A Entrada B ̅̅̅̅̅̅̅


Salida 𝑨⨁𝑩
0 0 1
0 1 0
1 0 0
1 1 1

La ecuación característica que describe el comportamiento de la puerta XNOR(


empleando mintérminos) es:

𝐹 = 𝐴̅. 𝐵̅ + 𝐴. 𝐵 = 𝐴 ⊙ 𝐵 = ̅̅̅̅̅̅̅̅
𝐴 ⊕ 𝐵.

Se puede definir esta puerta como aquella que proporciona un 1 lógico, sólo si las dos
entradas son iguales, esto es, 0 y 0 o 1 y 1 (2 encendidos o 2 apagados).

NOTA: El tema 2.3 se sugiere verlo después de los temas 2.4, 2.5, 2.6 y 2.7.

80
2.3 FLIP FLOP.

Los circuitos lógicos que se han analizados anteriormente, las salidas en cualquier
momento depende exclusivamente de los valores de las entradas presentes, es decir, a
una misma combinación de entrada responden siempre con la misma salida. Debido a
esto, estos circuitos se denominan combinacionales.

Los circuitos combinacionales tienen muchas limitantes debido a que no son capaces
de reconocer el orden en que se van presentando las combinaciones de entradas con
respecto al tiempo, es decir, no pueden reconocer una secuencia de combinaciones,
ya que no poseen una manera de almacenar información pasada, es decir no poseen
memoria.

Un circuito cuya salida depende no solo de la combinación de entrada, sino también de


la historia de las entradas anteriores se denomina Circuito Secuencial. La historia de
las entradas anteriores en un momento dado se encuentra resumida en el estado del
circuito, el cual se expresa en un conjunto de variables de estado.

El circuito secuencial debe ser capaz de mantener su estado durante algún tiempo, para
ello se hace necesario el uso de dispositivos de memoria. Los dispositivos de memoria
utilizados en circuitos secuenciales pueden ser tan sencillos como un simple retardador
(inclusive, se puede usar el retardo natural asociado a las compuertas lógicas) o tan
complejos como un circuito completo de memoria denominado multivibrador biestable
o Flip_Flop.

Como puede verse entonces, en los circuitos secuenciales entra un factor que no se
había considerado en los combinacionales, dicho factor es el tiempo. De hecho, los
circuitos secuenciales se clasifican de acuerdo a la manera como manejan el tiempo en
circuitos secuenciales síncronos y circuitos secuenciales asíncronos.

En un circuito secuencial asíncrono, los cambios de estado ocurren al ritmo natural


marcado por los retardos asociados a las compuertas lógicas utilizadas en su
implementación, es decir, estos circuitos no usan elementos especiales de memoria,
pues se sirven de los retardos propios (tiempos de propagación) de las compuertas
lógicas usados en ellos. Esta manera de operar puede ocasionar algunos problemas de
funcionamiento, ya que estos retardos naturales no están bajo el control del diseñador
y además no son idénticos en cada compuerta lógica.

Los circuitos secuenciales síncronos, sólo permiten un cambio de estado en los


instantes marcados por una señal de sincronismo de tipo oscilatorio denominada reloj.
Con esto se pueden evitar los problemas que tienen los circuitos asíncronos originados
por cambios de estado no uniformes en todo el circuito.

81
Celda biestable o latch SR.

Una celda biestable o latch es un circuito lógico que puede almacenar un valor booleano
o un bit.

El latch S-R es un dispositivo con dos entradas (Set y Reset) y una variable de estado
o salida (Q) capaz de “guardar” un bit de información y funciona como sigue:

• Si su entrada Set se activa su estado Q se pone en Alto.


• Si su entrada Reset se activa su estado Q se pone en Bajo.
• Si no se activa ni Set ni Reset su estado no cambia.
• Por supuesto, no se permite activar Set y Reset simultáneamente.

Diagrama de Bloques.

Aunque el biestable-SR posee dos entradas (S y R) y sólo una salida (Q), es común la
implementación que provee además de Q su versión complementada Q, como se
muestra en la figura siguiente.

S Q

R 𝑄̅
qqQ
Escriba
En la siguiente figura se muestra unaaquí la ecuación.
celda biestable S-R construida con compuertas
NAND.
𝑄̅ Q
Escriba aquí la ecuación.
Q

A continuación se muestra una tabla que ilustra el funcionamiento del latch S-R.

S R QK (estado QK+1
presente) (siguiente
estado)
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 0
1 0 0 1
1 0 1 1
1 1 0 prohibido
1 1 1 prohibido

82
Si se considera que las entradas S y R nunca tomaran simultáneamente los valores de
1, se obtiene la siguiente función para el Flip_Flop S-R:

QK+1=S+𝑅̅Q.

La cual indica que el siguiente estado del Flip_Flop será 1 cuando S=1 o cuando el
estado actual es 1 y R=0.

Señales de reloj.

La mayoría de los circuitos secuenciales se diseñan para operar de manera sincrónica,


esto es que los cambios en los estados internos de los circuitos solamente ocurren en
instantes predefinidos de tiempo, los cuales son controlados por una señal maestra de
reloj. La señal de reloj generalmente es una forma de onda cuadrada que alterna un
valor entre los niveles de voltaje correspondientes al 0 y al 1 lógico,

El estado de un circuito secuencial está formado por el conjunto de valores booleanos


almacenados internamente mediante latches. Para que un circuito secuencial opere en
forma sincrónica es necesario usar celdas biestables que tengan una entrada de reloj
además de las entradas S y R, en dicha entrada cada celda se alimentara de la señal
maestra de reloj, la cual sincronizaría todas las celdas biestables para que cambien al
mismo tiempo. Estas celdas biestables con entrada de reloj se llaman celdas de
memoria o Flip-Flops.

Flip-Flop S-R.

Se pueden diseñar celdas biestables S-R con una entrada de reloj que cambien su
estado solamente cuando la señal de reloj tenga el valor de 1. Estas celdas se conocen
como flip-flop S-R que operan con nivel de reloj alto, como se muestra en la siguiente
figura.

Cuando la señal de reloj (entrada C) vale 0, la salida de los bloques AND seran 0. Esta
condicion es analoga a cuando se tenian ceros en las entradas del latch SR antes visto,
la cual originaba que conservara su estado. Cuando la señal de reloj vale 1, las entradas
SR se aplican a las compuertas NAND y la celda funciona exactamente igual al latch
SR analizado anteriormente.

83
A continuacion se muestra el simbolo del flip-flop SR.

S Q

C
𝑄̅
R
𝑄̅
A continuación se muestra su funcionamiento empleando diagramas de tiempo.
𝑄̅

Si no se activa ninguna de las entradas, el biestable permanece en el estado que poseía


tras la última operación de borrado o grabado. En ningún caso deberían activarse ambas
entradas a la vez, ya que esto provoca que las salidas directas (Q) y negada (Q) queden
con el mismo valor. El problema de que ambas salidas queden al mismo estado está en
que al desactivar ambas entradas no se podrá determinar el estado en el que quedaría
la salida.

El Flip-Flop D (Delay Flip-Flop).

Dado que un flip-flop puede guardar un valor booleano, se pensó en crear uno que
tuviera una sola entrada en la cual se pusiera el valor que se deseara guardar,
adicionalmente a la entrada de reloj para controlar el momento en que cambie su estado.
Para lograr esto, se diseñó el Flip-Flop D, el cual tiene una entrada denominada D, y la
entrada de reloj C.

La construcción de este flip-flop se basa en el flip-flop S-R, como se muestra a


continuación.

Este circuito se puede reducir empleando una compuerta NAND en lugar de una
compuerta AND y un inversor, como se muestra a continuación.

84
El funcionamiento de este Flip-Flop es muy simple. Cuando la señal de reloj toma el
valor de 1, el valor que está en la entrada D se almacena en su salida Q.

Por lo tanto su función es: Qsiguiente = D.

Su tabla de verdad es:

D Presente Qsiguiente
0 X 0
1 X 1
X=no importa

Su símbolo es:

D Q

𝑄̅
C

C Q

El Flip-Flop T (Trigger Flip-Flop).

Este Flip-Flop tiene dos entradas: la de reloj (C) y la que controla su operación (T), como
se muestra a continuación:

85
El biestable T cambia de estado ("toggle" en inglés) cuando T esta en alto y la entrada
de sincronismo o de reloj esta en alto. Si la entrada T está a nivel bajo, el biestable
retiene el nivel previo. La ecuación característica del biestable T que describe su
comportamiento es:

Qsiguiente = 𝑇 ⨁ 𝑄.

Su tabla de verdad es:

T Q Qsiguiente
0 0 0
0 1 1
1 0 1
1 1 0

Aplicando minterminos tenemos que Qsiguiente = 𝑇̅𝑄 + 𝑇𝑄̅ = 𝑇 ⊕ 𝑄.

Su símbolo es:

T Q

C 𝑄̅

C Q

86
El Flip-Flop JK.

Este Flip-Flop es el más versátil de todos ya que puede trabajar como el SR o el T.

Añadiendo bloques lógicos externos, también puede hacerse funcionar como Flip-Flop
D.

Cuando las dos entradas J y K valen 1 este Flip-Flop opera como un Flip-Flop T,
cambiando de estado cuando la señal de reloj vale 1.

Suponiendo que las entradas J y K no pueden valer 1 simultáneamente, el flip-flop


operará como un SR, donde J hace las veces de la entrada S y K las veces de R. A
continuación se muestra su configuración.

A continuación se muestra su funcionamiento empleando diagramas de tiempo.

Si no se activa ninguna de las entradas, el biestable permanece en el estado que poseía


tras la última operación de borrado o grabado. A diferencia del biestable S-R, en el caso
de activarse ambas entradas a la vez, la salida adquirirá el estado contrario al que tenía.

La ecuación característica del biestable JK que describe su comportamiento es:

Y su tabla de verdad es:

87
J K Q Qsiguiente
0 0 0 0
0 0 1 1
0 1 X 0
1 0 X 1
1 1 0 1
1 1 1 0
X = no importa

El biestable se denomina así por Jack Kilby (JK), el inventor de los circuitos integrados
en 1958, por lo cual se le concedió el Premio Nobel en física de 2000.

Biestable JK activo por flanco.

Símbolos normalizados: Biestables JK activo a) por flanco de subida y b) por flanco de


bajada

Junto con las entradas J y K existe una entrada C de sincronismo o de reloj cuya misión
es la de permitir el cambio de estado del biestable cuando se produce un flanco de
subida o de bajada, según sea su diseño. Su denominación en inglés es J-K Flip-Flop
Edge-Triggered. De acuerdo con la tabla de verdad, cuando las entradas J y K están a
nivel lógico 1, a cada flanco activo en la entrada de reloj, la salida del biestable cambia
de estado. A este modo de funcionamiento se le denomina modo de basculación (toggle
en inglés).

Biestable JK Maestro-Esclavo.

Símbolos normalizados: Biestable JK Maestro-Esclavo a) activo por nivel alto y b) activo


por nivel bajo.

Aunque aún puede encontrarse en algunos equipos, este tipo de biestable, denominado
en inglés J-K Flip-Flop Master-Slave, ha quedado obsoleto ya que ha sido reemplazado
por el tipo anterior.

Su funcionamiento es similar al JK activo por flanco: en el nivel alto (o bajo) se toman


los valores de las entradas J y K y en el flanco de bajada (o de subida) se refleja en la
salida.

88
2.4 CODIFICADORES.

Un codificador tiene 2n o menos líneas de entrada y n líneas de salida. Por ejemplo,


en una de las entradas se puede ingresar un dígito decimal u octal y generarse un código
de salida en BCD o binario. Los codificadores se utilizan también para codificar símbolos
diferentes y caracteres alfabéticos.

2n Entradas ------[ ]------ n salidas.

Codificador Binario.

El codificador binario tiene 2n entradas y n salidas. Sólo, una sola de las entradas puede
estar activada. La salida suministra el valor binario correspondiente a la entrada
activada.

Codificador de 8 a 3.

El codificador 8 a 3 tiene 8 entradas (I0 a I7), una para cada uno de los ocho dígitos y 3
salidas que conforman el número binario equivalente (A0 a A2). La siguiente figura
muestra en el diagrama de bloques del codificador.

La tabla de verdad se muestra en la tabla siguiente.

89
En la tabla de verdad, A0 tiene un 1 lógico para las columnas de entrada con subíndice
impar. La salida A1 es 1 en las columnas I2, I3, I6 e I7 y la salida A2 es 1 en las columnas
I4, I5, I6 e I7. Las expresiones lógicas son las siguientes:

A0 = I1 + I3 + I5 + I7

A1 = I2 + I3 + I6 + I7

A2 = I4 + I5 + I6 + I7

Por ejemplo, sí está activada la entrada 3, la salida es 011. El circuito se construye con
compuertas OR y se muestra en la siguiente figura.

Codificador sin prioridad.

Los circuitos codificadores pueden ser diseñados con prioridad o sin ella. En los
codificadores sin prioridad con entradas activas altas, la activación de más de una
entrada simultáneamente con valor 1, genera un código erróneo en la salida, de acuerdo
al número de entradas excitadas con el respectivo valor. La solución más conveniente
se logra empleando codificadores de prioridad.

Codificador con prioridad.

Los codificadores de prioridad seleccionan la entrada de mayor prioridad cuando se


presentan varias entradas activas simultáneamente. En la tabla siguiente se muestra la
lógica de entrada y de salida de un codificador con prioridad.

90
Cuando la entrada 7 vale cero, la salida es cero, cuando la entrada 7 vale uno, la salida
es 1, si las entradas 6 y 7 valen 1, la salida es 2, cuando las entradas 7, 6 y 5 valen uno,
la salida es 3 y así sucesivamente.

Codificador Decimal – BCD.

El codificador decimal a BCD posee diez entradas, correspondientes cada una a un


dígito decimal y cuatro salidas en código BCD (8421). El diagrama de bloques de la
siguiente figura muestra la disposición de entradas y salidas del decodificador.

0 A0
1

2 A1
ENTRADA
3
SALIDA
DECIMAL
4
BCD
5 A2
6

8
A3
9

En la siguiente tabla se encuentra el código BCD correspondiente a cada dígito decimal.

91
El bit A3 es el más significativo del código BCD y es 1 para los decimales 8 o 9. La
expresión para este bit en función de los dígitos decimales se escribe:

A3 = 8+9.

Por tanto las funciones siguientes corresponden a:

A2 = 4+5+6+7.

A1 = 2+3+6+7.

A0 = 1+3+5+7+9.

Ahora configurando el análisis en un circuito combinacional, se obtiene el siguiente


circuito sin necesidad de una entrada para el bit 0.

Aplicaciones.

Los codificadores encuentran mayor aplicación en los dispositivos de entrada y salida.


La señal de entrada es introducida de una forma comprensible para el usuario y la
"traducción" la realiza el codificador a un código comprensible para el equipo. En un
teclado, cuando se pulsa la tecla correspondiente a un dígito, esta entrada se codifica
en código BCD.

92
2.5 DECODIFICADORES.

Un decodificador es un circuito lógico que tiene n entradas y 2n salidas. Para una


combinación dada de las n entradas, solamente una salida tomará el valor de 1 y todas
las demás tomarán el valor de 0. Si se tienen n entradas para un circuito lógico, existirán
2n combinaciones posibles de los valores de las variables independientes, cada una de
las cuales corresponderá a un mintérmino de las n variables independientes. Por
consiguiente, cada mintérmino está asociado a una de las 2n salidas. El nombre que se
le da a este dispositivo es decodificador de n X 2n.

Estos dispositivos normalmente cuentan con una entrada adicional denominada


habilitadora. Cuando esta entrada vale 0, todas las salidas del decodificador son 0.
Cuando la entrada habilitadora vale 1, la salida correspondiente al mintérmino formado
por la combinación presente en las n entradas tomará el valor de 1 y las demás tomarán
el valor de 0.

A continuación se muestra el esquema y funcionamiento de un decodificador de 2 X 4.

Un valor x en las entradas C1 y C0, indican que puede tomar el de 1 o 0.

Las funciones lógicas para las salidas del decodificador de 2 X 4, usando mintérminos
son:

93
𝑆o = Hab. ̅C1
̅̅̅ ̅̅̅̅
C0 .

𝑆1 = Hab. ̅C1
̅̅̅ C0.

̅̅̅̅ .
𝑆2 = 𝐻𝑎𝑏. 𝐶1 𝐶0

𝑆3 = Hab. C1 C0 .

En la siguiente figura se muestra el circuito lógico de este decodificador.

Un tipo de decodificador muy empleado es el de siete segmentos. Este circuito


decodifica la información de entrada en BCD a un código de siete segmentos adecuado
para que se muestre en un visualizador de siete segmentos (el diseño de este
decodificador se realizara al final del tema 2.7).

94
2.6 MULTIPLEXORES.

Los multiplexores MUX son circuitos combinacionales con varias entradas y una salida
de datos, y están dotados de entradas de control capaces de seleccionar una, y sólo
una, de las entradas de datos para permitir su transmisión desde la entrada
seleccionada a la salida que es única.

La entrada seleccionada viene determinada por la combinación de ceros (0) y unos (1)
lógicos en las entradas de control. La cantidad que necesitaremos será igual a la
potencia de 2 que resulte de analizar el número de entradas. Así, por ejemplo, a un
multiplexor de 8 entradas le corresponderán 3 de control.

Podemos decir que la función de un multiplexor consiste en seleccionar una de entre


un número de líneas de entrada y transmitir el dato por un canal de información único.
Por lo tanto, es equivalente a un conmutador de varias entradas y una salida.

Dentro de un multiplexor hay que destacar tres tipos de señales: los datos de entrada,
las entradas de control y la salida.

El diseño de un multiplexor se realiza de la misma manera que cualquier sistema


combinatorio desarrollado hasta ahora. Veamos, como ejemplo, el caso de un
multiplexor de cuatro entradas y una salida que tendrá, según lo dicho anteriormente,
dos entradas de control.

El valor de x en las entradas C1 y C0 indica que puede tomar el valor de 1 o 0.

95
Este dispositivo también tiene una entrada para habilitarlo, la cual debe tener el valor de
1 para que en la salida se obtenga el valor de la entrada seleccionada por las entradas
de control. Si la entrada habilitadora toma el valor de 0, la salida tomara el valor de 0,
independientemente de los valores presentes en las otras entradas.

La tabla de verdad para la salida S en función de las entradas de control ( C1 y C0) y la


entrada habilitadora (Hab.) es la siguiente:

Hab. C1 C0 S
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 0
1 0 0 e0
1 0 1 e1
1 1 0 e2
1 1 1 e3

La función booleana para S es:

S = Hab.C1C0e0 + Hab.C1C0e1 + Hab.C1C0e2 + Hab.C1C0e3.

El circuito lógico para este multiplexor o selector se muestra a continuación:

Símbolo.

De forma semejante pueden definirse selectores de 8:1, 16:1, 32:1 y en forma general
de 2n : 1.

La principal utilización de este dispositivo es cuando se tienen N entradas posibles, pero


sólo se desea seleccionar una de ellas (como veremos en el microcontrolador).

96
Demultiplexores.

Este dispositivo tiene n entradas de control, una entrada habilitadora, una sola entrada
de datos y 2n salidas. Las entradas de control sirven para seleccionar a cuál de las 2n
salidas de datos se conectara la entrada. A continuación se muestra el diagrama de un
selector 1:4.

El valor de x en las entradas C1 y C0 indica que puede tomar el valor de 1 o 0.

Las funciones lógicas para las salidas del selector de 1:4 son:

̅̅̅̅ 𝐶𝑜
𝑆𝑜 = 𝐻𝑎𝑏. 𝐶1 ̅̅̅̅ 𝑒.

𝑆1 = 𝐻𝑎𝑏. ̅̅̅̅
𝐶1 𝐶𝑜 𝑒.

97
𝑆2 = 𝐻𝑎𝑏. 𝐶1 ̅𝐶𝑜
̅̅̅ 𝑒

𝑆3 = 𝐻𝑎𝑏. 𝐶1 𝐶𝑜 𝑒.

El circuito lógico para este selector se muestra a continuación.

De forma similar, se pueden definir selectores de 1:8, 1:16, 1:32 y en forma general, de
1:2n.

La principal utilización de este dispositivo es cuando se tiene una sola entrada que
puede ser dirigida a solamente una de las N salidas posibles.

98
2.7 CIRCUITOS ARITMÉTICOS.

Un componente muy importante de la unidad central de proceso (CPU) es la unidad


aritmética lógica (ALU). Esta unidad es un circuito combinatorio que permite realizar
las operaciones aritméticas básicas como la suma, resta, multiplicación y división, así
como operaciones lógicas simples tales como NOT, AND y OR.

Sumador básico.

Un sumador básico es un circuito combinatorio que tiene como entrada dos números
binarios de n bits y da como salida la suma binaria de estos números y un posible
acarreo.

Al empezar la suma de los bits menos significativos (A0+ B0), se requiere de un circuito
que solamente sume dos bits, el cual genera dos salidas; una para dar la suma de estos
dos bits (S0) y la otra para indicar el posible acarreo que se pueda generar (C0).

Para sumar los bits restantes es necesario un circuito que sume 3 bits ( Ai+ Bi+ Ci-1),
para que genere como salida la suma (Si) y el posible acarreo (Ci).

Semisumador o medio sumador.

Un semisumador, es un circuito que tiene como entradas dos números de 1 bit y produce
como salidas la suma y el acarreo que se da entre estos 2 números, como se muestra
a continuación:

A0 S0

B0 Semisumador C0

La tabla de verdad de este dispositivo es:

A0 B0 S0 C0
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

99
Las funciones de suma y acarreo empleando mintérminos son:

𝑆𝑜 = ̅̅̅̅
𝐴𝑜 𝐵𝑜 + 𝐴𝑜 ̅̅̅̅
𝐵𝑜 = 𝐴𝑜 ⊕ 𝐵𝑜.

𝐶𝑜 = 𝐴𝑜 𝐵𝑜.

El circuito del semisumador se muestra a continuación:

Sumador completo.

Un sumador completo es un circuito que tiene como entrada 3 números de 1 bit y


produce como salidas la suma y el acarreo entre estos 3 números, como se muestra en
la siguiente figura.

An Sn
Sumador
Bn Cn

Cn-1

La tabla de verdad de este dispositivo es la siguiente:

An Bn Cn.1 Sn Cn
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

100
La función para la suma empleando mintérminos es:

̅̅̅̅ 𝐵𝑛
𝑆𝑛 = 𝐴𝑛 ̅̅̅̅ 𝐶𝑛 − 1 + ̅̅̅̅
𝐴𝑛 𝐵𝑛 ̅̅̅̅̅̅̅̅̅ ̅̅̅̅ ̅̅̅̅̅̅̅̅̅
𝐶𝑛 − 1 + 𝐴𝑛 𝐵𝑛 𝐶𝑛 − 1 + 𝐴𝑛 𝐵𝑛 𝐶𝑛 − 1.

𝑆𝑛 = ̅̅̅̅̅
𝐴𝑛 (𝐵𝑛̅̅̅̅ 𝐶𝑛 − 1 + 𝐵𝑛̅̅̅̅̅̅̅̅̅̅ ̅̅̅̅ ̅̅̅̅̅̅̅̅̅
𝐶𝑛 − 1) + 𝐴𝑛 (𝐵𝑛 𝐶𝑛 − 1 + 𝐵𝑛 𝐶𝑛 − 1).

𝐴𝑛 ( 𝐵𝑛 ⊕ 𝐶𝑛 − 1 ) + 𝐴𝑛 ̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅
𝑆𝑛 = ̅̅̅̅ ( 𝐵𝑛 ⊕ 𝐶𝑛 − 1 ).

𝑆𝑛 = 𝐴𝑛 ⊕ ( 𝐵𝑛 ⊕ 𝐶𝑛 − 1 ) .

𝑆𝑛 = 𝐴𝑛 ⊕ 𝐵𝑛 ⊕ 𝐶𝑛 − 1.

La función para el acarreo empleando mintérminos es:

̅̅̅̅ 𝐵𝑛 𝐶𝑛 − 1 + 𝐴𝑛 𝐵𝑛
𝐶𝑛 = 𝐴𝑛 ̅̅̅̅ 𝐶𝑛 − 1 + 𝐴𝑛 𝐵𝑛 ̅̅̅̅̅̅̅̅̅
𝐶𝑛 − 1 + 𝐴𝑛 𝐵𝑛 𝐶𝑛 − 1 .

̅̅̅̅ 𝐵𝑛 + 𝐴𝑛 𝐵𝑛
𝐶𝑛 = ( 𝐴𝑛 ̅̅̅̅ )𝐶𝑛 − 1 + 𝐴𝑛 𝐵𝑛 ( ̅̅̅̅̅̅̅̅̅
𝐶𝑛 − 1 + 𝐶𝑛 − 1).

𝐶𝑛 = ( 𝐴𝑛 ⊕ 𝐵𝑛 )𝐶𝑛 − 1 + 𝐴𝑛 𝐵𝑛 (1).

𝐶𝑛 = ( 𝐴𝑛 ⊕ 𝐵𝑛 )𝐶𝑛 − 1 + 𝐴𝑛 𝐵𝑛.

El circuito sumador se muestra a continuación:

( 𝐴𝑛 ⊕ 𝐵𝑛 )

( 𝐴𝑛 ⊕ 𝐵𝑛 )𝐶𝑛 − 1

Para realizar un sumador de 3 bits, necesitamos un semisumador y 2 sumadores, como


se ilustra en seguida (usando bloques).

101
Restador básico.

Un restador básico es un circuito combinatorio que tiene como entrada dos números
binarios de n bits y da como salidas la diferencia binaria de estos números y un posible
préstamo.

Al empezar la resta de los bits menos significativos (A0 - B0), se requiere de un circuito
que solamente reste dos bits, el cual genera dos salidas; una para dar la diferencia de
estos dos bits (D0) y la otra para indicar el posible préstamo que se pueda solicitar
(Borrow0).

Para restar los bits restantes es necesario un circuito que reste 3 bits ( An – Bn - Borrown-
1), para que genere como salidas la diferencia (Dn) y el posible préstamo (Borrown).

102
Semirestador o medio restador.

Un semirestador, es un circuito que tiene como entradas dos números de 1 bit y produce
como salidas la resta y el préstamo que se da entre estos 2 números, como se muestra
a continuación:

A0 D0

B0 Semirestador Borrow0

La tabla de verdad de este dispositivo es:

A0 B0 D0 Borrow0
0 0 0 0
0 1 1 1
1 0 1 0
1 1 0 0

Las funciones de la resta (Do) y el préstamo (Borrowo) empleando mintérminos son:

𝐷𝑜 = ̅̅̅̅
𝐴𝑜 𝐵𝑜 + 𝐴𝑜 ̅̅̅̅
𝐵𝑜.

𝐷𝑜 = 𝐴𝑜 ⊕ 𝐵𝑜.

̅̅̅̅ 𝐵𝑜.
𝐵𝑜𝑟𝑟𝑜𝑤𝑜 = 𝐴𝑜

El circuito del semisumador se muestra a continuación:

103
Restador completo.

Un restador completo es un circuito que tiene como entrada 3 números de 1 bit y produce
como salidas la resta y el préstamo que se da entre estos 3 números, como se muestra
en la siguiente figura.

An Dn

Bn Restador Borrown

Borrown-1

La tabla de verdad de este dispositivo es la siguiente.

An Bn Borrown.1 Dn Borrown
0 0 0 0 0
0 0 1 1 1
0 1 0 1 1
0 1 1 0 1
1 0 0 1 0
1 0 1 0 0
1 1 0 0 0
1 1 1 1 1

La función para la resta empleando mintérminos es:

̅̅̅̅ 𝐵𝑛
𝐷𝑛 = 𝐴𝑛 ̅̅̅̅̅𝐵𝑛 ̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅
̅̅̅̅ 𝐵𝑜𝑟𝑟𝑜𝑤n − 1 + 𝐴𝑛 ̅̅̅̅ ̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅
𝐵𝑜𝑟𝑟𝑜𝑤n − 1 + 𝐴𝑛 𝐵𝑛 𝐵𝑜𝑟𝑟𝑜𝑤n − 1 + 𝐴𝑛 𝐵𝑛 𝐵𝑜𝑟𝑟𝑜𝑤n − 1 .

𝐷𝑛 = ̅̅̅̅
𝐴𝑛(𝐵𝑛̅̅̅̅ 𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1 + 𝐵𝑛 ̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅
𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1) 𝐵𝑛 ̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅
+ 𝐴𝑛( ̅̅̅̅ 𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1 + 𝐵𝑛 𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1) .

𝐴𝑛(𝐵𝑛 ⊕ 𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1) + 𝐴𝑛 ̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅


𝐷𝑛 = ̅̅̅̅ ( 𝐵𝑛 ⊕ 𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1).

𝐷𝑛 = 𝐴𝑛 ⊕ (𝐵𝑛 ⊕ 𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1) .

𝐷𝑛 = 𝐴𝑛 ⊕ 𝐵𝑛 ⊕ 𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1 .

La función para el préstamo usando mintérminos es:

𝐵𝑜𝑟𝑟𝑜𝑤𝑛 = ̅̅̅̅ 𝐵𝑛 𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1 + ̅̅̅̅


𝐴𝑛 ̅̅̅̅ ̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅
𝐴𝑛 𝐵𝑛𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1 + ̅̅̅̅
𝐴𝑛𝐵𝑛𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1 + 𝐴𝑛𝐵𝑛𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1

̅̅̅̅ 𝐵𝑛
𝐵𝑜𝑟𝑟𝑜𝑤𝑛 = (𝐴𝑛 ̅̅̅̅̅𝐵𝑛(𝐵𝑜𝑟𝑟𝑜𝑤𝑛
̅̅̅̅ + 𝐴𝑛 𝐵𝑛)𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1 + 𝐴𝑛 ̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅
− 1 + 𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1).

𝐵𝑜𝑟𝑟𝑜𝑤𝑛 = (̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅ ̅̅̅̅ 𝐵𝑛 .


𝐴𝑛 ⊕ 𝐵𝑛) 𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1 + 𝐴𝑛

104
El circuito restador se muestra a continuación

Para realizar un restador de 3 bits, necesitamos un semirestador y 2 restadores, como


se ilustra en seguida (usando bloques).

105
Deseamos usar un solo circuito para sumar y restar, por lo que compararemos las
ecuaciones del sumador y restador.

Semisumador:

𝑆𝑜 = ̅̅̅̅
𝐴𝑜 𝐵𝑜 + 𝐴𝑜 ̅̅̅̅
𝐵𝑜 = 𝐴𝑜 ⊕ 𝐵𝑜..

C0 = A0.B0

Semirestador

𝐷𝑜 = ̅̅̅̅
𝐴𝑜 𝐵𝑜 + 𝐴𝑜 ̅̅̅̅
𝐵𝑜 = 𝐴𝑜 ⊕ 𝐵𝑜

La diferencia

𝐵𝑜𝑟𝑟𝑜𝑤𝑜 = ̅̅̅̅
𝐴𝑜 𝐵𝑜

Dado que tendremos una misma terminal para S0 / D0 y otra para C0 / Borrow0

Sumador

𝑆𝑛 = 𝐴𝑛 ⊕ 𝐵𝑛 ⊕ 𝐶𝑛 − 1.

𝐶𝑛 = ( 𝐴𝑛 ⊕ 𝐵𝑛 )𝐶𝑛 − 1 + 𝐴𝑛 𝐵𝑛.

Restador

𝐷𝑛 = 𝐴𝑛 ⊕ 𝐵𝑛 ⊕ 𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1.

Las diferencias

𝐵𝑜𝑟𝑟𝑜𝑤𝑛 = (̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅
𝐴𝑛 ⊕ 𝐵𝑛) 𝐵𝑜𝑟𝑟𝑜𝑤𝑛 − 1 + ̅̅̅̅
𝐴𝑛 𝐵𝑛

Dado que tendremos una misma terminal para Sn / Dn y otra para Cn / Borrown

Como se pudo observar en el semirestador y en el restador, las diferencias encontradas


se encuentran negadas.

Considere las siguientes figuras para poder tomar en cuenta estas diferencias.

106
Como se puede observar el botón adicional funcionaria como el definidor de hacer la
suma (no presionado = 0) o la resta (presionado = 1).

Considerando lo anterior, el circuito sumador restador de 3 bits, quedaría así:

Este circuito presenta los resultados en binario, pero no todas las personas conocen
este sistema numérico, por lo que procederemos a diseñar un decodificador BCD de 7
segmentos como se citó en el apartado de los decodificadores.

107
A continuación se muestra una tabla con los valores de entrada en binario que
deseamos mostrar en el display de 7 segmentos.

Decimal Entradas en Salidas para el display


binario. de 7 segmentos
Números A B C D a b c d e f g
0 0 0 0 0 1 1 1 1 1 1 0
1 0 0 0 1 0 1 1 0 0 0 0
2 0 0 1 0 1 1 0 1 1 0 1
3 0 0 1 1 1 1 1 1 0 0 1
4 0 1 0 0 0 1 1 0 0 1 1
5 0 1 0 1 1 0 1 1 0 1 1
6 0 1 1 0 1 0 1 1 1 1 1
7 0 1 1 1 1 1 1 0 0 0 0
8 1 0 0 0 1 1 1 1 1 1 1
9 1 0 0 1 1 1 1 1 0 1 1
10 1 0 1 0 x x x x x x x
11 1 0 1 1 x x x x x x x
12 1 1 0 0 x x x x x x x
13 1 1 0 1 x x x x x x x
14 1 1 1 0 x x x x x x x
15 1 1 1 1 x x x x x x x

Como emplearemos un display de 7 segmentos con cátodo común, presentaremos unos


para prender los segmentos.

Para obtener la salida debemos seleccionar los segmentos que deberán prender, así
por ejemplo, el cero solo tenemos que apagar (0) el segmento g y los demás prenderlos
(1), para el numero uno se prenden b y c, y así sucesivamente hasta el número 9.

Las x indican que podemos poner un 1 o un 0, pues nuestro decodificador solo mostrara
valores del 0 al 9.

108
Para simplificar la función de cada segmento utilizaremos los mintérminos, pero ahora
emplearemos un método gráfico, por lo que veremos mapas de Karnaugh.

Mapas de Karnaugh.

Es un diagrama en forma de matriz de cuadros, donde cada cuadro corresponde a un


mintérmino de la función.

Un mapa de Karnaugh provee una manera alternativa de simplificación de circuitos


lógicos. En lugar de usar las técnicas de simplificación con el álgebra de Boole, tú
puedes transferir los valores lógicos desde una función booleana o desde una tabla de
verdad a un mapa de Karnaugh. El agrupamiento de ceros y unos dentro del mapa te
ayuda a visualizar las relaciones lógicas entre las variables y conduce directamente a
una función booleana simplificada.

El mapa de Karnaugh es a menudo usado para simplificar los problemas lógicos con 2,
3, 4 o 5 variables.

Un mapa de Karnaugh de 2 variables es trivial pero puede ser usado para introducir el
método que necesitas aprender. El mapa para una puerta OR de dos entradas es como
sigue:

Tabla de verdad de la compuerta OR


Entrada A Entrada B Salida A + B
0 0 0
0 1 1
1 0 1
1 1 1

A 0 1
B

0 1

1
1 1

Los valores de una variable aparecen sobre la parte superior del mapa, definiendo los
valores de la columna, mientras los valores de la otra variable aparecen a un lado,
definiendo los valores de la variable en cada fila.

109
El mapa de Karnaugh se va completando colocando los unos “1” en la celda apropiada,
ayudados por la tabla de verdad. Esta agrupación es conocida como mintérminos y
como expresión booleana viene a ser una suma de productos. Usualmente no se
escriben los ceros en la tabla, ya que solo se agrupan los unos.

En el mapa las celdas adyacentes que contienen unos se agrupan de dos, de cuatro,
o de a ocho (En general 2n ). En este caso, hay un grupo horizontal y otro vertical que
puede agruparse de a dos. Se indican los agrupamientos dibujando un contorno
alrededor de los unos.

El grupo horizontal corresponde al valor de B = 1, y esta variable no cambia de valor, se


mantiene. En esta misma fila, en la celda de la izquierda A = 0 y en la de la derecha A
= 1, es decir la variable A cambia de valor. En otras palabras el valor de la variable A no
afecta al resultado final de la expresión booleana para estas celdas. Antes de
agruparlas, deberías haber escrito la expresión booleana para estas dos celdas como:

𝐴̅ 𝐵 + 𝐴 𝐵.

Después de agruparlas esta misma expresión se reduce a:

(𝐴̅ + 𝐴)𝐵 = 𝐵.

De una forma similar, el grupo vertical de dos celdas podría haber sido escrito como:

𝐴 𝐵̅ + 𝐴 𝐵.

Desde el mapa, puedes ver que el valor de B no afecta el valor escrito en las celdas
para este grupo. En otras palabras, el grupo vertical se reduce a:

𝐴 ( 𝐵̅ + 𝐵) = 𝐴.

De esta manera, el mapa de Karnaugh conduce a la expresión final:

A + B.

Esto no es muy emocionante, pero si se aplica el mismo método a un problema de lógica


más compleja, comenzarás a entender cómo el mapa de Karnaugh conduce a simplificar
las funciones booleanas.

Mapa de Karnaugh de 3 variables.

A continuación se muestra una tabla de verdad para un sistema de votación por mayoría
de 3 personas (más de una persona).

La tabla de verdad se convierte en un mapa de Karnaugh como sigue:

110
A B C Salida
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 1

AB

AB 00 01 11 10
C

0 1

1
1 1 1

BC AC

Observa cuidadosamente las variables en la parte superior del mapa de Karnaugh.


Estas no están escritas de forma ordenada 00, 01, 10, 11 en binario. De hecho, cada
columna difiere de la columna previa justo en un solo bit. Esto nos recuerda el código
Gray y es esencial para que tu mapa de Karnaugh trabaje cuando tú introduzcas los
valores de la columna en este orden.

En el mapa de Karnaugh puedes identificar 3 grupos de dos “1”, como está indicado. El
̅ 𝐵 𝐶 ) y (A.B.C). Dentro de este
grupo horizontal del lado izquierdo combina las celdas (𝐴
grupo el valor de A cambia, esto significa que esta variable, A, no afecta los valores de
las celdas. Entonces A puede ser eliminada de la expresión, quedando (B.C).

Operando sobre los otros grupos de forma similar observamos que en el agrupamiento
horizontal de “1” de la derecha, que incluye los mintérminos (A.B.C) y (𝐴 𝐵 ̅ 𝐶 ), la
variable que cambia es la B por lo tanto se puede eliminar y quedaría (A.C).

Por último, la agrupación de “1” vertical involucra los mintérminos (𝐴 𝐵 𝐶̅ ) y (A.B.C) lo


que da como resultado que cambie la variable C y es ésta la que se puede eliminar
quedando: (A.B).

El resultado o expresión final simplificada es: A.B + A.C + B.C.

Con un poco de práctica, este método va a ser más rápido que la alternativa de
simplificar la expresión booleana derivada de la tabla de verdad como suma de
productos (mintérminos), que resulta más complicada:

𝐴 𝐵 𝐶̅ + 𝐴 𝐵̅ 𝐶 + 𝐴̅ 𝐵 𝐶 + 𝐴 𝐵 𝐶

111
Mapa de Karnaugh de 4 variables.

Un mapa de 4 variables (A, B, C y D) contiene 24 = 16 celdas. Es importante escribir los


valores de las variables en las filas y columnas respetando el código Gray.

Ejemplo.

Simplificar la expresión:

𝑥 = 𝐴 𝐵 𝐶̅ 𝐷
̅ + 𝐴 𝐵̅ 𝐶̅ 𝐷
̅+ 𝐴𝐵𝐶𝐷+ 𝐴𝐵𝐶𝐷
̅ + 𝐴 𝐵̅ 𝐶 𝐷 + 𝐴 𝐵̅ 𝐶 𝐷
̅

El mapa de Karnaugh de dicha expresión es:

CD
00 01 11 10

AB
00

01

11 1 1 1
1 1 1
10

AD AC

Para dar la expresión booleana más simple deberás agrupar el mayor número de
términos o de celdas, en lo posible. En este caso se han redondeado y agrupado dos
grupos de 4 unos, uno de los cuales lo hace con 2 unos de la parte extrema y otros dos
en la parte inferior del mapa. Debes identificar qué variables de cada grupo se
mantienen constantes, sin cambiar de “1” a “0” o viceversa, y eliminas aquellas variables
que sí cambian. En nuestro caso hay 2 que cambian y otras 2 que no cambian. La
expresión final simplificada será:

̅.
𝑥 =𝐴𝐶+𝐴𝐷

Ahora si estamos preparados para diseñar el decodificador de 7 segmentos, empleando


el método gráfico.

Recordando nuestra tabla tenemos:

112
Entradas Salidas
Decimal A B C D a b c d e f g
0 0 0 0 0 1 1 1 1 1 1 0
1 0 0 0 1 0 1 1 0 0 0 0
2 0 0 1 0 1 1 0 1 1 0 1
3 0 0 1 1 1 1 1 1 0 0 1
4 0 1 0 0 0 1 1 0 0 1 1
5 0 1 0 1 1 0 1 1 0 1 1
6 0 1 1 0 1 0 1 1 1 1 1
7 0 1 1 1 1 1 1 0 0 0 0
8 1 0 0 0 1 1 1 1 1 1 1
9 1 0 0 1 1 1 1 1 0 1 1
10 1 0 1 0 x x x x x x x
11 1 0 1 1 x x x x x x x
12 1 1 0 0 x x x x x x x
13 1 1 0 1 x x x x x x x
14 1 1 1 0 x x x x x x x
15 1 1 1 1 x x x x x x x

113
114
115
116
117
118
Para el segmento g el estudiante puede usar el siguiente software en linea para
autoevalurse.

El mapa para g es el siguiente

̅ + 𝐵𝐶̅ + 𝐵̅𝐶
𝑔 = 𝐴 + 𝐶𝐷

119
El decodificador BCD de 7 segmentos que cumple con estas ecuaciones es:

Ahora tenemos las bases para construir los circuitos que convierten el código binario
a Gray y viceversa.

120
El circuito que convierte el código binario de 5 bits a Gray es:

El circuito que convierte el código Gray de 5 bits a binario es:

121
2.8 ESTRUCTURA Y FUNCIONAMIENTO GENERAL DE LAS MEMORIAS.

Una característica distintiva de los flip-flops es su capacidad de recordar el valor anterior


de una entrada, o lo que es lo mismo: tienen memoria.

Esta capacidad de memoria es fundamental no solo para la construcción de circuitos


secuenciales sino que también es la base para el almacenamiento de la información a
ser procesada en las computadoras en la forma en que éstas están organizadas en la
actualidad (arquitecturas de programa almacenado).

La base de la memoria es el flip-flop que es capaz, como vimos, de almacenar un bit.


Lo normal es utilizar un conjunto de bits, organizados en palabras de n bits cada una.
Cuando la memoria es de una sola palabra recibe el nombre de Registro y cuando
tiene múltiples palabras recibe la denominación genérica de RAM.

El nombre RAM corresponde a Random Access Memory (memoria de acceso


aleatorio). En general una RAM es un arreglo de m =2M palabras de n bits cada una,
donde M es el número de líneas de entrada para seleccionar (direccionar) la palabra
deseada. Por lo que su capacidad estará definida como m x n.

La memoria principal de una computadora de propósito general normalmente está


formada en gran parte por circuitos de memoria RAM, y sólo una pequeña parte por
circuitos de memoria ROM (Read Only Memory).

La memoria de solo lectura es totalmente inalterable, sin esta memoria la maquina no


arrancaría.

Memorias estáticas.

Una memoria estática puede considerarse como un conjunto de localidades en las


cuales está almacenada cierta información. Cada una de estas localidades se identifica
por una dirección única.

Una memoria estática tiene un conjunto de entradas que sirven para proporcionar la
dirección de la palabra cuya información que se desea conocer, un conjunto de salidas,
que corresponden a cada uno de los bits de la palabra que se ha seleccionado mediante
la dirección, y una entrada de control para habilitar o deshabilitar la memoria.

Al conjunto de entradas donde se indica la dirección se le conoce como canal de


direcciones (address bus), a la entrada de control se le llama selector del circuito y al
conjunto de líneas de salida se le conoce como canal de datos (data bus).

A continuación se ejemplifica una memoria estática de M entradas en su canal de


direcciones y palabras de n bits. En esta memoria se tendrán 2M palabras de n bits,
cuyas direcciones estarán comprendidas de 0 a 2M- 1.

122
La principal característica de las memorias estáticas es que no son volátiles, por lo cual
son muy útiles en un sistema computacional, para que al momento de encenderlo éste
tenga algunas rutinas y datos en su memoria o para tener cargadas en la memoria
principal rutinas de uso frecuente, y así no tener que cargarlas desde la memoria
secundaria.

Las primeras memorias estáticas que se construyeron son las conocidas como
memorias ROM, la información que está almacena en cada una de las palabras se fija
al momento de construir la memoria y ya no puede ser cambiada después. Lógicamente,
su construcción está hecha con base en un decodificador y un bloque OR por cada uno
de los bits de la palabra, los cuales tienen una entrada por cada palabra.

Ejemplo. A continuación se muestra una tabla con 4 palabras de 3 bits de información


cada una en la dirección especificada.

Dirección Contenido
A1 A0 D2 D1 D0
0 0 0 1 1
0 1 0 1 0
1 0 1 0 0
1 1 1 1 1

Usando mintérminos, tenemos:

̅̅̅̅ + 𝐴1 𝐴0 ; Que asociaríamos con S2 y S3 del decodificador.


𝐷2 = 𝐴1 𝐴0

̅̅̅̅ 𝐴0
𝐷1 = 𝐴1 ̅̅̅̅ + 𝐴1
̅̅̅̅ 𝐴0 + 𝐴1 𝐴0 ; Que asociaríamos con S0, S1 y S3 del decodificador.

𝐷0 = ̅̅̅̅
𝐴1 ̅̅̅̅
𝐴0 + 𝐴1 𝐴0 ; Que asociaríamos con S0 y S3 del decodificador.

La construcción lógica de una ROM de 4 palabras de 3 bits con la información de la


tabla, se muestra en seguida:

123
1
El circuito presentado muestra el caso para la dirección 00 con el dato 011, pero se
puede comprobar para las restantes direcciones.

El circuito de una memoria ROM también puede ser construido con un decodificador y
una matriz de diodos. El diodo es un elemento analógico pero en su comportamiento
ideal puede utilizarse como un elemento digital.

Memoria RAM.

Al igual que una memoria ROM, la memoria RAM puede ser considerada como un
conjunto de localidades de memoria, sólo que en cada una de éstas puede leerse
información y también puede escribirse. Cada una de estas localidades de memoria se
identifica por una dirección única, la cual recibe el nombre de palabra. En cada palabra
es posible leer o almacenar un número fijo de bits, los cuales pueden representar una
instrucción o dato.

El número de palabras que contiene una memoria siempre es una potencia de 2.

Además existen varias abreviaciones para indicar algunas potencias de 2, la letra K (de
Kilo) equivale a 210 = 1024 palabras, la letra M (de Mega) equivale 220 = 1048576
palabras, la letra G (de Giga) equivale a 230 = 1073741824 palabras y la letra T (de Tera)
que equivale a 240 palabras.

Una memoria RAM tiene como entradas, un canal de direcciones, para especificar la
palabra con la cual se desea trabajar, y 2 líneas de control; una para habilitar o
deshabilitar la memoria, llamada selector del circuito o habilitador del circuito (Chip
̅
Select, CS) y la otra para indicar si se desea realizar una lectura o una escritura R / 𝑊
̅
(del inglés Read / Write, se usa 𝑊 para indicar que la operación de escritura se realiza
cuando en esta línea se tiene un 0). Además cuenta con un canal de datos el cual
normalmente es bidireccional, se comporta como un canal de entrada en la operación
de escritura y como canal de salida en la operación de lectura. La principal razón de

124
este canal bidireccional es reducir el número de conexiones externas en el circuito
integrado. La siguiente figura ejemplifica una memoria RAM de M líneas en el canal de
direcciones y de n líneas en el canal de datos.

La construcción interna de una memoria RAM de 2M palabras de n bits, consta de una


lógica de direccionamiento y de 2M x n celdas binarias (cb), en cada una de estas celdas
binarias puede almacenarse 1 bit de información y constituye el bloque básico de una
memoria RAM.

Celda binaria.

Existen 2 modos de construir este bloque básico: el estático y el dinámico.

En las memorias RAM estáticas, la celda binaria se construye esencialmente con un


latch S-R, la información no se pierde mientras el circuito permanece encendido.

Las celdas binarias de la memoria RAM dinámica están construidas básicamente por
medio de un capacitor que almacena la información y un transistor. El transistor permite
cargar o descargar el capacitor, así como leer el valor que tiene éste. La carga
almacenada en el capacitor tiende a desaparecer al momento de leerla, por lo cual
siempre que se lee una celda binaria con valor de 1, debe ser seguida de una operación
de escritura de un 1 y así restaurar la carga en el capacitor. Los circuitos de control de
la RAM realizan esta operación de escritura en forma automática.

Incluso si la celda binaria nunca se lee, la carga almacenada tiende a desvanecerse con
el tiempo, típicamente en pocos milisegundos. Para evitar que se pierda la información,
las memorias dinámicas deben ser restauradas a intervalos regulares. A este proceso
se le conoce como refresco de la memoria. Una celda se refresca simplemente
ejecutando una operación de lectura (aunque no se necesite el dato).

Las memorias RAM dinámicas se refrescan mediante un circuito externo, que lea una
secuencia de direcciones. Normalmente no es necesario leer todas las direcciones, ya
que al leer una dirección se realiza el refresco a una serie de direcciones (un bloque de
memoria). En la actualidad existen memorias RAM dinámicas que realizan el refresco
en forma transparente, a estas memorias se les llama RAM dinámicas sincrónicas. En

125
una computadora, el refresco de la memoria RAM se realiza mientras la RAM está
inactiva.

Al ser la celda binaria dinámica más sencilla en su construcción, tiene circuitos


integrados con mayor capacidad y menor consumo de energía, su principal desventaja
es que éstos tienen un mayor tiempo de acceso.

El funcionamiento lógico de una celda binaria estática o dinámica es el mismo, la


siguiente figura muestra la lógica equivalente de una celda binaria.

Note que para hacer una escritura en la celda, es necesario poner en la línea de R/ 𝑊 ̅
un 0, en el selector un 1 y el dato que se desea escribir en la entrada. Si éste es un 1,
se dará un SET en el latch, y si es un 0 se dará un RESET en el latch.

Para tener el valor de la celda en la línea de salida, es necesario poner un 1 en la línea


̅ y un 1 en el selector.
de R / 𝑊

La siguiente figura muestra el diagrama de bloque de una celda binaria que se usara en
la construcción de una memoria RAM.

Memoria RAM de M x N.

La construcción interna de una memoria RAM de 2M palabras de N bits, básicamente


consta de un decodificador de M x 2M y de 2M x n celdas binarias.

126
La construcción lógica de una RAM pequeña de 4 x 4, en forma simplificada se muestra
en la siguiente figura.

Esta memoria cuenta con 4 palabras de 4 bits. Para seleccionar una de las 4 palabras
se requiere de un canal de direcciones de 2 líneas, a1 y a0 (a de address), las cuales
entran al decodificador.

Al estar habilitado el decodificador seleccionará las celdas binarias de una de las cuatro
palabras, dependiendo del contenido del canal de direcciones. Si la operación que se
desea realizar es una escritura, se pone en la línea de R / 𝑊 ̅ un cero y las celdas
binarias seleccionadas guardarán los bits que se encuentran en el canal de entrada.
Para realizar una operación de lectura, se pone la línea R / 𝑊 ̅ un uno, lo que hace que
los bits de las celdas binarias seleccionadas pasen por los bloques OR al canal de
salida. Las celdas binarias de las palabras no seleccionadas mantienen su contenido.

El circuito de la memoria 4 x 4 incluyendo las celdas binarias y el decodificador se


muestra a continuación:

127
128
Para unir el canal de entrada y el de salida en uno solo es necesario introducir una nueva
compuerta, ésta es el buffer de tres estados. En la siguiente figura se muestra el símbolo
usado para dicha compuerta, así como su funcionamiento.

La compuerta tiene una entrada de control y una entrada normal, cuando la primera (C)
tiene el valor de 1, la salida de la compuerta tiene el valor que se encuentra en la entrada
(E), el cual puede ser un 1 o un 0 (2 estados). Si la entrada de control vale 0, la salida
pasa a un estado de alta impedancia (tercer estado), lo que equivale a desaparecer la
compuerta y separar la entrada de la salida. El estado de alta impedancia que tiene la
salida es la característica que hace especial a esta compuerta.

En la siguiente figura se muestra el circuito usado para hacer que una línea de un canal
se comporte como línea de entrada o como línea de salida dependiendo de una señal
de control.

En la siguiente figura se muestra la memoria RAM de cuatro palabras de 4 bits con un


canal bidireccional.

129
La construcción lógica de una memoria con mayor capacidad, es una extensión directa
de la memoria que se ha presentado.

En la siguiente figura se exhibe el bloque de memoria que se usa para representar a


esta memoria RAM, así como el bloque de una memoria RAM de 1K palabras de 8 bits.

130
2.9 CLASIFICACIÓN DE LAS MEMORIAS

Los sistemas basados en microcontroladores necesitan dispositivos de memoria con


objeto de almacenar los programas y mantener los datos generados durante el
procesamiento.

Las RAM son memorias de lectura-escritura en las que los datos se pueden escribir o
leer en cualquier dirección seleccionada en cualquier secuencia. Cuando se escriben
los datos en una determinada dirección de la RAM, los datos de esa dirección
permanecen almacenados y no son borrados por la operación de lectura. Esta operación
no destructiva de lectura se puede entender como una copia del contenido de una
dirección, dejando dicho contenido intacto. La RAM se utiliza habitualmente para
almacenamiento de datos a corto plazo ya que no puede conservar los datos
almacenados cuando se desconecta la alimentación. A continuación se muestra una
clasificación de memorias RAM.

Las ROM mantienen los datos almacenados cuando se desconecta la alimentación y son,
por tanto memorias no volátiles. A continuación se muestra una clasificación de
memorias ROM.

131
RAM estática (SRAM)

Todas las RAM estáticas se caracterizan por las celdas de memoria latch. Cuando se
aplica alimentación continua a una celda de memoria estática se puede mantener un
estado 1 a 0 indefinidamente. Si se retira la alimentación, el bit de datos almacenado se
perderá.

RAM dinámica (DRAM)

Las celdas de las memorias dinámicas almacenan un bit de datos en un condensador


en lugar de un latch. La ventaja de este tipo de celda es que es muy sencilla, lo que
permite construir matrices de memoria muy grandes en un chip, a un coste por bit más
bajo que el de las memorias estáticas. La desventaja es que con el condensador de
almacenamiento no puede mantenerse cargado más que un período de tiempo y el dato
almacenado se pierde a no ser que su carga se refresque periódicamente.

MEMORIAS DE SÓLO LECTURA (ROM).

Una ROM mantiene de forma permanente o semipermanente los datos almacenados,


que pueden ser leídos de la memoria pero, o no se pueden cambiar en absoluto, o se
requiere un equipo especial para ello. Una ROM almacena datos que se utilizan
repetidamente en las aplicaciones, tales como tablas, conversiones o instrucciones

132
programadas para la inicialización y el funcionamiento de un sistema. Las ROM
mantienen los datos almacenados cuando se desconecta la alimentación y son, por
tanto memorias no volátiles. A continuación se citan algunos tipos de memorias ROM.

LA ROM DE MÁSCARA.

Se denomina simplemente ROM, es una memoria programada de forma permanente


durante el proceso de fabricación, para proporcionar funciones estándar de uso
extendido, tales como conversiones populares, o para proporcionar funciones
especificadas por el usuario. Una vez que se programa la memoria, está no puede
cambiarse.

MEMORIAS ROM PROGRAMABLES (PROM Y EPROM)

Las PROM son básicamente iguales que las ROM de máscara, una vez que han sido
programadas. La diferencia consiste en que las PROM salen de fábrica sin estar
programadas y se programan para satisfacer las necesidades del usuario.

Memorias PROM.

Utilizan algún tipo de mecanismo de fundición para almacenar bits, donde un hilo
(fusible) de memoria se funde o queda intacto para representar un 1 o un 0. El proceso
de fundición es irreversible; una vez que una PROM ha sido programada no puede
cambiarse.

Memorias EPROM.

Una EPROM es una PROM borrable. A diferencia de una PROM ordinaria, una EPROM
puede ser reprogramada si antes se borra el programa existente en la matriz de
memoria. Una EPROM utiliza una matriz NMOSFET con una estructura de puerta
aislada. La compuerta del transistor aislada no tiene ninguna conexión eléctrica y puede
almacenar una carga eléctrica durante un periodo de tiempo indefinido. Los bits de datos
en este tipo de matriz se representan mediante la presencia o ausencia de una carga
almacenada en la compuerta. El borrado de un bit de datos es un proceso que elimina
la carga de la compuerta.

MEMORIAS FLASH.

Las memorias flash son memoria de lectura/escritura de alta densidad (alta densidad
equivale a gran capacidad de almacenamiento de bits) no volátiles, lo que significa que
pueden almacenarse los datos indefinidamente en ausencia de alimentación. Estas
memorias se utilizan frecuentemente en las unidades de disco duro de baja capacidad
en las computadoras portátiles y en los microcontroladores para almacenar los
programas.

133
2.10 CONEXIONES DE MEMORIAS.

Con frecuencia se usan varios circuitos de memoria para formar memorias más grandes,
puede ser que se quiera una memoria con más palabras o una que contenga un tamaño
de palabra mayor. Suponga que se tienen varios circuitos de memoria RAM de 1K
palabras de 8 bits y se desea formar una memoria de 2K palabras de 8 bits.

Cada memoria tiene un canal de direcciones de 10 líneas (A9…A0), un canal de datos


de 8 líneas (D7…D0) y 2 líneas de control (CS y R W).

Necesitamos una línea de dirección más significativa (A10), que determine cuál de los
2 circuitos se selecciona, como se muestra en seguida.

Canal de direcciones de A9 a A0

RAM CS RAM R/W


R/W R/W
CS
1Kx8 1Kx8

A10

Canal de datos de D7 a D0

Si A10 vale cero se selecciona el circuito de la derecha. El segundo K de memoria se


encuentra en el circuito de la izquierda y se selecciona cuando vale 1.

Ahora se muestra en la siguiente figura una memoria de 1K palabras de 16 bits, usando


memorias de 1Kx8.

Canal de direcciones de A9 a A0

RAM RAM
CS R/W CS R/W R/W
1Kx8 1Kx8
A10
D15 a D8 D0 a D7

Canal de datos de D15 a D0

En esta configuración, los dos circuitos siempre son seleccionados cuando A10 vale
cero, y cada uno de ellos proporciona 8 líneas para formar el canal de datos de 16 líneas.

Al diseñar un sistema de memoria para una computadora, es necesario conocer


exactamente el tamaño de la memoria que se requiere, que porción o porciones de ésta
serán RAM y ROM y con qué circuitos de memoria RAM o ROM se quiere diseñar.

134
Para facilitar el diseño de un sistema de memoria se forma un mapa de direcciones de
memoria donde por medio de una tabla específica, para cada circuito de memoria, se
establece el conjunto de direcciones de memoria que se le asignan.

Ejemplo.

Diseñe un sistema de memoria de 64K bytes, en el que los primeros 48K bytes son de
RAM y el resto es de ROM. Se cuenta con dos memorias RAM de 16K bytes, dos
memorias RAM de 16K palabras de 4 bits y una memoria ROM de 16K bytes.

 Análisis.

ROM= 64 K bytes de memoria - 48 K bytes de RAM = 16 K bytes.

Palabra = 4 bits.

1 byte = 4 bits + 4 bits = 8 bits = 2 palabras.

1K bytes = 2 K palabras.

1RAM de 16K bytes = 2 RAM de 16K palabras.

 Reflexión

¿Cómo las conecta? ____En paralelo ________________________.

48K bytes de RAM = 2 memorias de 16K bytes + 2 memorias de 16Kpalabras.

1K = 2 a la 10= 1024; número de líneas en el canal de direcciones=_10__.

16K = 2 a la _14__=_16384___; número de líneas en el canal de direcciones=__14_.

1k implica de A0 a A9_ =10 líneas.

16K implica de A0 a A13__ =14 líneas

Para seleccionar dos bloques requiero __2___líneas más.

Para seleccionar 4 bloques requiero __4___líneas más.

 Síntesis

Las direcciones de los 16K las controlo con las líneas de A0 a _A13___.

Las direcciones de los bloques con las líneas A14__ y A15___.

Las primeras direcciones corresponden a _RAM____ y las más altas a __ROM__.

Armar el circuito considerando los canales de __Datos_________,


_direcciones______________ y __control____________.

135
El circuito quedaria asi.

136
UNIDAD III: Arquitectura general de una
computadora.
3.1 DIAGRAMA GENERAL DE UNA COMPUTADORA.

VON NEUMANN.

En el año de 1903 nace en Hungría John Von Neumann, uno de los más brillantes
matemáticos de la era de la computación. Durante la Segunda Guerra Mundial participó
como asesor en la construcción de la computadora ENIAC y más tarde de la UNIVAC,
siendo su gran aporte el del concepto de programa almacenado o micro-código. A él se
debe la arquitectura en la que se fundamentan la mayoría de los microprocesadores y
microcontroladores actuales.

Aunque las tecnologías empleadas en las computadoras digitales han cambiado mucho
desde que aparecieron los primeros modelos en los años 40, la mayoría todavía utiliza
la Arquitectura de von Neumann, publicada a principios de los años 1940 por John von
Neumann, que otros autores atribuyen a John Presper Eckert y John William Mauchly.

La arquitectura de Von Neumann describe una computadora con 4 secciones


principales: la unidad aritmético lógica (ALU por sus siglas del inglés: Arithmetic Logic
Unit), la unidad de control, la memoria central, y los dispositivos de entrada y salida
(E/S). Estas partes están interconectadas por canales de conductores denominados
buses:

 La memoria es una secuencia de celdas de almacenamiento numeradas, donde


cada una es un bit o unidad de información. La instrucción es la información
necesaria para realizar lo que se desea con el computador. Las «celdas»
contienen datos que se necesitan para llevar a cabo las instrucciones, con el
computador. El número de celdas varían mucho de computador a computador,
y las tecnologías empleadas para la memoria han cambiado bastante. En
general, la memoria puede ser reescrita varios millones de veces (memoria
RAM); se parece más a una pizarra que a una lápida (memoria ROM) que sólo
puede ser escrita una vez.

 El procesador (también llamado Unidad central de procesamiento o CPU) consta


de:

137
 La unidad aritmético lógica o ALU es el dispositivo diseñado y construido para
llevar a cabo las operaciones elementales como las operaciones aritméticas
(suma, resta, ...), operaciones lógicas (Y, O, NO), y operaciones de comparación
o relacionales. En esta unidad es en donde se hace todo el trabajo
computacional.

 La unidad de control sigue la dirección de las posiciones en memoria que


contienen la instrucción que el computador va a realizar en ese momento;
recupera la información poniéndola en la ALU para la operación que debe
desarrollar. Transfiere luego el resultado a ubicaciones apropiadas en la
memoria. Una vez que ocurre lo anterior, la unidad de control va a la siguiente
instrucción (normalmente situada en la siguiente posición, a menos que la
instrucción sea una instrucción de salto, informando al ordenador de que la
próxima instrucción estará ubicada en otra posición de la memoria).

 Los dispositivos E/S sirven a la computadora para obtener información del


mundo exterior y/o comunicar los resultados generados por el computador al
exterior. Hay una gama muy extensa de dispositivos E/S como teclados,
monitores, unidades de disco flexible o cámaras web.

Lo anterior se muestra en la siguiente figura.

Arquitectura Von Neumann.

138
HARVARD.

La arquitectura Harvard diseñada por el señor Howard Aiken, graduado de la


Universidad de Harvard y desarrollada en 1944 durante el proyecto Mark I, tiene como
característica más importante tener los datos y las instrucciones en buses separados.
De esta manera se puede ejecutar en forma paralela una instrucción con su respectivo
dato, haciendo más corto el tiempo de ejecución.

El núcleo de la CPU está conectado a dos memorias por intermedio de dos buses
separados. Una de las memorias contiene solamente las instrucciones del programa, y
es llamada memoria de programa. La otra memoria sólo almacena los datos y es
llamada memoria de datos. Ambos buses son totalmente independientes y pueden ser
de distintos tamaños.

A continuación se muestra una figura con la arquitectura Harvard.

Arquitectura Harvard.

139
OTROS CONCEPTOS Y OTRAS ARQUITECTURAS.

En la búsqueda de ejecutar procesos cada vez más rápidos, programas potentes


cargados de multiplicidad de funciones, manipulación de grandes volúmenes de
información, bajo consumo de energía y ocupación de pequeños espacios, las
compañías que desarrollan microprocesadores y microcontroladores están
permanentemente buscando nuevas arquitecturas. Es de anotar que las arquitecturas
de actualidad tienen su fundamento en la arquitectura madre, la arquitectura Von
Neumann, y en los elementos más importantes de la arquitectura Harvard.

Conceptos de CISC y RISC.

Se hace necesario mencionar dos conceptos bastante relacionados con las


arquitecturas de actualidad, como lo son RISC y CISC, en donde:

RISC (Reduced Instruction Set Computer): Computador con juego reducido de


instrucciones. Generalmente este tipo de instrucciones son ejecutadas en un ciclo de la
máquina, utilizando modos de direccionamiento simples e instrucciones sencillas. El
concepto de segmentación (ejecución de varias instrucciones en el mismo ciclo de
máquina) es más fácil aplicarlo a las instrucciones RISC debido a que éstas tienen un
ancho en bits constante.

CISC (Complex Instruction Set Computer): Computador con juego complejo de


instrucciones. Un procesador cuyo núcleo está basado en el concepto CISC en su
repertorio de instrucciones, no necesita de compiladores costosos ni complejos en
mejora de sus prestaciones. El enfoque de este concepto es el desarrollo de lenguajes
de alto nivel (HLL: High Level Language). Este concepto también configura programas
más cortos y de mejor aprovechamiento de la memoria. Se ha visto que algunos
algoritmos, de moderada y alta complejidad, se desarrollan mucho más rápido en una
máquina CISC que en una RISC.

Es frecuente encontrar un sin número de artículos que hablan bien o mal de RISC y de
CISC, pero a estas alturas se concluye que lo mejor es tomar lo bueno de un concepto
y del otro, como lo han hecho muchos fabricantes de microprocesadores y que han
tenido gran éxito.

Concepto de arquitectura superescalar.

El fundamento del proceso superescalar, nacido en el año 1987 y derivado del


procesamiento normal escalar, es el canal o cauce de instrucciones (PIPELINE) y toma
elementos del concepto RISC, pero también es posible implementarla sobre el concepto
CISC.

Un cauce de instrucciones consta de múltiples etapas de proceso distribuidas a lo largo


de los ciclos de máquina, en donde varias instrucciones pueden ser ejecutadas a la vez.
Si existen varios cauces de instrucciones se puede concluir que existe cierto nivel de
ejecución en paralelo.

140
Concepto de procesadores vectoriales o paralelos.

La característica más importante de un procesador vectorial es la de contener varias


ALU con sus respectivos cauces de datos, y con el empleo de una sola unidad de
control.

El controlador encausa varias operaciones hacia las diferentes ALU, para que éstas
sean ejecutadas en paralelo. Si a lo anterior se le aplica la segmentación de
instrucciones, se obtendrían máquinas con operaciones muy potentes y de velocidades
altas (ver la siguiente figura).

La técnica vectorial de mayor actualidad es la de implementar sistemas con varios


microprocesadores en paralelo, para esto se recomienda dividir los programas en
subtareas, que se ejecutarán en paralelo.

La técnica anterior va acompañada de una sincronización muy eficiente, que coordina


cada tarea (ver la siguiente figura).

141
3.2 BUSES.

Los buses son los medios que permiten establecer la comunicación con los distintos
periféricos que podríamos utilizar en conjunto con el microcontrolador (sensores,
memorias externas, puertos, etc.).

Los buses se pueden clasificar de la siguiente manera:

 Clasificación por su transmisión.


.
Bus unidireccional. Es aquel en donde la información va en una sola dirección.
Ejemplo: El bus de direcciones del microprocesador a las memorias.

Bus bidireccional. Los datos se mueven en ambas direcciones.


Ejemplo: El bus de datos del microprocesador y las memorias.

Bus serie. La comunicación se efectúa en ambas direcciones, pero con la diferencia de


ser bit a bit.

Bus paralelo. En este caso, los datos se transmiten a través de varias líneas a la vez.

 Clasificación por su función

Bus de direcciones. Es el que emplea el microprocesador para seleccionar la dirección


de memoria o el dispositivo de I/O con el que se va a comunicar. Es del tipo
unidireccional.
Bus de datos. Es por donde el microprocesador intercambia los datos con el elemento
seleccionado por el bus de dirección. Es bidireccional.
Bus de control. Es por el que circulan las señales auxiliares de gobierno y
sincronización del sistema (señal de reloj, señal de reset, señales de lectura y escritura
en memoria, etc.).

Los buses seriales son ampliamente utilizados para comunicar microcontroladores con
memorias EEPROM, convertidores A/D y muchos otros periféricos. Los sistemas de
buses seriales también son ampliamente utilizados para implementar buses de control
dentro de equipos como televisores, equipos de música y teléfonos celulares.

La mayor ventaja de utilizar buses seriales es el pequeño número de cables necesarios


para establecer la comunicación.

142
El BUS I2C

El I2C (Inter Integrated Circuits, también conocido con el nombre de TWI –de “TWo-wIre”,
literalmente “dos cables” en inglés) es un bus de comunicaciones serial síncrono de dos
líneas que fue originalmente desarrollado por Philips Semiconductors (ahora nxp
semiconductors) desde los inicios de los ‘80. Hoy es un estándar aceptado y respaldado
por los fabricantes de dispositivos semiconductores.

El bus I2C permite la comunicación entre múltiples dispositivos (en teoría más de 1000),
todos conectados paralelamente a las dos líneas. Las transferencias de datos siempre
se realizan entre dos dispositivos a la vez y en una relación maestro – esclavo.

La ventaja de este bus es que sólo necesita de 2 líneas (clock y data) para una
comunicación full dúplex entre múltiples dispositivos. La interfaz típicamente corre a
bajas velocidades (100kHz a 400khz). Con I2C, cada dispositivo en el bus tiene una
dirección de memoria única. El dispositivo puede trabajar como receptor y/o transmisor
dependiendo de cómo haya sido configurado.

El bus I2C fue implementado para maximizar la eficiencia del hardware y la simplicidad
del circuito. La interfaz I2C es una simple interfaz maestro/esclavo. Como se mencionó
anteriormente la simplicidad del bus radica en el diseño de 2 cables (SDA, Serial Data
y SCL, Serial Clock) y el formato del protocolo. En realidad también se necesitarían dos
líneas más: la de alimentación y la de tierra común, pero estas ya se presuponen
existentes en el circuito.

Cada dispositivo conectado al bus I²C tiene una dirección única que lo identifica
respecto el resto de dispositivos, y puede estar configurado como “maestro” o como
“esclavo”. Un dispositivo maestro es el que inicia la transmisión de datos y además
genera la señal de reloj, pero no es necesario que el maestro sea siempre el mismo
dispositivo: esta característica se la pueden ir intercambiando ordenadamente los
dispositivos que tengan esa capacidad

Para comenzar la comunicación el dispositivo maestro (típicamente un


microcontrolador) pone en el bus la dirección del dispositivo con el que se quiere
comunicar. Todos los dispositivos monitorean el bus para determinar si el maestro está
enviando su dirección. Solo el dispositivo con la dirección correcta puede comunicarse
con el maestro.

En la siguiente figura se muestra como conectar un microcontrolador como maestro y


los periféricos como esclavos, empleando este tipo de comunicación.

143
Tal como se muestra en el diagrama anterior, para funcionar correctamente tanto la
línea “SDA” como la “SCL” necesitan estar conectadas mediante una resistencia “pull-
up” a la fuente de alimentación común, la cual puede proveer un voltaje generalmente
de 5 V o 3,3 V (aunque sistemas con otros voltajes pueden ser posibles).

La velocidad de transferencia de datos es de 100 Kbits por segundo en el modo estándar


(aunque también se permiten velocidades de hasta 3,4 Mbit/s). No obstante, al haber
una única línea de datos, la transmisión de información es “half duplex” (es decir, la
comunicación solo se puede establecer en un sentido al mismo tiempo) por lo que en el
momento que un dispositivo empiece a recibir un mensaje, tendrá que esperar a que el
emisor deje de transmitir para poder responderle.

Bus SPI

El bus SPI (Serial Peripheral Interface), al igual que el sistema I²C, el sistema de
comunicación SPI es un estándar que permite controlar (a cortas distancias) casi
cualquier dispositivo electrónico digital que acepte un flujo de bits serie sincronizado (es
decir, regulado por un reloj). Igualmente, un dispositivo conectado al bus SPI puede ser
“maestro” –en inglés, “master” – o “esclavo” –en inglés, “slave“–, donde el primero es el
que inicia la transmisión de datos y además genera la señal de reloj (aunque, como con
I²C , con SPI tampoco es necesario que el maestro sea siempre el mismo dispositivo) y
el segundo se limita a responder.

La mayor diferencia entre el protocolo SPI y el I²C es que el primero requiere de cuatro
líneas (“cables”) en vez de dos. Una línea (llamada normalmente “SCK”) envía a todos
los dispositivos la señal de reloj generada por el maestro actual; otra (llamada
normalmente “SS”) es la utilizada por ese maestro para elegir en cada momento con
qué dispositivo esclavo se quiere comunicar de entre los varios que puedan estar
conectados (ya que solo puede transferir datos con un solo esclavo a la vez); otra
(llamada normalmente “MOSI”, Master Out Slave In data) es la línea utilizada para enviar
los datos –0s y 1s– desde el maestro hacia el esclavo elegido; y la otra (llamada
normalmente “MISO”, Master In Slave Out data ) es la utilizada para enviar los datos en
sentido contrario: la respuesta de ese esclavo al maestro. Es fácil ver que, al haber dos
líneas para los datos la transmisión de información es “full duplex” (es decir, que la
información puede ser transportada en ambos sentidos a la vez).La velocidad de
transmisión máxima es mayor que en el sistema de conexión I2C.

144
En las siguientes figuras se muestra el esquema de líneas de comunicación existentes
entre un maestro y un esclavo y entre un maestro y tres esclavos respectivamente. Se
puede observar que, para el caso de la existencia de varios esclavos es necesario
utilizar una línea “SS” diferente por cada uno de ellos, ya que esta línea es la que sirve
para activar el esclavo concreto que en cada momento el maestro desee utilizar (esto
no pasa con las líneas de reloj, “MOSI” y “MISO”, que son compartidas por todos los
dispositivos).Técnicamente hablando, el esclavo que reciba por su línea SS un valor de
voltaje BAJO será el que esté seleccionado en ese momento por el maestro, y los que
reciban el valor ALTO no lo estarán (de ahí el subrayado superior que aparece en la
figura).

Como se puede ver, el protocolo SPI respecto el I²C tiene la desventaja de exigir al
microcontrolador dedicar muchos más pines de E/S a la comunicación externa. En
cambio, como ventaja podemos destacar que es más rápido y consume menos energía que
I²C.

145
3.3 ARQUITECTURA INTERNA DE LA UNIDAD MICROPROCESADORA.

La organización de una computadora digital y su arquitectura están íntimamente


relacionadas; sin embargo, son dos conceptos diferentes que muchas veces se toman
como sinónimos.

La organización de una computadora digital se refiere a las unidades lógicas que la


componen (como la unidad central de proceso, la unidad de memoria, y la unidad de
entrada/salida), las funciones que realizan, su operación y la forma en que se relacionan
y se comunican unas con otras.

La arquitectura de la computadora se enfoca en la forma de construir cada una de estas


unidades lógicas para que realicen las funciones especificadas por su organización, así
como la manera en que estas unidades van a comunicarse para interactuar entre ellas.

Por ejemplo, el juego de instrucciones de máquina y los diferentes registros que tiene el
procesador se definen en la organización de la computadora. Los detalles de la
construcción de la unidad aritmética/lógica y la unidad de control para que la
computadora ejecute dichas instrucciones, así como el número de bits utilizados para
representar los números enteros, los números reales y las instrucciones de máquina,
son detalles que se definen en su arquitectura.

La forma de manejar la memoria y los diferentes periféricos de la computadora, también


se definen en la organización de la computadora. Los detalles de la construcción de la
unidad de memoria y la unidad de entrada/salida se definen en la arquitectura de la
computadora.

La arquitectura de las computadoras digitales simples se clasifican en arquitecturas de


0, 1, 2 o 3 direcciones, de acuerdo con los operandos que se utilizan en las operaciones
aritméticas y lógicas. En forma general, una operación aritmética o lógica puede
definirse como:

Resultado = operando 1 operación operando 2.

Donde la operación puede ser cualquier operación aritmética o lógica que realice la
computadora a nivel de instrucción de máquina. Típicamente, todas las computadoras
digitales efectúan operaciones de suma, resta y operaciones lógicas. Algunas
computadoras tienen también operaciones de multiplicación y división como parte de su
repertorio de instrucciones de máquina.

En las arquitecturas de 0 direcciones, los operandos se toman siempre de una pila y el


resultado de la operación se deja en la pila. Por tanto, en las instrucciones aritméticas y
lógicas de estas máquinas no se especifica ninguna dirección para los operandos ni
para el resultado.

En las máquinas que tienen arquitectura de una dirección, uno de los operandos es
siempre el registro acumulador y el otro corresponde a un operando en memoria. El
resultado se deja en el registro acumulador. Estas máquinas tienen solamente un
acumulador y las instrucciones aritméticas y lógicas solamente especifican la dirección
en memoria del segundo operando.

Las máquinas que tienen arquitectura de dos direcciones cuentan con instrucciones
aritméticas en las cuales se especifica de dónde se va a tomar cada uno de los dos
operandos de la instrucción. El resultado se deja en el lugar de donde se tomó el primer

146
operando. Por ejemplo, en una máquina que tenga varios registros acumuladores, se
especifica como primer operando uno de estos registros acumuladores y, como segundo
operando, alguna dirección de memoria. El resultado se deja en el acumulador de donde
se toma el primer operando.

Por último, en las máquinas con arquitectura de tres direcciones, se especifican tanto el
lugar de donde se tomarán los operandos como aquél donde se dejará el resultado.
Cualquiera de las direcciones corresponde a una dirección de memoria o un registro del
procesador.

INTRODUCCIÓN A LA ARQUITECTURA DE ARDUINO.

¿QUÉ ES UN MICROCONTROLADOR?

Un microcontrolador es un circuito integrado o “chip” (es decir, un dispositivo electrónico


que integra en un solo encapsulado un gran número de componentes) que tiene la
característica de ser programable. Es decir, que es capaz de ejecutar de forma
autónoma una serie de instrucciones previamente definidas por nosotros. En el
diagrama anterior, representativo de un sistema electrónico, el microcontrolador sería el
componente principal de la circuitería de procesamiento y control.

Por definición, un microcontrolador (también llamado comúnmente “micro”) ha de incluir


en su interior tres elementos básicos:

CPU (Unidad Central de Proceso): es la parte encargada de ejecutar cada instrucción


y de controlar que dicha ejecución se realice correctamente. Normalmente, estas
instrucciones hacen uso de datos disponibles previamente (los “datos de entrada”), y
generan como resultado otros datos diferentes (los “datos de salida”), que podrán ser
utilizados (o no) por la siguiente instrucción.

Diferentes tipos de memorias: son en general las encargadas de alojar tanto las
instrucciones como los diferentes datos que estas necesitan. De esta manera posibilitan
que toda esta información (instrucciones y datos) esté siempre disponible para que la
CPU pueda acceder y trabajar con ella en cualquier momento. Generalmente
encontraremos dos tipos de memorias: las que su contenido se almacena de forma
permanente incluso tras cortes de alimentación eléctrica (llamadas “persistentes”), y las
que su contenido se pierde al dejar de recibir alimentación (llamadas “volátiles”). Según
las características de la información a guardar, esta se grabará en un tipo u otro de
memoria de forma automática, habitualmente.

Diferentes patillas de E/S (entrada/salida): son las encargadas de comunicar el


microcontrolador con el exterior. En las patillas de entrada del microcontrolador
podremos conectar sensores para que este pueda recibir datos provenientes de su
entorno, y en sus patillas de salida podremos conectar actuadores para que el

147
microcontrolador pueda enviarles órdenes e así interactuar con el medio físico. De todas
formas, muchas patillas de la mayoría de microcontroladores no son exclusivamente de
entrada o de salida, sino que pueden ser utilizados indistintamente para ambos
propósitos (de ahí el nombre de E/S).

¿QUÉ ES ARDUINO?

Arduino es en realidad tres cosas:

Una placa hardware libre que incorpora un microcontrolador (Atmega 328P)


reprogramable y una serie de pines-hembra (los cuales están unidos internamente a las
patillas de E/S del microcontrolador) que permiten conectar allí de forma muy sencilla y
cómoda diferentes sensores y actuadores.

No obstante, cuando hablamos de “placa Arduino”, deberíamos especificar el modelo


concreto, ya que existen varias placas Arduino oficiales, cada una con diferentes
características (como el tamaño físico, el número de pines-hembra ofrecidos, el modelo
de microcontrolador incorporado –y como consecuencia, entre otras cosas, la cantidad
de memoria utilizable–, etc.). Conviene conocer estas características para identificar qué
placa Arduino es la que nos convendrá más en cada proyecto.

Un software (más en concreto, un “entorno de desarrollo”) gratis, libre y


multiplataforma (ya que funciona en Linux, MacOS y Windows) que debemos instalar
en nuestro ordenador y que nos permite escribir, verificar y guardar (“cargar”) en la
memoria del microcontrolador de la placa Arduino el conjunto de instrucciones que
deseamos que este empiece a ejecutar. Es decir: nos permite programarlo. La manera
estándar de conectar nuestro computador con la placa Arduino para poder enviarle y
grabarle dichas instrucciones es mediante un simple cable USB, gracias a que la
mayoría de placas Arduino incorporan un conector de este tipo.

Un lenguaje de programación libre. Por “lenguaje de programación” se entiende


cualquier idioma artificial diseñado para expresar instrucciones (siguiendo unas
determinadas reglas sintácticas) que pueden ser llevadas a cabo por máquinas.
Concretamente dentro del lenguaje Arduino, encontramos elementos parecidos a
muchos otros lenguajes de programación existentes (como los bloques condicionales,
los bloques repetitivos, las variables, etc.), así como también diferentes comandos –
asimismo llamados “órdenes” o “funciones” – que nos permiten especificar de una forma
coherente y sin errores las instrucciones exactas que queremos programar en el
microcontrolador de la placa. Estos comandos los escribimos mediante el entorno de
desarrollo Arduino.

A continuación se muestra la arquitectura interna.

148
A continuación se muestra la arquitectura AVR.

149
3.4 MODELO DE PROGRAMACIÓN.

150
151
152
UNIDAD IV: Programación básica de la
unidad microprocesadora.
4.1 MODOS DE DIRECCIONAMIENTO.

El campo de operación de una instrucción especifica la operación que se va a ejecutar.


Esta operación debe realizarse sobre algunos datos almacenados en registros de
computadora o en palabras de memoria. La manera en que eligen los operandos
durante la ejecución del programa depende del modo de direccionamiento de la
instrucción. El modo de direccionamiento especifica una regla para interpretar o
modificar el campo de dirección de la instrucción antes de que se haga la referencia real
al operando. Las computadoras utilizan técnicas de modo de direccionamiento para
acomodar una o las dos siguientes consideraciones:

1. Proporcionar al usuario versatilidad de programación al ofrecer facilidades como


apuntadores a memoria, contadores para control de ciclo, indexación de datos y
reubicación de datos.
2. Reducir la cantidad de bits en el campo de direccionamiento de la instrucción.

La disponibilidad de los modos de direccionamiento proporciona al programador con


experiencia en lenguaje ensamblador la flexibilidad para escribir programas más
eficientes en relación con la cantidad de instrucciones y el tiempo de ejecución.

Para comprender los diferentes modos de direccionamiento que se presentaran en esta


sección, es imperativo entender el ciclo de operación básico de la computadora. La
unidad de control de una computadora está diseñada para recorrer un ciclo de
instrucciones que se divide en tres fases principales:

1. Búsqueda de la instrucción de la memoria.


2. Decodificar la instrucción.
3. Ejecutar la instrucción.

Hay un registro en la computadora llamado contador de programa o PC, que lleva un


registro de las instrucciones del programa almacenado en la memoria. PC contiene la
dirección de la siguiente instrucción que se va a ejecutar y se incrementa cada vez que
se recupera una instrucción de la memoria. La decodificación realizada en el paso 2
determina la operación que se va a ejecutar, el modo de direccionamiento de la
instrucción y la posición de los operandos.

Después la computadora ejecuta la instrucción y regresa al paso 1 para hacer la


búsqueda de la siguiente instrucción en secuencia.

153
En algunas computadoras el modo de direccionamiento de la instrucción se especifica
con un código binario distinto, como se hace con el código de operación. Otras
computadoras utilizan un código binario único que representa la operación y el modo de
la instrucción. Pueden definirse instrucciones con diversos modos de direccionamiento
y, en ocasiones, se combinan dos o más modos de direccionamiento en una instrucción.

El poder de cualquier computadora radica en la habilidad para acceder a memoria. Los


modos de direccionamiento de la CPU proveen esta capacidad. Los modos de
direccionamiento difieren la manera en que una instrucción obtendrá el dato requerido
para su ejecución. Debido a los diferentes modos de direccionamiento, una instrucción
puede acceder al operando en una de las diversas maneras. Cada variante de diferente
modo de direccionamiento de una instrucción debe tener un único código de operación
de instrucción.

Aunque la mayoría de los modos de direccionamiento modifican el campo de dirección


de la instrucción, hay dos modos que no necesitan el campo de dirección. Son los modos
implícito o inherente e inmediato.

A continuación se muestran los modos de direccionamiento con un ejemplo para


comprender mejor cada uno de ellos.

154
155
156
157
158
Modos de Direccionamiento para la
memoria de programa.

Instrucciones
• Directo
• Indirecto
• Relativo

159
160
4.2 HERRAMIENTAS DE PROGRAMACIÓN.

Introducción a Atmel Studio 7.0

Los pasos para crear un proyecto nuevo y poder escribir el código del programa
se detalla a continuación.
Accedamos a Atmel Studio 7.0

Se mostrara la siguiente pantalla en su apertura.

Seleccionamos Nuevo Proyecto (New Project.).

161
Seleccionamos el lenguaje, en nuestro caso Ensamblador (Assembler).

Colocamos el nombre del proyecto y la ruta donde quedara guardado.

Presionamos OK.

Seleccionamos el microcontrolador, en nuestro caso ATmega 328P.

162
En el editor colocaremos el programa a simular.

Para localizar posibles errores de programa (sintaxis o instrucciones), usamos


el depurador.

Si aparecieran errores tendremos que corregirlos antes de continuar.

163
A continuación seleccionamos la opción construir (Build), que nos mostrara la
siguiente pantalla.

Al presionar ejecutar presentara la siguiente pantalla.

164
Damos continuar y seleccionamos el depurador/programador colocándolo en
simulador, como se muestra en seguida.

A continuación ejecutamos el programa paso a paso, como se muestra.

165
Observar que muestra el estado de la memoria FLASH (DONDE SE
ENCUENTRA EL ROGRAMA), también podemos visualizar en esta sección la
memoria RAM al colocar la opción en la sección Memory y la dirección en
Address.

Antes de ejecutar los programas debemos acceder a la memoria RAM donde


colocaremos los datos en las direcciones indicadas, así mismo podremos seguir
los resultados parciales y totales que sucedan en la memoria RAM

Para continuar con la siguiente instrucción, presionamos el botón a pasos como


se muestra.

En caso de que el programa presente un paro repentino, presionar el botón de


pausa y nos permitirá seguir con la ejecución paso a paso.

166
4.3 INSTRUCCIONES.

Las instrucciones son las herramientas que permiten la comunicación entre el


programador y el sistema basado en el microcontrolador, se tiene un lenguaje que utiliza
nemónicos (abreviaturas en inglés), y son utilizadas para generar una cadena de
sentencias que permita realizar una tarea, es decir, generar un programa a partir de
estas instrucciones y así poder realizar una acción determinada.

Juego de Instrucciones.

• Instrucciones de transferencia de datos.


• Instrucciones aritmético-lógicas.
• Instrucciones de salto.
• Instrucciones de manejo de bits.
• Instrucciones de control del sistema.

167
168
169
170
171
172
173
174
175
4.4 EJEMPLOS DE PROGRAMAS BÁSICOS.

1.- Realizar un programa en ensamblador para el microcontrolador Atmega 328P que


sume los datos contenidos en las direcciones, $0112 y $0113, colocando el resultado
en la dirección $0114.

start:
LDS R16, $0112; cargar el registro 16 con el contenido de la localidad 112
LDS R17, $0113; cargar el registro 17 con el contenido de la localidad 113
ADD R16, R17; sumar al registro 16 el contenido del registro 17
STS $0114, R16; almacenar el contenido del registro 16 en la localidad 114
rjmp start

2.- Realizar un programa en ensamblador para el microcontrolador Atmega 328P que


reste el dato contenido en la direcciones $0113 del contenido en la dirección $0112,
colocando el resultado en la dirección $0114.

start:
LDS R16, $0112; cargar el registro 16 con el contenido de la localidad 112
LDS R17, $0113; cargar el registro 17 con el contenido de la localidad 113
SUB R16, R17; restar al registro 16 el contenido del registro 17
STS $0114, R16; almacenar el contenido del registro 16 en la localidad 114
rjmp start

3.- Realizar un programa en ensamblador para el microcontrolador Atmega 328P que


ejecute una multiplicación de los datos contenidos en las direcciones $0112 y $0113,
dejando el resultado en las direcciones $0114 (parte alta) y $0115 (parte baja).

start:
LDS R18, $0112; cargar el registro 18 con el contenido de la localidad 112
LDS R19, $0113; cargar el registro 19 con el contenido de la localidad 113
MUL R18, R19; la multiplicación de los registros se almacena en R1 y R2
STS $0114, R1; almacenar parte alta de la multiplicación en localidad 114
STS $0115, R0; almacenar parte baja de la multiplicación en localidad 115
rjmp start

4.- Realizar un programa en ensamblador para el microcontrolador Atmega 328P que


ejecute una división, donde el dividendo se encuentra ocupando la dirección $0112 y
el divisor la dirección $0113. El cociente lo deberá colocar en la dirección $0114 y el
residuo en la dirección $0115.

start:
LDS R16, $0112;
LDS R17, $0113;
LDI R18, 0;
division:
CP R16, R17;
BRMI FIN;
SUB R16, R17;
INC R18;
RJMP division;
FIN: STS $0114, R18;
STS $0115, R16;
rjmp start

176
5.- Realizar un programa en ensamblador para el microcontrolador Atmega 328P que
obtenga la raíz cuadrada del número contenido en la dirección $0100, dejando el
resultado en la dirección $0112 y el residuo en la dirección $0113.

start:
LDI R17, 0;
LDI R19, 1;
LDS R16, $100;
REPITE:
CP R16, R19;
BRMI FIN;
SUB R16, R19;
INC R17;
INC R19;
INC R19;
JMP REPITE;
FIN: STS $0113, R16;
STS $0112, R17;
rjmp start

6.- Realizar un programa en ensamblador para el microcontrolador Atmega 328P que


analice si un número es par o impar, el cual se encuentra en la dirección $0112. El
resultado se dejara en la dirección $0113 (1 indica impar y cero indica par):

start:
LDS R16, $0112
ANDI R16, 1;
STS $0113, R16
rjump start

7.- Realizar un programa en ensamblador para el microcontrolador Atmega 328P que


genere los N primeros términos de la serie Fibonacci, el número solicitado de términos
se encuentra en la dirección $0112 y la serie se deberá dejar a partir de la dirección
$0113.

start:
LDI R27, $01
LDI R26, $13
LDS R16, $0112
LDI R17, $1
LDI R18, $1
repite: CPI R16, $0
BREQ fin
ST X+, R17
DEC R16
ADD R17, R18
MOV R19, R17
MOV R17, R18

177
MOV R18, R19
JMP repite
fin:
rjmp start

8.- Realizar un programa en ensamblador para el microcontrolador Atmega 328P que


ordene en forma descendente los N términos de un vector que empieza en la dirección
$0112, el número de términos del vector se encuentra en la dirección $0100.

start:

LDI R27, $01


LDI R26, $12
MOV R0, R26
LDS R16, $0100
DEC R16
ADD R16, R26
MOV R1, R16

SIGUE:

CP R1, R0
BREQ FIN
LD R16, X

REPITE:

INC R26
LD R17, X
CP R16, R17
BRMI CAMBIA

REGRESA:

CP R1, R26
BREQ OTRO
JMP REPITE

CAMBIA:

ST X, R16
MOV R16, R17
JMP REGRESA

OTRO:

MOV R26, R0
ST X, R16
INC R0
MOV R26, R0
JMP SIGUE

FIN:
rjmp start

178
UNIDAD V: Programación de periféricos.
5.1 Puertos Digitales.

Puertos del Atmega 328P.

179
180
181
182
183
184
185
186
187
5.2 ADQUISICIÓN DE SEÑALES ANALÓGICAS.

Breve repaso de la conversión analógica a digital.

Las máquinas, como los microcontroladores, tratan de medir y/o convertir las variables
analógicas que el hombre manipula y entiende, pero el proceso de convertir introduce
una inevitable pérdida de información. Esta pérdida es inherente al proceso de digitalizar
las señales analógicas y continuas, que finalmente serán llevadas a cantidades
binarias.

La siguiente figura representa una señal analógica continua entre los puntos t0 y t1,
que desde el punto de vista de la magnitud será sometida a un número discreto de
valores binarios y que la cantidad de valores se conoce con el nombre de Resolución
del sistema.

La Resolución de un convertidor analógico al digital es la cantidad de valores, discretos,


en los cuales se interpreta la señal a digitalizar. Por ejemplo, para un procesador con un
conversor A/D que tiene una resolución de 12 bits el número de valores discretos en los
cuales se puede valorar a una señal, sería de 2 12 = 4096. El valor ideal para esos
valores sería un número infinito, pero tecnológicamente es imposible.

Esos valores deben estar comprendidos dentro de dos límites, que forman la ventana
de conversión o valores de referencia (Vmin, VMax). Para la figura anterior, el punto P
tiene una interpretación en el mundo de lo discreto y es de Vx.

Se recomienda que el alumno aproveche al máximo la resolución del sistema,


adecuando la señal analógica para que se desplace de la manera más completa en la
ventana de conversión. Por ejemplo, una señal con un valor máximo de 100mV deberá
ser amplificada por un factor de 30, para una ventana de conversión de 3V y de ésta
manera aprovechar la resolución del sistema.

188
Para calcular el paso mínimo de conversión y por lo tanto conocer el intervalo de pérdida
de información, supóngase que se tiene una señal sometida a un conversor de 12 bits
de resolución, un Vmin = 0V y un Max = 5V.

El paso mínimo de conversión está dado por:

Paso mínimo = (VMax - Vmin) / Resolución

Paso mínimo = (5V – 0V) / 212

Paso mínimo = 1.22mV

El cálculo anterior indica que la diferencia en magnitud entre el resultado de una


conversión y la inmediatamente superior (o inferior) es de 1.22mV. Todo valor que no
sea múltiplo entero de un paso mínimo, se deberá aproximar al valor más cercano y es
aquí donde un conversor A/D ignora información del mundo analógico.

El Muestreo (simple) es otra característica importante de un conversor A/D y se refiere


a la cantidad de muestras en la unidad de tiempo que se pueden procesar y convertir a
cantidades discretas.

La siguiente figura presenta una señal analógica continua entre los puntos t0 y t1, que
desde el punto de vista del muestreo es sometida a un número finito de muestras y que
cada muestra es tomada a un intervalo constante T, llamado período de muestreo.

Al igual que en la resolución, el muestreo introduce pérdida de información, debido a los


valores que no son muestreados entre dos intervalos de muestreo contiguos.

Idealmente la razón de muestreo debería ser infinita, pero existen restricciones


tecnológicas. Entonces, mientras menor sea la separación entre los intervalos más fiel
será la señal digitalizada con respecto a la señal analógica original.

189
El ADC de un AVR

Los microcontroladores ATMega8 y ATMega16 incluyen un ADC de aproximaciones


sucesivas de 10 bits, el cual está conectado a un multiplexor analógico que permite
seleccionar 1 de 8 canales externos (ADC0, ADC1, ADC2, etc.), excluyendo al ATMega8
con encapsulado PDIP, éste sólo tiene 6 canales. En un ATMega16 se pueden emplear
3 canales para introducir una entrada diferencial (no referida a tierra) e incorporar un
factor de ganancia configurable.

En la siguiente figura se muestran los elementos para seleccionar el voltaje analógico


en la entrada, la parte sombreada no está disponible en un ATMega8, para estos
dispositivos, el voltaje analógico proviene directamente del multiplexor principal.

Los bits MUX[4:0] son parte del registro ADMUX, éste es un Registro I/O disponible para el
manejo del ADC y se describe mas adelante. Como en un ATMega8 se tienen menos opciones,
el bit MUX(4) no está implementado, en la tabla siguiente se muestra la selección de la entrada
para el ADC de un ATMega8.

190
Aunque el microcontrolador puede operar con osciladores en el orden de MHz, el ADC alcanza
su máxima resolución si trabaja a una frecuencia entre 50 KHz y 200 KHz. Es posible emplear una
frecuencia mayor con una resolución de 8 bits, pero esta frecuencia debería determinarse en
forma práctica. Los AVR incluyen un pre-escalador de 7 bits para generar la frecuencia de trabajo
del ADC a partir de la frecuencia del microcontrolador, éste se muestra en la siguiente figura.

Las señales de control del pre-escalador son parte de los bits del Registro A de Control y Estado
del ADC (ADCSRA, ADC Control and Status Register A), el cual se revisara mas adelante. Los
factores de división se seleccionan con los bits ADPS[2:0], las diferentes opciones se muestran
en la siguiente tabla

Con la primera conversión se inicializa la circuitería analógica, por lo que requiere de 25 ciclos
de reloj, para las conversiones siguientes sólo se emplean 13 ciclos.

191
El ADC y el multiplexor para la selección de la entrada analógica reciben su alimentación en la
terminal AVcc. La terminal está disponible para que la circuitería analógica pueda alimentarse
con un voltaje diferente al de la parte digital, proporcionando las facilidades para un posible
aislamiento. Sólo debe considerarse que AVcc no debe diferir más de ±0.3 V de Vcc.

En la mayoría de aplicaciones es suficiente con conectar a AVcc directamente con Vcc. De hecho,
es recomendable realizar esta conexión aun si no se va a emplear al ADC, para la adecuada
operación del puerto C de un ATMega8 y del puerto A de un ATMega16, porque en estos puertos
se encuentran los multiplexores para las entradas analógicas, como una función alternativa.

Para la conexión de AVcc con Vcc el fabricante recomienda el uso de un filtro pasa bajas, como
el mostrado en la siguiente figura, con la finalidad de cancelar el ruido. El filtro es importante si
la entrada analógica tiene un valor máximo pequeño, en relación al voltaje de alimentación, o
bien, si se utiliza una entrada diferencial, en el caso de un ATMega16.

El ADC utiliza un DAC durante el proceso de conversión, por ser un ADC de aproximaciones
sucesivas como el mostrado en la siguiente figura.

192
El DAC requiere un voltaje de referencia (VREF), el cual puede ser proporcionado por diferentes
fuentes, como se muestra en la siguiente figura.

La selección de VREF se realiza con los bits REFS1 y REFS0, del registro ADMUX. El voltaje de
referencia determina el rango de conversión del ADC, si el voltaje analógico excede a VREF, es
codificado como 0x3FF.

El voltaje de referencia puede tomarse de la alimentación analógica (AVcc), de un voltaje interno


o de la terminal AREF, en la tabla siguiente se muestra la selección de estas fuentes.

193
Si se utiliza a AVcc o al voltaje interno (opciones “01” y “11”) es recomendable el uso de un
capacitor de AREF a tierra, para que el voltaje de referencia tenga inmunidad al ruido.

Una opción muy simple, desde el punto de vista práctico, consiste en la conexión de la terminal
AREF con Vcc, empleando la combinación “00” para los bits REFS1 y REFS0, esta opción también
presenta inmunidad al ruido. Únicamente se requiere que la entrada analógica esté
acondicionada para proporcionar un voltaje entre 0 y Vcc.

Un factor importante a determinar es la frecuencia máxima permitida en la señal analógica de


entrada. Por ejemplo, si el microcontrolador está operando a 1 MHz, para alcanzar una
resolución máxima el ADC debe operar con una frecuencia entre 50 y 200 KHz, con un factor de
división de 8 se obtiene una frecuencia de 125 KHz. Si el ADC está dedicado sólo a un canal e
ignorando el tiempo requerido por la primera muestra, los 13 ciclos por muestra conllevan a una
razón de muestreo de 125 KHz/13 = 9.61 KHz. Por lo tanto, de acuerdo con el teorema del
muestreo, la frecuencia máxima permisible para la señal de entrada es de 4.8 KHz.

Relacionando las señales de control del ADC de aproximaciones sucesivas con el ADC de un AVR,
se tiene que: el inicio de la conversión se realiza poniendo en alto al bit ADSC (Start Conversion),
el fin se indica con la puesta en alto de la bandera ADIF (Interrupt Flag); ésta puede sondearse
por software o bien, si se ajusta al bit ADIE (Interrupt Enable), va a producir una interrupción,
estos bits están en el registro ADCSRA.

Un ATMega8 puede ser configurado para operar en un modo de carrera libre, de manera que al
finalizar una conversión inicie con la siguiente, este modo se habilita con el bit ADFR (ADC Free
Running). En el ATMega16, además del modo de carrera libre, se puede configurar al hardware
para que el inicio de una conversión sea disparado por algún evento de otro recurso del
microcontrolador.

El canal de entrada analógica se selecciona escribiendo en los bits MUX en ADMUX. Como se
muestra en la siguiente figura.

194
Cualquiera de los pines de entrada ADC, así como GND y una referencia fija de voltaje, se pueden
seleccionar como entradas de un solo extremo para el ADC. El ADC se habilita estableciendo el
bit ADC Enable, ADEN en ADCSRA. Como se muestra en la figura

195
La referencia de voltaje y las selecciones de canales de entrada no entrarán en vigor
hasta que se ajuste ADEN. El ADC no consume energía cuando ADEN se borra, por lo
que se recomienda desconectar el ADC antes de entrar en modos de ahorro de energía.

De forma predeterminada, el resultado se presenta ajustado a la derecha, pero


opcionalmente se puede presentar a la izquierda ajustado ajustando el bit ADLAR en
ADMUX.

Si el resultado está ajustado a la izquierda y no se necesita más de 8 bits de precisión,


basta con leer ADCH. De lo contrario, ADCL debe leerse primero, luego ADCH, para
asegurarse de que el contenido de los registros de datos pertenece a la misma
conversión. Una vez que se lee ADCL, se bloquea el acceso de ADC a los registros de
datos. Esto significa que si se ha leído ADCL y se completa una conversión antes de
leer ADCH, ninguno de los registros se actualiza y se pierde el resultado de la
conversión. Cuando se lee ADCH, se vuelve a habilitar el acceso ADC a los registros
ADCH y ADCL.

El ADC tiene su propia interrupción que puede ser activada cuando se completa una
conversión. Cuando se prohíbe el acceso de ADC a los registros de datos entre la lectura
de ADCH y ADCL, la interrupción se activará incluso si se pierde el resultado.

Inicio de una conversión

Se inicia una sola conversión desactivando el bit ADC Reducción de potencia, PRADC,
en "Minimizar el consumo de energía", escribiendo un cero lógico en él y escribiendo
uno lógico en el bit ADC de conversión de inicio, ADSC. Este bit se mantiene alto
mientras la conversión esté en curso y será borrado por el hardware cuando se complete
la conversión. Si se selecciona un canal de datos diferente mientras se está realizando
una conversión, el ADC finalizará la conversión actual antes de realizar el cambio de
canal.

196
Alternativamente, una conversión puede ser activada automáticamente por varias
fuentes. El desencadenamiento automático se habilita estableciendo el bit de
habilitación de disparador automático ADC ADATE en ADCSRA. El origen del
disparador se selecciona ajustando los bits de selección de disparo ADC, ADTS.
Cuando se produce un flanco positivo en la señal de disparo seleccionada, el pre-
escalador ADC se restablece y se inicia una conversión. Esto proporciona un método
para iniciar conversiones a intervalos fijos. Si la señal de activación todavía se establece
cuando se completa la conversión, no se iniciará una nueva conversión. Si se produce
otro flanco positivo en la señal de disparo durante la conversión, el borde se ignorará.
Tenga en cuenta que una bandera de interrupción se establecerá incluso si la
interrupción específica está deshabilitada o se bloquea el bit de habilitación de
interrupción global en SREG. Una conversión puede así ser activada sin causar una
interrupción. Sin embargo, la bandera de interrupción debe borrarse para activar una
nueva conversión en el siguiente evento de interrupción. Como se muestra en la
siguiente figura.

El uso de la bandera de interrupción ADC como un origen de desencadenador, hace


que el ADC inicie una nueva conversión tan pronto como la conversión en curso haya
finalizado. El ADC entonces opera en modo de carrera libre, muestreando y actualizando
constantemente el Registro de Datos ADC. La primera conversión debe iniciarse
escribiendo un uno lógica en el bit ADSC en ADCSRA. En este modo, el ADC realizará
conversiones sucesivas independientemente de si se ha borrado o no la bandera de
interrupción ADIF.

Si se activa el Disparo automático, se pueden iniciar conversiones individuales


escribiendo uno en ADSC del ADCSRA. ADSC también se puede utilizar para
determinar si una conversión está en curso. El bit ADSC se leerá como uno durante una
conversión, independientemente de cómo se inició la conversión.

197
Cambio de canal o selección de referencia.

Los bits MUXn y REFS1: 0 en el Registro ADMUX están almacenados en una sola
memoria intermedia a través de un registro temporal al que la CPU tiene acceso
aleatorio. Esto asegura que los canales y la selección de referencia sólo se realicen en
un punto seguro durante la conversión. El canal y la selección de referencia se
actualizan continuamente hasta que se inicia una conversión. Una vez que se inicia la
conversión, el canal y la selección de referencia se bloquean para asegurar un tiempo
de muestreo suficiente para el ADC. La actualización continua se reanuda en el último
ciclo de reloj ADC antes de que se complete la conversión (se establece ADIF en
ADCSRA). Tenga en cuenta que la conversión comienza en el siguiente flanco de reloj
de ADC ascendente después de que se escribe ADSC. Se aconseja al usuario que no
escriba nuevos valores de selección de canal o referencia a ADMUX hasta que se haya
escrito un ciclo de reloj ADC después de que se haya escrito ADSC.

Si se utiliza Disparo automático, la hora exacta del evento de disparo puede ser
indeterminista. Se debe tener especial cuidado al actualizar el Registro ADMUX, para
controlar qué conversión será afectada por los nuevos ajustes.

Si ADATE y ADEN se escriben en uno, puede producirse un evento de interrupción en


cualquier momento. Si se cambia el registro ADMUX en este período, el usuario no
puede saber si la siguiente conversión se basa en la configuración antigua o nueva.
ADMUX se puede actualizar de forma segura de las siguientes maneras:

Cuando ADATE o ADEN se borran.

Durante la conversión, mínimo un ciclo de reloj ADC después del evento de disparo.

Después de una conversión, antes de que se borre la bandera de interrupción utilizada


como fuente de disparo.

Al actualizar ADMUX en una de estas condiciones, la nueva configuración afectará a la


próxima conversión ADC.

Ejemplo del ADC en Modo de conversión simple.

Antes de escribir el programa para la conversión analógica a digital, tenemos que cuidar
de la parte analógica del chip AVR. Esto incluye la alimentación de periféricos
analógicos mediante la aplicación de voltaje a AVCC, el ajuste del nivel de tensión de
referencia en AREF pin y garantizar una cierta protección contra el ruido de suministro
mediante la aplicación de filtro de paso bajo. Para las aplicaciones simples hoja de datos
recomienda agregar 100nF condensador y 10uH inductor a AVCC pin que realizan como
filtro pasa bajos. Como se muestra en la figura.

198
En nuestro ejemplo establecemos el voltaje de referencia igual que el voltaje de la fuente
de alimentación. Así que necesitamos conectar el pin de AREF a la fuente de AVCC. Si
se utiliza el voltaje de referencia interno de 1,1V tendríamos que conectar un
condensador entre el pin VREF y GND para reducir la posibilidad de ruido. En nuestro
ejemplo vamos a medir un valor de voltaje en el potenciómetro. El potenciómetro está
conectado al canal ADC0.

Para comenzar a usar ADC necesitamos inicializarlo primero. Para esto escribimos la
siguiente función.

void InicializarADC()

// Seleccionamos Vref=AVcc

ADMUX |= (1<<REFS0);

//ponemos el pre-escalador a 128 and habilitamos el ADC

ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADEN);

199
Como podemos ver, en primer lugar tenemos que seleccionar la fuente de voltaje de
referencia. Al establecer REFS0 en el registro ADMUX. Como la hoja de datos dice
AREF debe estar conectado a AVCC, sólo tenemos que conectar el condensador entre
el la terminal AREF y tierra.

El ADC debe ser sincronizado a una frecuencia entre 50 y 200kHz. Por lo tanto,
necesitamos establecer los bits del pre-escalador apropiados para que el reloj de
sistema quede en este rango. Como nuestro AVR está sincronizado a 16MHz, vamos
a utilizar el factor de escala 128 al ajustar los bits ADPS0, ADPS1 y ADPS2 en el registro
ADCSRA. Esto da 16000000/128 = 125 kHz de reloj ADC.

Y, por último, habilitamos el módulo ADC estableciendo el bit ADEN en el registro


ADCSRA.

Ahora ADC está ajustado y podemos comenzar la conversión, para ello preparamos la
siguiente función que lee el valor ADC del canal seleccionado y devuelve un valor de 16
bits.

uint16_t LeerADC(uint8_t ADCchannel)

//seleccionamos el canal ADC con la siguiente mascara.

ADMUX = (ADMUX & 0xF0) | (ADCchannel & 0x0F);

//modo de simple conversión.

ADCSRA |= (1<<ADSC);

// Esperamos a que la conversión del ADC esté completa

while( ADCSRA & (1<<ADSC) );

return ADC;

Antes de seleccionar el canal ADC en el registro ADMUX utilizamos una máscara


(0b00001111) que protege contra la alteración no intencional del registro ADMUX.

Una vez seleccionado el canal, comenzamos la conversión única estableciendo el bit


ADSC en el registro ADCSRA. Este bit permanece alto hasta que se completa la
conversión. Así que vamos a utilizar este bit como indicador para decidir cuándo los
datos están listos. Así que devolveremos el valor del ADC después de que el bit ADSC
se restablezca.

200
EJEMPLO CON EL MÓDULO ADC.

Para ilustrar la operación del módulo ADC se trabajará sobre el clásico ejemplo de la
medida de temperatura con un transductor de bajo costo, como lo es el LM35. El
problema consiste en la medida en grados Celsius de la temperatura ambiente y
visualización de la misma en un display LCD.

La función de transferencia del LM35 es:

f (T) = 10mV / °C

De tal manera que si el ambiente se encuentra a una temperatura de 25°C, a la salida


del sensor se tendría un voltaje de 250mV.

Para realizarlo hemos dispuesto de un sensor de temperatura LM35 que toma


las medidas del entorno.

Este está conectado a una placa de Arduino que cuenta con un programa por el
cual recoge los datos del sensor de temperatura y los transforma en grados
centígrados.

Este Arduino está conectado al ordenador y a su vez enlazado al programa


Matlab, que se encarga de procesar los datos enviados por la placa, nos muestra
en tiempo real la temperatura recogida por el medidor de temperatura, crea
gráficas entre valores de tiempo.
Estos datos nos van indicando la temperatura ambiente a la que se localiza.
Vamos a proceder a una explicación de cómo hemos realizado el ejemplo.
Diagrama de bloques:

201
Descripción del ejemplo.

El Conversor Analógico a Digital de Arduino es de 10bits, por lo tanto para


convertir el valor de lectura en Voltios usamos la siguiente expresión.

V = (5.0* lectura)/1024.

El factor adicional que aparece en la expresión es a causa de la especificación


del sensor LM35, el que tiene una escala de 10mV/C por lo tanto para obtener la
temperatura directamente en grados Celsius debemos multiplicar por 100.

A continuación se muestra el programa para Arduino.

202
A continuación se muestra la conexión realizada.

En la computadora en modo Serial monitor veremos:

Después de probar el programa de Arduino comenzamos el programa de Matlab.


Posteriormente en el programa de Arduino debemos asignar el puerto USB
conectado al ordenador para que el programa reconozca la placa.
Por último, para que el programa Matlab reconozca los datos enviados por el
Arduino, al principio del código de Matlab debemos asignarle de nuevo el puerto
USB utilizado anteriormente.

203
Programa para Matlab.

Al iniciar el programa en Matlab, nos aparece una barra donde nos indica la
temperatura en tiempo real.

204
5.3 INTERRUPCIONES.

Una interrupción es una operación que suspende la ejecución de un programa de modo


que el sistema pueda realizar una acción especial. La rutina de interrupción ejecuta y
por lo regular regresa el control al procedimiento que fue interrumpido, el cual entonces
continúa su ejecución.

Tipos de Interrupciones.

Las interrupciones se dividen en dos tipos las cuales son: Externas e Internas. Una
interrupción externa es provocada por un dispositivo externo al procesador. Las dos
líneas que pueden señalar interrupciones externas son la línea de interrupción no
enmascarable (NMI) y la línea de petición de interrupción (INTR).

Interrupciones Externas

Las interrupciones externas sirven para detectar un estado lógico o un cambio de estado
en alguna de las terminales de entrada de un microcontrolador, con su uso se evita un
sondeo continuo en la terminal de interés. Son útiles para monitorear interruptores,
botones o sensores con salida a relevador. En la tabla siguiente se describen las
interrupciones externas existentes en los AVR bajo estudio, en el ATMega8 se tienen 2
fuentes y en el ATMega16 son 3.

Las interrupciones externas pueden configurarse para detectar un nivel bajo de voltaje
o una transición, ya sea por un flanco de subida o de bajada. Con excepción de INT2,
que sólo puede activarse por flancos. Las interrupciones pueden generarse aun cuando
sus respectivas terminales sean configuradas como salidas.

205
Las transiciones en INT0/INT1 requieren de la señal de reloj destinada a los módulos de
los recursos (clk I/O) para producir una interrupción, esta señal de reloj es anulada en
la mayoría de los modos de bajo consumo. Por el contrario, un nivel bajo en INT0/INT1
y las transiciones en INT2 no requieren de una señal de reloj para producir una
interrupción, puede decirse que son eventos asíncronos, por lo que éstos son
adecuados para despertar al microcontrolador, sin importar el modo de reposo.

Configuración de las Interrupciones Externas

La configuración de INT0 e INT1 se define en el registro MCUCR (MCU Control


Register), los 4 bits más significativos de este registro están relacionados con los modos
de bajo consumo de energía, los 4 bits menos significativos son:

• Bits 3 y 2 – ISC1[1:0]: Para configurar el sentido de INT1 (ISC, Interrupt Sense


Control)

Definen el tipo de evento que genera la interrupción externa 1.

• Bits 1 y 0 – ISC0[1:0]: Para configurar el sentido de INT0

Definen el tipo de evento que genera la interrupción externa 0.

En la siguiente tabla se muestran los eventos que generan estas interrupciones, de


acuerdo con el valor de los bits de configuración.

x puede ser 0 ó 1

La configuración de INT2 se define con el bit ISC2 ubicado en la posición 6 del registro
MCUCSR (MCU Control and Status Register).

Habilitación y Estado de las Interrupciones Externas

Cualquier interrupción va a producirse sólo si se activó al habilitador global de


interrupciones y al habilitador individual de la interrupción de interés. El habilitador global
es el bit I, ubicado en la posición 7 del registro de Estado (SREG).

Los habilitadores individuales de las interrupciones externas se encuentran en el registro


general para el control de interrupciones (GICR, General Interrupt Control Register),
correspondiendo con los 3 bits más significativos de GICR:

206
• Bit 7 – INT1: Habilitador individual de la interrupción externa 1

• Bit 6 – INT0: Habilitador individual de la interrupción externa 0

• Bit 5 – INT2: Habilitador individual de la interrupción externa 2

No está disponible en un ATMega8.

• Bits 4 al 2 – No están implementados

• Bits 1 y 0 – No están relacionados con las interrupciones externas

El estado de las interrupciones externas se refleja en el registro general de banderas de


interrupción (GIFR, General Interrupt Flag Register), el cual incluye una bandera por
interrupción, estas banderas corresponden con los 3 bits más significativos de GIFR:

• Bit 7 – INTF1: Bandera de la interrupción externa 1

• Bit 6 – INTF0: Bandera de la interrupción externa 0

• Bit 5 – INTF2: Bandera de la interrupción externa 2

No está disponible en un ATMega8.

• Bits 4 al 0 – No están implementados

Las banderas se ponen en alto si el habilitador global y los habilitadores individuales


están activados y ocurre el evento definido por los bits de configuración. La puesta en
alto de una de estas banderas es lo que produce la interrupción, la bandera se limpia
automáticamente por hardware cuando se concluye con la atención a la interrupción. No
es necesario evaluar las banderas por software, puesto que se tiene un vector diferente
para cada evento.

207
208
Ejemplos de Uso de Interrupciones Externa

Realice un programa que conmute la salida menos significativa del puerto B (PB0) de
un ATMega8 cada vez que es presionado un botón conectado en INT0, como se
muestra en la siguiente figura

En el puerto D se habilita al resistor de pull-up para contar con un 1 lógico mientras no


se presione el botón. El otro extremo del botón se conecta a tierra para insertar un 0
lógico al presionarlo, por lo tanto, la interrupción se configura por flanco de bajada.

La conmutación de la salida se realiza en la ISR, por lo que el programa principal queda


ocioso.

209
Para la solución en ensamblador debe inicializarse al apuntador de pila, por la rutina de
atención a la interrupción. La solución en ensamblador es:

; La ISR se ubica en el vector de la interrupción, por ser la única a evaluar


.ORG 0x001 ; Vector de la interrupción externa 0
IN R16, PORTB ; Lee el último valor escrito
EOR R16, R17 ; Conmuta al LSB
OUT PORTB, R16 ; Escribe el resultado
LDI R16, 0x04 ; Inicializa al apuntador de pila
OUT SPH, R16
LDI R16, 0x5F
OUT SPL, R16
LDI R16, 0B00000010 ; Configura INT0 por flanco de bajada
OUT MCUCR, R16
LDI R16, 0B01000000 ; Habilita la INT0
OUT GICR, R16
CLR R16 ; Estado inicial de la salida
OUT PORTB, R16
LDI R17, 0B00000001 ; Para conmutar con OR exclusiva
SEI ; Habilitador global de interrupciones
RETI
Inicio: ; Inicializaciones
LDI R16, 0x00
OUT DDRD, R16 ; Puerto D como entrada
LDI R16, 0xFF
OUT PORTD, R16 ; Resistor de Pull-Up en el puerto D
OUT DDRB, R16 ; Puerto B como salida
LDI R16, 0x04 ; Inicializa al apuntador de pila
OUT SPH, R16
LDI R16, 0x5F
OUT SPL, R16
LDI R16, 0B00000010 ; Configura INT0 por flanco de bajada
OUT MCUCR, R16

210
LDI R16, 0B01000000 ; Habilita la INT0
OUT GICR, R16
CLR R16 ; Estado inicial de la salida
OUT PORTB, R16
LDI R17, 0B00000001 ; Para conmutar con OR exclusiva
SEI ; Habilitador
Lazo: RJMP Lazo ; Lazo infinito, permanece ocioso
Se observa que el trabajo del programa principal prácticamente es nulo, el recurso de la
interrupción externa es el encargado de monitorear al botón y en su ISR se realiza la
tarea deseada.
En lenguaje C es necesario incluir a la biblioteca interrupt.h para el manejo de las
interrupciones, la solución en este lenguaje es:
#include <avr/io.h>
#include <avr/interrupt.h>
ISR(INT0_vect) { // ISR de la INT0
PORTB = PORTB ^ 0x01; // OR exclusiva para conmutar al LSB
}
int main() {
DDRD = 0x00; // Puerto D como entrada
PORTD = 0xFF; // Resistor de Pull-Up en el puerto D
DDRB = 0xFF; // Puerto B como salida
MCUCR = 0B00000010; // Configura INT0 por flanco de bajada
GICR = 0B01000000; // Habilita la INT0
PORTB = 0x00; // Estado inicial de la salida
sei(); // Habilitador global de interrupciones
while(1) { // Lazo infinito, permanece ocioso
asm( “nop”);
}
}
La función sei() es para poner en alto al habilitador global de interrupciones.
La inclusión de la instrucción nop en el lazo infinito hace posible una simulación por
pasos en el AVR Studio, si se omite, al no haber instrucciones dentro del while, no es
posible simular la introducción de eventos en PD2 que produzcan la interrupción.
Aunque el código máquina generado trabaja de manera correcta en el MCU.

211
UNIDAD VI: Aplicación de microcontroladores
en ingeniería eléctrica.

6.1 PLANTEAMIENTO DEL PROBLEMA.

Hoy en día el STCM es uno de los medios de transporte de mayor afluencia en


la cd de México debido a la gran demanda que presenta, este medio de
transporte presta servicio ininterrumpido los 365 días de año a excepción de
situaciones especiales, el parque vehicular se conforma por trenes articulados
de 9 y 6 vagones, los cuales funcionan con energía eléctrica.

El recorrido del tren se concibe de manera subterránea y superficial, además


cuenta con 12 estaciones y una décima tercera en construcción.

Hasta el día de hoy el STCM tiene 41 años de servicio, en los cuales ha existido
la modernización de su infraestructura, pero en años recientes ha habido un
rezago considerablemente notorio, ya que la mayoría de los sistemas utilizados
actualmente son obsoletos o se encuentran próximos a desaparecer, en los
cuales el aspecto del cuidado de la energía eléctrica ha sido tomado muy poco
en consideración, y se puede percatar que se desaprovechan grandes
cantidades de energía eléctrica en el rubro de la iluminación, debido a que al ser
un medio de transporte subterráneo y superficial no siempre necesita la misma
intensidad luminosa fuera de los túneles que dentro de los mismos, esto lleva
como consecuencia la disminución de vida útil de las luminarias ya que se
encuentran encendidas en situaciones y tiempos inútiles, generando consumos
y gastos innecesarios al mantener estas encendidas sin importar las condiciones
externas del recorrido.

La siguiente figura muestra el recorrido superficial del convoy con las luces
interiores encendidas a media tarde.

212
El tipo de luminarias utilizadas dentro de los vagones del metro se compone de
gabinetes con 1 lámpara fluorescente tipo t8, además lleva un difusor, que
permite entre la protección de la propia lámpara, la difusión del flujo luminoso
dentro de esta.

La siguiente figura muestra la lámpara fluorescente tipo t8 dentro de su gabinete


con su respectivo difusor.

El control que se tiene sobre la iluminación dentro de los vagones del


metro, es nulo, ya que siempre están encendidas, ya sea en sus primeras
horas de servicio, pasando por la mañana, medio día, tarde hasta el
anochecer, lo cual representa en horas de luz, gastos innecesarios de
energía eléctrica.

Finalmente se tiene otro factor que se ha venido acrecentando en tiempos


recientes como lo es el poco mantenimiento de las luminarias, esto repercute
indudablemente en la calidad de la iluminación que se tiene dentro de los
vagones, y como tal las consecuencias no son de gravedad pero como principal

213
sistema de transporte público vemos que su mantenimiento es nulo, al menos en
este aspecto.

Es muy raro encontrar dentro del metro algún convoy que tenga funcional su
iluminación al interior, claro a excepción de los vagones de la línea 2 modelo NM-
02 y algunos de la línea A modelo FM-95A, los modelos restantes como lo son:
NE-92,FM-86, NM-83B, NM-83A, NM-82, MP-82, NC-82, NM-79, NM-73B, NM-
73A, MP-68R96 Y MP-68R93 contienen luminarias dañadas, incluso las
lámparas de emergencia no funcionan de manera adecuada, como se puede
observar en la siguiente figura.

De llevar la misma administración de energía eléctrica, el STCM seguirá


generando pérdidas tanto monetarias como energéticas que se pueden evitar
diseñando un sistema de iluminación inteligente utilizando luminarias de tipo led
manipulado por microcontroladores.

214
6.2 ACEPTACIÓN DEL PROYECTO.

Hoy en día la energía eléctrica es parte fundamental en el desarrollo humano, es


casi tan importante como lo es el agua para los seres vivos; la unión del intelecto
humano en conjunto con sus avances científicos y tecnológicos han logrado
manipular esta energía para resolver los problemas y las necesidades a las que
el ser humano se enfrenta día con día.

En México, la competitividad en la industria que hace uso intenso de energía ha


sido impactada debido a las fluctuaciones en los precios de los energéticos,
especialmente del gas natural y de la electricidad.

La manipulación de esta energía ha llevado a desarrollar nuevas máquinas e


instrumentos de las cuales muchas de estas funcionan principalmente con
electricidad, pudiendo mencionar artículos tan básicos como lo son una
aspiradora, secadora, licuadora hasta llegar a otras máquinas más complejas
como lo son elevadores, escaleras eléctricas, horno de arco eléctrico,
transformadores de potencia etc.

En las grandes ciudades principalmente podemos observar el cambio y la


diferencia que marcan estas tecnologías, pero aun así estas no logran resolver
todas las carencias, problemas y deficiencias que existen en las ciudades y
principalmente en los medios de transporte, por otra parte, al ser de uso diario
y estar sometido a los tratos más rudos que puede haber por parte de la
población, vemos con gran frecuencia que su deterioro físico como eficaz va en
decremento a tal grado que por falta de servicio y mantenimiento falla o se vuelve
obsoleto, tal es el caso de la iluminación dentro de los vagones del Sistema de
transporte Colectivo Metro.

Idealmente el ahorro de energía eléctrica con un constante flujo luminoso se


efectuaría regulando el nivel de iluminación de las lámparas, lo cual nos lleva a
incrementar o decrementar su consumo de corriente (Para el caso de los leds),
además la comparación de los flujos de iluminación existentes tendrían que ser
monitoreados constantemente para así poder discernir entre la cantidad de
corriente necesaria que se requiere para igualar al valor de referencia base,
además debe de existir una retroalimentación que permita comparar la nueva
información de datos que afecta al sistema con los datos que provocaron el
resultado actual.

215
Dentro del desarrollo de nuevos sistemas de iluminación en los últimos años se
han venido acrecentando las tendencias por buscar dispositivos de iluminación
más eficientes con menor costo, mayor tiempo de vida, bajo mantenimiento, alta
eficiencia luminosa y sobre todo compactos.

Dentro del aspecto que abarca la viabilidad para el cambio de luminarias


convencionales por lámparas leds, se pueden encontrar diversos documentos y
trabajos que avalan y hacen favorables a los leds como futuros sistemas
predilectos de iluminación.

Se encontró que mientras que los dispositivos convencionales de iluminación


consumen grandes cantidades de energía, los leds utilizando la misma cantidad
de energía, son capaces de alimentar una gran cantidad de los mismos teniendo
como consecuencia la generación de un flujo luminoso mucho mayor con
respecto al dispositivo comparado.

El análisis de la durabilidad arrojo que en promedio la vida útil de una lámpara


convencional por mínimo es de aproximadamente 10 000 horas hasta las 30 000
horas y después puede seguir operando o simplemente fallar debido a diversos
factores, entre ellos destaca el mantenimiento, por otra parte una luminaria led
tuvo un resultado sorprendente, ya que se pudo notar que su vida útil en
promedio es de al menos 100 000 horas, esto significa que después de este
tiempo los leds no dejaran de funcionar si no que comenzara un proceso en el
cual poco a poco dejaran de emitir el flujo luminoso normal hasta que finalmente
sea nulo o muy bajo.

Dentro del estudio de costos que lleva este trabajo es posible notar que si bien
la inversión inicial es relativamente baja para los dispositivos convencionales, es
un poco alta para una lámpara led, ya que al ser una tecnología en desarrollo,
los medios por el cual ser fabrican no son los más económicos y además no son
de manufactura nacional, sino que todo es de importación lo que incrementa en
cierta cantidad su precio final.

El estudio de estos dispositivos no solo se limitan a sustituir a las luminarias


actuales de mayor popularidad sino que también buscan encontrar un modo de
control que ofrezca una estabilidad eficiente y discreta, es por esta razón que el
desarrollo de sistemas de control inteligentes se han ido estudiando y

216
desarrollando a medida que van ganando popularidad los dispositivos de
iluminación led.

Existen diversos estudios realizados que abarcan el análisis de comparación de


sistemas de iluminación convencionales contra sistemas de iluminación led,
estos hacen principal énfasis en enmarcar que dentro de las características más
destacables de los leds con respecto a luminarias convencionales se encuentra
la durabilidad de los mismos, ya que al ser dispositivos que están sometidos a
un control de corriente constante y están aislados de disturbios que existen
dentro de la señal de alimentación no tienden a fallar por disturbios pequeños en
la red, sin embargo esto se logra por medio de una fuente regulada que
preferentemente es una fuente conmutada.

Los dispositivos de control como lo son los microcontroladores, son empleados


en la elaboración de sistemas de control de baja y alta potencia, por mencionar
solo una de tantas aplicaciones, que tienen estos.

El desarrollo de los modelos de programación con lógica difusa o PID aplicados


a sistemas que atienden situaciones específicas apoyados por el uso de
microcontroladores, nos proporcionan un monitoreo permanente, exacto y
confiable, siendo el microcontrolador quien será responsable de procesar y
controlar los datos correspondientes.

El objetivo es elaborar un controlador PI que permita regular la iluminación dentro


de los vagones del transporte colectivo metro utilizando leds de potencia,
mediante la programación en C, basándose en el microcontrolador JM60 para
que funcione como controlador y administre la energía y niveles de iluminación
adecuados para los vagones

El control automático asienta sus bases esencialmente en el concepto de


realimentación. Este concepto se concreta en una estructura de control en la cual
el controlador se puede entender como un operador, que en función de la salida
deseada, y la salida real medida, proporciona la acción de control a aplicar sobre
el sistema.

Si bien existen muchos tipos de control basados en este principio y los podemos
clasificar en clásicos e inteligentes como se describen a continuación.

217
Controladores clásicos.

El control proporcional, derivativo e integral (PID), es el que mayor implantación


tiene en la industria de procesos. Dicho control consiste esencialmente en
obtener la acción de control como la suma de tres términos:

Proporcional – Derivativo – Integral.

Se pueden obtener variaciones en este esquema, consistentes en la no


introducción de los términos derivativo e integral; en dicho caso el control
coincide con el llamado control proporcional. Si solamente se prescinde de la
acción integral, el control se denomina control proporcional derivativo (PD).

Si, por el contrario, el único término que desaparece es el derivativo, el control


se denomina proporcional integral (PI).

Según una estimación dada por Amstrom: El 95% de los bucles de control en la
industria son del tipo PID, y fundamentalmente PI. La amplia implantación del
control PID en la industria, se debe fundamentalmente a los siguientes factores:

- La actuación en función de la señal de error proporciona una estructura de


realimentación negativa, que como es conocido, permite obtener en muchas
ocasiones un comportamiento satisfactorio del sistema a pesar de la existencia
de perturbaciones e incertidumbres sobre el modelo del sistema.

- El término derivativo proporciona cierta anticipación sobre la respuesta al


sistema.

- El término integral permite eliminar el error en régimen permanente.

- El control PID obtiene resultados satisfactorios para una amplia gama de


procesos.

- Existen sencillas reglas heurísticas que permiten obtener los parámetros del
controlador PID.

Dichas reglas hacen posible el ajuste del controlador, sin presuponer un gran
conocimiento en teoría de control automático por parte del operador.

218
- En estructuras de control más sofisticadas, donde exista cierta organización
jerárquica, el controlador PID puede utilizase a un nivel bajo.

- El controlador PID se puede adquirir como un módulo compacto, donde los


distintos parámetros del controlador se pueden ajustar manualmente.
Actualmente muchos de los PIDs industriales proporcionan ciertas opciones de
auto sintonía.

Controlador P

En ciertos tipos de procesos es posible trabajar con una ganancia elevada sin
tener ningún problema de estabilidad en el controlador. Muchos procesos que
poseen una constante de tiempo dominante o son integradores puros caen en
esta categoría. Una alta ganancia en un controlador P significa que el error en
estado estacionario será pequeño y no se necesitara incluir la acción integral. Un
ejemplo característico en el que no es muy relevante el error en régimen
permanente, es el bucle interno de un controlador en cascada; el que la variable
que se ha tomado como secundaria no alcance su valor no debe preocupar
excesivamente.

Controlador PD.

En líneas generales, el control PD puede ser apropiado cuando el proceso a


controlar incorpore ya un integrador. Por ejemplo, un proceso térmico con un
buen aislamiento opera de forma análoga a un integrador. Casi toda la energía
que se le suministra se emplea en elevar la temperatura del horno ya que las
pérdidas son despreciables. Con esta clase de procesos es posible trabajar con
ganancias elevadas en el controlador sin que sea necesario introducir la acción
integral. La acción derivada es sensible al ruido ya que a altas frecuencias tiene
una ganancia relativamente elevada, por lo tanto, en presencia de altos niveles
de ruido se debe limitar dicha ganancia, o prescindir de la acción derivativa.

Asimismo, en procesos con grandes tiempos muertos la acción anticipativa del


término derivativo deja de ser efectiva ya que la aproximación es lineal, es
decir:

219
Tan solo tiene validez para pequeños valores de Td. Debido a los tiempos
muertos hay un retardo antes de que los efectos de cualquier acción de control
se puedan detectar sobre la variable de proceso. Es, por lo tanto,
considerablemente mejor con esta clase de procesos, intentar predecir su acción
futura, analizando la señal de control en combinación con un modelo del proceso.

Controlador PI.

Es la estructura más usual del controlador. La introducción de la acción integral


es la forma más simple de eliminar el error en régimen permanente. Otro caso
en el que es común utilizar la estructura PI es cuando el desfase que introduce
el proceso es moderado (procesos con una constante de tiempo dominante o
incluso integradores puros). La acción derivativa más que una mejora en esta
situación es un problema ya que amplifica el ruido existente. También se
recomienda la acción PI cuando hay retardos en el proceso, ya que como se ha
visto en el punto anterior, la acción derivativa no resulta apropiada en este tipo
de sistemas. Un tercer caso en el que se deberá desconectar la acción derivativa
es cuando el proceso está contaminado con niveles de ruido elevados. Se
deberá filtrar el ruido existente, pero en algunas ocasiones esto no es suficiente.

Controlador PID.

La acción derivativa suele mejorar el comportamiento del controlador, ya que


permite aumentar las acciones proporcional e integral. Se emplea para mejorar
el comportamiento de procesos que no poseen grandes retardos pero que si
presentan grandes desfases. Este es el caso típico de procesos con múltiples
constantes de tiempo.

Controladores inteligentes.

Lógica difusa.

La lógica difusa es una rama de la inteligencia artificial que se funda en el


concepto "Todo es cuestión de grado", lo cual permite manejar información vaga
o de difícil especificación, si quisiéramos hacer cambiar con esta información el
funcionamiento o el estado de un sistema específico [X]. Es entonces posible
con la lógica difusa gobernar un sistema por medio de reglas de 'sentido común'
las cuales se refieren a cantidades indefinidas.

220
Las reglas involucradas en un sistema difuso, pueden ser aprendidas con
sistemas adaptativos que aprenden al ' observar ' como operan las personas los
dispositivos reales, o estas reglas pueden también ser formuladas por un experto
humano. En general la lógica difusa se aplica tanto a sistemas de control como
para modelar cualquier sistema continuo de ingeniería, física, biología o
economía.

Redes neuronales.

Debido a su constitución y a sus fundamentos, las redes neuronales artificiales


presentan un gran número de características semejantes a las del cerebro. Por
ejemplo, son capaces de aprender de la experiencia, de generalizar de casos
anteriores a nuevos casos, de abstraer características esenciales a partir de
entradas que representan información irrelevante, etc. Esto hace que ofrezcan
numerosas ventajas y que este tipo de tecnología se esté aplicando en múltiples
áreas.

Existen numerosas formas de definir a las redes neuronales; desde las


definiciones cortas y genéricas hasta las que intentan explicar más
detalladamente qué son las redes neuronales. Por ejemplo:

1) Una nueva forma de computación, inspirada en modelos biológicos.

2) Un modelo matemático compuesto por un gran número de elementos


procesales organizados en niveles.

3) Un sistema de computación compuesto por un gran número de elementos


simples, elementos de procesos muy interconectados, los cuales procesan
información por medio de su estado dinámico como respuesta a entradas
externas.

Elección del tipo de controlador.

Es frecuente el diseño de un controlador PID teniendo en cuenta exclusivamente


el seguimiento de la referencia. En el diseño se debe considerar no solo el
seguimiento de referencia sino también el rechazo de perturbaciones y ruidos en
la medida.

221
El controlador PID básico combina las acciones proporcional, derivativa e integral
mediante el siguiente algoritmo de control:

Como es bien sabido, el término proporcional contribuye a la reducción del error


en régimen permanente. Ahora bien, la ganancia requerida para que dicho error
se reduzca hasta los niveles deseados con la aplicación de un control
proporcional puede ser incompatible con las especificaciones de sobre oscilación
y estabilidad relativa del sistema. La acción integral tiene un efecto cualitativo
sobre el error en régimen permanente, ya que garantiza la anulación de este
cuando la referencia es de tipo escalón. El término derivativo permite una cierta
predicción del futuro error y por tanto juega un papel anticipativo.

Sin embargo la anticipación de la situación que se viene a presentar no siempre


puede ser predicha por la acción derivativa, ya que para la situación en donde
va a estar implementado el control contiene una cierta variación del valor de
referencia difícil de anticipar, lo que significa que si la señal de control va siendo
sobre amortiguada debido a la predicción del control derivativo cuando se pase
de una situación cercana al valor de referencia a una muy lejana debido al
cambio repentino de la condición censada es muy probable que se presenten
sobre oscilaciones muy severas, que obviamente tendrán cambios muy abruptos
para los cuales el sistema no estaba preparado.

De esta manera y considerando las oscilaciones que se pueden presentar debido


a los cambios para los cuales no estaba preparado el sistema de control, se
continua considerando la señal de error actual y una condición de estado
anterior, lo que ayuda al sistema de control a seguir con una cierta lógica de
operación, ya que las repuesta de control solo estará dada por dichos parámetros
y no por condiciones supuestamente probables, por esta razón el control ideal y
más adecuado es del tipo Proporcional e integral (PI).

222
6.3 SUPERVISIÓN.

Las consideraciones anteriores sirven como precursor para poder describir el


sistema que se tiene planeado desarrollar, este desarrollo comprende 5 etapas,
las cuales se muestran en la siguiente figura formando un ciclo cerrado:

Etapa 1:

Está conformada por un sensor (fotorresistencia) el cual, al incidir un haz


luminoso sobre este, tendrá un cambio en la resistencia interna, la cual atiende
las especificaciones del diseño, la magnitud que la fotorresistencia obtenga esta
en relación directa al tiempo de incidencia y a la intensidad máxima de luz que
incide sobre el sensor, principalmente.

Etapa 2:

La magnitud de esta variación será ingresada al microcontrolador por medio de


un pin que se denominó como entrada y cuya función es convertir esta señal en
un dato hexadecimal, que obviamente tendrá variaciones con respecto al tiempo
y la intensidad luminosa que incida sobre el sensor, es importante mencionar
que el tiempo con el cual se realiza una nueva conversión va en relación al
control PI que en conjunto arrojaran un resultado diferente por cada conversión
en el tiempo de muestreo indicado.

223
Etapa 3:

Esta etapa es en donde se aplica de lleno el control PI ya que el dato obtenido


por medio de la conversión se compara con un “punto de referencia”, este dato
es un valor al cual se debe acercar o igualar la iluminación requerida, el control
PI incluye como en la etapa anterior un tiempo de muestreo que permite la
conversión e interpretación de los datos para que se procesen y se obtenga el
nuevo dato que se envía a la etapa 4 para su uso, sin embargo aquí mismo se
contemplan los resultados obtenidos del error anterior y el dato corregido que se
envió previo al nuevo sondeo, de esta forma siempre se toman en cuenta las
condiciones anteriores para el procesamiento de nuevos datos.

Etapa 4:

Esta etapa se enfoca principalmente al control del PWM, de acuerdo al dato que
envíe el control PI, el modulo del PWM solo se encargara de generar la señal
cuadrada correspondiente para enviarla al driver que controla a los leds

Etapa 5:

Esta etapa, es una etapa de potencia ya que con el dato adquirido del PWM el
driver se encargara de brindar una nueva intensidad luminosa por medio del
incremento o decremento de la corriente que circula por la lámpara de leds.

De esta manera se vuelve a repetir el ciclo volviendo el sensor a adquirir un


nuevo dato con la intensidad luminosa actual.

Normatividad.

La norma vigente de iluminación que se utiliza para la diferentes áreas de trabajo


es la Norma Oficial Mexicana NOM-025-STPS-2008, la cual hace referencia a
los porcentajes y niveles de iluminación que son óptimos, para los distintos tipos
de áreas, los niveles de iluminación están sujetos a los parámetros del
diseñador, pero no debe de perderse de vista la norma en vigencia.

Dentro del desarrollo de un sistema de control de iluminación, la normatividad


que se llegue a aplicar al sistema, tendrá la capacidad de acoplarse al nivel de
iluminación deseado, debido a que el valor conocido como “set point” tiene la

224
característica de adquirir cualquier valor que se le asigne, traducido de la
intensidad luminosa que se desee proporcionar.

Mientras más elevado sea el valor del “set point” mayor será la intensidad
luminosa proporcionada por la lámpara, de forma inversa un valor menor
asignado en el “set point” proporcionara una intensidad luminosa menor.

Existen otras normas que ayudan al diseño y certificación que se utilizan en


sistemas de iluminación led, como las siguientes:

- UNE-EN 60598-2-3 (Luminarias led)

- UNE-EN 60598-2-5 (Proyectores led)

- UNE-EN 62031 (Leds)

Leds de potencia.

Los leds de potencia son muy diferentes a los leds estándar en cuanto a sus
características eléctrica y técnicas, estos emiten una gran cantidad de flujo luminoso
que es cientos de veces mayor a la de los leds normales, a pesar de esto, su consumo
eléctrico es elevado en comparación de los normales, ya que llegan a consumir de 350
mA hasta 3.5 A para un solo led.

Se pueden manejar arreglos en serie como los leds normales, la única diferencia es la
tensión que se debe aplicar para lograr hacer circular la corriente necesaria para hacer
operar el led.

Una característica importante de estos leds es que al hacer circular a través de estos
una corriente elevada, sufren un calentamiento excesivo, el cual se controla con
disipadores de calor, de no hacerlo se estaría degradando el led y por consecuente
reduciendo su vida útil.

Lámpara led de prueba.

La lámpara led que se utilizara para probar el control PI está compuesta por 7 leds de
potencia de 1 watt, que consumen 350 mA de corriente máxima. Los leds se montaron
sobre un disipador de calor para evitar un sobrecalentamiento.

225
Control de la iluminación.

El control se realizara mediante un driver que es un convertidor dc-dc tipo buck-boost.


Este “driver” como se le conoce usualmente tiene destinado una terminal la cual admite
una señal de PWM la cual permite valores de 0 a 5 volts como máximo para poder
regular el paso de la corriente atreves de los leds.

El driver modelo AMLDL-3035Z tiene las características de proporcionar hasta


400 mA y una tensión de 8 a 30 volts, estas características se acoplan a una
carga de 7 leds de potencia que consuman nominalmente 350 mA como máximo
para evitar sobrecalentamientos y una degradación potencialmente peligrosa.
Para controlar un arreglo de 7 leds de potencia se propone la siguiente
configuración.

226
6.4 PRUEBAS DE ACEPTACIÓN

Prueba del sistema de control PI.

La prueba del sistema de control PI a través del microcontrolador se realizó en ausencia


de luz y en presencia de la misma, simulando la entrada y salida a un túnel, esto tiene
como finalidad variar el flujo luminoso que incide en el sensor, finalmente el dato
adquirido repercute en el resultado de la ecuación de control PI que se encuentra
almacenada en el programa del microcontrolador, asignando diferentes datos al módulo
de PWM y por consecuente variando la intensidad luminosa, como se muestra:

Sondeo de la señal de salida del PWM

Las diferentes condiciones que se pueden presentar las resumiremos en 4 estados, al


mínimo posible, 40%, 80% y a la máxima intensidad, esto lo podemos sondear por
medio de un osciloscopio, en la terminal de salida del microcontrolador que en este caso
es la terminal número 22 del microcontrolador, como se ilustra en la siguiente figura.

227
Respuesta del algoritmo de control PI.

Para el análisis de este nos enfocaremos en la parte en donde el dato corregido es


enviado al módulo de PWM, para lo cual utilizamos el valor de 5CH, que detecta el ADC,
expresado en voltaje equivalente a 1.812 v, esto nos indica que el valor medido actual
es menor al valor de referencia propuesto, esto cumple la primera condición, iniciándose
así la ecuación de control PI, esta ecuación oscilara en un ciclo cerrado hasta que el
valor medido alcance al valor de referencia, en la prueba se sondearon 150 iteraciones
con el fin de acercar el valor medido al valor de referencia como se muestra a
continuación:

228
Como se puede notar en la gráfica anterior, las oscilaciones se van atenuando hasta
ser constantes cuando llegamos a la iteración 83, esto significa que el control PI estará
enviando 100 datos con oscilaciones de 10 %.

Pruebas al mínimo de intensidad luminosa.

Cuando decimos que es al mínimo de intensidad luminosa se entiende que la lámpara


está proporcionando un mínimo de flujo luminoso, esto se debe a que los datos
obtenidos por parte de ADC muestran que es mucho mayor flujo luminoso proveniente
del exterior al valor de referencia, proporcionando por consecuente un error muy
pequeño, esto significa que el dato enviado al módulo de PWM es muy pequeño y esto
se refleja automáticamente en una intensidad luminosa baja.
La siguiente figura muestra la respuesta ante un dato ADC mayor al dato de referencia.

229
La siguiente figura muestra la respuesta de la corriente en el driver dada la respuesta
del PI actual.

Decimos que para este caso si se cumple el control PI ya que la señal azul es la sonda
que está conectada en la entrada del sensor, y da un valor cercano a los 2.23 volts, que
es muy aproximado al valor de referencia que es 2.35 volts.

La siguiente figura muestra la lámpara emitiendo el mínimo de su intensidad total.

230
Pruebas al 40% de intensidad luminosa.
Un valor de 40% es cuando el modulo del microcontrolador envía una señal con voltaje
RMS de 0.84 volts, del valor total que está programado para suministrar, además
significa que; las condiciones externas son buenas pero no las óptimas, así que se
necesita el 40% de la capacidad total de la lámpara para suministrar un flujo luminoso
optimo dentro del vagón.

La siguiente figura muestra al módulo de PWM suministrando un 40% de su capacidad


para obtener una intensidad luminosa óptima.

Una vez más se puede corroborar que el control PI está igualándose al valor de
referencia, obsérvese que la sonda del canal 2 del osciloscopio sigue manteniendo un
voltaje de 2 volts, buscando la igualación al valor de referencia de 2.35v.
La siguiente figura muestra la lámpara emitiendo el 40% de su intensidad total.

231
Pruebas al 80% de intensidad luminosa.

Un 80% de intensidad luminosa proporcionada por el módulo PWM significa que las
condiciones externas ya no son tan favorables, en otras palabras significa que ya casi
no existe luz externa y consecuentemente se necesita más iluminación.

El voltaje que el módulo de PWM al 80% de su capacidad es de 1.68 volts, como se


muestra en la siguiente figura.

Volvemos a observar que el comportamiento es el esperado y el control PI busca una


vez más igualarse al valor de referencia mediante una iluminación más intensa por
medio de la lámpara de leds, como se muestra a continuación.

232
Pruebas al máximo de la intensidad luminosa.

Solo queda probar el último caso; como tal nos indica que se está utilizando el dato
máximo permitido para generar la máxima intensidad luminosa en la lámpara led,
significa que se ha sondeado el flujo exterior y este indica una ausencia total de luz, por
lo tanto el error de comparación es grande, por consecuente se envían datos cercanos
al máximo permitido para comenzar a hacer el error más pequeño.

El valor del voltaje que emite en módulo de PWM en estas condiciones es de 2.1 volts
lo que provoca que el driver suministre los 350 mA para que las lámparas emitan su
máxima intensidad buscando igualar al dato de referencia como se puede ver una vez
más en la siguiente figura:

La siguiente figura muestra la lámpara led suministrando la máxima intensidad luminosa

233
6.5 Demostración y exhibición del proyecto.

La demostración y exhibición del proyecto se realizó en el salón de clase ante los


compañeros de grupo e invitados de la academia de electrónica, los cuales participaron
como evaluadores del proyecto.

El objetivo del proyecto es diseñar un control PI que permita mantener la intensidad


luminosa dentro del vagón del convoy del STCM con una intensidad luminosa constante,
teniendo en cuenta las condiciones externas de iluminación, de tal manera que cuando
la intensidad externa tenga un valor elevado la intensidad interna en el vagón disminuya
logrando así una iluminación adecuada, constante y que reduzca el consumo energético
interno del vagón en situaciones y horarios diferentes, el diagrama de bloques del
sistema es el siguiente:

234
La demostración del sistema de control PI a través del microcontrolador se realizó en
ausencia de luz y en presencia de la misma, simulando la entrada y salida a un túnel,
como se muestra en la siguiente figura.

Con el salón plenamente iluminado, la siguiente figura muestra la lámpara emitiendo el


mínimo de su intensidad total.

235
A continuación se cubrieron algunas ventanas del salón, para disminuir la entrada de
luz. La siguiente figura muestra la lámpara emitiendo el 40% de su intensidad total.

Posteriormente se cubrieron más ventanas para disminuir más la intensidad de luz que
entraba al salón, haciendo que la lámpara brillara a un 80 % de su capacidad, como se
muestra a continuación.

236
Finalmente se cubrió la totalidad del salón impidiendo que entrara la luz exterior, para
que la lámpara brillara a su máxima intensidad como se muestra en seguida.

El trabajo en grupos cooperativos y con tareas centradas en el aprendizaje por


investigación, trata de fomentar el aprendizaje activo y lo más autónomo posible por
parte del alumnado, que se ve confrontado a tomar decisiones en torno a cómo proceder
en el aprendizaje, qué recursos utilizar, cómo seleccionar y elaborar la información
encontrada, cómo organizar y repartir el trabajo entre los miembros del grupo y cómo
presentar el producto resultante.

Con esto se pretende llevar a cabo una educación en el aula centrada en el estudiante
y con el acompañamiento del docente, para que el alumno se vea motivado a estudiar
y cree su propio conocimiento.

Contribuir a desarrollar en el alumno las habilidades en el manejo de la expresión visual


y escrita, con una aplicación práctica del microcontrolador y contribuir al bienestar de
la sociedad.

Yo creo que todos los procedimientos para evaluar contribuyen para recabar algunos
datos, pero lo más importante es el enfoque y la combinación de diversos
procedimientos de evaluación para obtener una aproximación más cercana del
desarrollo de las competencias de los estudiantes.

237
Bibliografía.

Espinosa, F. S. (2012). Los microcontroladores AVR de Atmel. Oaxaca, México:


Universidad Tecnológica de la Mixteca.
Martínez Garza, J., & Olvera Rodríguez, J. A. (2000). Organización y arquitectura de
computadoras. México: Prentice Hall.
Tocci, R. J., Widmer, N. S., & Moss, G. L. (2016). Sistemas Digitales Principios y
Aplicaciones. México: Prentice Hall.
Tojeiro Calaza, G. (2015). Taller de Arduino un enfoque práctico para principiantes.
México: Alfaomega.
Torrente Artero, Ó. (2013). ARDUINO Curso práctico de formación. México:
Alfaomega.

238

También podría gustarte