Sei sulla pagina 1di 247

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 2017.

FECHA DE APLICACIÓN: DESDE AGOSTO DE 2017.

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………………………………………..150
3.4 Modelo de programación…………………………………………………………..157

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


4.1 Modos de direccionamiento……………………………………………………….160
4.2 Herramientas de programación……………………………………………………168
4.3 Instrucciones………………………………………………………………………174
4.4 Ejemplos de programación básica………………………………………………183

UNIDAD V: Programación de periféricos……………………………………………186


5.1 Puertos Digitales…………………………………………………………………186
5.2 Adquisición de señales analógicas………………………………………………195
5.3 Interrupciones……………………………………………………………………212

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


6.1 Planteamiento del proyecto………………………………………………………221
6.2 Aceptación del proyecto…………………………………………………………224
6.3 Supervisión………………………………………………………………………232
6.4 Pruebas de aceptación……………………………………………………………236
6.5 Demostración y exhibición del proyecto……………………………………...…243
Bibliografía …………………………………………………………………………247

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)?

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

22
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

Respuesta 21410 = D616.

23
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.

25
En resumen.

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).

26
Quedando la parte fraccionaria de la siguiente manera:

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.

31
Por ejemplo si:

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.

32
Ejemplo.

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.

43
Complemento a 16.

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.

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

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 6 D(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.
̅ 𝐵 𝐶 ) y (A.B.C). Dentro de
El grupo horizontal del lado izquierdo combina las celdas (𝐴
este 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

125
sincrónicas. En 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
̅ un uno, lo que
entrada. Para realizar una operación de lectura, se pone la línea R / 𝑊
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.

El proceso de comunicación en el bus I2C es:

• El maestro comienza la comunicación enviando un patrón llamado “condición


de inicio”. Esto alerta a los dispositivos esclavos, poniéndolos a la espera de
una transacción.
• El maestro se dirige al dispositivo con el que quiere hablar, enviando un byte
que contiene los siete bits (A7-A1) que componen la dirección del dispositivo
esclavo con el que se quiere comunicar, y el octavo bit (A0) de menor peso se
corresponde con la operación deseada (L/E), lectura=1 (recibir del esclavo) y
escritura=0 (enviar al esclavo).
• La dirección enviada es comparada por cada esclavo del bus con su propia
dirección, si ambas coinciden, el esclavo se considera direccionado como
esclavo-transmisor o esclavo-receptor dependiendo del bit R/W.
• Cada byte leído/escrito por el maestro debe ser obligatoriamente reconocido
por un bit de ACK por el dispositivo maestro/esclavo.
• Cuando la comunicación finaliza, el maestro transmite una “condición de para
detener” para dejar libre el bus.

144
Las transacciones en el bus I2C tienen el siguiente formato:

| start | A7 A6 A5 A4 A3 A2 A1 R/W | ACK | … DATA … | ACK | stop | idle |

145
Cuando los datos son enviados por SDA, los pulsos de reloj son enviados por SCL
para mantener al maestro y el esclavo sincronizados. Puesto que los datos son
enviados como un bit en cada pulso de reloj, la transferencia de datos es un octavo la
frecuencia de reloj.

La librería para manejar el bus I2C en Arduino es Wire

Esta librería permite comunicar con I2C/TWI Arduino con otros dispositivos. En las
placas Arduino con el diseño R3 (1.0 terminal de salida), la SDA (línea de datos) y
SCL (línea de reloj) están en los pines cerca del pin AREF.

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.

146
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.

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).

147
El funcionamiento para un envío de un maestro es el siguiente:

• Se habilita el chip al que hay que enviar la información mediante el CS


(Opcional).
• Se carga en el buffer de salida el byte a enviar.
• La línea de reloj empieza a generar la señal cuadrada donde normalmente por
cada flanco de bajada se pone un bit en MOSI.
• El receptor normalmente en cada flanco de subida captura el bit de la línea
MISO y lo incorpora en el buffer.

Se repite el proceso 8 veces y se ha transmitido un byte. Si se ha terminado de


transmitir se vuelve a poner la línea CS en reposo. Hay que tener en cuenta que a la
vez que el maestro está enviando un dato también lo recibe, así que, si el esclavo ha
depositado algún byte en el buffer de salida, este también será enviado y recibido por
el maestro, comunicación full-dúplex.

La señal de reloj es generada por el maestro y la línea SS normalmente se mantiene


en estado alto y se activa con estado bajo, lo que despierta al esclavo seleccionado.
Cuando se termina la transferencia la línea se pone en estado alto y el esclavo se
desactiva.

148
A diferencia de otros buses el SPI no implementa el nivel del enlace entre dispositivos,
es decir no hay un campo para la dirección ni un campo para ACK, etc. El SPI se
comporta como un registro de desplazamiento donde a cada ciclo de reloj se captura
un bit. No es necesario hacer un direccionamiento de los dispositivos ya que mediante
la señal CS, habilitamos al integrado al que queremos enviar los datos.

Ventajas de SPI sobre I2C.

• I2C No es Full-Dúplex por lo que no permite envíos y recepciones al mismo


tiempo.
• I2C un poco más complejo que SPI.
• I2C no tiene control de errores, por ejemplo, mediante paridad. Aunque se
puede realizar por Software.
• Velocidades de comunicación relativamente elevadas. En el caso de Arduino
de hasta 8 MHz.
• Completo control sobre la trama de bits al no exigir direccionamiento ni ACK.
• Se requiere un hardware sencillo (económico)
• Requiere un menor consumo y menor electrónica de conexión que el I2C
• Como el reloj lo proporciona el maestro, los esclavos no necesitan osciladores
(más barato)

Desventajas de SPI:

• No hay control del flujo por hardware.


• Las comunicaciones tienen que estar perfectamente establecidas de
antemano. No puedes enviar mensajes de diferentes longitudes cuando
convenga.
• No hay confirmación de la recepción como ocurre en I2C con el ACK. Es decir,
no sabemos si el mensaje a llegado al destino.
• Usa más pines que otros buses, ya que necesita uno por cada esclavo. Eso
implica que no hay direccionamiento en la propia trama. A menos que se
diseñe por software.
• Funcionamiento a distancias cortas
• Maestro único y casi sin posibilidad de maestro múltiple

Tanto el bus SPI como el I2C son llamados buses de tarjeta, es decir están pensados
para trabajar a distancias pequeñas del entorno de una tarjeta, en caso de necesitar
un bus serie a larga distancia hay que ir a buses de campo como RS485, CAN, etc.

149
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

150
operandos de la instrucción. El resultado se deja en el lugar de donde se tomó el
primer 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

151
entorno, y en sus patillas de salida podremos conectar actuadores para que el
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.

Para el proyecto de fin de curso se ha seleccionado el Arduino Uno rev3 basado en el


microcontrolador ATmega328p, debido principalmente a su costo, la gran cantidad de

152
información existente sobre Arduino y la gran cantidad de opciones que tiene a la hora
de desarrollar un sistema.

Las características principales de la placa Arduino Uno rev3 son:

Microcontrolador ATmega328P
Voltaje de funcionamiento: 5V
Voltaje de entrada recomendado: 7-12V
Voltaje de entrada mínimo-máximo: 6-20V
Pines digitales I/O:14( de los cuales 6 pueden usarse como salida PWM)
Entradas analógicas: 6
Corriente DC para I/O Pin: 20mA
Corriente DC para 3.3V PIN: 50mA
Memoria FLASH de 32 KB(ATmega328P) de los cuales 0.5 KB son usados por el
bootlader
Memoria SRAM de 2 KB(ATmega328P)
Memoria EEPROM de 1 KB (ATmega328P)
Velocidad de reloj de 16MHz

Los pines de la placa Arduino y sus funciones son las siguientes:

VIN: Es el pin de entrada de la alimentación cuando se usa una fuente externa de


alimentación. En el caso de que alimentación sea por el puerto USB, se puede
acceder a este voltaje de alimentación a través de este pin.

5V: Este pin de salida proporciona 5V desde el regulador de la placa. La placa puede
ser alimentada con y desde DC power jack (7-12V), el conector USB (5V) o el pin VIN
(7-12V). No debe ser alimentada la placa desde este pin pues puede ser dañada.

3.3V: Parecido al anterior pin solo que este suministra 3.3V. Tiene una corriente
máxima de 50 mA.

GND: Pines de Tierra.

153
IOREF: Este pin proporciona el voltaje de referencia con el que Arduino Uno está
trabajando. La configuración puede ser 3.3V o 5V.

AREF: Voltaje de referencia para los pines analógicos.

RESET: Se emplea para resetear o detener el microcontrolador.

Las funciones de algunos pines son:

Pines Serial: 0(RX) y 1(TX). Usados para recibir y transmitir por el puerto serial
datos.

Estos pines están conectados a los correspondientes pines ATmega8U2 US-a-


TTL serial chip.

Interrupciones externas: 2 y 3. Estos pines están configurados para


interrupciones externas en algunos de sus modos.

PWM: Los pines 3, 5, 6, 9,10 y 11. Proporciona una salida PWM de 8 bits.

SPI: Los pines 10(SS), 11(MOSI), 12(MISO), 13 (SCK). Estos pines apoyan las
comunicaciones SPI basándose en la librería SPI.

LED: Pin 13.Cuando el valor es alto el LED está encendido, cuando es bajo
está apagado.

I2C: A4 o SDA pin y el A5 o SCL pin. Soportara una comunicación I2C usando
la librería wire.

A continuación se muestra la relación de pines entre el microprocesador ATmega328p
y la placa Arduino UNO rev3.

154
A continuación se describe el software que utilizaremos para el desarrollo del
proyecto.

Arduino IDE

Este es el entorno de programación que usa Arduino para escribir, compilar y


descargar el código en sus placas, que se usara en los proyectos.

Este entorno de programación tiene entre sus puntos a favor que facilita la
implementación de un gran número de bibliotecas, que desarrollan numerosas
funciones matemáticas o de comunicación para su aplicación en el código. Cabe
destacar que es un software libre y la existencia de un puerto terminal serie para la
comunicación con la placa que es muy útil a la hora de probar que el código cumpla
con los esperado.

A continuación se muestra la arquitectura interna del ATmega328p.

155
A continuación se muestra la arquitectura interna de la CPU AVR del ATmega328p.

156
3.4 MODELO DE PROGRAMACIÓN.

157
158
159
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.

160
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.

161
162
163
164
165
Modos de Direccionamiento para la
memoria de programa.

Instrucciones
• Directo
• Indirecto
• Relativo

166
167
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.).

168
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.

169
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.

170
A continuación seleccionamos la opción construir (Build), que nos mostrara la
siguiente pantalla.

Al presionar ejecutar presentara la siguiente pantalla.

171
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.

172
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.

173
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.

174
175
176
177
178
179
180
181
182
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;
LDS R17, $0113;
ADD R16, R17;
STS $0114, R16;
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;
LDS R17, $0113;
SUB R16, R17;
STS $0114, R16;
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;
LDS R19, $0113;
MUL R18, R19;
STS $0114, R1;
STS $0115, R0;
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

183
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

184
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

185
UNIDAD V: Programación de periféricos.
5.1 Puertos Digitales.

Los microcontroladores tienen puertos de entrada y salida para comunicación


con el mundo exterior. El ATmega328p como cualquier otro microcontrolador
tiene registros, algunos de estos registros están relacionados con los puertos
de entrada/salida, cada puerto tiene un nombre específico y sus registros
asociados, de hecho, el 328p tiene el puerto B, C y D, y cada puerto un
diferente número de pines (Esta es una restricción del paquete de 28 pines
PDIP y no desde el microcontrolador, ya que un PDIP 40 pines, por ejemplo,
tiene 4 puertos con los 8 bits cada uno), el único puerto que tiene el total de sus
8 pines de entradas/salidas es PORTD.

La mayoría de los pines de los microcontroladores son multipropósito, es decir,


en función de su configuración se comportan de una forma u otra, tal y como se
muestra en la figura.

A continuación se muestra el diagrama a bloques del Atmega 329P

186
187
188
189
190
191
192
193
194
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.

195
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.

196
Convertidor analógico digital del AVR
El Convertidor Analógico Digital del ATmega32 es por Aproximaciones Sucesivas con
una resolución de 10 bits. El ADC se conecta a un multiplexor de 8 canales análogicos
el cual permite 8 voltajes de entrada en una solo extremo, construido en los pines del
puerto A. El voltaje de entrada de una solo extremo se refiere a 0 V (GND).

El dispositivo también soporta 16 combinaciones de voltajes de entrada diferenciales.


Dos de las entradas diferenciales (ADC1, ADC0 y ADC3, ADC2) están equipadas con
una etapa de ganancia programable, proveyendo pasos de amplificación de 0dB (1x),
20dB (10x), o 46dB (200x) en el voltaje de entrada diferencial antes de la conversión
del A/D. Siete canales de entrada diferenciales análogicoss comparten una terminal
común negativa (ADC1), mientras que las otras entradas del ADC puede ser
seleccionada como la terminal positiva de entrada. Si se usa una ganancia de 1x o
10x, se espera una resolución de 8 bits. Si se usa una ganancia de 200x, se espera
una resolución de 7 bits.

El ADC contiene un circuito de Muestreo y Retención el cual asegura que el voltaje de


entrada al ADC se mantenga constante durante la conversión. El diagrama a bloques
se muestra en la siguiente figura.

197
El ADC tiene un pin para la fuente de voltaje separado, AVCC. El AVCC no debe diferir
más de ±0.3 V de Vcc.

Los voltajes de referencia nominales internos 2.56V de AVCC son provistos dentro del
chip. El voltaje de referencia puede ser externamente desacoplado del pin AREF por
un capacitor para un mejor desempeño de ruido.

Operación

El ADC convierte un voltaje de entrada analógica a un valor digital de 10 bits por


aproximaciones sucesivas. El mínimo valor representa a GND y el máximo valor
representa el voltaje en el pin AREF menos 1 LSB. Opcionalmente, AVCC o un voltaje
de referencia interno de 2.56V puede ser conectado al pin AREF escribiendo en los
bits REFs del registro ADMUX. El voltaje de referencia interno puede ser desacoplado
por un capacitor externo en el pin AREF para mejorar la inmunidad al ruido. Como se
muestra en la figura.

El canal de entrada analógico y la ganancia diferencial son seleccionados escribiendo


en los bits MUX en ADMUX. Cualquiera de los pines de entrada del ADC, así como
GND y una banda de voltaje de referencia fijo, pueden ser seleccionados como
entradas finales independientes al ADC. Una selección de los pines de entrada del
ADC pueden ser seleccionados como entradas positivas y negativas al amplificador de
ganancia diferencial.

Si los canales diferenciales son seleccionados, la etapa de ganancia diferencial


amplifica la diferencia de voltaje entre el par del canal de entrada seleccionado por el

198
factor de ganancia seleccionado. Este valor amplificado entonces llega a ser la entrada
análoga del ADC. Si se usan las terminaciones independientes de los canales, el
amplificador de ganancia es “bypassed” juntos.

El ADC se habilita colocando el bit de habilitación del ADC, ADEN en ADCSRA. El


voltaje de referencia y la selección del canal de entrada no tendrán efecto hasta que
ADEN se habilite. El ADC no consume potencia cuando ADEN se limpia, así es
recomendable apagar el ADC antes de que entre al modo de salvado de potencia
(sleep).

El ADC genera un resultado de 10 bits el cual se presenta en los registros de datos del
ADC, ADCH y ADCL. Por default, el resultado se presenta con ajuste a la derecha,
pero puede ser opcionalmente presentado con ajuste a la izquierda colocando el bit
ADLAR en ADMUX.

Si el resultado es ajustado a la izquierda y no más de una precisión de 8 bits se


requiere, es suficiente con leer el ADCH. De lo contrario, ADCL debe ser leído primero,
después ADCH, para asegurar que el contenido del registro de datos pertenezca a la
misma conversión. Una vez que ADCL se lea, el acceso al ADC al registro de datos se
bloquea. Esto significa que, si ADCL ha sido leído, y una conversión se completa antes
de que ADCH sea leído, ni el registro es actualizado y el resultado de la conversión se
pierde. Cuando ADCH se lea, el acceso ADC a los registros de ADCH y ADCL se
rehabilita.

El ADC tiene su propia interrupción la cual puede ser disparada cuando una
conversión se completa. Cuando el ADC accede al registro de datos, se prohíbe entre
la lectura de ADCH y ADCL sea disparada la interrupción aún si el resultado se pierde.

El canal de entrada analógica se selecciona escribiendo en los bits MUX en ADMUX.


Como se muestra en la siguiente figura.

199
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

200
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.

El ADC genera un resultado de 10 bits que se presenta en los registros de datos ADC,
ADCH y ADCL. Como se muestra en la figura.

201
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.

Alternativamente, una conversión puede ser activada automáticamente por varias


fuentes. El desencadenamiento automático se habilita estableciendo el bit de

202
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.

203
El Pre-escalador y tiempo de conversión.

Por defecto, los circuitos de aproximación sucesivos requieren una frecuencia de


entrada de reloj entre 50kHz y 200kHz para obtener la máxima resolución. Si se
necesita una resolución inferior a 10 bits, la frecuencia de reloj de entrada al ADC
puede ser superior a 200 kHz para obtener una frecuencia de muestreo mayor.

El módulo ADC contiene un pre-escalador, que genera una frecuencia de reloj ADC
aceptable desde cualquier frecuencia de CPU por encima de 100kHz. La pre-escala es
establecida por los bits ADPS en ADCSRA. El pre-escalador comienza a contar desde
el momento en que se enciende el ADC ajustando el bit ADEN en ADCSRA. El pre-
escalador continúa funcionando mientras el bit ADEN está ajustado, y se restablece
continuamente cuando ADEN está bajo. Como se muestra en la figura.

Cuando iniciamos una conversión de modo simple, establecemos el bit ADSC en


ADCSRA, y la conversión comienza en el siguiente flanco ascendente del ciclo de reloj
ADC.

204
Una conversión normal toma 13 ciclos de reloj ADC. La primera conversión después
del encendido del ADC (ADEN en ADCSRA está configurado) toma 25 ciclos de reloj
ADC para inicializar el circuito analógico.

Cuando se usa un rango de voltajes como entrada al ADC, tomará un cierto tiempo
para que el voltaje se estabilice. Si no se estabiliza, el primer valor leído después de la
primera conversión puede estar equivocado.

La muestra sostenida real tiene lugar 1,5 ciclos de reloj ADC después del inicio de una
conversión normal y 13,5 ciclos de reloj ADC después del inicio de una primera
conversión. Cuando se completa una conversión, el resultado se escribe en los
registros de datos ADC y ADIF. En el modo de conversión única, ADSC se borra
simultáneamente. El software puede volver a establecer ADSC y se iniciará una nueva
conversión en la subida de reloj de ADC.

Cuando se utiliza Disparo automático, el pre-escalador se restablece cuando se


produce el evento de disparo. Esto asegura un retardo fijo desde el evento de disparo
hasta el inicio de la conversión. En este modo, la muestra -y-retención tiene lugar dos
ciclos de reloj ADC después del flanco ascendente en la señal de fuente de disparo.
Se utilizan tres ciclos de reloj de CPU adicionales para la lógica de sincronización.

En el modo de ejecución libre, una nueva conversión se iniciará inmediatamente


después de que se completa la conversión, mientras que ADSC sigue siendo alto.

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.

205
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.

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.

206
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);

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;

207
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.

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.

208
Diagrama de bloques:

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.

209
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.

210
Programa para Matlab.

Al iniciar el programa en Matlab, nos aparece una barra donde nos indica la
temperatura en tiempo real.

211
5.3 INTERRUPCIONES.

Las interrupciones son recursos o mecanismos del microcontrolador para responder a


eventos, permitiendo suspender temporalmente el programa principal, para ejecutar
una subrutina de servicio de interrupción (ISR por sus siglas en inglés Interrupt Service
Routines); una vez terminada dicha subrutina, se reanuda la ejecución del programa
principal.

Las interrupciones se generan cuando dispositivos periféricos conectados a la tarjeta


electrónica solicitan enviar información al microcontrolador, esto puede ser de manera
asíncrona. También el proceso de interrupción se puede generar de manera periódica,
es decir por medio de una señal digital (por ejemplo, de un milisegundo de período)
conectada a un pin específico del microcontrolador (INT0 o INT1) se puede atender
tareas determinadas como adquisición de datos, monitoreo de sensores, cálculos
numéricos, envío de comandos al robot, etc.

Por ejemplo, para monitorear el estado lógico que tiene un pin, habrá que leer
su valor continuamente; si en un momento específico este pin tiene 5 V y no se lee,
debido a que el microcontrolador está ejecutando otras instrucciones, se corre el
enorme riesgo que cuando se lea, el valor del pin ha cambiado sin ser detectado por el
microcontrolador, perdiendo informaciónn valiosa del sensor o sistema.

Monitorear información de un evento usando polling, genera un alto riesgo para perder
lecturas o información del sistema, por lo tanto, hoy en día, esta técnica resulta
inadecuada e ineficiente.

En lugar de utilizar polling, se emplea un dispositivo denominado controlador de


interrupciones (también conocido como unidad de interrupciones), la arquitectura AVR
de los microcontroladores que se utilizan las tarjetas Arduino, incluyen una unidad de
interrupciones (ver el diagrama a bloques de la siguiente figura), para controlar la
solicitud de eventos o dispositivos periféricos.

212
Tipos de Interrupciones.

En los microcontroladores Atmega hay dos tipos de interrupciones, el primer tipo


corresponde a eventos externos que generan un estado lógico (cambio de voltaje) y
también por transición como un pulso electrónico de disparo (triggered), la transición
se detecta por flanco de subida en la señal periódica (de bajo hacia alto, es decir:
LOW → HIGH) o por flanco de caída (HIGH → LOW); esto habilita una bandera de
interrupción (interrupt flag), dependiendo de la prioridad de interrupción, el contador
del programa (program counter) toma la dirección de memoria de la tabla de vectores
y salta a la localidad de memoria correspondiente donde se encuentra la rutina de la
interrupción solicitada (interrupt handling routine).

De manera automática, por hardware se limpia la bandera de interrupción (interrupt


flag); también se puede limpiar las banderas de interrupción por software, ya que
tienen asociados sus respectivos bits de habilitación en el registro de estado (status
register).

Similarmente, si más solicitudes de interrupción ocurren mientras se encuentra en


proceso alguna interrupción, permanecerán en espera por orden de prioridad. Cuando
el contador de programa sale de una interrupción, retornará al programa principal y
ejecutará una o más instrucciones antes de atender alguna interrupción pendiente.

El segundo tipo de interrupciones corresponden a las interrupciones que pueden ser


cambiadas o reasignadas por software en los pines del microcontrolador, estas
interrupciones no necesariamente tienen banderas de interrupción.

Procesamiento de la interrupción

Cuando se genera una interrupción, el microcontrolador termina la ejecución de la


instrucción en curso, salva el estado de registros y banderas, así como la dirección de
memoria del contador de programa, entonces salta a la dirección de memoria donde
está almacenada la rutina de servicio de interrupción ISR para ejecutar dicha rutina
que tiene como objetivo atender al dispositivo que generó la interrupción. Una vez que
ha finalizado la rutina de la interrupción, el microcontrolador restaura el estado que
había guardado y retorna al programa principal a partir de la siguiente instrucción
donde se quedó el contador del programa.

La forma en que funcionan las interrupciones en los microcontroladores Atmega es por


prioridades o jerarquáa, la siguiente figura muestra el diagrama de flujo de la
interrupción de mayor prioridad como es el RESET (por hardware: ya sea por el botón
de reset o al conectar la fuente de alimentación; también se puede generar esta
interrupción por software).

213
En la figura anterior, si el proceso 1 solicita servicio de interrupción mientras se
encuentra el microcontrolador atendiendo la interrupción del proceso 0, entonces su
ejecución dependerá del nivel de prioridad, es decir si la interrupción del proceso 1 es
de menor prioridad, tendrá que esperar a que termine la interrupción del proceso 0, de
otra manera la interrupción del proceso 1 se ejecutará inmediatamente, suspendiendo
momentáneamente la interrupción del proceso 0, al terminar la tarea del proceso 1,
retornará a las actividades pendientes de la interrupción anterior

Para trabajar el control de procesos en tiempo real, los temporizadores del


microcontrolador pueden ser programados para generar una onda o señal cuadrada
periódica y producir una frecuencia de muestreo adecuada para realizar las siguientes
actividades: adquisición de datos de los sensores de posición, generar la señal de
error de posición, cálculos de las operaciones matemáticas que involucra la ley de
control (ganancias proporcionales, derivativa, funciones trigonométricas e hiperbólicas)
y envío de la información como señal de comando a los servomotores del robot para
producir desplazamiento mecánico. Este ciclo se repite, considerando que el tiempo de
máquina del sistema digital para llevar a cabo todas las operaciones involucradas en la
ISR es menor al período de muestreo, es decir control en tiempo real.

La incorporación de convertidores analógico/digital, puertos entrada/salida,


temporizadores, dispositivos de comunicación serial como USART y diversos
periféricos a los microcontroladores Atmega, adicional a las características
tecnológicas que poseen con arquitectura AVR, los hacen ideales para utilizarse como
sistemas empotrados con amplias aplicaciones en ingeniería robótica y mecatrónica.

A continuación, se presentan las interrupciones externas.

214
215
216
217
218
219
220
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.

221
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

222
principal 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.

223
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.

224
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

225
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.

226
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.

227
- 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:

228
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

229
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.

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

230
considerar no solo el seguimiento de referencia sino también el rechazo de
perturbaciones y ruidos en la medida.

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).

231
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.

232
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

233
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.

234
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.

235
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.

236
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:

237
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.

238
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.

239
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.

240
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.

241
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

242
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:

243
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.

244
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.

245
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.

246
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.

247