Aprenda Electronica Primera Edición

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 402

1

Aprende electrónica: desde nivel básico hasta


microcontroladores.

Se prohíbe la reproducción total o parcial de este


libro sea cual fuere el medio, electrónico o mecanico
sin el consentimiento del autor.

Autor:
Carlos Alan González Cortéz

Primera edición
12/11/17
Monterrey, Nuevo León, México.

2
Antes de comenzar, quiero agradecerte por apoyar
mi proyecto y estar interesado en el.
Mi nombre es Carlos Alan González Cortéz y soy el
autor de este libro.
Con este libro comienzo una sección en mi carrera la
cual ha sido mi sueño desde hace muchos años, la
de escritor.
Debido a que soy un escritor independiente y no
pertenezco a ninguna casa editorial, yo soy el
encargado de distribuir este libro.
Por esto te pido, que porfavor NO distribuyas este
libro, si conoces a alguien que esté interesado en
adquirirlo, por favor, indicale como poder comprarlo,
mandando un correo electrónico a:
carlos.xeos@gmail.com con el asunto “Libro
aprende electrónica”.
Si tienes cualquier duda, pregunta o propuesta,
puedes hacerla también a ese correo.
Sin más que decir, espero que este libro te apoye al
máximo en tu aprendizaje en esta bella ciencia.


3
















4
Índice
Antes de comenzar……………………………………………………. 9.

Precauciones previas…………………………………………………..12.

Material común necesario……………………………………………...13.

Como usar un protoboard…………………………………………….18.

Como interpretar un diagrama………………………………………..19.

Nivel básico

Encendido de led con switch………………………………………….22.

Conexión de leds en serie…………………………………………….26.

Conexión de leds en paralelo…………………………………………28.

Potenciometro…………………………………………………………..30.

Leds ultra brillantes…………………………………………………….33.

Leds RGB……………………………………………………………….35.

Display de 7 segmentos………………………………………………37.

Capacitores…………………………………………………………….40.

Switch + led + capacitor………………………………………………43.

Diodo rectificador……………………………………………………...44.

Rectificador de media onda………………………………………….47.

Rectificador de onda completa………………………………………52.

Regulacion zener…………………………………………………….55.

El transistor……………………………………………………………57.

Transistor como amplificador de corriente………………………...61.

Regulacion zener con transistor de paso………………………….63.

Reguladores de voltaje 78XX……………………………………….64.

Fuente de poder lineal variable con lm317………………………..66.

5
Fuente lineal con lm317 + transistor 2n3055………………………68.

Fuente de poder lineal dual………………………………………….70.

Motor eléctrico de DC………………………………………………...73.

Control de velocidad de motor eléctrico DC lineal………………...75.

Puente H……………………………………………………………….76.

Relevadores……………………………………………………………78.

Relevador para controlar AC………………………………………....80.

Diodo emisor infrarrojo y Diodo receptor infrarrojo………………...82.

Control remoto de motor DC………………………………………….84.

Fotoresistencias………………………………………………………..85.

Amplificador de micrófono sencillo…………………………………..88.

Termistores……………………………………………………………...90.

Oscilador con 3 transistores…………………………………………...92.

Probador de fase con transistores…………………………………….94.

Electroiman con inductor……………………………………………….96.

Nivel intermedio

Amplificador operacional (OPAMP)…………………………………..99.

Opamp en modo buffer………………………………………………..103.

Opamp en modo comparador…………………………………………105.

Amplificador de audio de baja potencia monoaural con lm386……107.

Timer 555………………………………………………………………...109.

Luces secuenciales con timer 555 y CD4017………………………..112.

Vumetro con lm3914……………………………………………………114.

PWM………………………………………………………………………117.

Oscilador de foco de 110-220VAC con timer 555 y relevador……..124.

Generador de funciones usando el timer 555………………………..126.

Control de encendido y apagado de foco AC mediante aplausos…128.

6
Optoaisladores……………………………………………………………130.

Diodos schottky……………………………………………………………134.

Control de SCR…………………………………………………………....137.

Control de potencia en AC usando SCR………………………………..139.

Control de potencia con DIAC y TRIAC………………………………….141.

Control de potencia DC con PWM usando MOSFET…………………. 144.

Regulación conmutada con lm2576………………………………………149.

Regulador conmutado tipo BOOST………………………………………..152.

Reguladores lineales de baja caída (LDO)………………………………..155.

Configuración colector abierto y emisor abierto o sink y source………...158.

Configuración Darlington……………………………………………………..160.

Introducción a la electrónica digital con compuertas lógicas……………..164.

Conversor analógico a digital con ADC0804……………………………….179.

Sistema BCD y conversor BCD a 7 segmentos…………………………….183.

Gatillo Schmitt…………………………………………………………………..186.

Microcontroladores

Intro……………………………………………………………………………….191.

Encendido y apagado de led usando switch…………………………………207.

Uso de delay o retardo…………………………………………………………..212.

Declaración de variables, operaciones matemáticas y operaciones lógicas


básicas…………………………………………………………………………….216.

Sistema anti rebote………………………………………………………………222.

Uso del LCD 16x2………………………………………………………………..227.

Conversor analógico digital……………………………………………………..238.

Salida PWM………………………………………………………………………245.

Multiplexación de displays de 7 segmentos…………………………………..249.

Uso de teclado matricial por método de multiplexación…………………….261.

7
Uso de encoders rotatorios………………………………………………………269.

Conversor Digital a analógico usando PWM…………………………………..273.

Uso de servomotores……………………………………………………………..276.

Uso de motores paso a paso……………………………………………………279.

Uso de memoria eeprom interna………………………………………………..288.

Uso del Timer/counter 0………………………………………………………….292.

Uso de interrupciones…………………………………………………………….300.

Comunicación serial………………………………………………………………310.

Proyectos……………………………………………………………………………325.

Extras

Tipos de encapsulados……………………………………………………………361.

Lectura y comprensión de datasheets…………………………………………..368.

Tipos de transformadores…………………………………………………………373.

Tipos de switches………………………………………………………………….377.

Tipos de capacitores y valores comerciales……………………………………380.

Tipos de resistencias y valores comerciales……………………………………385.

Tipos de baterías………………………………………………………………….389.

¿Cómo se mide la capacidad de baterías y energía consumida?.................395.

Tipos de conectores………………………………………………………………397.

8
Antes de comenzar…
Antes de comenzar a aprender sobre este maravilloso mundo de la electrónica,
debemos de repasar (o aprender) diversos conceptos básicos sobre la
electrónica, es fundamental saber esto para poder comprender que es la
electricidad y que precauciones tener al momento de trabajar con ella.

¿Qué es la electricidad?

La electricidad es el flujo de electrones a través de un conductor. Esta tiene


básicamente 2 propiedades, el voltaje y la corriente.

¿Qué es el voltaje?

El voltaje es la fuerza electromotriz o la fuerza con la que viajan los electrones


a través de un conductor. Se mide en volts (V). Imagínatelo con la analogía
siguiente: El voltaje es como la presión con la que fluye el agua a través de una
tubería.

¿Qué es la corriente?

La corriente es la cantidad de electrones por segundo que están viajando a


través de un conductor. Se mide en Amperes (A) Imagínatelo con la siguiente
analogía: La corriente es como la cantidad de Litros por segundo de agua
fluyendo a través de una tubería.

Analogía de

Voltaje y

Corriente:

9
¿Qué es la resistencia?

La resistencia es la propiedad de todo conductor a oponerse al flujo de


corriente. Todo, pero todo conductor la tiene, desde un alambre de cobre hasta
la madera y el plástico. Se mide en ohms (Ω).

Ley de ohm

La ley de ohm se trata de una relación que dicta lo siguiente:

I = V/R

Dónde I = Corriente V = Voltaje R = Resistencia

Esto indica que la corriente es igual a la división del voltaje sobre la resistencia.

Esta fórmula nos sirve para encontrar algún valor, siempre y cuando tengamos
los otros 2. Por ejemplo:

Si en un circuito tenemos presente el voltaje y la resistencia, podemos


determinar cuanta corriente consume.

Si en un circuito tenemos presente la corriente y la resistencia, podemos


determinar el voltaje presente.

Si en un circuito tenemos presente el voltaje y la corriente, podemos determinar


la resistencia total del circuito.

10
¿Qué es la potencia?

La potencia es el producto de la multiplicación de el voltaje por la corriente y se


expresa en Watts (W).

W = V*I

La potencia eléctrica también se puede determinar en Hp(Caballos de fuerza)


donde 1Hp = 746W.

Ley de watt

La ley de watt, al igual que la ley de ohm, nos permite encontrar la potencia,
corriente, voltaje y resistencia de diversas maneras presentes en un circuito.

11
Precauciones antes de comenzar a
armar los circuitos
La mayoría de los circuitos funcionan con voltajes bajos de corriente directa,
pero, algunos emplearan el uso de corriente alterna a 127 o 220V dependiendo
de tu localidad.

Nunca, y lo repito, nunca hagas, manipules o trabajes con un circuito en el que


se encuentre este voltaje sin antes seguir las siguientes precauciones:

1. Trabajar en un lugar espacioso, libre de basura, objetos metálicos o


agua.
2. Trabajar en una mesa hecha con materiales no conductores como la
madera o el plástico. Evitar realizar trabajos en mesas o bancos de
metal.
3. Antes de energizar un circuito, asegúrate de que has hecho todas las
revisiones necesarias, asegúrate de que no existan cortos circuitos o
conexiones erróneas, de lo contrario puedes dañar al circuito o a ti
mismo.
4. Asegúrate de usar herramientas de calidad, con aislamiento adecuado,
si vas a usar equipo de medición como un multímetro, asegúrate que
sea de buena calidad y que cumpla con las normas establecidas para
trabajar con altos voltajes.
5. Usa guantes aislantes para electricistas si crees que es necesario
manipular el circuito o realizar mediciones al tenerlo energizado.
6. Si eres menor de edad asegúrate de tener a un adulto con
conocimientos de electricidad antes de armar cualquier circuito con alto
voltaje.

¡Recuerda, con la electricidad no se juega, siempre asegúrate de tener


cuidado y seguir las precauciones que te he mencionado!

12
Material común que requerirás para realizar los circuitos:

1. Protoboard.
El protoboard es una tarjeta o tablilla hecha para realizar circuitos
experimentales sobre estas. Cuentan con columnas conectadas entre si
de manera vertical, esto significa que cada columna funciona como un
solo conductor, para colocar componentes asegúrate que el seguimiento
sea de manera horizontal y no vertical, como lo muestro en la siguiente
imagen:

2. Multímetro.
El multímetro es una herramienta para medir diferentes cosas, voltaje,
corriente, resistencia, frecuencia, temperatura, continuidad, diodos y un
largo etc. Dependiendo del multímetro. Es esencial contar con uno para
poder hacer mediciones y saber cuándo hay presencia de voltaje y
corriente.

13
No recomiendo comprar un multímetro barato y simple pues estos no
cumplen con normas de seguridad ni de calidad. Aunque pueden ser
algo costosos, mi recomendación es que compres un multímetro marca
steren, owon, fluke, keysight o metrawatt, ya que estos, aunque tienen
un precio algo elevado, tienen un estándar de calidad altísimo y cumplen
con todas las normas de seguridad y calidad necesarias. Es una
inversión que vale la pena realizar.

3. Osciloscopio (opcional)
El osciloscopio, como te podras dar cuenta, es una herramienta casi
fundamental en la electrónica, aunque no tanto como un multímetro.
Sirve para medir y analizar ondas o señales y es muy importante para
diseñar circuitos o repararlos. No es obligatorio tener uno pero, no hay
laboratorio de electrónica completo sin uno. Comprar uno nuevo es caro,
pero en páginas de internet como www.mercadolibre.com o
www.ebay.com puedes encontrar osciloscopios usados por precios
bajos.

14
4. Fuente de poder
Una fuente de poder es un dispositivo que nos entrega un voltaje y una
corriente para alimentar a nuestros circuitos. Puede ser desde una pila
de 9V, hasta un cargador de celular, pero no son muy confiables para
realizar circuitos, es por eso que mas adelante aprenderás a realizar
diferentes fuentes de poder según vayamos requiriendo con los circuitos.

5. Conductores o puentes
Lo necesitaras para realizar las conexiones en la protoboard. Puedes ir a
tu tienda de electrónica y comprar alambre calibre 22 para realizar estas
conexiones. O comprar jumpers especiales para protoboard ya listos
para usarse.

15
Como usar un multímetro
El multímetro es la herramienta que nos

Va a permitir hacer mediciones de las

diferentes magnitudes como el voltaje,

la corriente, la resistencia, la frecuencia,

continuidad etc. Aquí aprenderás a usarlo

de manera correcta.

Como medir voltaje con el multímetro:

El voltaje se mide en paralelo con la fuente o componente que deseamos


medir.

Por ejemplo, para medir el voltaje de una batería, ponemos el multímetro en la


escala de Volts, colocamos la punta positiva en el positivo de la batería y la
punta negativa en el negativo de la batería.

16
Como medir corriente con el multímetro

Para medir corriente con un multímetro, debes ponerlo en la escala de


Amperes, poner la punta positiva en el socket de corriente y conectamos este
en serie con la carga que deseamos medir.

Debes tener en cuenta que para medir la corriente que fluye debes tener una
carga en serie como una resistencia, foco, etc. No midas la corriente sin una
carga presente.

Como medir resistencia

Para medir resistencia, pones el selector de tu multímetro en la escala de ohms


y mides en paralelo con el componente del cual quieras medir su resistencia.

ADVERTENCIA: debes desconectar la alimentación del componente


completamente antes de medir su resistencia, si mides la resistencia de un
componente energizado puedes dañar el multímetro.

17
Como usar un protoboard.

Usar un protoboard es muy sencillo, aunque existen algunas variantes en


cuanto a tamaño o conexiones, el estándar es el siguiente.

En los costados extremos tenemos las líneas de alimentaciones.

Estas líneas se suelen usar para tener ahí los voltajes de alimentación para los
circuitos que vayamos a armar.

Estas líneas están conectadas horizontalmente completamente.

Dentro del protoboard, tenemos las columnas para las conexiones, estas están
conectadas de manera vertical, es por esto que no debes conectar ambas(o
más partes) de un componente en las columnas.

18
Como interpretar un diagrama.
A lo largo del libro, los diagramas irán incrementando en complejidad, pero no
al punto de ser abrumadores.

Sin embargo, existe una clave muy importante para no cometer errores a la
hora de interpretar un circuito, las conexiones.

Habrá situaciones en un diagrama donde podremos toparnos con lo siguiente:

A simple vista parece que ambas conexiones son las mismas ¿Pero esto es
verdad? No.

¿Cuál es la diferencia?

19
Habrá ocasiones donde como en el ejemplo anterior, veamos que se cruzan
líneas, pero ¿Cómo sabemos si estas se conectan o no?

Un nodo es un punto donde 2 o más conexiones se conectan, se representa


como podrás ver con un punto uniendo estas conexiones. Esta es la única
manera de saber si hay una conexión entre líneas o no.

Aquí están las 4 líneas cruzando pero no hay un nodo, esto significa que NO
existe una conexión entre ellas.

20
Nivel Básico

21
1. Encendido de led con switch.

Antes de comenzar con el circuito, analicemos los componentes que lo


conforman:

Resistencia:
Símbolo:

Apariencia física:

Función: restringir el paso de corriente a través de ella. Suelen ser de


carbón, alambre o cerámica, cuya conductividad es reducida.

Se miden en ohms.

Switch:
Símbolo:

Apariencia física:

22
Funcionamiento:
El switch es un activador mecánico cuya activación puede variar según
el tipo.
Puede ser al pulsar un botón, al jalar una pequeña palanca, etc.
Estos tienen un rating o especificaciones de voltaje y corriente máximo,
los cuales NO deben ser excedidos.

LED
Simbolo:

Apariencia física

Funcionamiento:
El diodo LED es un semiconductor que emite luz al ser energizado,
siempre y cuando la polaridad sea la correcta.

Como puedes observar, el led tiene 2 patas, el Ánodo y el cátodo, el


Ánodo corresponde a la parte positiva y el cátodo corresponde a la parte
negativa. Se debe de polarizar correctamente para que funcione, de lo
contrario puede dañarse.

Para identificar fácilmente el ánodo y cátodo en un led, simplemente


observamos los pines, el pin más largo es el ánodo y el pin más corto es
el cátodo.

23
Aquí tenemos el circuito:

Como podrás ver, el circuito consta de 1 led, 1 switch y 1 resistencia de 1000


ohms o 1kohm. Pero ¿Porque se usa una resistencia en serie con el led?

Un led es un diodo emisor de luz, significa que si le introducimos una corriente


CON LA POLARIZACION CORRECTA el diodo emitirá luz. El diodo consta de
el anodo que es la pata positiva, y el catodo que es la pata negativa, no se
debe conectar el led de manera invertida pues se puede dañar.

Un led convencional funciona con entre 1mA y 10mA, una relación que
debemos recordar es la siguiente, a mayor corriente, mayor luz, pero hay que
tener cuidado de no exceder la corriente pues podemos quemarlo. Pero, entre
mayor sea la corriente que le introducimos, menor será su vida útil.

Ahora ¿Por qué usamos una resistencia de 1000 ohms?

Como vimos en la sección de conceptos, por la ley de ohm.

Estamos alimentando el circuito con 9v, y necesitamos que la corriente del led
sea de 10mA, nos falta conocer que resistencia debemos usar para el led.

Como dice la ley de ohm, I = V/R . Despejando: R = V/I

Dividimos 9/10mA y obtenemos aprox. 1000 ohms.

24
Ya que has hecho las conexiones y verificado todo, presiona el switch y mira
con asombro al led encender. ¡Felicidades! Acabas de realizar tu primer circuito
y de esta manera, te has introducido al mundo de la electrónica.

25
2. Conexión de leds en serie

Materiales requeridos:
4 diodos led
1 bateria de 9v
1 protoboard

Ya que hemos aprendido a encender un led sin quemarlo ni morir en el intento,


vamos a aprender las diversas formas de conectar un led (y cualquier
componente electrónico pasivo). Y veremos que propiedades tiene conectar de
una manera u otra.

Circuito:

Como podrás ver, tenemos 4 leds conectados en serie. La propiedad de un


circuito serie es que el voltaje se divide entre cada componente, pero la
corriente es igual para cada componente.

Si la resistencia es igual para cada componente, la división de voltaje será igual


para cada uno. En este caso, como los leds tienen una resistencia interna
aproximadamente igual, la división de voltaje entre cada led será igual.

Tenemos 12 volts alimentando al circuito, y tenemos 4 leds conectados en


serie, por lo tanto, a cada led le tocará 3V.

26
¿Cuándo nos conviene conectar en serie?

Cuando la diferencia de voltaje de alimentación y el voltaje de operación del


componente sea demasiada.

Es por eso que, por ejemplo, las luces navideñas están conectadas en serie, al
ser 120VCA, y cada led que opera entre 1.5 y 3V, lo ideal es conectar muchos
en serie hasta que el voltaje que recibe cada uno sea el deseado.

¿Por qué no nos conviene conectar en serie?

Si un componente se llega a dañar, se abre el circuito y ya nada funciona.

También, si tenemos componentes que requieren de mucha corriente como


motores, NUNCA debemos de conectarlos en serie.

27
3. Conexión de leds en paralelo.

Materiales requeridos:

4 diodos led

4 resistencias de 1kohm

Protoboard

Fuente de poder o batería de 9V

Circuito:

Analicemos el circuito:

Como verás, en esta ocasión tenemos a los leds conectados en paralelo.

En un circuito serie, el voltaje se divide en cada componente, mientras que


la corriente es igual en cada componente. En un circuito paralelo, es lo
opuesto.

Aquí, el voltaje es igual en cada componente, pero la corriente se divide en


cada uno.

También podrás ver que usamos una resistencia, como vimos en el primer
circuito, es para limitar la corriente que le entra al led y evitar dañarlo o
quemarlo.

28
Al dividirse la corriente, la corriente total es la suma de cada uno.

Tenemos que cada led consume lo siguiente: 9V/1000ohms = 9mA

Al ser 4 divisiones que consumen lo mismo, 9mA x 4 = 36mA

36mA es el consumo total.

29
4. Potenciómetro.

Un potenciómetro es un componente compuesto de una resistencia de carbón


interna y una perilla que mueve un metal que roza a la resistencia.

El potenciómetro puede usarse de 2 maneras, como una resistencia variable o


como un divisor de voltaje controlable.

Al usarse como resistencia variable, solo se usan 2 de los 3 pines que tiene el
potenciómetro. De esta manera se comporta como una resistencia variable, y
su valor máximo sería el valor que especifica el potenciómetro, que puede ser
de 100 ohms, 1000, 10,000, 1 millon, etc.

Al usarse como resistencia variable, su símbolo es el siguiente:

Al usarse como divisor de voltaje, se usan los 3 pines, conectándose 1 extremo


al positivo, el de en medio seria la salida y el otro extremo va a negativo.

30
Un divisor de voltaje funciona de la siguiente manera:

El voltaje de salida o el Vout se obtiene con la siguiente formula:

Vsalida = Voltaje de entrada * (R2/R1+R2).

Analicemos la formula.

Suponiendo que R1 = 1kohm y R2 = 5kohm y el voltaje de entrada = 5V

Vsalida = 5 * (5000/5000+1000)

Vsalida = 5V * 0.833

Vsalida = 4.165V

De esa manera, obtenemos el voltaje de salida.

Hay que recordar que este arreglo solo debe usarse como voltaje de referencia
y nunca para usarse con cargas mayores a 20mA. Conforme avances en el
libro comprenderás que es el voltaje de referencia y como aplicarlo para
potencia.

Ya que sabemos que es un potenciómetro, veamos el circuito

Materiales requeridos:

1. Batería de 9V o fuente de alimentación de 9V

2. Potenciómetro de 1k ohm

3. Diodo LED

4. Resistencia de 220ohms

31
Aquí estamos usando el potenciómetro como resistencia variable.

De esta manera, podemos variar la corriente que le entra al led y de esta


manera, podemos variar la intensidad del led.

La resistencia de 220 ohms cumple la función de protección, pues al momento


de disminuir la resistencia al mínimo en el potenciómetro el led podría
quemarse sin está protegiéndolo.

32
5. Leds ultra brillantes

Los leds ultra brillantes son una versión más potente que los leds
convencionales. Estos emiten un brillo varias veces mayor y son
especialmente usados en equipo de iluminación, como tiras led o focos led.

Usar estos leds es muy sencillo, es el mismo procedimiento que los leds
convencionales, pero estos consumen una corriente de +-40mA aprox.

Hagamos los cálculos. Si tenemos una batería de 9V y tenemos que el led


consume 40mA… ¿Qué resistencia necesitamos usar?

V = I*R

Despejamos R

R = V/I

R = 9V/0.040A

R = 225 ohms

Debido a que este no es un valor comercial, usamos una resistencia de 220


ohms.

Y el circuito nos queda de la siguiente manera:

33
Al encenderlo, podrás notar que su brillo es muy superior al led convencional,
ahora puedes hacer iluminación led para tu hogar y ahorrar energía.

34
6. Led RGB (O multicolor).

El led rgb o multicolor es un led compuesto internamente de 3 leds, uno


rojo, uno verde y uno azul.

Al variar la corriente en cada uno, podemos combinar el espectro de estos 3


colores para crear un solo color de salida.

El led tiene 4 pines, es aquí cuando hay que tener cuidado.

Puede ser ánodo común o cátodo común. Como se muestra en el diagrama,


al ser cátodo común se conecta el pin común a negativo, al ser ánodo
común, se conecta el pin común a positivo.

Hagamos un circuito para controlar un Led RGB de cátodo común.

35
Materiales necesarios:

1. Batería o fuente de poder de 9V


2. 3 Potenciómetros de 1k ohm
3. 1 Led RGB de cátodo común.

Circuito:

Cada Led mostrado en el circuito representa a la parte R, G o B del led.

El pin – del led va a negativo.

Cada potenciómetro controla la corriente que le entra a cada sección del led,
alterando los valores en cada uno dará un color de salida diferente.

36
7. Display de 7 segmentos.

Un display de 7 segmentos es un componente compuesto por 8 leds, el cual al


prenderse en cierta combinación forman un número del 0 al 9 y el punto
decimal.

Estos displays se usan para mostrar información numérica, como la


temperatura, el precio, la hora, etc.

Aquí existen también 2 tipos, el ánodo común y el cátodo común.

Veamos un circuito aplicando este componente.

37
Materiales necesarios:

1. Fuente de voltaje o batería de 9V


2. 7 resistencias de 220 ohms
3. 1 display de 7 segmentos de cátodo común.

En el diagrama anterior, vimos que la estructura del display se compone de

A,B,C,D,E,F,G y dp. En este caso solo dp quedará fuera de la práctica.

Para formar un número, debemos de hacer la combinación de switches


encendidos necesarios.

Para mostrar el número 1 debemos realizar la siguiente combinación:

1: B,C

2: A,B,D,E,G

3: A,B,C,D,G

4: B,C,F,G

5: A,C,D,F,G

6: A,C,D,E,F,G

7: A,B,C,G

8: Todos.

38
9:A,B,C,F,G

Cabe recalcar, que para cada combinación, cada puerto mencionado debe
estar encendido, no cometas el error de encender uno por uno.

Aquí usamos los dip switches, los cuales son switches pequeños pero muy
prácticos y estos se ven así:

Para esta aplicación puedes usar un dip switch de 8 entradas.

39
8. Capacitores

El capacitor es un componente que almacena energía en forma de un


campo eléctrico.
Un capacitor se opone a los cambios de voltaje, una propiedad que lo
hace útil para filtros.

Existen diversos tipos de capacitores, pero los más comunes son los
cerámicos (El de la izq. en la imagen) y los electrolíticos (El de la
derecha en la imagen).

Los capacitores cerámicos NO tienen polaridad, es decir, que no importa


en qué sentido se conecten, funcionan de igual manera. Estos tienen la
característica de tener una capacitancia baja y una capacidad de voltaje
más alto respecto a los electrolíticos

Los capacitores electrolíticos SI tienen polaridad, es decir, que el


positivo debe ir en el positivo y el negativo en el negativo, nunca al
revés, ya que los capacitores electrolíticos explotan al ser conectados de
manera errónea.
Su capacitancia es muchísima mayor que los capacitores cerámicos,
pero su tolerancia al voltaje es menor, de igual manera, se debe tener
cuidado con el voltaje máximo tolerable de cada capacitor, ya que si se
excede, el capacitor puede explotar.

40
Veamos cómo se comporta un capacitor en serie en corriente directa y
en corriente alterna.

Corriente directa DC.

Al tener una fuente de poder de corriente directa, el capacitor se


comporta como un circuito abierto, es decir, que en la resistencia no
fluirá corriente.

Haz la prueba en tu protoboard o simulador, conecta el capacitor en


serie y mide con tu multímetro o pon un led y observa que no encenderá.

41
Corriente alterna AC

Para armar este circuito, debes conseguir un transformador de salida de 9V,


12V o 24V de corriente alterna.

Un capacitor en serie, se comporta como un conductor solo en corriente


alterna.

Puedes comprobarlo con tu multímetro, conecta un capacitor en serie con una


carga como la propuesta en el circuito, y mide en voltaje en corriente alterna, y
observaras que existe flujo de corriente.

Estas propiedades no parecerán tan relevantes para ti ahora mismo, pero


conforme avances en este libro, verás que tan importantes son estas
características.

42
9. Switch + led + capacitor.

Como dijimos anteriormente, el capacitor almacena energía en forma de un


campo eléctrico, pero ¿Qué tanta energía puede almacenar? Vamos a
averiguarlo.

Materiales para realizar el circuito:

1. Fuente de poder o batería de 9V


2. 1 diodo led.
3. 1 capacitor electrolítico de 100 microfaradios.
4. 1 resistencia de 1kohm

Circuito:

RECUERDA: Los capacitores electrolíticos tienen polaridad, y esta debe


ser respetada, de lo contrario el capacitor explotará (no volará tu casa,
pero te dará un buen susto).
Deja presionado el switch por alrededor de 1 minuto, después, abre el
switch y mide el tiempo en el cual el led permanece encendido.
Como podrás ver, el led quedara encendido por un corto lapso de
tiempo.

La cantidad de carga retenida es directamente proporcional a los


faradios que tenga el capacitor.
Puedes comprobarlo por ti mismo, cambia el capacitor por uno de mayor
o menor capacitancia y verás que el tiempo que permanece encendido
el led aumenta o disminuye.

Mediante esto, debes comprender que un capacitor no cumple la función


de una batería o una fuente de energía, su propiedad de
almacenamiento de energía de manera estática funciona para otros
principios importantes que veremos más adelante.

43
10. Diodo rectificador.

El diodo rectificador es un semiconductor con propiedades bastante


interesantes.

Imagínatelo como el equivalente a una válvula en la electrónica.


Solo permite el flujo de electricidad en un sentido, si se trata de hacerlo
en sentido contrario, no fluye la corriente.

Los diodos se componen por un ánodo y un cátodo. En la imagen


puedes apreciar cómo identificar cada uno.

El ánodo es la parte positiva y el cátodo la parte negativa.

Los diodos tienen una importancia en la electrónica enorme, pues están


presentes en casi todos los circuitos eléctricos y electrónicos.

Vamos a comprobar su función como válvula.

44
Materiales necesarios:

1. Batería o fuente de poder de 9V.


2. 1 diodo rectificador 1n4007.
3. 1 diodo led
4. 1 resistencia de 1kohm

Circuito

Aquí, polarizamos el diodo de manera directa, de esta manera va a conducir y


el led encenderá.

Ahora vamos a polarizar el diodo de manera inversa.

45
Ahora tenemos el diodo polarizado de manera inversa.
Al armar el circuito y energizar te darás cuenta de que el led no
enciende.

Aquí vemos que el diodo cumple una función fundamental, para proteger
circuitos, para polarizar, etc.

46
11. Rectificador de media onda.

Un transformador es un componente compuesto por un núcleo de hierro,


y 2 bobinados llamados “primario y secundario”.

Estos tienen una relación de espiras, que puede variar. Esta relación de
espiras determina el voltaje de salida en relación al voltaje de entrada.

El voltaje de salida en base a la relación se determina con la siguiente


formula:

V2 = V1/N1/N2

Si tenemos un voltaje de entrada o V1 de 127V, y la relación es de 10:1


el voltaje de salida será:
V2 = 127/ 10/1 = 127/10 = 12.7V

La relación significa cuantas espiras hay en el secundario en relación al


primario.

Si tenemos que el transformador es de 10:1 y el primario tiene 1000


espiras, el secundario tiene 100 espiras. Por cada 10 espiras o vueltas,
el secundario tendrá 1 espira.

La salida de un transformador es de corriente alterna, a una frecuencia


que dependerá de la línea que se ofrezca en tu país, pero suele ser de
50hz o de 60hz.

47
Bien, tenemos que ya sabemos cómo reducir el voltaje que tenemos en
casa a uno que podamos usar en nuestros circuitos, pero ¿Con un
transformador es suficiente? No.

El transformador nos entrega corriente alterna, algunos componentes


pueden funcionar con alterna, pero para la mayoría de los casos
requerimos de corriente directa, por lo que es necesario rectificarla. Aquí
es donde entran en juego los diodos rectificadores.

Antes de analizar los circuitos, debemos reafirmar que es la corriente


directa y la corriente alterna.

La corriente directa se ve así:

Se caracteriza porque no cambia de polaridad, siempre se mantiene en


la misma polaridad. Usualmente también se mantiene en el mismo valor,
pero esto es solo cuando no es una onda. La corriente directa podemos
encontrarla en fuentes de poder rectificadas, baterías y paneles solares.

La corriente alterna se ve así:

La corriente alterna cambia de polaridad y valor en función al tiempo. La


señal que obtenemos de nuestras casas se llama onda senoidal, de
127V o 220V y de 50hz o 60hz. Esta se encuentra en las líneas de las
casas, alternadores, generadores dinamos, etc.

48
Veamos este circuito:

La entrada al transformador, como dijimos, es una señal de alterna


senoidal a 60hz. Esto no nos sirve para alimentar circuitos de directa.

La salida después del diodo es la siguiente:

De esta manera tenemos una señal de directa de 60hz de media onda,


ya que la parte negativa simplemente no fluye a través del diodo, pero
sigue siendo inútil para nosotros, pues sigue oscilando su valor, al no ser
fija, no nos sirve.

¿Qué podemos hacer?

Aquí es cuando entran en juego los capacitores.

49
Como podrás ver, agregamos un capacitor ¿Pero por qué?
Como dijimos en la sección de capacitores, los capacitores se oponen a
los cambios de voltaje, es decir, que evitaran dentro de su capacidad
que el voltaje cambie de valor.
La salida es la siguiente:

Como podrás ver, ya es una señal estable y funciona para alimentar


circuitos de directa…. Bueno…. No todos.
Verás, el problema de los filtros de media onda, es que existe la parte de
la onda que no fluye, la parte negativa, esto hace que haya un instante
donde no hay voltaje fluyendo y en ese mismo instante también se
descarga el capacitor.
Esto significa, que al momento de tener cargas altas, por ejemplo de
500mA en adelante, esta descarga se verá más acentuada. A esto se le
llama voltaje de rizo y se ve de la siguiente manera:

Analicemos la onda a más profundidad.

50
La línea roja al fondo es 0V, es decir, tierra. La parte seleccionada como
Vr es el voltaje de rizo.
Este es determinado por la siguiente formula:

Voltaje de rizo = Corriente consumida (I) / Frecuencia * capacitancia

El voltaje de rizo puede reducirse al incrementar la capacitancia, pero


existe otra solución… El rectificador de onda completa.

51
11. Rectificador de onda completa (Puente rectificador).

Un puente rectificador es un componente hecho por 4 diodos


rectificadores. Este se utiliza para rectificar el voltaje de corriente alterna
a una señal de directa para luego filtrarse con capacitor.
El símbolo es el siguiente:

¿Recuerdas la onda de salida del rectificador de media onda? Aquí


ocurre lo opuesto.

Aquí podrás ver que no hay un hueco o un instante donde no hay


voltaje. Aquí tanto el ciclo positivo como el negativo se filtran.

52
En el ciclo positivo se activan 2 diodos y en el negativo los otros 2 como
se muestra en la siguiente imagen:

Realicemos el circuito:
Material requerido:
1. Puente rectificador de 1 Ampere.
2. Capacitor 1000uF a 16V
3. Resistencia 1kohm.
4. Transformador de 9VCA.
5. Protoboard.

Esta es su onda de salida

53
Si quieres hacer una fuente de poder, este es el método de rectificación
que debes usar, no el rectificador de media onda.

De esta manera, el problema del voltaje de rizo será menos presente por
el hecho de que la frecuencia de salida es el doble al de la entrada, en
vez de ser 60hz, es de 120hz.

Ahora ¿Cómo podemos calcular el voltaje de salida?


El voltaje de salida no es igual al voltaje que entrega el transformador,
es igual o mayor, ahora veremos porque.

El voltaje de pico, que es el voltaje máximo de la senoidal es el voltaje


máximo de salida que obtendrás.

El voltaje de pico se obtiene de la siguiente manera:

Vrms/0.707

El voltaje rms o Vrms es el indicado en el transformador.

Para un transformador de 9VCA, el Voltaje de pico o Vp se obtiene de la


siguiente manera:
Vp = 9/0.707 = 12.72VCA

Al tener un puente rectificador donde cada diodo tiene un Vd de 0.7V y 2


diodos activos al mismo tiempo en cada instante nos deja una caída de
voltaje de 1.4V

Entonces el voltaje de salida que tendremos en la carga será de 12.72V


– 1.4V= 11.32Vpout

El voltaje de salida que tendremos de 11.32V

54
12. Regulación zener.

Simbolo:

Los diodos zener son unos diodos muy especiales.


Al polarizarse directamente se comportan como un diodo rectificador,
pero, al ser polarizados inversamente, crean una caída de voltaje.

Esta caída de voltaje es de hecho, una manera muy rudimentaria de


regular voltaje, pero ¿Por qué es rudimentaria?

Verás, un diodo zener convencional puede soportar como máximo una


carga de 50mW o 0.055W. Como podrás darte cuenta, es muy poca
potencia. Como máximo podemos alimentar directamente algunos led.

Aunque los diodos zener tengan una capacidad muy pequeña, son super
importantes en métodos de regulación de voltaje, pues estos sirven
como voltajes de referencia.

Un voltaje de referencia es un voltaje que controla a un componente


amplificador de corriente como un buffer o un transistor, cuya capacidad
es mayor a la del voltaje de referencia. Más adelante lo veremos a
profundidad.

55
Veamos este interesante efecto en el protoboard.
Materiales requeridos:
1. Batería de 9V o fuente de poder de 9V.
2. 1 resistencia de 1k ohm.
3. 1 diodo zener 1n4733A.
4. 1 protoboard.

Una vez que hayas realizado las conexiones del circuito, mide con un
multímetro en voltaje, el cátodo con la punta positiva de tu multímetro y
el ánodo con la punta negativa de tu multímetro.
Anota el voltaje que obtuviste de salida y posteriormente mide el voltaje
de tu batería o fuente de voltaje.

¿No son los mismos? Excelente, esto significa que has realizado con
éxito el circuito.

Como mencionamos, el diodo zener regula el voltaje de salida, este


voltaje de salida dependerá del diodo zener en cuestión, existen una
cantidad grande de modelos los cuales tienen diferentes voltajes de
salida.

Recuerda, el diodo zener solo puede usarse como voltaje de referencia,


no debe ser usado para alimentar cargas. Esto lo aprenderás en los
próximos circuitos.

56
13. El transistor

El transistor es sin duda una de las invenciones mas importantes del


siglo pasado, este ha sido el responsable de la revolucion tecnologica
que tenemos hoy en dia.

Su funcionamiento es simple, imagínate la siguiente analogía.

El transistor actúa como una válvula. La base es el equivalente a la llave


de la válvula. El colector es la entrada de la válvula y el emisor es la
salida de la válvula.

La corriente que fluye a través del transistor es controlada por la


corriente que entra a la base.

57
Cabe aclarar algo importante, el transistor es un componente controlado
por corriente, no solo por voltaje.
El siguiente circuito es erróneo:

El circuito anterior es equivocado por el principio que ya mencionamos,


el transistor es un componente controlador por corriente, no por un
voltaje especifico.
Al no tener una resistencia en la base, no tenemos una corriente
específica entrando al transistor, por lo que este se quema.

¿Cuál es la forma correcta de utilizarlo? La siguiente:

De esa manera podemos determinar cuanta corriente le entra a la base


sin dañarlo.

Ahora ¿Cómo podemos determinar cuanta corriente va a fluir a través


del transistor? Veamos algunas fórmulas usando el circuito anterior
como ejemplo.

Primero ¿Cómo podemos determinar la corriente que entra a la base?

58
Corriente de base (Ib) = Voltaje de base (Vbb) – Voltaje de diodo (Vd) ÷
Resistencia de base (Rb).

El voltaje de base (Vbb) es el voltaje que entra a la base, en el circuito


de ejemplo es 9 volts.

El voltaje de diodo puede variar, pero usaremos el standard de 0.7Volts,


como vimos en la sección de diodo de este libro.

La resistencia de base es la resistencia puesta en la base, en este caso


es de 10k ohms o 10,000 ohms.

Ahora, apliquémoslo en la formula.

(9 – 0.7) ÷ 10,000 = 8.3x10^-4A o 830 micro amperes.

Ya que tenemos la corriente de base, calculemos la corriente de


colector.

Todos los transistores tienen una propiedad llamada “Ganancia” o


“Beta”. Este es un número que indica el factor de amplificación de la
corriente que fluye a través del transistor en función a la corriente de
base.
Este número varía de transistor en transistor y desgraciadamente,
aunque el fabricante indique un número, este no es certero, por lo que
solo podemos determinar la ganancia de un transistor con un probador
de transistores.

La corriente de colector se determina así: Beta x Ib

Suponiendo que el transistor que usamos en el ejemplo tiene una


ganancia de 100

100 x 0.000830A = 0.083A o 83mA

Así vemos que aproximadamente la corriente que va a fluir por el


colector será de aproximadamente de 0.083A, 100 veces mayor a la
corriente de base.

Ahora ¿De qué nos sirve el transistor? ¿De qué nos sirve amplificar una
corriente de base?

59
Existen componentes, como los diodos zener, microcontroladores,
arduino, y demas que no pueden entregar mucha corriente, usualmente
no mayor a 20mA.

Entonces ¿Cómo podemos controlar cargas altas como motores con un


microcontrolador o un diodo zener?

Usando un transistor, podemos controlar grandes cantidades de


corriente con un poca corriente de entrada.

Existen también los transistores PNP, los cuales se activan polarizando


negativamente la base, contrario a los npn que se activan polarizando
positivamente la base.

Los transistores PNP no son tan usados como los npn, debido a su
método de activación contrario, pero aun asi podemos darle muchos
usos útiles, conforme avancemos en el libro te darás cuenta.

60
14. Transistor en función de amplificador de corriente.

Ya que sabemos cómo utilizar un transistor, veamos su aplicación en


control de cargas, en este caso cargas ligeras como lo son los leds.

Material necesario:
1. Resistencia de 220 ohms.
2. 4 leds
3. Switch.
4. Resistencia de 10k ohm.
5. Batería 9V o fuente de poder.
6. Transistor npn bc547.
7. Protoboard.

De esta manera podemos controlar diversos leds con un transistor. Pero


no solo podemos hacer esto, también podemos controlar el brillo de
muchos leds usando un transistor. Veamos como en el siguiente circuito

61
Materiales necesarios:
Los mismos que en el anterior, solo agregamos el potenciómetro de 5k
ohm en lugar del switch y resistencia.

Si usáramos solo el potenciómetro para regular directamente la corriente


que le llega a los leds, llegaría el punto en el que el potenciómetro se
quemaría.
Usando el transistor, podemos soportar una mayor cantidad de leds sin
tener problemas. El transistor se comporta como amplificador de
corriente.
Variando el nivel de resistencia en el potenciómetro, variamos la
corriente fluyendo por el transistor, y así controlamos el brillo de los leds.

62
15. Regulacion zener con transistor de paso.

Anteriormente en la sección de diodo zener, nos dimos cuenta de que un


diodo zener no es capaz de soportar cargas mayores a 50mW.

¿Cómo podemos crear un regulador de voltaje rápido, sencillo y con


pocos componentes?

Materiales requeridos:
1. Batería de 9V o fuente de poder equivalente.
2. Resistencia de 1k ohm.
3. Diodo zener 5v 1n4733A
4. Transistor TIP31C NPN
5. Protoboard

Esta es la forma más simple de regulación lineal. El zener crea la caída


de voltaje de 5V en la base del transistor. El transistor puede soportar la
carga que el zener no puede, pero el voltaje de salida es el mismo, el
transistor en esta configuración se le llama buffer.

63
16. Reguladores de voltaje 78XX

La serie de reguladores de voltaje lineales 78XX son una serie de circuitos


integrados de salida fija o fixed output voltage.

Estos reguladores de voltaje están presentes en reguladores de voltaje de


la clase lineal. Son muy útiles para aplicaciones de regulación donde la
corriente de salida no es mayor a 1 ampere.

Al ser reguladores lineales, estos no son muy eficientes, pues su resistencia


interna es alta y por lo tanto se pierde mucha energía en calor. Por lo mismo
es necesario usar un disipador en ellos para evitar que se quemen.

La eficiencia de un regulador lineal suele ser de 30%. Todo dependerá del


voltaje de entrada y el voltaje de salida. Entre mayor sea la diferencia entre
estos 2, mayor será la energía desperdiciada en calor, por lo tanto, la
eficiencia será menor.

Otro dato a considerar, es que el voltaje de entrada debe ser al menos 2V


mayor al de salida. Por ejemplo: Si vamos a usar un regulador de 5V de
salida, la entrada deberá ser por lo menos de 7V y no mayor a 34V.

Veamos un circuito para aprender a usarlo.

64
Materiales necesarios:

1. Regulador de voltaje 7805


2. Capacitor de 100 nano faradios
3. Capacitor de 1 microfaradio
4. Batería de 9V o fuente equivalente.
5. Protoboard

El regulador consta de 3 pines, VI, GND y VO

VI significa Voltage input o voltaje de entrada, ahí es donde conectamos el


voltaje de entrada, en este caso la batería, este voltaje no debe de ser
mayor a 34V.

GND significa ground o negativo. Este pin se conecta a negativo.

VO significa voltage output o voltaje de salida, esta es la salida regulada de


voltaje, en este caso, 5V.

Con este regulador de voltaje puedes alimentar componentes que requieran


de 5V fijos, como los microcontroladores, compuertas lógicas, etc.

Este regulador te será muy útil para circuitos de electrónica digital. Cosa
que veremos más adelante en el libro.

65
17. Fuente de poder lineal variable con lm317

El circuito integrado lm317 es un regulador lineal de salida variable. Su


construcción y funcionamiento es muy similar a los reguladores de la
familia 78XX, pero en este caso tenemos la posibilidad de variar el
voltaje de salida. Desde 1.2V como mínimo hasta 30V.

Debido a su bajo costo y facilidad de operación, es el circuito integrado


favorito por principiantes para realizar su primera fuente de poder.

El lm317 soporta una entrada de voltaje máxima de 34VCD. Este se


puede alimentar con baterías o con un transformador y un rectificador de
onda completa.

El lm317 soporta una corriente de salida de 1Ampere máximo, por lo


tanto no debe usarse para alimentar cargas mayores a ese valor.

Es recomendable también poner un disipador, pero puede variar según


su uso.

66
Hagamos una fuente de poder con este integrado.

Materiales requeridos:
1. Batería o fuente de poder de 24V (Este voltaje es opcional, pero debe
ser mayor a 7V)
2. 2 capacitores de 1uF.
3. resistencia de 240 ohm.
4. potenciómetro de 5kohm.
5. lm317
6. protoboard.

Como podrás ver, el circuito es muy parecido al de un 78XX, pero con la


diferencia que tenemos un divisor de voltaje en el pin ADJ.
Para determinar el voltaje de salida, empleamos la siguiente formulada
dada por el fabricante:

Dónde:
Vout : Voltaje de salida.
1.25V : voltaje interno de referencia.
R2: Potenciometro
R1: Resistencia 240 ohm en nuestro circuito.

67
18. Lm317 + transistor 2n3055 (Regulador de potencia de 3 amperes).

Como mencionamos en el circuito anterior, el regulador lm317 solo


puede soportar un máximo de 1Ampere. ¿Qué podemos hacer para
aumentar su potencia?

¿Recuerdas el circuito de regulación zener? Usaremos la misma técnica,


usaremos el lm317 como una fuente de voltaje de referencia que
controla a un transistor de potencia.

En este caso, usaremos el transistor NPN 2n3055, el cual puede


soportar fácilmente 3Amperes.

Distribución de pines:

68
Veamos el siguiente circuito:

Materiales necesarios:
1. Transformador de 24VCA 3 amperes
2. Puente rectificador de diodos 5 amperes.
3. capacitor de 2200 micro faradios. De 35V en adelante.
4. capacitor 100 micro faradios de 35V en adelante.
5. resistencia de 240 ohms.
6. potenciómetro de 5k ohms.
7. resistencia de 100 ohms.
8. transistor 2n3055.
9. regulador lm317.
10. protoboard.

Con este regulador podrás alimentar circuitos que consuman mucha corriente,

Como motores o iluminación.

Debes de ponerle un disipador al transistor 2n3055, pues 3A aumentarán


mucho su temperatura.

Aquí tienes una idea de cómo montarlo:

69
19. Fuente de poder lineal dual (voltaje positivo y negativo).

Las fuentes de poder dual, consisten en fuentes que entregan un voltaje


tanto positivo y negativo.

Como vimos en el rectificador de onda completa, el semi ciclo negativo


se convierte a positivo, y terminamos con una salida de 120hz.

Aquí no sucede esto, aquí se aprovecha tanto el ciclo positivo como el


ciclo negativo. Este tipo de fuentes de poder no son muy utilizadas, pues
no es muy común requerir voltajes negativos, solo en amplificadores de
audio o amplificadores de señales de precisión se suelen usar estas
fuentes.

Para realizar esta fuente necesitamos de un transformador de tap


central.

Los transformadores con tap central tienen 3 cables en la salida.


Esto es, porque el tap central o derivación central consiste en dividir en 2
partes un devanado o bobinado, de esta manera al tener un voltaje de
salida, podemos dividirlo en 2 usando el cable de en medio como 0V.

Por ejemplo, si tenemos una salida de 24V y tiene tap central, podemos
obtener 12V y 12V en ambas partes.

70
Hagamos una fuente de poder dual.

Materiales:
1. Transformador de 24V con tap central.
2. Puente rectificador.
3. 2 capacitores de 1000uF
4. Regulador lm317
5. Regulador lm337
6. 2 diodos 1n4007
7. 2 resistencias de 220 ohms.
8. 2 potenciometros de 5k ohms.
9. 2 capacitores de 100uF
10. 2 conectores de bloque de 3 entradas

Como podrás darte cuenta, es como si tuviéramos el circuito en modo espejo,


pues el diagrama luce igual. Pero ten cuidado, pues la distribución de pines del
lm337 NO es igual a la del lm317. Como se muestra a continuación.

71
Como podrás ver, la distribución es distinta, aunque sean idénticos en forma.

El lm 337 es un regulador negativo, por lo que solo funciona con voltaje


negativo, no debe ser alimentado con voltaje positivo.

Soporta hasta -34V de entrada y una corriente de 1.5A MAX.

El segundo elemento nuevo presente en el circuito es el conector de bloque.

Los conectores de bloque son conectores donde podemos introducir el cable o


alambre y realizar la conexión atornillándolo, sin necesidad de soldar.

En el diagrama tenemos 2 conectores de bloque, la entrada del transformador y


la salida de voltaje.

En la entrada del transformador, las 2 entradas extremas son para los extremos
de la salida y el centro para conectar el cable del tap central, esto no debe
conectarse de otra manera. Los extremos no tienen orden de conectarse, pero
el tap central SIEMPRE debe conectarse en medio, ya que es 0V o tierra.

En la salida de voltaje, tenemos que los extremos son 24V y -24V, el centro es
0V o negativo.

72
20. Motor eléctrico de corriente continua DC.

El motor eléctrico consta de una bobina que al ser alimentada con


electricidad, mueve un rotor conformado por bobinas, repelando los
campos magnéticos del rotor, causando movimiento.

Existen motores de corriente directa de muchos tamaños y capacidades,


en este caso usaremos un motor pequeño de 9V y de 40mA

Estos motores no tienen una polaridad “definida” pero la polaridad con la


que lo alimentemos definirá el sentido del giro del motor, más adelante
veremos cómo cambiar el giro del motor.

73
Materiales necesarios

1. Batería 9V.
2. Switch.
3. Motor de DC 9V.
4. Protoboard.

Al presionar el botón, harás girar el motor en un sentido. Si intercambias


la polaridad del motor harás girar al motor en sentido contrario.

La velocidad del motor dependerá de diversos factores, como su voltaje


de operación, inductancia, revoluciones por minuto específicas, etc.

74
21. Control de velocidad de motor DC lineal con transistor

Para controlar la velocidad de un motor debemos variar el voltaje


efectivo que le llega al motor.

Una manera muy rudimentaria de hacer esto es usar un potenciómetro


como divisor de voltaje, usar este voltaje como referencia que controla a
un transistor, y este controla al motor.

Materiales necesarios:
1. Motor 9V.
2. Batería o fuente de 9V.
3. Potenciómetro de 5k ohm.
4. Transistor tip31c.
5. Protoboard.

Lo ideal es usar un transistor de mediana potencia como un tip31c, este


soporta hasta 3A, pero es necesario usar un disipador. Si quieres
comprarle un disipador, búscalo como disipador para empaquetado TO-
220.

Ejemplo:

75
22. Inversor de giro de motor DC con transistores (Puente H).

Como dijimos anteriormente, para invertir o cambiar el giro de un motor


debemos de cambiar la polaridad de conexión.

Podemos realizar un inversor de giro usando transistores.

Materiales necesarios:
1. Bateria 9V o fuente de poder equivalente.
2. 2 botones tipo push button.
3. 4 diodos 1n4007.
4. 2 transistores npn tip31c.
5. 2 transistores pnp tip32c.
6. Motor de 9V.
7. 2 resistencias de 100 ohms.
8. 2 resistencias de 10k ohms.

76
Tenemos 2 botones, giro 1 y giro 2.

Al presionar giro 1, activamos el transistor Q1 que es npn, y el transistor q3 al


estar polarizado a tierra y ser pnp, está activado, entonces el giro es en un
sentido.

Al presionar giro 2, activamos el transistor Q4 que es npn, y el transistor Q2 se


polariza negativamente y se activa, y de esta manera gira al sentido contrario.

Los diodos funcionan como protecciones anti flyback, conforme avancemos en


el libro comprenderás mejor este efecto y lo explicaremos de manera mas
detallada.

ADVERTENCIA: NO presiones ambos botones al mismo tiempo, pues crearas


un corto circuito y puedes dañar los componentes y/o dañar la bateria y motor.

77
23. Relevadores.

Un relevador es un switch electromecanico compuesto por una bobina y


un contacto abierto.

Al energizar la bobina, se crea un campo magnetico y cierra el contacto,


actuando como un switch.

¿Cuál es el fin de usar un relevador? El relevador cumple una funcion


parecida a la de un transistor. Nos permite controlar cargas grandes con
una señal pequeña, pero el relevador tiene ciertas caracteristicas que lo
hacen mejor que un transistor para ciertas aplicaciones.

-Un relevador no se calienta, por lo que no necesitamos usar disipador.


-Un relevador funciona como un aislador de señales, podemos controlar
un foco de 120V de corriente alterna con una bateria de 9V y no
corremos riesgo de electrocución.

Los relevadores tienen un voltaje de operación de la bobina, en corriente


directa podemos encontrarlos de 5V,9V,12V,24V.
En corriente alterna podemos encontrarlos de 120VCA y 220VCA.

Lo antes mencionado es el voltaje de activacion o de bobina, que es el


necesario para activar el relevador.

Ahora, las especificaciones del contacto o switch suelen ser de 250VCA


y 3A. Esto puede variar según el relevador y debe revisarse en las
especificacione mostradas al frente del relevador.

La bobina de un relevador no debe alimentarse con un voltaje mayor al


que especifica, de lo contrario se dañará.

Veamos como usar el relevador.

78
Materiales necesarios:
1.Bateria de 9V
2.Switch
3.relevador de 9V
4.resistencia de 1k ohm.
5.Led

Al presionar el boton, activaremos el relevador y encenderemos el led.

Como verás, el relevador es muy facil de controlar, pero tiene una


pequeña desventaja.

Al ser una bobina un simple conductor, este tiene una resistencia baja,
usualmente de 50 ohms.

Esto significa que un relevador consume una corriente levemente


significante, entre 24mA a 80mA.

Por lo tanto no podemos activarlos directamente con microcontroladores


o compuertas, pues los quemariamos.

79
24. Encendido y apagado de foco 120VCA con transistor y relevador.

ADVERTENCIA: en este circuito estaremos usando la linea de


alimentacion de 120V de corriente alterna. El manejo inadecuado o
irresponsable de un voltaje de esta magnitud puede dañarte o
incluso matarte. Si eres menor de edad o no tienes experiencia con
la electricidad, pide ayuda a un adulto responsable que tenga por lo
menos conocimientos basicos.

Como mencionamos anteriormente, el relevador funciona como switch


aislador, podemos controlar voltajes altos con una simple bateria de 9V.
En esta ocasión veremos como controlar un relevador usando un
transistor, habilidad que te será muy util en la seccion intermedia y
avanzada de este libro.

Materiales necesarios:
1.bateria de 9V
2.Transistor npn bc547
3.Relevador de 9V.
4.switch.
5.resistencia de 1k ohm.
6.foco de 127VCA
7.protoboard.

80
Al presionar el botón, polarizaremos el transistor y activaremos el
relevador. Al activarse, cierra el switch interno y se encenderá el foco.

Ahora, antes de que lo realices, no cometas los siguientes errores:

1. No conectes nada entre el foco y la parte de corriente directa.


2. No toques los cables de alimentacion del foco, pues sufriras una
electrocucion si lo haces.
3. No intentes prender el foco usando solo el transistor, pues explotará
el transistor, la pila y probablemente sufras daños.

¿Qué uso tiene esta configuración?

Los sensores, que veremos mas adelante en el libro, funcionan con


corriente directa.

Si queremos que estos sensores controlen cargas de corriente alterna,


cargas que consumen mucha corriente, etc. Debemos usar transistores
e incluso relevadores para que esto suceda.

81
24.Diodo emisor infrarrojo y diodo receptor infrarrojo.

Los diodos emisores y receptores infrarrojos, constan de el emisor, cuyo


funcionamiento es igual al de un led. El receptor se comporta como un
diodo, pero solo se activa o deja fluir la corriente cuando recibe luz
infrarroja.

Este tipo de diodos se usa principalmente para comunicación de


dispositivos de corta distancia, como los controles remotos para
televisores.

También era usado comunmente para transferencia de archivos entre


celulares.

82
Hagamos un circuito interesante

Materiales necesarios:

1. Bateria 9v
2. Diodo emisor infrarrojo
3. Diodo receptor infrarrojo
4. 2 resistencias de 1k ohm.
5. Protoboard.

Al momento en el que el diodo receptor reciba la luz infrarroja emitida


por el diodo emisor, el led encenderá.

Podemos reemplazar el diodo emisor por un control remoto, apuntamos


directamente al diodo receptor y presionamos cualquier motor, cuando la
luz llegue al diodo receptor, el led encenderá.

83
25. Control remoto de motor de DC

Ya que hemos aprendido a usar los diodos infrarrojos, hagamos un


control inalambrico de corto alcance para un motor de dc.

Materiales necesarios:

1.diodo infrarrojo receptor.

2.bateria 9V.

3.resistencia de 1k ohm.

4.capacitor de 1 micro faradio.

5.transistor npn tip31c.

6. control remoto de televisión.

Usando el control remoto, apuntamos directamente al diodo receptor y


presionamos cualquier motor.

Al recibir luz, el diodo se activará y el transistor se activará tambien y el


motor comenzará a girar.

84
26. Fotoresistencias.

La fotoresistencia es una resistencia cuyo valor varía según la cantidad


de luz que le llegue a esta. Usualmente la resistencia disminuye al
recibir luz.

Una fotoresistencia puede tener un valor estándar de 100k ohm al no


estar recibiendo luz, pero este valor puede variar según el fabricante.

Estas resistencias, al igual que cualquier resistencia común y corriente,


no tiene polaridad.

Esta resistencia es especialmente util para crear sensores de luz, tanto


para medir la cantidad de luz presente, como para crear sistemas de
apagado de luces automatico.

Hagamos un simple sensor de luz.

85
Materiales:

1. Bateria de 9V o fuente de poder equivalente.


2. Resistencia de 1k ohm.
3. Resistencia de 10k ohm.
4. Fotoresistencia.
5. Led
6. Transistor npn bc547.
7. Protoboard.

Como podras ver, estamos controlando al transistor usando un divisor


de voltaje conformado por la fotoresistencia y la resistencia de 10k ohm.

Como dijimos anteriormente, al no recibir luz una fotoresistencia tiene


una resistencia de 100k ohm.

Aplicando la formula de divisor de voltaje donde R1 es la fotoresistencia


y R2 es la resistencia de 10k ohm.

Vsalida = R2/R1+R2 * Ventrada

Vsalida = (10,000 / 110,000) * 9V = 0.81V

Es un voltaje muy bajo, por lo tanto el led no enciende.

Al tener la fotoresistencia recibiendo luz, su resistencia suele ser de


entre 10k ohm a 20k ohm.

Vsalida = (10,000 / 30,000) * 9V = 3V. Este es un voltaje suficiente para


encender el led.

86
Podemos aplicar la logica inversa, que el led se encienda al no haber
luz llegando a la fotoresistencia.

Los materiales necesarios son los mismos.

Aquí simplemente invertimos la logica, al momento de recibir luz llega el


menor voltaje a la base del transistor y no enciende el led.

Al dejar de recibir luz, llega el mayor voltaje al transistor y enciende el


led.

Esto es util para crear, por ejemplo, un encendedor nocturno automatico


de luces del hogar, aunque cabe recalcar que debemos agregar mas
componentes para hacerlo, el metodo es el mismo.

Mas adelante veremos como hacerlo.

87
27. Amplificador de microfono sencillo.

El microfono electret es un tipo de microfono presente en millones de


dispositivos, como el microfono de tu celular, el microfono de una
diadema, etc.
Estos microfonos tienen una construccion interna muy simple, por lo que
son muy baratos y faciles de usar, pero la calidad de audio de estos no
es la mejor.

El microfono por si solo no puede funcionar, pues la señal de salida es


muy debil y no es lo suficientemente fuerte como para hacer sonar una
bocina. Para esto usaremos un amplificador de voltaje con 1 solo
transistor.
Material:
1. Bateria de 9V o fuente equivalente.
2. 2 resistencias de 10k ohm.
3. Resistencia de 100k ohm.
4. 2 capacitores de 100nF.
5. Microfono electret.
6. Transistor 2n3904

88
Este circuito funciona como un amplificador de voltaje.

El transistor 2n3904 es un transistor de alta ganancia, por lo que es especial


para estas aplicaciones. Usualmente este circuito se usa como pre amplificador
para una etapa de potencia, el principio parecido a la configuración Darlington.

El capacitor que conecta el micrófono al transistor cumple la función de


acoplador, esto significa que solo deja pasar el componente de alterna.

De igual manera con el capacitor de salida a la bobina, cumple la misma


función.

Las ondas de esta grafica corresponden a la entrada y salida del amplificador.

La onda amarilla corresponde al voltaje de salida del micrófono. Como podrás


ver es un voltaje muy chico, de alrededor de 200mVp-p.

La onda de color azul corresponde a la salida del amplificador, el cual es de


6Vp-p, de esta manera hemos amplificado la señal de entrada 30 veces.

Ahora, ya habrás notado que la señal de salida no es igual a la señal de


entrada.

¿Recuerdas la forma de la onda del rectificador de media onda? ¿Notas alguna


similitud? Es la misma forma.

Esto se debe a que solo estamos amplificando la parte positiva de la señal del
micrófono, no la parte negativa del micrófono.

Este tipo de amplificadores no son muy precisos, lo ideal es usar un opamp, lo


cual veremos más adelante en el libro.

89
28. Termistores.

El termistor es una resistencia variable por medio de temperatura.

Existen básicamente 2 tipos de termistores, los NTC y los PTC.

Los NTC o negative coeficient es el termistor cuya resistencia disminuye


al aumentar su temperatura.
Símbolo:

Los PTC o positive coeficient es el termistor cuya resistencia aumenta al


aumentar su temperatura.
Símbolo:

Los termistores son componentes comúnmente usados para detectar la


presencia de altas temperaturas. Usualmente para proteger a otros
componentes como transistores de sobrecargas térmicas.

Hagamos un simple sensor de calor usando un termistor.

90
Materiales necesarios:
1. termistor de 100k ohm.
2. batería de 9V o fuente de poder equivalente.
3. resistencia de 1k ohm.
4. resistencia de 10k ohm.
5. led
6. transistor npn bc547
8. protoboard.

Para hacer la prueba te recomiendo

Para hacer la prueba te recomiendo que uses un encendedor para


calentar el termistor.
De nuevo usamos el divisor de voltaje para controlar el transistor
Consideramos el termistor como R1 y la resistencia de 10k como R2.
Vsalida = R2/R1+R2 *Ventrada
Vsalida = (100,000 /110,000) * 9V = 0.81V Esto es cuando no recibe
calor el termistor.

Al recibir calor su resistencia puede variar hasta cierto valor minimo, en


este caso lo tomaremos como 10k ohm.
Vsalida = (10,000 / 20,000) * 9V = 4.5V
Aquí ya tendremos el led encendido.

Puedes variar la sensibilidad de este circuito reemplazando la


resistencia de 10k por un potenciómetro del mismo valor.

Variando su resistencia cambias la relación en el divisor de voltaje y


activaras el led a diferentes temperaturas.

91
29. Oscilador con 2 transistores.

Un oscilador es un circuito electrónico que genera una salida de voltaje


cuyo valor oscila o varía en función al tipo de oscilador.
La onda puede ser de diferentes tipos, como los siguientes:

Onda cuadrada:

Onda senoidal:

Onda triangular:

Onda diente de sierra:

En este caso haremos un oscilador cuyo funcionamiento es emular las


luces estroboscópicas de una sirena de policía. Haciendo que se
enciendan y apaguen en secuencia.

92
Materiales necesarios:
1. 2 resistencias de 4.7k ohm.
2. 2 resistencias de 47k ohm.
3. 2 capacitores de 10nF
4. 2 leds
5. Batería de 9V o fuente de poder similar.
6. 2 transistores npn bc547.
7. Protoboard.

El funcionamiento de este circuito es muy simple. Consta de un oscilador


RC o resistivo capacitivo controlado por transistores. Debido a las
impurezas de los transistores, uno se encenderá primero. Al encenderse
uno, descargara el capacitor del otro transistor y lo apagara, mientras
que el suyo se cargara, una vez cargado completamente, activa el otro
transistor y descarga su capacitor mientras el suyo se carga. De esta
manera tenemos una salida cambiante, algo parecida a la señal
cuadrada.
Mientras un transistor esta encendido, su led está apagado. Mientras el
transistor está apagado, su led estará encendido.

Podemos variar la frecuencia o velocidad de intermitencia cambiando el


valor de los capacitores. Capacitores de menor tamaño significan una
oscilación a mayor velocidad, capacitores a mayor tamaño significa
oscilación a menor velocidad.

Esto es, porque mayor capacitancia significa mayor retención de carga,


por lo tanto tarda más en descargarse el capacitor.

93
30. Probador de fases con transistores

Usualmente en un hogar común, la instalación eléctrica en un enchufe


se compone de la siguiente manera.

Esto es por “norma” en México, el slot de la izq es la fase, y el derecho


es el neutro.

Saber esto es “util” hasta cierto punto, pues usualmente los electricistas
se pasan las normas por los h%$!s y instalan las cosas como se les da
la gana.

Esto es un problema grave, pues supongamos que necesitamos saber la


fase y neutro para hacer otra conexión externa desde el enchufe, pero
no tenemos ni idea, y conectar erróneamente esto podría terminar
potencialmente en una electrocución.

Entonces ¿Qué podemos hacer para detectar la fase y detectar el neutro


en un enchufe o cualquier instalación eléctrica?

Podemos realizar un circuito a base de transistores para poder detectar


la fase sin realmente realizar un contacto.

94
Materiales:
1. Batería de 9V
2. 2 transistores npn bc547
3. Transistor pnp bc557
4. Resistencia de 100k ohm
5. Resistencia de 1k ohm
6. Resistencia de 330 ohms
7. Capacitor de 1nF

El funcionamiento del circuito es muy sencillo, al momento en que la


antena está muy cerca o “tocando” el cable o conductor que lleva la
fase, el led enciende. Al momento de tocar neutro, el led permanece
apagado.

Como podrás ver, la antena es un simple cable que sale, sinceramente


sugiero que la antena la hagas con un alambre calibre 22 con aislante,
este lo enrollas formando una antena y listo. No es necesario que exista
un contacto eléctrico entre la antena y el conductor a probar, es por esto
que se sugiere el uso de alambre con aislante.

95
31. Electroimán con inductor.

Un inductor es prácticamente un conductor como un alambre de cobre


enrollado formando una bobina. Su núcleo puede ser de aire, o de
ferrita.

La función de un inductor es formar un campo magnético con el flujo de


corriente.

Por contrario de un capacitor, un inductor se opone a los cambios de


corriente. Esta es una utilidad que nos servirá más adelante.

Los inductores están presentes en solenoides, relevadores, motores,


transformadores, filtros, etc.

La unidad de los inductores es el Henrio(H).

Podemos aprovechar la propiedad del campo magnético para crear un


electro imán.

96
Materiales:
1. Batería de 9V o fuente de poder equivalente.
2. Switch.
3. Inductor de 100micro henrios de núcleo de hierro.
4. Resistencia de 10 ohm.
5. Protoboard.

Al presionar el switch, la corriente va a fluir a través del inductor.


Esto genera el campo magnético en el inductor.

Con este campo magnético podemos atraer pequeñas cosas férricas


como tornillos o clips.

Para aumentar la intensidad del campo magnético podemos cambiar el


inductor por uno de mayor inductancia.

97
Nivel
Intermedio

98
32. Amplificador operacional (OPAMP).

El amplificador operacional o opamp es un circuito integrado cuya


función principal es la de funcionar como amplificador de voltaje.

¿Por qué usar un amplificador operacional o opamp en lugar de un


amplificador con transistores?

El amplificador operacional tiene muchas ventajas frente a un


amplificador transistorizado, como lo son: menor precio, mayor precisión,
versatilidad y tamaño ultra reducido.

Los opamps o amplificadores operacionales son muy útiles en la


electrónica, pues nos permite amplificar señales como audio, video,
señales digitales, señales de sensores, etc.

El opamp consta generalmente de la siguiente configuración:

Vs+: Voltaje de alimentación positivo


Vs- : 0V o voltaje de alimentación negativo.
V+: Entrada no inversora.
V- : Entrada inversora.
Vout: salida.

99
Existen diversas configuraciones para usar el opamp, como amplificador
no inversor, amplificador inversor, comparador, buffer, etc.

Pero vayamos por partes, primero, veamos lo básico y hagamos un


amplificador no inversor.

Materiales necesarios:
1. Batería de 9V o fuente de poder equivalente.
2. 3 resistencias de 10k ohm.
3. 1 resistencia de 1k ohm.
4. 1 potenciómetro de 50k ohm.
5. 1 microfono electret.
6. 1 capacitor de 100 nano faradios.
7. 1 capacitor de 1 micro faradio.
8. 1 opamp lm358.
9. 1 bocina pequeña.
10. Protoboard.

100
Veamos cómo funciona este amplificador simple.

El opamp en configuración de amplificador no inversor funciona de la


siguiente manera:

La salida del opamp hará todo lo posible para que la entrada inversora
tenga el mismo voltaje que la entrada no inversora.

Como podrás ver, la señal entra en la entrada no inversora, pero el


voltaje de salida se conecta a un divisor de voltaje que va a la entrada
inversora ¿Pero porque?

Como dijimos anteriormente, la salida hará lo posible para que la


entrada no inversora tenga el mismo voltaje que la inversora.

Aprovechando esta propiedad, podemos hacer que la señal de salida


sea mayor a la señal de entrada usando un divisor de voltaje.

La fórmula para obtener la ganancia de amplificación:

𝑅𝑓
𝑉𝑠𝑎𝑙𝑖𝑑𝑎 = 𝑉𝑒𝑛𝑡𝑟𝑎𝑑𝑎 𝑥 ( + 1)
𝑅𝑔

Suponiendo que:
Ventrada = 800mV o 0.8V
Rf = 10k ohms o 10,000 ohms
Rg = 1k ohms o 1,000 ohms.

Sustituyendo en la ecuación tenemos el siguiente resultado:

10,000
𝑉𝑠𝑎𝑙𝑖𝑑𝑎 = 0.8𝑉 𝑥 ( 1000 + 1) = 8.8V

101
De esta manera podemos amplificar señales muy pequeñas, como
puede ser la salida de un micrófono.

Es por esto que podemos amplificar la señal de salida del micrófono y


poder escuchar la voz a través de la bocina.

Todos los opamps tienen obviamente limitaciones.

Estos pueden ser: Voltaje de alimentación, ganancia máxima, frecuencia


de señal máxima, corriente de salida máxima, etc.

Siempre que necesitemos de usar un opamp, debemos de revisar en el


datasheet proporcionado por el fabricante sus especificaciones y revisar
si el opamp es apto para la aplicación que deseamos darle.

102
33. Opamp en modo buffer.

El opamp en modo buffer es un simple amplificador de corriente.

Según la forma de operación del opamp, tenemos que el voltaje de


entrada es igual al voltaje de salida en su configuración no inversora.

Debido a la propia estructura del opamp, esta es la forma más efectiva


de dar seguimiento a una señal y tener la menor caída posible.

Esto significa que estabilizamos la señal.

Supongamos que tenemos una señal de HDMI que tiene que recorrer
largas distancias. Debido a la impedancia de los cables, la señal puede
que no llegue integra al dispositivo receptor y por lo tanto, se pierdan
datos.

Aquí es donde entran en juego los buffers. Estos dan seguimiento a la


señal, ayudan a que la integridad de la señal se mantenga.

Esta configuración no es utilizada muy comúnmente, pero es importante


que la conozcas.

Ahora, hagamos un circuito simple para que entiendas mejor su


funcionamiento.

103
Materiales necesarios:
1. Batería de 9V o fuente de poder.
2. Potenciómetro de 1k ohm.
3. Opamp lm358.
4. Resistencia de 100 ohms.
5. Transistor npn tip31c.
6. Motor de 9VDC

Como podrás ver es casi el mismo circuito que el controlador de


velocidad de motor lineal con potenciómetro. Pero en esta ocasión
hemos creado una especie de “potenciómetro mejorado” usando un
buffer para que este voltaje sea mucho más estable y se pueda
consumir más corriente de esta señal.

104
34. Opamp en modo comparador

Los opamps pueden usarse también como comparadores de voltaje.

Esto significa que podemos comparar 2 señales y obtener una salida


alta o baja en el opamp.

Un comparador nos puede ser útil para, por ejemplo, crear un detector
de límite de algún parámetro, como lo puede ser temperatura, luz,
humedad, etc.

En el momento en el que una señal pasa ese límite, el opamp manda


una señal de voltaje. Si no ha pasado ese límite, el opamp no manda
nada.

Veamos un circuito para ver su funcionamiento.

Materiales necesarios:
1. Fuente de poder de 12V.
2. Foto resistencia de 100k.
3. Resistencia de 10k ohm.
4. 2 resistencias de 1k ohm.
5. Potenciómetro de 10k ohm.
6. Opamp lm358.
7. Led.
8. Protoboard.

105
Aquí tenemos un detector de oscuridad.

Este circuito, con los cambios necesarios, puede usarse para encendido
automático de focos en una casa al momento de que llegue la noche.

Al momento en el que el voltaje presente en la entrada no inversora sea


mayor al de la entrada inversora, el led encenderá.

Puedes cambiar la sensibilidad con el potenciómetro, de esta manera, el


led encenderá a diferentes niveles de oscuridad.

106
35. Amplificador de audio de baja potencia monoaural con LM386.

Usar un opamp convencional puede ser más que suficiente para


amplificar señales de audio, pero si lo que queremos es tener una salida
de audio de mejor calidad, lo ideal sería usar un amplificador de audio
dedicado.

En esta ocasión, usaremos el amplificador de audio monoaural lm386.

Este amplificador puede proporcionar hasta 1W. ¿Esto es mucho, es


poco?

La verdad es que esto es poco, este amplificador está ideado


principalmente para usarse con audífonos o usando bocinas pequeñas.

No esperes gran potencia con este amplificador, pero es bueno para


comenzar con diseño de amplificación de audio.

Lo bueno de este amplificador es su baja distorsión harmónica, esto nos


brinda una calidad de audio mejor en comparación de usar un simple
opamp.

Ya que tenemos en claro la función de este circuito integrado,


comencemos con un diagrama simple de cómo usarlo.

107
Materiales :
1. Batería de 9V o fuente de poder equivalente.
2. Amplificador lm386
3. Potenciómetro de 100k.
4. Capacitor de 10uF electrolítico
5. Capacitor de 220uF electrolítico
6. Capacitor de 100nF
7. Capacitor de 47nF
8. Resistencia de 10 ohms.
9. Bocina pequeña o audífonos.

Debes de conectar el positivo de su salida de audio (celular,


computadora, etc.) a la terminal indicada del potenciómetro. El negativo
se conecta al negativo del circuito.

El potenciómetro actuará como divisor de voltaje, por lo que lo usaremos


para regular el volumen.

El capacitor en serie a la bocina, se usa para que solo la componente de


alterna de la señal fluya, mejorando la calidad de audio.

Si deseas conectar audífonos, solo conecta el canal L y R juntos a la


salida en lugar de la bocina, y el negativo de los audífonos con el
negativo del circuito.

108
36. Timer 555

Un timer es un sistema encargado de entregar señales que oscilan a un


cierto tiempo. Estos pueden ser de horas, minutos, segundos, mili
segundos, micro segundos, nano segundos, etc.

Esto puede ser con la función de automatizar procesos, generar señales,


controlar circuitos integrados digitales y un muy largo etc.

El timer 555 es uno de los circuitos integrados más populares en el


mundo de la electrónica, ya que la cantidad de funciones y proyectos
que se pueden hacer con él es inmensa.

Este integrado cuenta con 8 pines, los cuales son:


#1-Ground : Negativo o 0V.
#2-Trigger: Disparo o gatillo.
#3-Output: salida.
#4-Reset: Reseteo del timer.
#5-Control voltage: Voltaje de control.
#6-Threshold: Margen o umbral.
#7-Discharge: Descarga.

Hagamos un circuito simple para que te familiarices con el circuito


integrado.

109
Materiales necesarios:

1. Fuente de poder de 12V.


2. 2 resistencias de 1k ohm.
3. Potenciómetro de 10k ohm.
4. Capacitor de 10uF
5. Led.
6. Protoboard.

En esta configuración el timer está configurado como oscilador, cuya


salida es una onda cuadrada.

El led debe oscilar, la frecuencia de oscilación o encendido y apagado


está dada por la siguiente formula:

1.44
𝑓=
(𝑅1 + 2𝑅2) ∗ 𝐶

110
Donde en nuestro circuito:
R1 = 1k ohm o 1000 ohms.
R2 = 10k ohm o 10,000 (Variable).
C = 10uF o 0.000010 F.

Sustituyendo obtenemos:

1.44
= 6.85hz.
(1000+2∗10,000)∗0.000010

De esta manera podemos determinar la frecuencia de salida de nuestro


timer.

Disminuyendo el valor del capacitor podemos aumentar


considerablemente la frecuencia de salida.

111
37. Luces secuenciales con timer 555 y CD4017

El CD 4017 es un contador secuencial, esto significa que por cada pulso


que recibe en el pin “Clock” va realizando la secuencia de encendido de
los pines.

El pin reset reinicia la secuencia desde la primer salida o Q0. Si


queremos que la secuencia sea de 8 salidas, conectamos Q8
directamente a reset, esto para que al momento en el que se active Q8,
mande la señal directo a reset y se reinicie.

El pin disable es usado para controlar si el integrado está encendido o


apagado. Al ser un pin negado, si lo conectamos a 0V funciona el
integrado, si lo conectamos a positivo, el 4017 se apaga.

Podemos usar un timer como el 555 para enviarle la señal de pulso al


integrado y crear una secuencia de encendido, con el que podemos
controlar, por ejemplo, leds.

112
Materiales necesarios:
1. Fuente de poder de 12V.
2. Resistencia de 1k ohm.
3. Potenciómetro de 10k ohm.
4. 8 resistencias de 220 ohms.
5. Capacitor de 10uF.
6. 8 leds.
7. Lm555.
8. CD4017.
9. Protoboard.

Cada que el 555 manda el pulso, corre la secuencia.

La velocidad en la que corre la secuencia depende directamente de la


frecuencia de la señal de salida del 555.

113
38. Vúmetro con Lm3914

Existen diversas maneras de hacer lucir a un proyecto de audio, una de


ellas es usando un vúmetro.

La función de un vúmetro es de cierta manera “graficar” el volumen de la


música en una serie de luces, siendo la primera luz el nivel más bajo y la
última luz el nivel alto.

Existen diversas formas de hacer un vúmetro empleando componentes


discretos, pero existe una manera más sencilla de hacerlo, usando el
integrado lm3914.

114
Este circuito integrado es un vúmetro de 10 salidas, el cual soporta una
alimentación de hasta 35V. Y sus salidas configuradas en colector
abierto.

Veamos la función de cada pin:

Pin 18 a 10 y 1: Salidas para los led en configuración de colector abierto.


Pin 2: 0V o GND.
Pin 3: Voltaje de alimentación.
Pin 4: Divisor nivel bajo.
Pin 5: Señal de entrada.
Pin 6: Divisor nivel alto.
Pin 7: Referencia de salida.
Pin 8: Ajuste de referencia.
Pin 9: Selección de modo.

Usar este integrado es muy sencillo, y para darle una aplicación más
notoria, lo usaremos con el amplificador que hicimos previamente, el
lm386.

Materiales necesarios:
1. Protoboard.
2. Batería o fuente de poder de 9V a 12V.
3. Lm386
4. Lm3914
5. Potenciómetro de 1k ohm.
6. Resistencia de 10 ohms.
7. Resistencia de 1.2k ohm.
8. Resistencia de 3.9k ohm.
9. 10 leds.
10. Capacitor de 100nF.
11. Capacitor de 47nF.
12. Capacitor de 10uF.
13. Capacitor de 220uF
14. Bocina.

115
Usando el lm386 para amplificar la señal de audio de entrada,
conectamos la salida a la entrada del lm3914 para que haga la
secuencia según el volumen de la música.

Los leds no llevan una resistencia debido a que el integrado tiene el


arreglo interno para protección de sobre corriente.

Puedes usar cualquier fuente de audio, como la salida de tu celular para


realizar el circuito, recuerda también conectar el negativo del cable de
audio de tu celular al negativo del circuito.

116
39. PWM

El PWM o Modulación por ancho de pulso, es una técnica de control de


potencia muy popular debido a su alta eficiencia para control de cargas
como motores o iluminación.

Consiste en controlar el tiempo de apagado y el tiempo de encendido de


una señal cuadrada.

Esta técnica es mejor que el control lineal (variar la resistencia) ya que


la potencia perdida en forma de calor es mucho menor.

En este circuito, empleamos un control lineal, ya que al manipular el


voltaje y corriente que entra en la base del transistor, hacemos que este
se comporte como una resistencia variable.

117
Esto hace que el transistor se caliente al aumentar su resistencia,
causando pérdidas de energía y sobrecalentamiento del mismo.

Al usar la técnica del pwm, controlamos el tiempo de encendido y


apagado del transistor.

Al controlar el tiempo de encendido y apagado, controlamos el voltaje


promedio que le llega a la carga.

A mayor tiempo de encendido, mayor voltaje promedio, a menor tiempo


de encendido, menor voltaje promedio.

A este porcentaje de encendido y apagado, se le llama “Duty cycle”.


Que es el porcentaje del tiempo de la onda en la que tenemos un 1 o
voltaje alto.

118
Supongamos que tenemos esta onda, cuyo voltaje máximo es 5V y su
duty cycle es de 50%

Para calcular el voltaje promedio, simplemente multiplicamos el voltaje


máximo por el porcentaje:

5V x 0.5 = 2.5V

De esta manera obtenemos el voltaje promedio.

En el periodo de encendido, fluye la corriente a través del transistor.

119
En el periodo apagado, el transistor se apaga:

UNA ADVERTENCIA IMPORTANTE

Al momento de controlar bobinas con este método, debes de SIEMPRE


colocar un diodo en polarización inversa con la bobina, de la siguiente
manera:

Pero ¿Por qué es tan importante añadir esto al circuito?

120
Las bobinas almacenan energía en forma de campo magnético

Y también, las bobinas se oponen al cambio de corriente.

Al momento de que el transistor está encendido no hay ningún


problema. Pero al momento de desconectar la corriente…

121
Esta es la forma de la onda y como podrás ver, es un problema serio.

Si este voltaje excede el máximo permitido por el transistor, puede


explotar.

Pero, al añadir un diodo polarizado inversamente en paralelo con la


bobina, sucede lo siguiente:

En lugar de que el pico de voltaje trate de cruzar el transistor, este diodo


actúa como protección de la bobina y disipa este voltaje.

Y en lugar de tener esa señal horrible, tendremos una onda cuadrada


común y corriente:

122
Ya que tenemos toda esta valiosa información en mente, hagamos un
generador de PWM usando un timer 555

Materiales necesarios:
1. Fuente de poder de 12-15V MAX.
2. Timer 555.
3. Capacitor de 100nF.
4. Capacitor de 10nF.
5. 2 diodos 1n4007.
6. 2 Resistencias de 1k ohm.
7. Potenciómetro de 50k ohm.
8. Transistor tip31C
9. Motor de 9 o 12V.
10. Protoboard.

Con este generador de pwm podras controlar diversas cargas aparte de


un motor, como iluminación, resistencias calentadoras, etc.

Es muy importante que entiendas muy bien la función del PWM ya que
será un factor clave en próximos circuitos.

123
40. Oscilador de foco de 110-220VAC con timer 555 y relevador.

En este circuito haremos un oscilador de frecuencia variable usando un


timer 555, pero para controlar un foco de corriente alterna, para esto
usaremos un relevador, como lo hicimos en el circuito de nivel básico.

Su funcionamiento es idéntico al timer previo que hicimos, pero con la


diferencia que ahora el 555 controla un relevador.

Recuerda tener las precauciones necesarias al hacer este circuito.

Materiales necesarios:
1. Batería de 9V o fuente de poder equivalente.
2. Resistencia de 1k
3. Potenciómetro de 10k
4. Capacitor de 10uF
5. Timer 555
6. Relevador de 9V.
7. Foco de 120VCA o 220VCA
8. Protoboard.

124
El foco tendrá el mismo efecto en que el led en el circuito, irá
parpadeando a una frecuencia.

No recomiendo que pongas una frecuencia mayor a 10hz ya que puedes


dañar el relevador.

125
41. Generador de funciones usando el timer 555.

Un generador de funciones es un circuito o herramienta de laboratorio,


que se encarga de generar diferentes tipos de ondas.

El uso de este tipo de circuitos no es muy amplio, pero es de demasiada


utilidad para lo siguiente:

Probar osciloscopios

Probar amplificadores operacionales ( o cualquier circuito cuyo propósito


sea amplificar una señal

Probar el tiempo de respuesta y precisión de un ADC

Cabe recalcar que para la visualización de estas ondas ES NECESARIO


un osciloscopio, por lo que si no posees uno, pide usarlo en la escuela
en la que cursas o pídeselo a algún conocido que tenga uno.

126
Materiales:
1. Batería de 9V o fuente de poder equivalente.
2. Timer 555
3. Transistor npn bc547
4. 2 Capacitores de 47nF
5. 2 Capacitores de 1nF
6. 2 Resistencias de 1k ohm.
7. Resistencia de 4.7k ohm.
8. 3 resistencias de 10k ohm.
9. Resistencia de 100k ohm.
10. Resistencia de 10M ohm.

Como podrás ver, las distintas salidas señaladas están en los diferentes
nodos a lo largo del filtro.

El 555 genera una onda cuadrada, pero se somete a un filtro


consecutivo RC el cual trata a la señal, dando como último resultado la
onda senoidal.

Este circuito es especial, como mencionamos anteriormente, para probar


un osciloscopio o para probar amplificadores.

127
42. Control de encendido y apagado de foco AC mediante aplausos

Este circuito nos va a permitir encender o apagar un foco de corriente


alterna(o cualquier tipo de carga) mediante sonido, en este caso
mediante aplausos.

Este tipo de circuitos están enfocados principalmente a instalaciones


domésticas, pues pueden servir para controlar focos de habitaciones.

Materiales necesarios:
1. Batería de 9V o fuente equivalente.
2. CD4017
3. Opamp lm358
4. Relevador de 9V
5. Micrófono tipo electret
6. Transistor npn bc547
7. 2 resistencias de 1k ohm
8. Resistencia de 22k ohm.
9. Resistencia de 10k ohm.
10. Potenciómetro de 1k ohm.
11. Foco de 110 o 220VAC
12. Protoboard

128
El funcionamiento del circuito es el siguiente:

Como podrás darte cuenta, el opamp está en modo comparador, esto lo


puedes notar por el simple hecho de que no hay retroalimentación de la
salida con ninguna de las entradas.

Al momento de que el micrófono detecta sonido, cae el voltaje presente


en la entrada negada, por lo tanto el voltaje en la entrada no negada es
mayor y tenemos un high o voltaje en la salida del opamp.

Con el potenciómetro presente puedes ajustar la sensibilidad.

Al haber un 1 en la entrada clk del 4017 continúa la secuencia de


encendido y se enciende el siguiente pin, el cual activa el relevador y
enciende el foco.

Al volver a aplaudir, recibe otro 1 y continúa la secuencia, encendiendo


Q2 y como este está conectado a MR que es el reset, reinicia la
secuencia en Q0, apagando el foco.

129
43. Optoaisladores

Los optoaisladores son componentes usados principalmente para crear


una comunicación entre 2 circuitos sin la necesidad de compartir fuente
de alimentación o GND común.

Como podrás ver, existe una buena cantidad de optoaisladores, con


salida a transistor, salida Darlington, salida a transistor npn, entrada para
DC, entrada para AC.

Cada tipo es especial para la aplicación en la que los vayamos a utilizar

130
Los encontrarás comúnmente en fuentes de poder conmutadas, en PLC
y en sistemas de comunicación.

¿Por qué son tan importantes?

Como dijimos anteriormente, un optoaislador nos da la ventaja de poder


mantener una comunicación entre 2 circuitos sin tener que tener una
fuente de poder o GND común entre ellos.

Podemos usarlo de ejemplo en un PLC .

Los PLC son dispositivos lógicos para automatización, los cuales en la


mayoría de las ocasiones están en entornos industriales.

Un entorno industrial usualmente sufre el problema de tener mucho ruido


presente en su sistema eléctrico, debido principalmente a las cargas
inductivas grandes como lo son los motores eléctricos de AC.

El PLC contiene dentro un microcontrolador que es el que se encarga de


realizar toda la parte lógica del PLC.

Los microcontroladores son muy sensibles al ruido, por lo que si este


ruido entra a la fuente principal que alimenta al microcontrolador, este se
empezaría a descontrolar y provocar errores de funcionamiento, lo cual
puede ser muy peligroso, dependiendo de qué es lo que esté
controlando este PLC.

131
Si tenemos una señal de 24V de DC entrando a la entrada del
microcontrolador ¿Cómo podemos hacer que el ruido presente en los
24V no afecte al microcontrolador?

Como podrás ver, estamos matando 2 pajaros de un tiro.

La señal entrante es de 24V, por lo que dañaría la entrada del


microcontrolador que solo soporta un máximo de 5V.

Y también, nos permite mandar la señal sin tener una fuente de poder en
común, por lo tanto, aislamos el ruido de la señal y no tendremos
problemas con eso.

Este es uno de las tantas aplicaciones que tienen los optoaisladores,


más adelante veremos más aplicaciones, pero por ahora enfoquémonos
en aprender a usar uno.

132
Materiales:
1. Dos baterías de 9V
2. 2 resistencias de 1k ohm.
3. 1 push button o switch.
4. Optoaislador 4n25
5. Led
6. Protoboard

Es importante que sean 2 baterias distintas y que no juntes los


negativos, esto con el fin de que puedas visualizar el objetivo de un
optoaislador.

Al presionar el botón, el led encenderá, esto es control aislado, pues no


existe conexión eléctrica entre el led y el botón.

ALGO muy importante de mencionar es que el transistor que tiene


dentro el optoaislador NO es apto para manejar cargas altas.

Si deseas mover motores o alguna otra carga que consuma más de


40mA, debes usar el optoaislador para controlar al transistor, y que este
controle a la carga.

133
44. Diodos schottky

Anteriormente, vimos el funcionamiento de un diodo.

Los diodos schottky funcionan de la misma manera que un diodo


convencional, o bueno, algo así.

Verás, los diodos schottky tienen ciertas características que lo hacen


superiores a un diodo rectificador convencional.

La primera característica es la siguiente:

Los diodos schottky tienen un Vd menor a un diodo convencional.

Un diodo convencional tiene un Vd de aprox 0.7V, mientras que un diodo


schottky tienen un Vd de 0.2V.

Esto lo hace más eficiente, pues la pérdida de energía es menor.

Otra característica es la frecuencia de operación.

Un diodo convencional puede soportar una frecuencia de operación de


hasta aprox. 20khz. Mientras que un diodo schottky puede operar hasta
500 khz.

Esta será la característica que probaremos a continuación

134
Materiales:
1. Bateria de 9V o fuente equivalente.
2. Timer 555
3. 3 resistencias de 10k ohm.
4. Potenciómetro de 1k ohm.
5. Capacitor de 10nF
6. Diodo rectificador 1n4007
7. Diodo schottky 1n5822
8. Osciloscopio
9. protoboard

Para esta práctica es necesario tener en disposición un osciloscopio,


esto para poder visualizar la señal de salida

S1 corresponde a la salida del diodo schottky, el S2 corresponde a la


salida del diodo rectificador.

En la salida S1 observarás una señal cuadrada normal, de entre 50khz a


100khz.

135
Pero en S2 no observarás nada, pues debido a que estamos excediendo
la frecuencia de operación del diodo, no puede operar.

Después de todo lo anterior, probablemente te preguntes ¿Por qué se


siguen usando diodos rectificadores comunes, si los schottky son
superiores?

La verdad es, que esa es una verdad a medias.

Los diodos rectificadores normales suelen soportar voltajes muchísimo


mayores, son más robustos y tienen una corriente de fuga inversa menor
a la de un schottky.

Es por esto que, para aplicaciones de baja frecuencia, se suele preferir


usar diodos convencionales.

136
45. Control de SCR

El rectificador controlable de silicio o SCR es un componente


semiconductor empleado en la electrónica de potencia.

La principal característica de este componente es la siguiente:


Al recibir una señal en su compuerta, este se quedará activado aunque
ya no haya presencia de voltaje en la compuerta. Solo se desactivará
cuando la compuerta se mande a 0V o negativo.

Debido a su peculiar característica, no es muy común encontrarlos en


circuitos, donde podemos encontrarlos más común mente será en:

-Fuentes conmutadas.
-desfibriladores
-Rectificadores de alta potencia.

Su característica más atractiva es que su precio es relativamente bajo


comparado con otros semiconductores de potencia y pueden soportar
unas grandes cantidades de voltaje o corriente (según el modelo).

También son aptos para trabajar tanto en corriente alterna como en


directa, pero al ser estos prácticamente un diodo controlable, en
corriente alterna solo conducen en el semiciclo positivo.

Veamos un circuito simple para aprender cómo funciona.

137
Materiales necesarios:
1. Batería o fuente de poder equivalente.
2. 2 resistencias de 1k ohm.
3. 2 botones push button.
4. 1 led
5. 1 scr t106a1 ( o cualquiera que puedas conseguir funciona bien).
6. Protoboard.

El funcionamiento del circuito es muy simple. Al presionar el botón que


va desde R2 a la compuerta, el scr quedará encendido y se activará el
led. Esto permanecerá así.
Una vez que presionemos el botón que va desde la compuerta del scr a
0V. desactivaremos el scr y se apagará el led.

138
46. Control de potencia en AC usando SCR

Como mencionamos anteriormente, el scr se puede usar tanto en


aplicaciones de corriente directa y corriente alterna.

Pero, debido a que es prácticamente un diodo, solo podemos trabajar


con el semiciclo positivo la fase, por lo que no es el método más efectivo
para controlar potencia en corriente alterna.

Pero aun con este hecho, puede ser de utilidad para crear un dimmer y
controlar cargas en corriente alterna.

Materiales necesarios:
1.transformador de 24VCA y 1amp de salida
2.switch
3.potenciometro de 10k.
4.capacitor de 100nF
5. diodo 1n4007
6. triac t106a1 ( o cualquier scr de las mismas especificaciones).
7. lampara de AC de 24V
8. protoboard.

139
Mediante este circuito podemos controlar el tiempo de la onda en el cual
está encendido el scr. Este tipo de control es muy parecido al principio
del PWM.

Durante el semiciclo positivo, cuando el scr esta polarizado


directamente, el capacitor se carga mediante el potenciómetro, la
compuerta se activa cuando el voltaje ha aumentado lo suficiente para
activar el diodo D1, ahí el capacitor se descarga y activa al scr.

Aumentar la resistencia en el potenciómetro tiene el efecto de atrasar la


activación del scr, lo que causa que el tiempo de encendido se reduzca.

Recuerda que al ser el scr unidireccional, solo conduce en el semiciclo


positivo!

140
47. Control de potencia con DIAC y TRIAC

DIAC Símbolo

El diac es básicamente un diodo BIDIRECCIONAL.


Esa es la palabra clave.

Un diodo convencional solo conduce cuando se pasa el voltaje de diodo


y esta polarizado de manera directa.

Un diac conduce cuando se pasa su voltaje de diodo, pero este puede


conducir en ambas direcciones.

La función de este particular diodo está en controlar a los triac, por lo


que siempre lo verás controlándolos.

141
TRIAC Símbolo

El triac es básicamente un SCR pero con una pequeña diferencia.


Puede conducir en ambos sentidos.

Es exactamente lo mismo, pero tienes la posibilidad de conducir ambos


ciclos de la onda.

Los TRIAC se pueden usar como switches con latch, igual que el scr o
como controladores de potencia.

Usamos un diac para controlar el voltaje de activación del gate del


TRIAC. Esto es conveniente especialmente en control de potencia, pues
hacemos la sincronía con la fase.

Hagamos un circuito de control de potencia en AC con un triac y un diac.

ADVERTENCIA
EL siguiente circuito involucra un alto voltaje de corriente alterna. Lo que
significa un peligro para tu integridad física si no se maneja
adecuadamente. Maneja todo con precaución.

Es necesario que sepas cual es la fase y cuál es el neutro, puedes


utilizar el circuito “probador de fases con transistores” presente en este
libro.

De no conectarse la fase y el neutro como se indica, se corre el riesgo


de electrocución y daño del circuito.

142
Materiales requeridos:
1. Conexión a 120VCA
2. Lámpara de 120VCA
3. Resistencia de 100k ohm
4. Resistencia de 68k ohm
5. Resistencia de 47k ohm
6. Resistencia de 100 ohm
7. Potenciómetro de 470k ohm
8. Capacitor de 0.1uF
9. Capacitor de 0.47uF
10. Capacitor de 0.01uF
11. TRIAC BT136
12. DIAC DS32

El principio de funcionamiento es igual que el diagrama de control de


potencia con SCR.
Lo que controlamos aquí es el tiempo de encendido enviado al GATE del
Triac, usando el control RC.
Controlando el tiempo de encendido, controlamos el periodo efectivo del
semiciclo presente.

Como mencionamos anteriormente, este circuito SI es capaz de


controlar el tiempo de encendido del semiciclo positivo y negativo.

143
48. Control de potencia DC con PWM usando MOSFET

El MOSFET es un tipo de transistor, el cual se puede encontrar tanto en


canal “N” y canal “P”.

Se compone de 3 terminales:
 Gate (compuerta).
 Drain (Drenado).
 Source (Fuente o salida).

El Gate es donde se activa el transistor, donde se aplica el voltaje para


activarlo.

IMPORTANTE: Los mosfets tienen un voltaje de GATE máximo, el cual si


es excedido, puede ser dañado parcial o totalmente.

Para conocer el voltaje máximo del Gate, podemos encontrarlo en el datasheet


del componente. En este caso usaremos como referencia el IRF540 Canal N

Se encuentra como VGS. En este caso, vemos que es de 20V el


máximo. Siempre ten cuidado de no exceder este voltaje.

144
El Drain es por donde entra el voltaje o señal al transistor, algo así como
la equivalencia al “Colector” en el transistor BJT.

El Source es por donde sale el voltaje o señal del transistor, algo así
como la equivalencia al “Emisor” en el transistor BJT.

La principal diferencia entre un MOSFET canal N y P, es igual a la


diferencia entre un transistor bjt NPN y PNP.

El MOSFET canal N se activará al recibir un voltaje positivo en el Gate,


mientras que el canal P se activará al recibir un voltaje negativo en el
Gate

Pero ¿Qué hay de diferencia entre un transistor BJT o bipolar (que


vimos anteriormente) con un transistor MOSFET?

Como recordarás ( y si no, regresa al apartado de transistores BJT para


recordarlo) los transistores BJT funcionan aplicándoles una corriente a la
base, y la corriente de salida será proporcional a la corriente de la base
multiplicada por la ganancia del transistor.

Bueno, aquí el punto clave es que, los MOSFET NO son controlados por
CORRIENTE, si no por VOLTAJE.

Las principales características que hacen resaltar a un MOSFET contra


un BJT son las siguientes:

 Soportan mayor voltaje


 Soportan mayor corriente
 Tienen una resistencia interna muchísima menor al estar
totalmente excitados

Resalté en negritas la última característica, pues es de vital importancia para


que comprendas lo siguiente.

Circuitos atrás, donde hicimos el módulo PWM con el transistor BJT como
amplificador de corriente, mencionamos el motivo por el cual el PWM se usa
para crear una manera más eficiente de controlar la potencia.

145
El problema, es que aunque el transistor BJT esté totalmente excitado, sigue
teniendo una resistencia interna de decenas de ohms, aunque suene como
poco, la verdad es que aun así tenemos perdida de energía en forma de calor.

Es por esto que los MOSFET son tan importantes.

Este es un extracto del datasheet del MOSFET IRF540, el cual es tipo N.

Como podrás observar, en el segmento RDS (Resistencia de Drain a Source)


al estar activado, es de 0.077 ohms.

Así es, es una cantidad muy baja, casi como la de un conductor.

Es por esto que un MOSFET requiere de menor ventilación o menor disipación


en comparación de un BJT.

En aplicaciones de potencia, donde la eficiencia es crucial, es preferible usar


MOSFETS en lugar de BJT’s.

Para probar esto, hagamos de nuevo el módulo de PWM, pero ahora para
controlar mediante MOSFET

146
Materiales:
1. Fuente de poder de 12V.
2. Integrado 555.
3. Resistencia de 1k ohm.
4. Resistencia de 10k ohm.
5. 2 diodos 1n4007.
6. Potenciómetro de 50k ohm.
7. Capacitor de 100nF.
8. Capacitor de 10nF.
9. Mosfet IRF540.
10. Motor de 12V.
11. Protoboard.

147
Podrás notar que pusimos una resistencia de 10k ohm desde el gate a
0V ¿Pero cuál es su función?

Debido a la estructura interna del MOSFET, el GATE se comporta como


un capacitor, por lo que incluso si desconectamos la alimentación al
GATE, podría quedarse activado.

Para evitar esto, colocamos una resistencia de alto valor, usualmente de


miles de ohms para descargar el GATE y evitar este efecto.

Lo último que quedaría por hacer en esta práctica es lo siguiente:

Realiza el circuito pero con transistor BJT, coloca un motor lo


suficientemente grande, que consuma por lo menos 300mA, déjalo
corriendo por unos 10 minutos.
Toca el transistor o usa un termómetro para registrar su temperatura.

Después, cambia el BJT por el MOSFET y realiza el mismo experimento.

Notarás una diferencia de temperatura, compara cual registró mayor


incremento. Ahora comprenderás lo mencionado anteriormente.

148
49. Regulación conmutada con lm2576.

Si recuerdas, mencionamos que los reguladores lineales son muy


ineficientes, pues básicamente regulan el voltaje variando su resistencia
interna, lo que se traduce en calor, dando una eficiencia energética de
30% en el mejor de los casos.

Conforme la electrónica evolucionó, surgieron circuitos que requerían de


mayor potencia, pero que al mismo tiempo requerían de disminuir su
tamaño. Por ejemplo, las computadoras, los celulares, etc.

Aquí es donde entran las fuentes conmutadas.

El principio básico de la regulación conmutada es el mismo del control


de potencia usando el PWM, si te saltaste ese apartado, regrésate y
compréndelo, porque es necesario para comprender la función de este
tipo de regulación.

La diferencia, es que en esta ocasión, el PWM se filtra usando un filtro


pasa bajos conformado por un inductor y un capacitor, de esta manera,
el voltaje de salida es un voltaje estable.

Variando el duty cycle, variamos el voltaje de salida, menor duty cycle,


menor voltaje de salida, mayor duty cycle, mayor voltaje de salida.

Este tipo de reguladores son especiales por tener una eficiencia de 80%
o mayor, lo que significa que menor calor y por lo tanto, la disipación
requerida es menor.

149
En esta ocasión, usaremos el regulador conmutado LM 2576.

Este es un regulador conmutado que opera a 52khz, en su versión HV soporta


hasta 62V de entrada y soporta una corriente de salida de hasta 3A.

1- Vin: Voltaje de entrada


2- Output: voltaje de salida
3- Ground: 0V o negativo.
4- Feedback : retroalimentación
5- ON negado / OFF : pin de encendido/ apagado externo.

Este será el regulador que usaremos para crear nuestra fuente conmutada

150
Materiales:
1. Fuente de poder de 18V (se puede obtener poniendo 2 baterias de
9V en serie).
2. Regulador lm2576T-ADJ
3. Inductor de 150uH
4. Potenciómetro de 47k
5. Resistencia de 1.2k
6. Capacitor de 1000uF
7. Protoboard.

El voltaje de salida lo regulas con el potenciómetro.

Ten en cuenta que la corriente que ahí se especifica es la corriente


MAXIMA que soporta el regulador, no significa que vaya a entregar
siempre 3A, todo depende de cuanta corriente consuma la carga y
también cuanta corriente pueda proporcionar la fuente de poder previa al
regulador.

Usamos un diodo schottky como diodo anti flyback, por la frecuencia de


operación, recuerda que un diodo convencional no puede operar a una
frecuencia de esa magnitud.

151
50. Regulador conmutado tipo BOOST

Supongamos que tenemos como única fuente de alimentación una


batería de 9V. Pero tenemos un circuito que requiere de 20V para
funcionar, de lo contrario no lo hará ¿Qué podemos hacer?

Aquí es donde entran la regulación conmutada en configuración boost.

Recuerdas previamente, en el apartado de pwm, donde hablamos de


porqué era importante usar un diodo en configuracion anti flyback.

Hablamos sobre la energía que guarda una bobina y que al ser


interrumpido el flujo de energía, esta liberaba una tensión mayor.

Bueno, en las fuentes tipo boost, aprovechamos esta característica de


las bobinas, pero para poder obtener una tensión de salida mayor a la
tensión de entrada.

Algo importante que debes considerar es la ley de la conservación de la


energía.

La potencia de salida será igual( o más bien menor) a la potencia de


entrada.

Es decir, si por ejemplo, la entrada es de 9V y puede proporcionar 1A, la


salida a 18V solo podrá entregar como máximo 500mA, es decir, la
mitad.

En esta ocasión, usaremos el lm2577, que es un integrado que nos


permite usarlo en configuración boost.

152
El lm2577 es un regulador de conmutación multipropósito, esto quiere
decir que puede operar como regulador stepdown, step up, negative
output, etc.

Revisemos la función de cada pin.

5.- Vin: Entrada de voltaje (3.5V a 40V)


4.- Switch (transistor encargado de conmutar).
3.- Ground (negativo o 0V)
2.- Feedback (retroalimentación)
1.- Comp

Este regulador puede soportar una corriente de salida de hasta 3A.

En configuración boost soporta un voltaje de salida de hasta 65V.

Opera a una frecuencia de 52khz.

Ya que conocemos que es una fuente tipo boost y también el lm2577,


hagamos una fuente boost usando este circuito integrado.

153
Materiales:
1. Bateria de 9V o fuente similar.
2. Lm2577
3. Inductor de 100uH
4. Resistencia de 2.2k ohm.
5. Resistencia de 2k ohm.
6. Diodo schottky 1n5822
7. Potenciómetro de 50k
8. Capacitor de 100nF
9. Capacitor de 1000uF
10. Resistencia de 10k ohm
11. Protoboard.

Para obtener el voltaje de salida simplemente tenemos que usar la


siguiente formula:

𝑅1
𝑉𝑜𝑢𝑡 = 1.23(1 + ( ))
𝑅2
Donde R1 sería el potenciómetro, R2 seria R3 en nuestro circuito, y 1.23
es el voltaje de referencia interno.

Usando esta fórmula, con nuestros valores en el circuito podemos


determinar que nuestro voltaje de salida máximo será de 32V.

154
51. Reguladores lineales de baja caída (LDO)

Como mencionamos en el apartado de reguladores lineales, necesitan


alrededor de una entrada de 3V mayor que la salida.

Si necesitamos tener una salida estable de 5V, lo ideal es que la entrada


sea de por lo menos 8V.

Pero qué pasaría si por ejemplo, tenemos una fuente de poder, como lo
sería una batería, de 6V, pero necesitamos una salida de 5V.

Un regulador lineal convencional no nos sería de utilidad, pues


necesitamos de una entrada de por lo menos 3V mayor, y en nuestro
caso la entrada es 1V mayor a la salida que requerimos.

Aquí es donde entran los reguladores LDO (low drop out o baja caída).

Los reguladores lineales de baja caída tienen la característica de poder


funcionar con una diferencia de Entrada- salida de hasta 300mV.

Así es, en algunos casos es suficiente que la entrada sea 300mV mayor
a la salida para poder funcionar correctamente.

¿En qué casos es recomendable usar este tipo de reguladores?

Se podrá presentar la ocasión donde tengamos que usar baterías de


baja potencia para alimentar nuestro circuito, ya sea por abaratar costos
o por poca disponibilidad de espacio.

Usando el LDO reducimos drásticamente la diferencia de voltaje entre


entrada-salida para poder hacer funcionar los componentes o integrados
que necesiten de un determinado voltaje.

También, por esta misma característica, son más eficientes, pueden


manejar mayor cantidad de corriente y producen menos calor

Ya que tenemos el concepto claro de que es un LDO, hagamos un


circuito usando uno.

155
Regulador KA378R05

El regulador Regulador KA378R05 es un regulador lineal de tipo LDO el


cual tiene una salida de 5V, un voltaje de entrada máximo de 35V y una
corriente máxima de salida de 3 amperes.

Vin: Voltaje de entrada


Vo : voltaje de salida
GND : negativo o 0V
Ctrl: control

Este regulador funciona con una diferencia de Entrada-salida de 500mV

Este será el regulador lineal que usaremos como ejemplo.

156
Materiales:
1. Fuente de poder de 6V (es necesario que sea este voltaje)
2. Regulador KA378R05
3. Capacitor de 100nF
4. Resistencia de 10k ohm.
5. Protoboard.

Comprueba la salida con tu multímetro y verás que en efecto, la salida es de


5V.

Puedes comprobar lo mismo con un 7805 y verás que la salida no será de 5V,
comprobando el voltaje mínimo de funcionamiento.

157
52. Configuración colector abierto y emisor abierto o sink y source

Al usar transistores o circuitos integrados podemos toparnos con que el


datasheet indica “Open collector”, “Open emitter”, “sink”, “source”.

¿Pero esto que significa? Veamos cada una de ellas.

Configuración colector abierto:

La configuración colector abierto se refiere a que la carga se conecta


hacia el colector del transistor. Estando el emisor conectado
directamente a 0V.

Esta configuración se suele representar como una compuerta NOT en


los diagramas, ya que la lógica es la misma.

Configuración emisor abierto

158
La configuración emisor abierto se refiere a cuando el emisor del
transistor está abierto, y el colector está conectado directamente a
positivo.

En microcontroladores u otros circuitos integrados, presentan la opción


sink-source en sus salidas. Siendo sink para un 0 y un 1 para source.

Sink es lo mismo que colector abierto, porque manda a 0V y source lo


mismo que emisor abierto, porque manda un 1 o positivo.

Hagamos un circuito imitando esta función.

Lista de componentes:
1. Protoboard.
2. Batería de 9V o fuente de poder equivalente.
3. 2 switches.
4. Resistencia de 10k ohm.
5. 2 resistencias de 1k ohm.
6. 2 leds.
7. Transistor NPN bc547
8. Transistor PNP bc557

Con este circuito el led 1 conducirá el accionar el switch 1, y el led 2


accionara al accionar el switch 2. El led 1 representa a la configuración
colector abierto y el led 2 representa a la configuración emisor abierto.
Este arreglo es el Sink-Source.

159
53. Configuración Darlington.

Existen transistores de baja ganancia y también transistores de alta


ganancia.

Regularmente, los transistores de alta ganancia tienen una capacidad


muy baja, en el orden de los cientos de mW, esto no es ni siquiera 1W
de potencia.

Y también regularmente los transistores de baja ganancia tienen una


capacidad mucha mayor, siendo estos los transistores de potencia,
como el 2n3055 y la serie de transistores TIP.

Pero usemos el siguiente problema como ejemplo:

Tenemos un circuito integrado digital cuya corriente máxima de salida es


de 1mA por cada pin. Y tenemos que controlar un motor que consume
2.5A.

Si usamos un transistor de potencia, cuya ganancia suele ser de 15 a


25, tendremos una corriente de colector de solo 25mA, por lo que esto
no nos sirve.

Si usamos un transistor de alta ganancia, por ejemplo el 2n2222a, cuya


ganancia es de 300, nos da una corriente de colector de 300mA, e
incluso la potencia máxima que puede disipar este transistor es bajísima,
por lo que no nos sirve.

¿Qué podemos hacer entonces?

Aquí es donde entra la configuración Darlington.

160
La configuración Darlington consiste en usar un transistor de alta
ganancia y poca potencia, para controlar a un transistor de baja
ganancia y alta potencia.

Haciendo esto, tenemos como resultado un transistor de alta ganancia y


alta potencia, genial.

Hagamos un circuito para probar la configuración Darlington.

Materiales necesarios:
1. Protoboard
2. Fuente de poder de 12V
3. Regulador de 5V 7805
4. Switch
5. Transistor npn 2n2222a
6. Transistor npn tip41
7. Motor de DC.

161
Con este circuito podemos comprobar la función de la configuración
Darlington.

Tenemos una corriente de base de 50uA, la cual por la ganancia del


transistor se traduce a una corriente de emisor de 15mA

El transistor tip41c tiene una ganancia de 20, entonces tendremos una


corriente de colector de 300mA, lo suficiente para mover un motor de
baja potencia.

Pero tener que comprar diversos transistores para hacer el arreglo


puede ser caro, especialmente cuando tenemos que controlar múltiples
cargas inductivas, donde aparte tenemos que agregar un diodo de
protección para cada bobina.

Esto significa un precio mayor y mayor espacio ocupado en un pcb o un


protoboard.

¿Existirá alguna solución mucho más barata, con diversos Darlington


integrados y con diodos de protección integrados? Si…

Te presento el amplificador Darlington multiple ULN2803A

162
El ULN2803A es un circuito integrado amplificador con 8 Darlington.

Este tiene dentro 8 arreglos Darlington, cada uno con su resistencia de


base y diodo anti flyback.

Esto nos es muy útil para ahorrar espacio y dinero en caso de que
tengamos que controlar múltiples cargas, especialmente las inductivas.

Los pines 1-8 corresponden a las entradas de los amplificadores


Darlington.

Los pines 18 a 11 corresponden a las salidas de los Darlington.

El pin 10 corresponde a el común para los diodos de protección, siendo


el Darlington configuración colector abierto, este pin se manda a
positivo.

El pin 9 es el pin GND o 0V.

163
54. Introducción a la electrónica digital con compuertas lógicas.

Este es, sin duda, uno de los apartados más importantes del nivel
intermedio, por lo que es muy importante que NO te saltes ni un solo
párrafo, para que puedas comprender toda la información. Aparte que en
la sección de microcontroladores será indispensable.

Primero, tenemos que definir qué es exactamente la electrónica digital.

La electricidad en si es analógica. Esto significa que podemos tomar


valores infinitos dentro de un rango existente, por ejemplo:

Supongamos que tenemos esta onda senoidal de 5Vp-p.


Esta onda senoidal puede tomar valores infinitos dentro de ese rango.
Por ejemplo: 0.1V, 0.11V, 0.12V, 0.13V, 0.14V, 0.15V y así
sucesivamente.

Por muchos años, especialmente las primeras décadas de desarrollo en


la electrónica, los sistemas analógicos eran la única manera de
funcionamiento de un sistema.

Televisión, música, transmisión de datos y un largo etc de tecnologías


basadas en sistemas electrónicos.

Pero los sistemas analógicos sufrían de grandes problemas:


 Se dañaban con facilidad
 Sufrían de mucha interferencia
 No ofrecían mucha calidad ni precisión

Esto motivó a los ingenieros a crear un sistema que pudiera


ofrecer mayores ventajas ante los problemas que se presentaban con
los sistemas analógicos

164
Es aquí cuando nace la electrónica digital.

La electrónica digital, en lugar de basarse en un sistema de valores


infinitos, se usa un sistema basado solamente en “0” y “1”.

Donde un 0 es simplemente 0V, y 1 es arriba de 1.8V hasta el voltaje l


limite que establezca el sistema. El límite de voltaje es sumamente importante y
veremos porqué más adelante.

De esta manera obtenemos la onda anterior.

La electrónica digital está presente en la mayoría de la tecnología que


usamos hoy en día, entonces es de suma importancia conocerla y dominarla.

165
Para codificar una señal usamos el sistema binario, es binario porque
solo tenemos 2 estados, 0 y 1.

Al ser un sistema binario, tenemos que comprender como funciona.

El sistema binario se basa en simplemente el número 2 elevado en la


potencia del sitio donde está ubicado.

Estos números binarios pueden agruparse en cantidad de bits, por


ejemplo:
Un número de 8 bits, tendrá 8 dígitos, uno de 4 bits tendrá 4 dígitos.

En el número tenemos el MSB o bit más significativo y el LSB o bit


menos significativo. Empezando por el LSB desde la derecha y el MSB
empezando por la izquierda

MSB --->00000000<--- LSB

Para representar un número en decimal, tenemos que debemos elevar a


una potencia el número “2”, ya que por esto se le llama sistema binario.

Empezando con el 0 desde el LSB. Elevando 2 a la potencia 0


obtenemos un 1

Entonces, si tenemos un 00000001 es igual a tener un 1 en decimal.

Un 00000010 es igual a tener 2 en decimal

Un 00100000 es igual a 2^5 lo que es igual a 32. Nota que la posición


del bit indica el exponente de “2”.

Si tenemos 01001110, tenemos que sumar los exponentes de cada 1


que tenemos presentes.

Es igual a: 2^1 + 2^2 + 2^3 + 2^6 = 78.

Esto se llama sistema binario natural.

Existe también el sistema “octal” y el sistema “hexadecimal”, los cuales


revisaremos más adelante.

166
Ya que conocemos qué es el sistema binario, podemos empezar a
conocer los operadores o compuertas lógicas.

Una compuerta lógica es un dispositivo que en función a una o varias


entradas, entregará una salida.

Estas salidas serán 1 o 0 en base a su tabla de verdad, la cual se basa


en una combinación dependiendo del tipo de compuerta, veamos cuales
son:

Compuerta AND

Símbolo Tabla de verdad

La compuerta AND, o “Y”, representa una multiplicación.

Es decir, que multiplicando sus entradas obtendremos una salida.

Como podrás observar, en la tabla de verdad, solo tenemos un 1 en la


salida cuando A y B son 1. Es aquí cuando podemos comprobar que es
una multiplicación.

0x0 = 0
0x1 = 0
1x0 = 0
1x1 = 1

Esta compuerta nos será útil cuando queramos tener una salida solo si
ambas entradas son 1.

167
Compuerta OR

Símbolo

Tabla de verdad.

La compuerta OR o “O” es una compuerta lógica que representa una


suma. Si cualquiera o ambas entradas es 1, la salida será 1.

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

Esta compuerta nos será útil cuando queramos tener un 1 en la salida


teniendo solo un 1 en cualquier entrada o en ambas.

168
Compuerta NOT

Símbolo

La compuerta NOT o “NO” es un simple dispositivo que se encarga de


negar una entrada.

Como puedes observar al tener un 0 en la entrada, tenemos un 1 en la


salida y al tener un 1 en la entrada, tenemos un 0 en la salida.

Puede parecer que esta compuerta no tiene un uso particular o


comprensible, hasta puede parecer inútil para algunos, pero te darás
cuenta de que no es así.

Las compuertas AND, OR y NOT son las compuertas principales, pero,


existen aún más!

169
Compuerta NAND

Simbolo

Tabla de verdad

Aquí es cuando nos damos cuenta que las compuertas NOT no son para
nada inútiles.

La compuerta NAND es básicamente la lógica inversa a la compuerta


AND.

Observamos la salida y es simplemente lo opuesto a la tabla de verdad


de la AND.

La compuerta NAND es la más importante en la electrónica digital, pues


a base de combinación compuertas NAND podemos recrear cualquier
compuerta. Esto hace que el diseño de circuitos integrados lógicos
digitales sea más sencillo.

Más adelante comprobaremos esto realizando circuitos solo a base de


compuertas NAND.

170
Compuerta NOR

Simbolo

Tabla de verdad

La compuerta NOR es el equivalente opuesto a la compuerta OR.

Como puedes observar en la tabla de verdad, la lógica es opuesta a la


tabla de verdad de la compuerta OR.

Y por último….

Compuerta XOR

Simbolo

Simbolo

La compuerta Xor consiste en un OR exclusivo, es decir, que la salida


será 1 exclusivamente cuando las entradas tengan un 1 en combinación
impar, al tener 1 en ambas entradas será 0, y al tener 0 en ambas
entradas será 0.

171
Ya que conocemos los operadores lógicos, es hora de llevar la teoría a
la práctica.

Aquí tenemos un ejemplo de la compuerta AND. El circuito integrado


SN7408. El cual contiene 4 compuertas lógicas AND de 2 entradas.

Estos circuitos integrados se alimentan con 5V, alimentarlos con un


voltaje mayor significa DAÑARLOS.

Puedes utilizar el integrado 7805 para tener la salida de 5V y con ese


voltaje alimentar los integrados.

Debes recordar también que las compuertas lógicas tienen una


corriente de salida muy limitada, por lo que NO debes conectar a su
salida cargas mayores a 15mA. Si deseas controlar cargas altas debes
amplificar su salida

En un circuito las compuertas se representan con su propio símbolo, no


usando el encapsulado del integrado. Por lo que una compuerta
representada en un diagrama, representará solo una compuerta
presente en el integrado, no el integrado entero.

172
Compuerta AND

Material:
1. Batería de 9V o fuente de poder similar.
2. Regulador de voltaje 7805.
3. 3 diodos leds.
4. 2 push button.
5. 3 resistencias de 330 ohms.
6. Compuerta AND SN7408
7. protobard

Examinemos el circuito.
Primero, notarás que tenemos 1 led en serie por cada entrada, esto es
para poder tener una referencia de que está fluyendo corriente por el
switch al activarse.

Segundo, es importante aclarar la función de R1 y R2. Tiene 2


funciones, la primera es limitar la corriente que fluye a través de los leds.
La segunda y más importante, es establecer un 0 lógico en las entradas.

Verás, dijimos que un 0 en la electrónica digital son 0V. El error que


muchos cometen es pensar que 0V es igual a desconectar, pero no es
asi. 0V es igual a referencia o en una fuente de voltaje, es por eso que
esas resistencias van conectadas a 0V, al tener los switches abiertos,
las entradas están conectadas mediante las resistencias.

El valor ideal de estas resistencias polarizadoras es aproximadamente


de 10k ohms, por motivos de eficiencia, pero en este caso usamos
resistencias de 330 ohms por tener los leds en serie.

173
Compuerta OR
Material:
8. Batería de 9V o fuente de poder similar.
9. Regulador de voltaje 7805.
10. 3 diodos leds.
11. 2 push button.
12. 3 resistencias de 330 ohms.
13. Compuerta OR SN7432
14. protobard

Ahora recreamos el mismo circuito, pero con la compuerta OR.

El procedimiento es el mismo. Realiza las combinaciones y anótalas en


forma de tabla de verdad, después compáralas con la tabla de verdad
correspondiente a la compuerta

174
Compuerta NOT
Material:
15. Batería de 9V o fuente de poder similar.
16. Regulador de voltaje 7805.
17. 2 diodos leds.
18. 1 push button.
19. 2 resistencias de 330 ohms.
20. Compuerta NOT SN7404
21. protobard

Realiza el circuito y compara la tabla de verdad resultante con la tabla


de verdad correspondiente a la compuerta.

175
Compuerta NAND
Materiales necesarios:
22. Batería de 9V o fuente de poder similar.
23. Regulador de voltaje 7805.
24. 3 diodos leds.
25. 2 push button.
26. 3 resistencias de 330 ohms.
27. Compuerta NAND SN7400
28. Protobard

Realiza el circuito y compara la tabla de verdad resultante con la tabla


de verdad correspondiente a la compuerta.

176
Compuerta NOR
Materiales:
29. Batería de 9V o fuente de poder similar.
30. Regulador de voltaje 7805.
31. 2 diodos leds.
32. 1 push button.
33. 2 resistencias de 330 ohms.
34. Compuerta NOR SN7402
35. protobard

Realiza el circuito y compara la tabla de verdad resultante con la tabla


de verdad correspondiente a la compuerta.

177
Compuerta XOR
Materiales:
36. Batería de 9V o fuente de poder similar.
37. Regulador de voltaje 7805.
38. 2 diodos leds.
39. 1 push button.
40. 2 resistencias de 330 ohms.
41. Compuerta XOR SN7486
42. protobard

Realiza el circuito y compara la tabla de verdad resultante con la tabla


de verdad correspondiente a la compuerta.

Ya que has terminado de realizar estos circuitos con compuertas,


probablemente te estés cuestionando la funcionalidad de las compuertas
lógicas.

Y si, por si solas las compuertas lógicas no ofrecen una funcionalidad


importante. No es hasta cuando se combinan para formar un sistema
lógico que es cuando forman algo importante. El procesador de tu
computadora, celular, impresora, arduino, están formados por miles o
millones de combinaciones de compuertas lógicas.

178
55. Conversor analógico a digital con ADC0804.

Ya que conocemos como funciona el sistema digital, podemos hacernos


la siguiente pregunta: ¿Cómo podemos combinar un sistema analógico
con un sistema digital?

Como dijimos, la electrónica digital es solo un sistema, la electricidad de


comporta de manera analógica.

Las señales de audio, las señales de ciertos sensores, entre otras cosas
más proporcionan una salida de magnitud analógica.

Entonces ¿Cómo es posible que por ejemplo, una computadora pueda


interpretar señales de audio, o un microcontrolador pueda leer la señal
de un sensor de temperatura?

Aquí es donde entran los conversores analógico a digital o ADC.

El ADC se encarga de leer una señal analógica y convertirla en una


señal digital compuesta en binario, el cual puede tener una resolución de
4,8,10,12,16 o más bits.

Existen factores importantes que debemos comprender antes de usar un


ADC.

Vref: Voltaje de referencia, este nos indica entre que rango haremos la
lectura, los ADC tienen este pin en el cual debemos aplicar el voltaje de
referencia. Debemos tener muy en cuenta que el voltaje de referencia
AFECTA directamente a la resolución de salida.

Resolución: la resolución es el resultado del voltaje de referencia


dividido sobre la cantidad de bits en la que trabaje el ADC. Por ejemplo:

Supongamos que tenemos un voltaje de referencia de 5V y el ADC que


utilizaremos trabaja a 8 bits, estos 8 bits debemos convertirlos a decimal
para poder trabajar directamente, por lo que obtenemos que 8 bits es
igual a 255 en decimal

𝑉𝑟𝑒𝑓 5𝑉
𝑅𝑒𝑠𝑜𝑙𝑢𝑐𝑖ó𝑛 = = = 0.019V
#𝑏𝑖𝑡𝑠 255

Esto significa que podremos tener precisión para una señal que cambie
cada 0.019V o 19mV.

179
Ya que tenemos conocimiento de cómo funciona un ADC, hagamos uno
con el ADC0804.

El ADC0804 es un convertidor analógico digital que opera a 5V y que es


de 8 bits. La salida está en 8 bits en comunicación paralela.

Expliquemos la función de cada pin:

Vcc: Voltaje de alimentación positivo.


CLK R: resistencia empleada para el oscilador RC.
DB0-DB7: pines de salida binaria, siendo DB0 el LSB y DB7 el MSB
CS: Chip select
RD: lectura
WR: Escritura
INTR: Petición de interrupción
Vin(+) : entrada de señal positiva.
Vin(-) : entrada de señal negativa.
A GND: negativo analógico
Vref/2 : pin de voltaje de referencia (dividido entre 2).
DGND : negativo digital

Ahora hagamos un circuito empleando este ADC .

180
Materiales:
1. Bateria de 9V o fuente de poder similar.
2. Regulador de 5V 7805.
3. ADC0804.
4. 8 resistencias de 330 ohms.
5. Resistencia de 10k ohm.
6. Potenciómetro de 100k ohm.
7. Capacitor de 150 pico faradios (pF).
8. 8 leds.
9. Protoboard.

Vref/2 no se usa porque VCC actúa también como Vref.

Una vez que se ha montado, haremos lo siguiente para comprobar lo


siguiente:

El potenciómetro actuará como divisor de voltaje para generar un voltaje


que podemos variar en la entrada y observar cómo cambia la
codificación binaria.

Ahora sigue las siguientes instrucciones:

Ajusta el potenciómetro hasta tener aprox 2.5V.


Como tenemos un sistema de 8 bits y un voltaje de referencia de 5V,
tendremos una resolución de 0.020V por bit.

181
Si tenemos 2.5V y 0.020V(valor redondeado) por bit, para obtener la
resultante en binario simplemente dividimos el voltaje sobre la resolución
y tendremos como resultado: +/- 125 o 01111101 en binario.

Ya que tenemos el valor teórico, observa que valor arroja el ADC,


localiza bien cuál es el LSB y el MSB en el ADC para que puedas
estructurar bien la codificación binaria.

Una vez que anotes el valor en binario que arrojó el ADC, anótalo y te
sugiero que lo conviertas a decimal para que lo puedas visualizar mejor.

Compara el valor obtenido con el valor teórico, notarás que el valor no


es precisamente igual, esto es debido a que TODO componente ya sea
pasivo o activo, tiene un rango de tolerancia, la precisión al 100% es
imposible.

182
56. Sistema BCD y conversor BCD a 7 segmentos.

El sistema BCD o Decimal codificado en binario es un sistema empleado


en la electrónica digital para codificar un número decimal en sistema
binario.

La característica de este sistema es que funciona mediante separar los


diversos dígitos del número y codificarlos uno por uno.

Por ejemplo: Queremos codificar el número 29 decimal a BCD.

Primero lo separamos por dígitos, los cuales son 2 y 9

Ahora realizamos la conversión de cada digito a binario en 4 bits.

2: 0010

9: 1001

Entonces el número 29 en BCD será 0010 1001.

Este sistema nos es útil para decodificar información ¿Pero dónde?

En los displays de 7 segmentos.

Existen circuitos integrados encargados de convertir esta codificación


BCD para poder visualizarse en un display de 7 segmentos.

Este circuito integrado es el CD4543 y se ve así:

183
El circuito a emplear será el siguiente:

Recuerda que el display de 7 segmentos debe ser de cátodo común,


pues esa es la configuración de salida del convertidor.

Como switch puedes usar un dip switch de 4 switches como este:

Y te será más sencillo realizarlo.

Ahora hagamos una tabla de verdad para ver que segmentos se deben
de activar y por consecuencia que numero se debe de mostrar al tener
cada combinación.

184
Siguiendo esta tabla de verdad puedes verificar el número.

Dentro de esta tabla siendo “m” el número correspondiente en decimal y


BCD en A,B,C,D la codificación de entrada.

Podrás ver que segmento se debe activar para cada combinación.

185
57. Gatillo Schmitt.

Habrá ocasiones donde tengamos que mandar señales digitales por


largas distancias a través de cables. Tal vez señales de video por cables
HDMI. Comunicación serial a través de cables largos u otras situaciones.

¿Cuál es el problema con esto?

Que debido a la longitud de los cables, tenemos una inductancia y por


ende, impedancia mayor. Lo cual nos causará problemas de ruido,
caídas de voltaje, interferencias, etc.

Esto puede hacer que una señal que inicia así:

Termina así:

Esto significa muchos problemas al tratar de decodificar una señal así de


distorsionada.

Y puede traer consecuencias graves dependiendo de la situación.

¿Cómo podemos solucionar este problema? Con un gatillo Schmitt.

186
El gatillo Schmitt es un componente electrónico usado principalmente
para tratado de señales digitales.

Básicamente es un opamp con retroalimentación positiva. ¿Qué significa


esto?

Que nuestra señal de salida estará invertida respecto a la entrada.

Usando esta configuración, ajustamos los niveles de voltaje inferior y


superior de la señal entrante, para tener la señal cuadrada de salida.

187
El umbral inferior determina el nivel mínimo de activación y el umbral
superior determina el nivel máximo de activación.

Existen circuitos integrados con múltiples gatillos Schmitt internos, para


ser usados en diferentes aplicaciones.

Como el sn7414

Este es un integrado que tiene 6 gatillos Schmitt internos con salida


negada.

Estos tienen una referencia de umbral superior e inferior ya establecidos


internamente.

Los cuales son:

Umbral superior: 1.5V

Umbral inferior: 0.6V

Los gatillos Schmitt pueden usarse para diferentes aplicaciones, las


cuales son las siguientes:

Inversores.
Osciladores.
Filtros.

188
En esta ocasión, usaremos uno en modo de inversor/filtro para eliminar
el ruido producido por el botón.

Material necesario:
1. Protoboard.
2. Fuente o batería de 9V.
3. Regulador 7805.
4. Resistencia de 10k ohm.
5. Resistencia de 330 ohm.
6. Sn7414.
7. Push button.
8. Led.

189
Microcontrolador PIC
16f886

190
Antes de comenzar con esto debemos hacernos la siguiente pregunta.

¿Qué es un microprocesador?

Un microprocesador es un sistema lógico digital capaz de ejecutar


instrucciones, cálculos matemáticos, etc.

Pero este microprocesador NO puede actuar por si mismo.

Necesita:

Una memoria ROM donde poder guardar el código o instrucciones a


ejecutar.

Una memoria RAM donde guardar datos momentáneos para ejecutarlos


más tarde y con mayor rapidez.

Demás periféricos de Entrada/Salida para ser útil.

191
Esto hace que claramente, usar un procesador sea costoso y espacioso,
pues necesitamos de muchas cosas para hacerlo andar.

Pero hace un par de décadas esto cambió

Te presento al microcontrolador.

¿Pero qué es un microcontrolador y que los hace tan especiales?

Un microcontrolador es una mezcla de todo lo anterior.

Posee todo lo necesario para hacer un microprocesador funcionar,


dentro de un chip y a un precio muy accesible.

Posee una memoria RAM interna, una memoria FLASH interna, una
memoria EEPROM interna y demás periféricos internos que hacen que
sean muy útiles para proyectos de electrónica.

192
El microcontrolador que usaremos en este libro será el PIC 16f886
hecho por Microchip. Usamos este microcontrolador porque es fácil de
conseguir, barato y tiene una buena cantidad de periféricos, lo cual es
algo útil para nuestros proyectos.

Este microcontrolador cuenta con 28 pines, pero de estos solo 24


pueden usarse como puertos.

Este microcontrolador funciona con 5V exclusivamente y puede operar a


una frecuencia de hasta 20MHZ.

Este microcontrolador cuenta con los siguientes periféricos:

Convertidor ADC: Convertidor analógico digital de 14 canales, para


verificar que pin cuenta con esta opción, busca el que diga “AN” seguido
del número correspondiente del canal del ADC al que pertenece.

Comparador analógico: 2 Comparadores analógicos (C#IN).

Timer/counter 0: Temporizador/contador de 8 bits con preescalador


programable.

Timer/counter 1: Temporizador/contador de 16 bits con preescalador


programable.

CCP module: modulo comparador, capturador y PWM

Comunicación USART, SPI y I2C

193
El microcontrolador se puede programar en muchos lenguajes de
programación, pero en nuestro caso lo vamos a programar en lenguaje
C.

El compilador que vamos a usar es el compilador MikroC hecho por la


compañía MikroElektronica

Este compilador No es gratuito, sin embargo, la compañía ofrece una


versión gratis pero “limitada”, en cuanto al tamaño de memoria máxima
para programar en el pic.

Puedes descargar la versión demo este compilador a través de este link:

https://www.mikroe.com/mikroc/#pic

Aunque no es necesario usar la versión Full para los códigos a usar en


este libro, te recomiendo comprar la versión full.

194
¿Cómo cargar programas en un PIC?

Para cargar un programa en un PIC, necesitamos una interfaz de


comunicación que se encargue de comunicar el PIC con la
computadora.

Existen diversos programadores en el mercado, pero todos funcionan de


la misma manera.

En mi caso, haré el ejemplo con el programador “Microprog R2”

El PIC cuenta con 3 pines esenciales para programarlo:


Vpp: Voltaje de programación.
ICSPDAT o PGD: pin de programación.
ICSPCLK o PGC: pin de reloj.

195
Existen 2 formas de utilizar el programador: Mediante ICSP y mediante
el zócalo ZIF

El zócalo ZIF solo debes poner el PIC en la orientación en la que indica


el programador.

Si es mediante ICSP, debes conectar cada cable donde indica el


programador, el pin VPP con el pin VPP del PIC, 5V y GND, PGD y
PGC.

Al abrir la ventana del software de programación, aparece lo siguiente.

196
Como verás, el software ya reconoció el PIC 16f886, entonces sigue
cargar el programa en cuestión.

Al compilar un código, este genera un archivo de extensión “.HEX” el


cual será el que debemos cargar al PIC.

Damos clic en “cargar HEX” y saldrá lo siguiente:

197
Aparecerá una ventana para seleccionar donde se encuentra el archivo,
una vez que lo encontremos, seleccionamos el archivo y damos clic en
“Abrir”

Una vez que haya cargado correctamente el archivo, damos clic en


“Escribir”.

198
Al haberse programado correctamente mostrará el mensaje
“Programación correcta”.

Esto significa que ya puedes usar tu PIC.

199
Antes de comenzar a crear nuestro primer código, las funciones
principales importantes para usar el PIC en el compilador MikroC.

Aunque no veremos todas las funciones habidas y por haber en el


lenguaje C, veremos solo lo básico y/o necesario para poder crear
nuestros programas.

Es importante que aprendas más sobre el lenguaje C por tu cuenta, para


que puedas programar PIC en lenguaje C de manera más eficiente.

Bien, ahora sí, veamos lo que necesitamos saber.

Comando “TRIS”: El comando TRIS se usa para especificar la función


que tendrá un puerto, siendo un 0 para definirlo como salida y 1 como
entrada.

Por ejemplo, si queremos que el puerto A del pic sea solo entradas, lo
ponemos de la siguiente manera:

TRISA = 1;

Es importante que cada instrucción que hagas en lenguaje C termine en


“;”.

También tenemos la posibilidad de configurar independientemente el pin


de cada puerto como entrada o salida.

Por ejemplo, el puerto A tiene 8 pines, empezando por RA0 hasta RA7.

Lo haremos de la siguiente manera, vamos a declarar los pines RA0 a


RA4 como entradas y el resto del puerto A como salidas.

Entonces, al ser 8 puertos, nos conviene mejor establecerlo de manera


binaria, en 8 bits. Quedaría de la siguiente manera:

TRISA = 0b00011111;

Para crear un numero binario, debemos empezar por “0b” y después


poner el número.

Como podrás ver, efectivamente, declaramos los bits RA0-RA4 como


entradas y los restantes como salidas.

200
Lo siguiente es activar o desactivar los puertos analógicos.

Las instrucciones “ANSEL” y ANSELH” activan o desactivan los puertos


analógicos.

Es importante que SIEMPRE declaremos estos, ya sea para activar o


desactivar el ADC.

Para activar el puerto ADC:

ANSEL = 1;
ANSELH = 1;

Para desactivar el puerto ADC:

ANSEL = 0;
ANSELH = 0;

Por último, queda activar o desactivar los comparadores analógicos:

Para activar o desactivar uno o ambos comparadores, usamos las


instrucciones: “C1on_bit” y “C2on_bit”.

Para activar o desactivarlos:

C1on_bit = 0; para desactivar


C1on_bit = 1; para activar

C2on_bit = 0; para desactivar


C2on_bit = 1; para activar

Ya que tenemos nuestras instrucciones esenciales presentes, podemos


comenzar con nuestro primer código.

201
Para crear un nuevo código en mikroC, sigue las siguientes
instrucciones:

1. Abre el programa, da clic en file, luego en new y luego en new


project.

2. Después, al salir la ventana da clic en next y aparecerá la


configuración del proyecto. Ahí seleccionaras el nombre del proyecto,
la carpeta donde se guardará,

202
3. Seleccionamos incluir todas las librerías

4. Por último, da clic en la opción mostrada y da clic en finish.

203
5. Ahora tenemos la ventana de edit Project. Aquí podemos seleccionar
parámetros como la fuente de oscilador, la frecuencia de oscilador, el
microcontrolador a usar, activar o desactivar la función MCLR, etc.

Aquí hay que explicar cada configuración por si misma ya que es super
importante que conozcas cada función

Oscillator selection: Esta opción permite configurar la fuente de oscilador.

Tenemos 2 opciones.

1. Usar un oscilador externo.


2. Usar el oscilador interno.

El oscilador interno puede ser desde 4 MHz hasta 20MHz, esta velocidad va a
determinar la potencia de procesamiento del PIC.

Este es un ejemplo de cómo luce el oscilador externo.

204
Y se conecta en los pines CLKIN y CLKOUT (9 y 10) del PIC.

Seleccionamos HS para el oscilador externo, y escribimos la frecuencia del


oscilador a usar, en nuestro caso 16 MHz.

Pero… tenemos otra opción

El PIC cuenta con un oscilador interno de hasta 8 MHZ, lo cual nos permite
ahorrarnos el uso de un oscilador externo, para seleccionarlo hacemos lo
siguiente:

Seleccionamos esa configuración y escribimos la frecuencia de oscilador


deseada.

Para todos los códigos de ahora en adelante usaremos el oscilador interno y la


frecuencia de 8 MHz, por motivos de comodidad o conveniencia.

Watchdog timer: Proteccion usada para reiniciar al PIC en caso de que no


siga con el programa en ejecución, dejaremos esta función desactivada.

Brown-Out Reset: Proteccion usada para reiniciar al PIC en caso de que el


voltaje de alimentación caiga por debajo del margen de protección. Dejaremos
esta opción activada.

205
6. Una vez realizado todo esto, tenemos el área de trabajo donde
vamos a realizar nuestro código.

206
1. Encendido y apagado de led usando switch.

Es hora de crear nuestro primer código, el cual consistirá de encendido y


apagado de un led usando un switch. Podrá sonar muy simple, pero
estos son los primeros pasos necesarios para programar un pic.

Comenzamos por declarar los puertos que serán entrada y salida,


apagaremos los convertidores ADC y los comparadores.

TRISA = 1;
TRISB = 0;
PORTA = 0;
PORTB = 0;
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;

Notarás que ahora agregamos el “PORTA = 0;” y el “PORTB = 0;


Esto se agrega para que, al momento de iniciar el código, inicien
apagados todos los puertos y no iniciemos con errores. No es 100%
necesario hacerlo, pero por seguridad es recomendable hacerlo.

Ya que tenemos como vamos a configurar los pines, ahora veamos


cómo podemos encender y apagar el led.

Para que el PIC pueda encender el led, debe haber un código que lea
cuando el switch está siendo presionado y cuando el switch está suelto.

Para esto existe la función “if”

La función if se encarga de dar una salida, siempre y cuando se cumpla


la condición.

En nuestro caso, queremos que el led se encienda cuando hay un “1” en


la entrada “RA0” y que cuando este 1 esté presente, se encienda el led
que estará conectado a la salida “RB0”

207
Entonces hacemos lo siguiente:

if(RA0_bit == 1){
RB0_bit = 1;
}

Del fragmento de código debes notar varias cosas.

La condición que se debe cumplir va dentro de un paréntesis pegado a


la función “if”. Dentro de ahí escribimos lo que buscamos que se cumpla
para realizar una acción.

Después añadimos 2 corchetes, el “{“para abrir y el “}” para cerrar la


función. Esto es muy importante, para definir el inicio y fin de la función.

Dentro de la función añadimos lo que queremos que suceda una vez


que se ha cumplido la acción requerida.

En este caso, será encender el bit RB0, por lo que ponemos que RB0 =
1;

Ahora, ya te habrás dado cuenta que la condición lleva 2 signos “=”,


pero la acción solo lleva uno ¿Esto a que se debe?

Verás, “==” y “=” no son lo mismo.

En lenguaje C, “==” significa una condición, algo equivalente a “Si es


igual”, (RA0 == 1) se traduce directamente a “Si RA0 es igual a 1, se ha
cumplido la condición.

El “=” es para declarar un estado. En este caso al cumplirse la condición


ordenamos que RB0 sea igual a 1.

Ya sabemos que sucede cuando oprimimos el botón, pero ¿Cómo


podemos definir qué sucede cuando el botón no esta encendido?

La función if tiene otra función complementaria que es totalmente


dependiente del if, su nombre es “else”.

La función else puede traducirse a algo asi como “cualquier otra cosa”.

Es decir, que a cualquier otra cosa diferente de la condición dentro de la


función if, se ejecutará la acción dentro de “else”

208
if(RA0_bit == 1){
RB0_bit = 1;
}
else{
RB0_bit = 0;
}

La función else debe ir justo debajo del if que estemos empleando.

Y verás que ahí dentro, la orden a ejecutar, en este caso, cualquier otra
cosa diferente a 1 “un 0 basicamente” tendrá al puerto RB0 apagado.

Ya tenemos nuestras órdenes a ejecutar, ahora tenemos que juntar todo


el código para que funcione.

void main() {

TRISA = 1;
TRISB = 0;
PORTA = 0;
PORTB = 0;
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;

while(1){
if(RA0_bit == 1){
RB0_bit = 1;
}
else{
RB0_bit = 0;
}

Al código le hemos agregado 2 funciones más, las cuales son: “void


main()” y “while(1)”

void main es la función principal, de aquí su nombre “main” y aquí es


donde TODO el código estará funcionando, desde la declaración de
puertos hasta el código ejecutable.

209
La función “while(1)” es una función cíclica, esto quiere decir que se
estará ejecutando “infinitamente” mientras esté encendido el pic o no se
reinicie.

En la función while pondrás el código ejecutable, mas no la declaración


de puertos, ya que eso solo se tiene que realizar una vez, mientras que
el código ejecutable debe estar ejecutándose cíclicamente, pues este
está sujeto a cambios.

Ya que tenemos el código listo, lo copiamos al área de trabajo y damos


en compilar.

Da click en el apartado build y si no hay errores de sintaxis en tu código,


se generará un archivo “.hex” el cual será el archivo con el que
programarás el pic. Si no sabes cómo programar el pic, ve a la sección
“como cargar programas en un pic” para hacerlo.

Ahora veámoslo en diagrama.

210
Este es el diagrama de conexiones.

Recuerda que la resistencia de 10k es para mantener el 0 lógico en el


pin de entrada.

La resistencia de 220 ohms en serie con el led es para limitar la corriente


que fluye.

Recuerda que el pic funciona con 5V, si lo alimentas con un voltaje


menor no funcionará bien y si lo alimentas con un voltaje mayor el pic se
va a dañar y será inservible.

Aquí usamos una batería de 9V y un regulador 7805 para dar los 5V,
pero si tienes una fuente que entregue 5V estables, este arreglo no es
necesario.

211
2. Uso de delay o retardo.

La función “delay” o en español “retardo” es una función presente en


lenguaje C para crear un retardo de un tiempo establecido.

¿Cuál es el propósito de esto?

En algunas situaciones, necesitaremos que exista un retardo en la


ejecución del código, ya sea para crear una salida que oscila, evitar el
efecto rebote con botones, para esperar a una acción, etc.

Veamos diferentes aplicaciones del delay en código.

Aplicación#1 : salida intermitente de led.

En esta primera aplicación haremos parpadear un led a una frecuencia


que podremos modificar mediante el código.

La función “delay” puede ser escrita de manera distinta según el


compilador que estemos utilizando, en mikroC que es el compilador que
usamos existe de la siguiente manera: “delay_ms()” y “delay_us()”

delay_ms() se utiliza para crear retardos en el rango de los


milisegundos, recordemos que 1 milisegundo es igual a 0.001 segundos.
La cantidad de milisegundos a usar se escribe dentro de los paréntesis.
Es decir, si quiero un retardo de 100 milisegundos escribo
delay_ms(100);

Cabe resaltar que solo podemos usar NUMEROS ENTEROS dentro de


este paréntesis.

delay_us() se utiliza para crear retardos en el rango de los


microsegundos, recordemos que 1 microsegundo es igual a 0.000001
segundos. Y funciona de la misma manera que la función anterior,
introducimos el tiempo que deseamos dentro del paréntesis.

Ya que sabemos esto, vamos a emplearlo en el código.

Vamos a hacer que el led parpadee a una frecuencia de 1hz o 1 ves por
segundo.

Entonces, vamos a necesitar que esté encendido por medio segundo y


apagado por medio segundo para formar un ciclo completo de 1
segundo.

212
void main(){
TRISB = 0;
PORTB = 0;
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;

while(1){
RB0_bit = 1;
delay_ms(500);
RB0_bit = 0;
delay_ms(500);
}
}

Y listo, esto es prácticamente todo el código necesario para hacer


parpadear el led. Notarás que solo usamos el puerto B como salida y por
lo tanto los demás puertos no necesitan ser declarados.

El circuito queda de la siguiente manera:

213
Aplicación #2: Transición de eventos

Esta aplicación es parecida a la anterior, pero aquí haremos una


transición de eventos al cambiar el led encendido o creando una
secuencia de encendido usando todo el puerto C.

void main(){
TRISC = 0;
PORTC = 0;
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
While(1){
PORTC = 0b00000001;
delay_ms(200);
PORTC = 0b00000010;
delay_ms(200);
PORTC = 0b00000100;
delay_ms(200);
PORTC = 0b00001000;
delay_ms(200);
PORTC = 0b00010000;
delay_ms(200);
PORTC = 0b00100000;
delay_ms(200);
PORTC = 0b01000000;
delay_ms(200);
PORTC = 0b10000000;
delay_ms(200);
}
}

El circuito queda de la siguiente manera:

214
Tenemos que ocupamos los 8 bits del puerto C por lo tanto necesitarás
8 resistencias de 220 ohms y 8 leds.

Como dijimos anteriormente, tenemos una secuencia donde cada led ira
encendiéndose exclusivamente en el periodo de tiempo que le
corresponda. El mismo funcionamiento que vimos en el circuito donde
empleamos el contador en década “CD4017”.

215
3. Declaración de variables, operaciones matemáticas y operaciones
lógicas básicas.

Una variable es una letra, símbolo u objeto cuyo valor puede variar.

En programación, las variables se utilizan para que estas adquieran un


valor en base a alguna acción, alguna lectura o alguna operación
matemática. Para luego ser mostradas en un display, tomar como salida
en pwm, convertirse en una señal o volver a estar involucradas en otra
operación matemática para ser convertida en otro valor.

Las variables disponibles en lenguaje C son los siguientes:

bit : la variable bit solo permite almacenar un dato lógico, es decir 0 o 1.

char: se utiliza para almacenar caracteres codificados en ASCII, es


decir, letras o textos.

unsigned short: esta variable se utiliza para almacenar una variable


ENTERA solamente positiva de 8 bits, es decir de 0 a 255.

signed short: esta variable se utiliza para almacenar una variable


ENTERA tanto positiva como negativa de 8 bits, es decir, de -127 a 127.

unsigned int: esta variable se utiliza para almacenar una variable


ENTERA solamente positiva de 16 bits, es decir, de 0 a 65536.

signed int: esta variable se utiliza para almacenar una variable ENTERA
tanto positiva como negativa de 16 bits, es decir, de -32767 a 32767.

unsigned long : esta variable se utiliza para almacenar una variable


ENTERA solamente positiva de 32 bits, es decir, de 0 a 4294967296.

signed long: esta variable se utiliza para almacenar una variable entera
tanto positiva como negativa de 32 bits, es decir, de -2147483647 a
2147483647

Para crear una variable, debemos de primero incluir el tipo de variable,


seguido del nombre que queremos darle a la variable en cuestión. Por
ejemplo, para una variable int que queremos darle el nombre de var, lo
hacemos de la siguiente manera:

int var;

216
Las variables se declaran antes del código principal o “void main()”,
quedando como ejemplo de la siguiente manera:

int var;
void main(){
TRISA = 1;
TRISB = 0;
PORTA = 0;
PORTB = 0
ANSEL = 0;
C1ON_bit = 0;
C2ON_bit = 0;
var = 5;

while(1){
código cualquiera
}
}

Notarás que declaramos la variable antes de void main, pero que le


dimos un valor de “5” dentro de void main.

Esto es porque ahí ponemos el valor inicial, pero que se podrá modificar
según el código.

Siempre tienes que tener en cuenta el tipo de variable a declarar viendo


la tabla, si tu valor solo requiere de un 1 o 0, pues no es necesario usar
una variable “int” cuando una variable “bit” puede hacer el mismo trabajo
y usando menos memoria.

217
Las operaciones matemáticas disponibles que tenemos en lenguaje C
son la suma, resta, multiplicación y división.

Cabe destacar que las operaciones matemáticas solo se pueden utilizar


en variables y constantes.

Esto quiere decir que NO podemos realizar operaciones matemáticas


entre entradas, salidas o cosas por el estilo.

También tenemos que tener en cuenta que para almacenar el resultado


de la operación matemática entre 2 o más variables, necesitamos una
tercera variable.

Cuando realizamos una operación matemática que solo involucra una


variable (como incrementar su valor en “n” cantidad o sustraer “n”
cantidad) no es necesario guardar su valor en otra variable, pues es un
simple incremento o decremento interno.

Para sumar 2 o más variables realizamos lo siguiente:

var3 = var1 + var2;

Para incrementar en valor de 1 una variable hacemos lo siguiente:

var1++; o también de la siguiente manera: var1 = var1 + 1;

Para incrementar en valor “n” (que en este caso será 10) una variable,
hacemos lo siguiente:

var1+10; o también de la siguiente manera: var1 = var1 + 10;

Para restar 2 o más variables hacemos lo siguiente:

var3 = var1 – var2;

Para sustraer en valor de 1 una variable hacemos lo siguiente:

var1--; o también : var1 = var1 – 1;

para sustraer en valor n (en este caso 10) a una variable hacemos lo
siguiente:

var1-10 o también: var1 = var1 – 10;

218
Para multiplicar 2 o más variables hacemos lo siguiente:

var3 = var1 * var2;

IMPORTANTE: debes recordar siempre que las multiplicaciones se


hacen utilizando el asterisco “*” y no la x.

Para dividir 2 o más variables hacemos lo siguiente:

var3 = var1/var2;

Por último, tenemos los operadores lógicos.

&& se utiliza para el operador lógico AND

Ejemplo:

If(RA1_bit == 1 && RA2_bit == 1){


RB0_bit = 1;
}

Como verás en la condición if, solo se cumplirá si RA1 y RA2 son 1.

|| se utiliza para el operador lógico OR.

Ejemplo:
If(RA1_bit == 1 || RA2_bit == 1){
RB0_bit = 1;
}

Como verás en la condición if, se cumplirá si cualquiera o ambas


entradas son 1.

219
“<” se utiliza para “menor que”
Por ejemplo:

If(var1 < var2){


RB0_bit = 1;
}

Como verás en la condición if, la salida RB0 sera 1 solo si la variable


var1 es MENOR a la variable var2

“>” se utiliza para “mayor que”


Por ejemplo:

If(var1 > var2){


RB0_bit = 1;
}

Como verás en la condición if, la salida RB0 será 1 solo si la variable


var1 es MAYOR a la variable var2

“<=” se utiliza como “menor o igual que”


Por ejemplo:

If(var1 <= var2){


RB0_bit = 1;
}

Como verás en la condición if, la salida RB0 será 1 solo si la variable


var1 es MENOR O IGUAL a la variable var2. Esto se usa para negar la
salida SOLO cuando sea mayor.

“>=” se utiliza como “mayor o igual que”


Por ejemplo:

If(var1 >= var2){


RB0_bit = 1;
}

Como verás en la condición if, la salida RB0 será 1 solo si la variable var
1 es MAYOR O IGUAL a la variable var2. Esto se usa para negar la
salida SOLO cuando sea menor.

220
Por ultimo tenemos el operador “!=” que significa “diferente a”
Por ejemplo:

If(var1 != var2){
RB0_bit = 1
}

Como verás en el operador lógico if, la salida RB0_bit será 1 siempre y


cuando var1 NO sea igual a var2. Sea mayor o menor… no importa, lo
único importante es que NO sean iguales.

221
4. Sistema anti rebote.

El rebote es una característica presente principalmente en switches


mecánicos y se trata de un ruido u oscilación presente en la transición
de abierto a cerrado y se ve así:

¿Esto en que nos puede afectar? Supongamos que el microcontrolador


tiene que contar la cantidad de veces que se presiona un botón para
luego ejecutar una acción, pero con este efecto rebote contará más
veces debido a los rebotes de transición y por esto mismo el código se
ejecutará antes.

Para erradicar completamente este efecto, lo que debemos hacer es que


se ejecute la acción una vez que el switch pase de un estado bajo a un
estado alto, y luego de regreso, lo cual es el proceso que se realiza
cuando presionas y sueltas el botón. Es decir, el proceso se ejecutará
una vez ya hayas soltado el botón presionado.

Para esto usamos una variable de tipo bit, para guardar el estado y
haremos una suma para comprobar el funcionamiento de nuestro
sistema anti rebote.

222
Primero haremos el código sin sistema anti rebote para que puedas
visualizar el problema realmente.

En este código, tendremos como entrada un botón y de salida un led, y


este led se encenderá una vez hayamos presionado el botón 10 veces.

Este será el circuito que usarás para ambos ejemplos.

Recuerda que si tienes ya una fuente de poder que entregue 5V


estables, no es necesario que uses la batería ni el regulador.

223
bit memoria;
short suma;
void main(){
TRISA = 1;
PORTA = 0;
TRISB = 0;
PORTB = 0;
C1ON_bit = 0;
C2ON_bit = 0;
ANSEL = 0;
ANSELH = 0;
memoria = 0;
suma = 0;

while(1){

if(RA0_bit == 1){
suma = suma + 1;
}

If(suma >= 10){


RB0_bit = 1;
}
else{
RB0_bit = 0;
}

En este ejemplo no hemos usado el sistema anti rebote, y notaras que la


suma se completará mucho antes de haber presionado el botón 10
veces.

Ahora implementemos el sistema anti rebote para que veas el efecto


contrario.

224
bit memoria;
short suma;
void main(){
TRISA = 1;
PORTA = 0;
TRISB = 0;
PORTB = 0;
C1ON_bit = 0;
C2ON_bit = 0;
ANSEL = 0;
ANSELH = 0;
memoria = 0;
suma = 0;

while(1){

if(RA0_bit == 1 && memoria == 0 ) {


memoria = 1;
}

If(RA0_bit == 0 && memoria == 1){


suma = suma + 1;
memoria = 0;
}

If(suma >= 10){


RB0_bit = 1;
}
else{
RB0_bit = 0;
}

Ahora que hemos implementado el sistema anti rebote en el código,


notarás que ahora si hace el conteo preciso de las 10 pulsaciones.

¿Cómo funciona este sistema?

Como dijimos anteriormente, la clave está en la transición de 0 a 1 y


luego a 0. Es decir, al presionar va del 0 al 1, y al soltar va del 1 al 0.
Solo así podemos garantizar que el código se ejecute al haber soltado el
botón.

225
Para esto usamos un bit de memoria, el cual será 1 al switch pasar de 0
a 1, es decir, cuando se presiona.

Una vez que el bit de memoria es 1, podemos detectar la transición del


switch de 1 a 0, es por eso que en la segunda función if, se pide que
RA0_bit sea 0 y memoria sea igual a 1.

Una vez que RA0 pasa a ser 0 y memoria 1, sabemos que ya ha


ocurrido la transición del switch de 1 a 0. Y es aquí cuando debemos
ejecutar la función deseada, en este caso la suma.

Es por esto que ahora tenemos inmunidad ante el rebote generado por
el switch.

Recuerda siempre, que al usar un switch mecanico, debes usar este


sistema para garantizar la ejecución correcta del código.

226
5. Uso del LCD 16x2.

El display LCD 16x2 es un display compacto que consta de 2 filas y 16


columnas en el cual podemos mostrar datos, caracteres, símbolos
personalizados, etc.

Es de gran utilidad pues nos permite mostrar datos como la temperatura,


el tiempo, o cualquier otra cosa según nuestro código.

227
Como podrás ver en la imagen anterior, el LCD cuenta con 16 pines,
cuya función es la siguiente.

1. VSS: negativo
2. VDD: positivo (5V)
3. VE: control de contraste (mediante potenciómetro)
4. Register Select (RS)
5. Read/Write (RW)
6. Enable
7. Data0 (D0)
8. Data1 (D1)
9. Data2 (D2)
10. Data3 (D3)
11. Data4 (D4)
12. Data5 (D5)
13. Data6 (D6)
14. Data7 (D7)
15. Ánodo del led backlight (+)
16. Cátodo del led backlight (-)

Desde el pin #4 hasta el pin# 14 serán los pines utilizados para enviar
datos y controlar el LCD.

El compilador MikroC cuenta con una librería especial para este display
que nos permite usarlo sin problemas.

Veamos cuales son los comandos disponibles para usarlo.

Iniciemos con las constantes que se deben declarar antes de void main()
y que nos servirán para definir que pines del microcontrolador usaremos
para controlar cada pin del LCD. Veamos un ejemplo

228
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;

sbit LCD_RS_Direction at TRISB4_bit;


sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;

Estas 2 columnas siempre deben ser usadas al momento de definir las


constantes. Como podrás darte cuenta, cada una está declarada para un
pin del puerto B.

Siendo:
RS al pin RB4
EN al pin RB5
D7 al pin RB3
D6 al pin RB2
D5 al pin RB1
D4 al pin RB0

No hay una regla establecida para definir estos pines, es decir, que
cualquier pin de cualquier puerto puede usarse para cada pin del lcd,
obviamente declarándose como salida, y tampoco es necesario un
orden, es decir, podemos usar un pin del puerto A para RS, 2 pines del
puerto B para EN y D7, y los pines restantes en el puerto C.

Esto se selecciona en función a como se acomode mejor para el circuito


o proyecto que estés desarrollando.

Otra cosa que podrás haber notado es que no se declaran los pines RW
ni los pines D0 a D3 ¿Por qué?

El pin RW mayormente se coloca a negativo, tenlo siempre en mente.

Y los pines D0 a D3 no se usan porque estamos usando un sistema de


comunicación de 4 bits. Es por eso que usamos del D4 al D7 solamente.

229
Esto para ahorrar pines.

Ya que sabemos cómo declarar los pines, veamos las instrucciones de


uso para el LCD.

Estas instrucciones se usaran dentro del void main()

Lcd_init();
Esta instrucción se usa para iniciar el lcd, es indispensable puesto que
sin esta instrucción no se iniciara el lcd.

Lcd_out(#fila,#columna,dato);
Esta instrucción se utiliza para escribir un dato en el lcd.
El # de fila será 1 o 2, puesto que solo tenemos 2 filas. El # de columna
será del 1 al 16 pues tenemos 16 columnas, y el dato pueden ser texto,
números, variables convertidas a str, etc.

Lcd_out_cp(“texto”);
Se usa para mostar solamente texto en la posición actual del cursor,
este comando no es tan relevante puesto que el lcd_out() cumple la
misma función.

Lcd_chr(#fila,#columna,”texto”);
Se usa para mostrar únicamente texto, la diferencia entre este comando
y Lcd_out_cp es que en este comando si podemos modificar el # de fila
y # de columna directamente.

Ahora veremos los comandos disponibles


Para usar un comando, primero usamos la instrucción
“Lcd_cmd(comando a usar);” y dentro del paréntesis escribimos el
comando a utilizar. Estos son los comandos que podemos utilizar:

_LCD_CLEAR : se usa para borrar todo lo que esté en el display.


_LCD_FIRST_ROW : mover el cursor a la columna 1
_LCD_SECOND_ROW: mover el cursor a la columna 2
_LCD_RETURN_HOME: regresar el cursor a la coordenada”1,1”
_LCD_CURSOR_OFF: apagar el cursor
_LCD_UNDERLINE_ON: Subrayado encendido
_LCD_BLINK_CURSOR_ON: Parpadeo de cursor encendido.
_LCD_MOVE_CURSOR_LEFT: Mover cursor a la izquierda
_LCD_MOVE_CURSOR_RIGHT: Mover cursor a la derecha
_LCD_TURN_ON : Encender display

230
_LCD_TURN_OFF : apagar display
_LCD_SHIFT_LEFT: mover a la izquierda
_LCD_SHIFT_RIGHT: mover a la derecha.

Ya que conocemos las instrucciones y comandos del lcd, hagamos un


Código utilizándolo.

Este será el circuito empleado para el código siguiente. Recuerda

que el lcd debe ser alimentado con 5V al igual que el pic, ten mucho

cuidado con las conexiones porque se puede dañar fácilmente.

231
sbit LCD_RS at RC7;
sbit LCD_EN at RC6;
sbit LCD_D4 at RC5;
sbit LCD_D5 at RC4;
sbit LCD_D6 at RC3;
sbit LCD_D7 at RC2;

sbit LCD_RS_Direction at TRISC7_bit;


sbit LCD_EN_Direction at TRISC6_bit;
sbit LCD_D4_Direction at TRISC5_bit;
sbit LCD_D5_Direction at TRISC4_bit;
sbit LCD_D6_Direction at TRISC3_bit;
sbit LCD_D7_Direction at TRISC2_bit;

void main(){
TRISC = 0;
PORTC = 0;
C1ON_bit = 0;
C2ON_bit = 0;
ANSEL = 0;
ANSELH = 0;
Lcd_init();
Lcd_cmd(_lcd_cursor_off);

while(1){
Lcd_out(1,1,”Hola mundo”);
}
}

No podíamos iniciar de mejor manera que creando el clásico “Hola


mundo”.

Ya que sabemos cómo mostrar un mensaje, veamos cómo podemos


mostrar variables, ya que estas se deben convertir primero a un carácter
para posteriormente ser mostradas.

Lo haremos con el mismo circuito usado para este código.

232
sbit LCD_RS at RC7;
sbit LCD_EN at RC6;
sbit LCD_D4 at RC5;
sbit LCD_D5 at RC4;
sbit LCD_D6 at RC3;
sbit LCD_D7 at RC2;

sbit LCD_RS_Direction at TRISC7_bit;


sbit LCD_EN_Direction at TRISC6_bit;
sbit LCD_D4_Direction at TRISC5_bit;
sbit LCD_D5_Direction at TRISC4_bit;
sbit LCD_D6_Direction at TRISC3_bit;
sbit LCD_D7_Direction at TRISC2_bit;

short contador;
char numero [6];
void main(){
TRISC = 0;
PORTC = 0;
C1ON_bit = 0;
C2ON_bit = 0;
ANSEL = 0;
ANSELH = 0;
Lcd_init();
Lcd_cmd(_lcd_cursor_off);
short = 0;
while(1){
contador = contador + 1;
delay_ms(200);

ShortToStr(contador,numero);
Lcd_out(1,1,numero);
}
}

De esta manera podemos mostrar variables en un display LCD.

Como verás, la variable en cuestión necesita de una variable char para


ser almacenada, en este caso la variable char fue nombrada como
“numero” y el “[6]” indica la cantidad de dígitos a almacenar.

Después usamos el “ShortToStr(contador,numero)” para convertir la


variable short a carácter.

233
Para hacer la conversión, primero ponemos el tipo de variable, seguido
de ToStr(variable,variable char). Dentro del paréntesis primero ponemos
el nombre de la variable, después de la coma, ponemos el nombre de la
variable char donde será almacenada.

Por ejemplo, si nuestra variable anterior “contador” hubiese sido de tipo


int en lugar de short.

IntToStr(contador,numero)

O si nuestra variable hubiese sido de tipo “Float”.

FloatToStr(contador, numero)

234
Generar caracteres personalizados en para LCD

MikroC nos permite generar caracteres personalizados.

Seleccionamos la opción LCD Custom Character y obtendremos la


siguiente ventana.

Tendremos la matriz de 5x8, que es donde se muestra cada carácter del


lcd.

Dando click en cada cuadro, lo activamos o desactivamos para formar el


carácter deseado.

Al generar el carácter deseado, damos click en el cuadro “Generate


code” y nos va a generar el codio para integrarlo.

Usando ese mismo carácter, hagamos un código para mostrarlo en el


lcd.

235
sbit LCD_RS at RB5_bit;
sbit LCD_EN at RB4_bit;
sbit LCD_D4 at RB3_bit;
sbit LCD_D5 at RB2_bit;
sbit LCD_D6 at RB1_bit;
sbit LCD_D7 at RB0_bit;

sbit LCD_RS_Direction at TRISB5_bit;


sbit LCD_EN_Direction at TRISB4_bit;
sbit LCD_D4_Direction at TRISB3_bit;
sbit LCD_D5_Direction at TRISB2_bit;
sbit LCD_D6_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB0_bit;

const char character[] = {14,14,4,31,4,10,10,10};

void CustomChar(char pos_row, char pos_char) {


char i;
Lcd_Cmd(64);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 0);
}

void main(){
TRISC = 0;
PORTC = 0;
C1ON_bit = 0;
C2ON_bit = 0;
ANSEL = 0;
ANSELH = 0;
Lcd_init();
Lcd_cmd(_lcd_cursor_off);

while(1){
customchar(1,1);
}
}

236
Imagen resultante:

Para mostrar el carácter usamos la instrucción especial:


customchar(1,1);

237
6. Conversor analógico digital

Previamente en este libro ya hablamos y utilizamos el conversor


analógico-digital, por lo que si te saltaste esa sección, regresa para que
puedas comprender su funcionamiento.

El conversor analógico-digital presente en este microcontrolador es de


10 bits, por lo que a un voltaje de referencia de 5V, tenemos una
precisión de 4.88mV*bit.

El pic16f886 cuenta con 11 canales utilizables, para saber si un pin


puede usarse como ADC, simplemente revisa que diga “AN” seguido del
número correspondiente que representa de canal en el ADC.

Ese es un ejemplo de un pin utilizable por el ADC, siendo este el AN0, o


canal 0 del ADC.

Para poder usar el conversor analógico a digital en MikroC tenemos las


siguientes 4 instrucciones:

“ANSEL” : sirve para declarar los primeros 8 puertos del ADC, es decir,
del 0 al 7.

“ANSELH” : sirve para declarar los puertos siguientes, es decir, del 8 al


11.

“ADC_Init();” : sirve para inicializar el conversor analógico a digital del


pic.

238
“ADC_read(#de canal);” : sirve para hacer la lectura del canal deseado,
dentro del paréntesis se coloca el número del canal que deseamos usar.
Si queremos usar el canal 0, escribimos “ADC_read(0);”

En el registro ANSEL y ANSELH debemos usar un 1 para declarar el pin


como entrada ADC, o un 0 para declarar el pin como entrada o salida
digital.

Hagamos un ejemplo de cómo utilizar el conversor analógico a digital,


usando un potenciómetro como divisor de voltaje, luego se lee esta
salida analógica mediante el pin RA0 (que corresponde al canal AN0) y
luego mediante una formula, mostrarlo como voltaje en un lcd16x2. De
esta manera estaríamos creando un multímetro digital algo rudimentario,
pero funcional.

Antes de empezar, recuerda que ningún pin del pic soporta más de
5VDC.

Este será el circuito utilizado para el siguiente código.

239
sbit LCD_RS at RB5_bit;
sbit LCD_EN at RB4_bit;
sbit LCD_D7 at RB0_bit;
sbit LCD_D6 at RB1_bit;
sbit LCD_D5 at RB2_bit;
sbit LCD_D4 at RB3_bit;

sbit LCD_RS_Direction at TRISB5_bit;


sbit LCD_EN_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB0_bit;
sbit LCD_D6_Direction at TRISB1_bit;
sbit LCD_D5_Direction at TRISB2_bit;
sbit LCD_D4_Direction at TRISB3_bit;

char voltaje [6];


int medicion;
int resultante;
void main(){

TRISA = 1;
PORTA = 0;
TRISB = 0;
PORTB = 0;
ANSEL = 0b00000001;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
ADC_Init();
LCD_init();
LCD_cmd(_lcd_clear);
LCD_cmd(_cursor_off);

while(1){

lcd_out(1,1,”V:”);
medicion = adc_read(0);
resultante = medicion * 4.88;
intToSTR(resultante,voltaje);
Lcd_out(1,4,voltaje);
delay_ms(100);

}
}

240
Notarás varias cosas en el código, te explicaré paso a paso cada una de
ellas.

Notarás que en el registro “ANSEL” declaramos los puertos a usar en


arreglo de 8 bits. Es decir, “0b0000001” recuerda que los 0 son los
puertos NO usados como ADC, solo los 1 son los puertos ADC.

ANSELH se pone en 0 pues ningún puerto del 8 al 11 se utiliza.

Primero usamos la variable medicion para almacenar el valor obtenido


por la lectura del ADC.

Despues, esta variable se multiplica por 4.88 para convertir este valor a
milivolts. ¿Pero de donde salio este 4.88?

Como dijimos al principio, la resolución interna del ADC del pic es de 10


bits, y el voltaje de referencia interno es de 5V

10 bits es igual a 1024 en decimal.

Si dividimos 5/1024 obtenemos un resultante de 0.00488V por bit,


osease, 4.88mV por cada bit.

Entonces, para convertir de nuevo este valor de mV por bit a el valor de


voltaje medido, multiplicamos por 4.88 y nos dará el valor en milivolts.

Suponiendo que la lectura del ADC da 512 en decimal, al multiplicarlo


por 4.88 obtenemos 2498.56mV o 2.498V.

Recuerda que el voltaje de entrada NO debe exceder los 5V. ¿Entonces


cómo podemos leer voltajes mayores? Usando divisores de voltaje
obviamente.

Ahora vamos a usar el adc para crear un termómetro. Vamos a usar el


sensor de temperatura lm35.

241
El LM35 es un sensor de temperatura, el cual consta solamente de 3
terminales y se puede alimentar desde 4 a 20V.

Este sensor nos entrega una lectura de 10mV/ºC. es decir, que por cada
grado centígrado tendremos 10mV. Para una temperatura de 30ºC
obtendremos una salida de 300mV.

Teniendo una lectura de 10mV/ºC y una resolución del ADC de


4.88mV*bit, es una resolución más que suficiente.

Hagamos un termómetro usando el lm35, el pic16f886 y un lcd 16x2

Este será el circuito utilizado:

242
sbit LCD_RS at RB5_bit;
sbit LCD_EN at RB4_bit;
sbit LCD_D7 at RB0_bit;
sbit LCD_D6 at RB1_bit;
sbit LCD_D5 at RB2_bit;
sbit LCD_D4 at RB3_bit;

sbit LCD_RS_Direction at TRISB5_bit;


sbit LCD_EN_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB0_bit;
sbit LCD_D6_Direction at TRISB1_bit;
sbit LCD_D5_Direction at TRISB2_bit;
sbit LCD_D4_Direction at TRISB3_bit;

char temperatura [6];


int medicion;
int resultante;
void main(){

TRISA = 1;
PORTA = 0;
TRISB = 0;
PORTB = 0;
ANSEL = 0b00000001;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
ADC_Init();
LCD_init();
LCD_cmd(_lcd_clear);
LCD_cmd(_cursor_off);

while(1){

lcd_out(1,1,”ºC:”);
medicion = adc_read(0);
resultante = (medicion / 2.05);
intToSTR(resultante,temperatura);
Lcd_out(1,4,temperatura);
delay_ms(100);

}
}

243
De esta manera podemos obtener la lectura en grados centígrados.

Como podras notar este código no es tan distinto al anterior.

La conversión se obtiene multiplicando el valor obtenido por 2.05

2.05 sale de dividir los 10mV por grado centígrado sobre los 4.88mV por
bit de resolución.

Puedes usar el mismo principio de lectura para leer otro tipo de


sensores, siempre y cuando su salida sea analógica.

También recuerda que el pic solo puede leer voltajes positivos en su


ADC.

244
7. Salida de PWM

Anteriormente en este libro explicamos que es el pwm y funciones, por lo


que si te saltaste ese tema, regresa a leerlo para que puedas
comprender lo siguiente.

El pic 16f886 tiene 2 salidas de pwm, las cuales son ccp1 y ccp2.

La resolución de este pwm en el pic es de 8 bits.

Y cuya frecuencia puede ser de 1khz hasta 20khz.

En mikroC debemos usar las siguientes instrucciones para poder utilizar


el PWM.

“PWM1_init(frecuencia); para el canal 1”y “PWM2_init(frecuencia); para


el canal 2”. Este comando inicia el pwm del pic, dentro del paréntesis
debemos poner la frecuencia de uso. Por ejemplo, si queremos usar el
canal 1 a 2khz: PWM1_init(2000);

“PWM1_start(); para canal 1” y “PWM2_start(); para el canal 2” : esta


instrucción se utiliza para activar el canal de pwm deseado. Puede
activarse cuando se necesite.

“PWM1_stop(); para canal 1” y “PWM2_stop(); para canal 2” : esta


instrucción se utiliza para apagar el canal de pwm deseado. Puede
desactivarse cuando se necesite.

“PWM1_set_duty(variable)” para canal 1 y “PWM2_set_duty(variable);”


para canal 2”. : esta instrucción pone el duty cycle en la salida deseada.
Dentro del paréntesis irá la variable que contiene el valor del duty cycle.

245
Como es de 8 bits recuerda que será desde 0 a 255. Siendo 0 un duty
cycle de 0% y 255 un duty cycle de 100%

Hagamos un código para tener una salida de de pwm controlada


mediante un potenciometro.

Para poder visualizar el pwm deberás de tener un osciloscopio. De lo


contrario puedes usar un multímetro con opción de medicion de duty
cycle.

Usaremos el siguiente circuito:

246
short duty;
void main(){
TRISA = 1;
PORTA = 0;
TRISC = 0;
PORTC = 0;
C1ON_bit = 0;
C2ON_bit = 0;
ANSEL = 0b00000001;
ANSELH = 0;
duty = 0;
PWM1_init(2000);
PWM1_start();

while(1){

duty = (adc_read(0) / 4);


PWM1_set_duty(duty);

}
}

Del código notaras que la lectura del adc la dividimos entre 4 ¿Pero
porque?

Como dijimos anteriormente, el pwm es de 8 bits, pero la lectura del adc


es de 10 bits.

Si lo pasamos a decimal, el pwm tiene una resolución de 255 y el adc de


1024

Para poder convertir esto, dividimos 1024/255 y obtenemos 4.01, de


esta manera podemos controlar la salida de pwm usando el
potenciómetro de una manera un poco más precisa.

247
Ya que sabemos cómo usar un la salida de pwm, hagamos un
controlador de motores de DC usándolo.

Para esto usaremos el opamp lm358 para poder amplificar la señal de


5V de pwm del pic, a 9V para controlar el mosfet.

El mosfet que usaremos es el irf540N

Recuerda que el motor funcionara a 9V, al igual que el opamp, no los


conectes directo al 7805 pues podrias quemar el 7805 por una
sobrecarga.

También ten en cuenta cuanto consume el motor antes de conectarlo a


la batería o a la fuente. Debes estar seguro de que puede proporcionar
la corriente necesaria.

El código a emplear es exactamente el mismo que el anterior.

248
8. Multiplexación de displays de 7 segmentos.

Los displays de 7 segmentos fueron explicados anteriormente en este


libro, si te saltaste esa parte regresa para que puedas comprender su
funcionamiento.

Como sabrás, los displays de 7 segmentos cuentan usualmente con10


pines, 7 de estos son para controlar los segmentos de la “a” a la “g”, otro
para el punto decimal y los últimos 2 para el ánodo o cátodo según el
tipo de display, solo necesitando un pin de estos 2 presentes.

Supongamos que necesitamos mostrar en 4 displays de 7 segmentos un


número de 4 dígitos.

Para mostrar estos 4 digitos, tenemos un total de 32 pines a controlar,


pues son 8 pines de control por cada digito, y tenemos 4 digitos, nos da
el resultado de 32 pines… Pero…

El pic 16f886 solo cuenta con 24 pines disponibles para ser utilizados.
Nos encontramos el problema de que NO tenemos los pines suficientes
para controlarlos.

Aquí es cuando entra una técnica muy importante en la electrónica


digital, la multiplexación.

La multiplexación consta de generar una secuencia de control o


activación a una velocidad muy alta.

249
Es decir, que en lugar de controlar cada digito a la vez, lo que hacemos
es controlar uno por uno pero a una velocidad muy alta que nuestros
ojos lo perciben como si todos estuvieran siendo controlados al mismo
tiempo.

Siendo controlados de esta manera:

250
Esta técnica es tan importante porque nos permite ahorrar demasiados
pines y poder hacer nuestro código mucho más eficiente.

Esta técnica se vuelve más eficiente conforme usemos más segmentos


¿Por qué?

Supongamos que necesitamos usar 10 displays, esto nos da un


resultado de 80 pines a controlar

Pero usando la técnica de multiplexación, solo ocupamos los 8 pines de


A a G y el punto decimal, y otros 10 pines para cada cátodo o ánodo de
los displays. Dándonos un resultado de 18 pines necesarios para
controlarlos.

Ya que conocemos el funcionamiento de la multiplexación, vamos a


hacer un código para emplearlo en nuestro pic 16f886

Ante de mostrar el circuito, te recomiendo que consigas un display de 7


segmentos de 4 digitos, los cuales se ven asi:

Esto es porque si usas 4 displays individuales vas a tener


complicaciones a la hora de hacer las conexiones en el proto debido a la
gran cantidad de conexiones necesarias.

En este display que implementa los 4 dígitos tiene los pines de A a G y


punto decimal, lo único que diferencia es que cuenta con un pin para el
cátodo o ánodo de cada digito.

251
Hagamos un código contador de pulsos, en el cual tendremos 3 botones,
uno para incrementos de 1, otro para incrementos de 10 y otro más para
incrementos de 100.

Estos serán mostrados en un display de 7 segmentos de 4 digitos de


cátodo común.

Este será el circuito a utilizar

Antes de comenzar, debes de saber que MikroC cuenta con una función
para generar el codigo los dígitos en forma decimal o hexadecimal

Esta es la forma en la que lo


encuentras:

252
Aparecerá la siguiente ventana donde podremos generar el código:

Dando click en cada segmento lo incluyes o excluyes, el código se


puede generar en decimal o hexadecimal.

Verás que salen 2 códigos, tanto para cátodo común y ánodo común,
solo deberás copiar el código correspondiente al tipo de display que
estés usando, no uses el contrario pues no funcionará

Aquí otro ejemplo generando el número 3.

253
Ahora… hagamos el código…

bit mem1;
bit mem2;
bit mem3;
bit mem4;
short contador;
short var;
short unidad;
short decena;
short centena;
short millar;
int numero;
void main() {
TRISA = 1;
PORTA = 0;
TRISB = 0;
PORTB = 0;
TRISC = 0;
PORTC = 0;
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
mem1 = 0;
mem2 = 0;
mem3 = 0;
mem4 = 0;
contador = 0;
var = 0;
numero = 0;
while(1){
contador = contador + 1;
delay_ms(1);

if(RA0_bit == 1 && mem1 == 0){


mem1 = 1;
}
if(RA0_bit == 0 && mem1 == 1){
numero = numero + 1;
mem1 = 0;
}

254
if(RA1_bit == 1 && mem2 == 0){
mem2 = 1;
}
if(RA1_bit == 0 && mem2 == 1){
numero = numero + 10;
mem2 = 0;
}

if(RA2_bit == 1 && mem3 == 0){


mem3 = 1;
}
if(RA2_bit == 0 && mem3 == 1){
numero = numero + 100;
mem3 = 0;
}
if(contador == 1){
RB0_bit = 1;
RB1_bit = 0;
RB2_bit = 0;
RB3_bit = 0;
var = millar;
}

if(contador == 2){
RB0_bit = 0;
RB1_bit = 1;
RB2_bit = 0;
RB3_bit = 0;
var = centena;
}

if(contador == 3){
RB0_bit = 0;
RB1_bit = 0;
RB2_bit = 1;
RB3_bit = 0;
var = decena;
}
if(contador == 4){
RB0_bit = 0;
RB1_bit = 0;
RB2_bit = 0;
RB3_bit = 1;
var = unidad;

255
}

millar = (numero / 1000);


centena = (numero - (millar * 1000))/100;
decena = (numero -(millar*1000)-(centena*100))/10;
unidad = (numero -(millar*1000)-(centena*100)-(decena*10));

if(contador > 4){


contador = 0;
}

switch(var){
case 0 : PORTC = 63;break;
case 1 : PORTC = 6;break;
case 2 : PORTC = 91;break;
case 3 : PORTC = 79;break;
case 4 : PORTC = 102;break;
case 5 : PORTC = 109;break;
case 6 : PORTC = 125;break;
case 7 : PORTC = 7;break;
case 8 : PORTC = 127;break;
case 9 : PORTC = 111;break;
}

}
}

De este código debemos resaltar lo siguiente:

Para crear la multiplexación usamos la variable “contador” la cual


incrementa cada 1ms, y que se encarga de crear la secuencia de
encendido para cada digito. Es por esto que en cada if donde se
involucra la variable contador encendemos el bit correspondiente del
puerto B para crear la secuencia de encendido.

Este contador se resetea al ser mayor que 4.

La variable “numero” no se puede mostrar asi directamente en los


displays, es por esto que debemos descomponer en millar, centena,
decena y unidad, para mostrarse individualmente como un numero
completo en los displays.

256
La variable “var” se utiliza para darle el valor exacto en el digito
correspondiente. Siendo el primero digito que se enciende el de millar,
entonces se le da el valor de millar a var, en el siguiente que es
centenas, se le da el valor de centenas para que sea mostrado en ese
instante, y así sucesivamente.

Esta es la primera ocasión en donde usamos la instrucción “switch”.

La instrucción switch se encarga de monitorear una variable que se le


sea asignada y hacer acciones en función del valor que tenga la
variable.

En este caso usamos switch para monitorear la variable “var” y que en


función al valor que tenga, que puede ser de 0 a 9, va a ejecutar el
código correspondiente para mostrar el número en el display. Por
ejemplo.

En el “case 6” se ejecuta el código correspondiente para mostrar el


número 6 en el display, el cual es “PORTC = 125”. Recuerda que
seguido del código a ejecutar debes incluir un “break;”

Podemos hacer un pequeño voltímetro usando este mismo código, pero


haciendo unas pequeñas modificaciones, el circuito será el siguiente:

Como verás es casi el mismo circuito, pero en esta ocasión


reemplazaremos los botones por un potenciómetro.

El código será el siguiente:

257
short contador;
short var;
short unidad;
short decena;
short centena;
short millar;
int numero;
void main() {
TRISA = 1;
PORTA = 0;
TRISB = 0;
PORTB = 0;
TRISC = 0;
PORTC = 0;
ANSEL = 0b00000001;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
contador = 0;
var = 0;
numero = 0;
while(1){
contador = contador + 1;
delay_ms(1);

if(contador == 1){
RB0_bit = 1;
RB1_bit = 0;
RB2_bit = 0;
RB3_bit = 0;
var = millar;
}

if(contador == 2){
RB0_bit = 0;
RB1_bit = 1;
RB2_bit = 0;
RB3_bit = 0;
var = centena;
}

if(contador == 3){
RB0_bit = 0;
RB1_bit = 0;

258
RB2_bit = 1;
RB3_bit = 0;
var = decena;
}
if(contador == 4){
RB0_bit = 0;
RB1_bit = 0;
RB2_bit = 0;
RB3_bit = 1;
var = unidad;
}

numero = adc_read(0) * 4.88;

millar = (numero / 1000);


centena = (numero - (millar * 1000))/100;
decena = (numero -(millar*1000)-(centena*100))/10;
unidad = (numero -(millar*1000)-(centena*100)-(decena*10));

if(contador > 4){


contador = 0;
}

switch(var){
case 0 : PORTC = 63;break;
case 1 : PORTC = 6;break;
case 2 : PORTC = 91;break;
case 3 : PORTC = 79;break;
case 4 : PORTC = 102;break;
case 5 : PORTC = 109;break;
case 6 : PORTC = 125;break;
case 7 : PORTC = 7;break;
case 8 : PORTC = 127;break;
case 9 : PORTC = 111;break;
}

}
}

259
Como verás, el código es casi el mismo, con excepción de que
eliminamos los botones y los reemplazamos por un potenciómetro, y la
variable número ahora depende de la lectura analógica.

Como verás este código es muy reutilizable, hablando de la parte de


multiplexación. Puedes crear más proyectos que utilicen displays de 7
segmentos y será el mismo principio de funcionamiento.

Si quieres añadir más displays simplemente tienes que agrandar el reset


de la variable contador, en este caso se resetea al ser mayor a 4 pues
solo tenemos 4 displays, pero si por ejemplo, piensas utilizar 8 displays,
ponla a que se resetee a mayor que 8

Recuerda que la parte del código que se encarga del reset de la variable
es:
if(contador > 4){
contador = 0;
}

También deberás usar más pines del puerto B para la secuencia de


activación, si quieres usar 8 displays ocuparás el puerto B entero.

260
9. Uso de teclado matricial por método de multiplexación.

La multiplexación no solo se utiliza para manipular salidas, sino también


para manipular entradas.

Supongamos que necesitamos de 16 botones para nuestro código, si lo


hacemos de manera convencional ocuparíamos 16 pines o 2 puertos
enteros de nuestro pic, lo cual no nos es nada conveniente.

Aquí es donde usamos los teclados matriciales.

La estructura interna del teclado matricial consta de X entradas y X


salidas. En nuestro caso 4 entradas y 4 salidas.

Al igual que al multiplexar salidas, esto consta de generar una secuencia


de activación, las cuales serán las 4 entradas, manipuladas por 4 salidas
del pic ¿Pero cómo detectamos las salidas del teclado?

Para saber que tecla se presionó, el código debe leer 2 cosas en un


instante.
1: Que salida del pic está en 1.
2. Qué entrada del pic está en 1.

Cada entrada del teclado forma parte de las filas y cada salida del
teclado forma parte de las columnas.

261
Entonces, si la entrada 1 del teclado está en 1 y la salida 1 del teclado
está en 1. Significa que hemos presionado la siguiente tecla:

Si la entrada 4 del teclado está en 1 y la salida 4 del teclado está en 1


significa que hemos presionado la siguiente tecla:

Debido a que la secuencia de activación es a alta frecuencia, podemos


presionar cualquier botón en cualquier instate y será reconocido por el
pic.

El método de funcionamiento de este teclado puede ser algo confuso de


entender al principio, pero una vez que comprendes su método de
funcionamiento completamente, no tendrás problema alguno en usarlo.

262
Ya que hemos visto el funcionamiento del teclado, hagamos un código
para mostrar los números y caracteres presentes del teclado en un
lcd16x2.

Este será el circuito utilizado:

Solo usamos resistencias para la parte de salidas del teclado, pues solo
esas serán leídas como entradas por parte del pic.

El teclado matricial que se muestra en el circuito puede ser un poco


diferente al que puedas conseguir, pero lo único que importa es que sea
de 4x4. Incluso si tu teclado es 3x3 o 4x3 el código siguiente funciona
perfectamente.

Ahora sí, comencemos con el código:

263
sbit LCD_RS at RC0_bit;
sbit LCD_EN at RC1_bit;
sbit LCD_D4 at RC2_bit;
sbit LCD_D5 at RC3_bit;
sbit LCD_D6 at RC4_bit;
sbit LCD_D7 at RC5_bit;

sbit LCD_RS_Direction at RC0_bit;


sbit LCD_EN_Direction at RC1_bit;
sbit LCD_D4_Direction at RC2_bit;
sbit LCD_D5_Direction at RC3_bit;
sbit LCD_D6_Direction at RC4_bit;
sbit LCD_D7_Direction at RC5_bit;

short contador1;
short contador2;
short tecla;
short var;
int duty;
bit mem1;
bit mem2;
bit mem3;
bit mem4;
bit mem5;
bit mem6;
bit mem7;
bit mem8;
bit mem9;
bit mem0;
char teclas [6];
void main() {
TRISA = 0;
TRISB = 1;
TRISC = 0;
PORTA = 0;
PORTB = 0;
PORTC = 0;
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
lcd_init();
lcd_cmd(_lcd_cursor_off);

264
lcd_cmd(_lcd_clear);
contador1 = 0;
contador2 = 0;
mem1 = 0;
mem2 = 0;
mem3 = 0;
mem4 = 0;
mem5 = 0;
mem6 = 0;
mem7 = 0;
mem9 = 0;
mem0 = 0;
tecla = 0;

while(1){
contador1 = contador1 + 1;
delay_us(800);

if(contador1 == 1){
ra0_bit = 1;
ra1_bit = 0;
ra2_bit = 0;
ra3_bit = 0;
}

if(contador1 == 2){
ra0_bit = 0;
ra1_bit = 1;
ra2_bit = 0;
ra3_bit = 0;
}

if(contador1 == 3){
ra0_bit = 0;
ra1_bit = 0;
ra2_bit = 1;
ra3_bit = 0;
}

if(contador1 == 4){
ra0_bit = 0;
ra1_bit = 0;
ra2_bit = 0;
ra3_bit = 1;

265
}

if(contador1 > 4){


contador1 = 0;
}

if(PORTA == 0b00000001){
if(rb0_bit == 1 && mem1 == 0){
mem1 = 1;
}

if(rb0_bit == 0 && mem1 == 1){


tecla = 1;
mem1 = 0;
}

if(rb1_bit == 1 && mem2 == 0){


mem2 = 1;
}

if(rb1_bit == 0 && mem2 == 1){


tecla = 2;
mem2 = 0;
}

if(rb2_bit == 1 && mem3 == 0){


mem3 = 1;
}

if(rb2_bit == 0 && mem3 == 1){


tecla = 3;
mem3 = 0;
}

if(rb3_bit == 1){
tecla = 10;
}
}
if(PORTA == 0b00000010){
if(rb0_bit == 1 && mem4 == 0){
mem4 = 1;
}

266
if(rb0_bit == 0 && mem4 == 1){
tecla = 4;
mem4 = 0;
}
if(rb1_bit == 1 && mem5 == 0){
mem5 = 1;
}
if(rb1_bit == 0 && mem5 == 1){
tecla = 5;
mem5 = 0;
}
if(rb2_bit == 1 && mem6 == 0){
mem6 = 1;
}
if(rb2_bit == 0 && mem6 == 1){
tecla = 6;
mem6 = 0;
}
if(rb3_bit == 1){
tecla = 11;
}
}
if(PORTA == 0b00000100){
if(rb0_bit == 1 && mem7 == 0){
mem7 = 1;
}
if(rb0_bit == 0 && mem7 == 1){
tecla = 7;
mem7 = 0;
}
if(rb1_bit == 1 && mem8 == 0){
mem8 = 1;
}
if(rb1_bit == 0 && mem8 == 1){
tecla = 8;
mem8 = 0;
}
if(rb2_bit == 1 && mem9 == 0){
mem9 = 1;
}
if(rb2_bit == 0 && mem9 == 1){
tecla = 9;
mem9 = 0;
}

267
if(rb3_bit == 1){
tecla = 12;
}
}
if(PORTA == 0b00001000){
if(rb1_bit == 1 && mem0 == 0){
mem0 = 1;
}
if(rc1_bit == 0 && mem0 == 1){
tecla = 0;
mem0 = 0;
}
}

switch(tecla){
case 0 : lcd_out(1,1,"0");break;
case 1 : lcd_out(1,1,"1");break;
case 2 : lcd_out(1,1,"2");break;
case 3 : lcd_out(1,1,"3");break;
case 4 : lcd_out(1,1,"4");break;
case 5 : lcd_out(1,1,"5");break;
case 6 : lcd_out(1,1,"6");break;
case 7 : lcd_out(1,1,"7");break;
case 8 : lcd_out(1,1,"8");break;
case 9 : lcd_out(1,1,"9");break;

}
}
}

Como podrás notar el código quedó un poco largo (o más bien muy
largo) pero esta es la manera correcta de implementar un teclado
matricial, ya que usamos sistema anti rebote para cada tecla que
usamos.

El código solo es para mostrar los números del 0 al 9, pero


modificándolo puedes incrementar sus usos.

268
10. Uso de encoders rotatorios.

Los potenciómetros suelen usarse en la electrónica digital y


microcontroladores como un dispositivo de control, ya sea para ajustar
una salida de pwm, para ajustar la velocidad de conmutación de varias
salidas o para hacer selecciones en un menú.

Todo esto está bien hasta que nos topamos con estos 2 problemas:

1: No todos los microcontroladores cuentan con convertidor analógico a


digital
2: Los potenciómetros se desgastan con el tiempo, afectando así el
funcionamiento de estos y del código.

Para nuestra suerte tenemos una solución, los encoders rotatorios.

Los encoders rotatorios son switches de activación secuencial, los


cuales tienen una forma parecida a los potenciómetros. Y no es
coincidencia, pues estos se crearon como reemplazo para aplicaciones
de electrónica digital

Estos dan el mismo funcionamiento que los potenciómetros ( en cuanto


a lógica solamente), se pueden girar en sentido de las manecillas o en
sentido contrario a las manecillas y controlar eventos, salidas, etc.

El encoder rotatorio NO entrega un voltaje variable de salida, ni


resistencia variable ni nada de eso, es solo un par de switches.

269
Básicamente esta es la estructura interna del encoder rotatorio.

Como dijimos anteriormente, el encoder rotatorio funciona de manera


secuencial. Es decir, que según la secuencia de activación será el
registro del sentido de giro, ya sea en sentido o en contra de las
manecillas.

Esta grafica ayuda a comprenderlo de mejor manera.

En el momento en el que B es 1 y A transiciona de 0 a 1, osea en el


rising edge o flanco de subida, detectamos que estamos girando en
sentido de las manecillas

Por el contrario, en el momento en que A es 1 y B transiciona de 0 a 1,


osea en el flanco de subida, detectamos que estamos girando en contra
de la manecillas.

270
Para probar esto, haremos un código para controlar el duty cycle de un
motor con la salida pwm usando el encoder rotatorio.

Este será el circuito que usaremos.

Te recomiendo usar este módulo que trae encoder y resistencias de


polarización. Pero este está en modo pullup, asi que conecta la terminal
GND a positivo y la terminar + a 0V.

271
short duty;
void main(){
TRISA = 1;
TRISC = 0;
PORTA = 0;
PORTC = 0;
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
PWM1_init(2000);
PWM1_start();

while(1){

if(RA1_bit == 1){
delay_us(500);
if(RA0_bit == 1){
duty = duty + 10;
}
}

if(RA0_bit == 1){
delay_us(500);
if(RA1_bit == 1){
duty = duty - 10;
}
}

if(duty >255){
duty = 255;
}

If(duty < 0){


duty = 0;
}

PWM1_set_duty(duty);

}
}

272
11. Conversor Digital a analógico usando PWM

El conversor Digital a Analogico o DAC, es un sistema empleado para


convertir una señal digital en una señal analógica.

Esto nos sirve para poder controlar sistemas analógicos usando un


sistema digital, como controlar el volumen de un amplificador o controlar
un circuito regulador de voltaje.

Un método muy sencillo de usar es usar la salida de PWM, luego usar


un filtro pasa bajos y convertirlo en un voltaje de directa, y por ultimo
usar un opamp en modo buffer para tener una salida estable.

Hagamos este sistema, empleando el siguiente circuito:

Los primeros 2 botones, osea, RA0 y RA1 será para aumento y


decremento en mayor cantidad. Un ajuste coarse.

El botón 3 y 4, RA2 y RA3, serán para aumento y decremento fino.

La salida la puedes medir con un multímetro y comprobar la variación de


salida en función a los ajustes que hagas.

El código a usar será el siguiente:

273
short duty;
bit mem1;
bit mem2;
bit mem3;
bit mem4;
void main(){
TRISA = 1;
TRISC = 0;
PORTA = 0;
PORTC = 0;
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
duty = 0;
mem1 = 0;
mem2 = 0;
mem3 = 0;
mem4 = 0;
PWM1_init(2000);
PWM1_start();
while(1){
if(RA0_bit == 1 && mem1 == 0){
mem1 = 1;
}
if(RA0_bit == 0 && mem1 == 1){
duty = duty + 10;
mem1 = 0;
}

if(RA1_bit == 1 && mem2 == 0){


mem2 = 0;
}

if(RA1_bit == 0 && mem2 == 1){


duty = duty - 10;
mem2 = 0;
}

if(RA2_bit == 1 && mem3 == 0){


mem3 = 0;
}

274
if(RA2_bit == 0 && mem3 == 1){
duty = duty + 1;
mem3 = 0;
}

if(RA3_bit == 1 && mem4 == 0){


mem4 = 0;
}

if(RA3_bit == 0 && mem4 == 1){


duty = duty - 1;
mem4 = 0;
}

if(duty > 255){


duty = 255;
}

if(duty < 0){


duty = 0;
}

PWM1_set_duty(duty);

}
}

Si tienes un osciloscopio, puedes observar que la onda de salida es de


directa, no oscila.

275
12. Uso de servomotores

El funcionamiento de un motor convencional es el de girar


continuamente hacia un lado o hacia el otro. ¿Qué hace diferente a un
servomotor?

Los servomotores se encargan de girar y quedar fijos en un ángulo, en


algunos desde 0º a 180º y otros de 0º a 360º.

Por su funcionamiento de posicionamiento fijo son especiales para


aplicaciones como la robótica.

El método de funcionamiento es sencillo.

Tenemos que generar una onda cuadrada cuyo ancho total sea de
20ms, pero el rango de funcionamiento será desde 0.5ms a 1.5ms, como
vemos en la siguiente imagen:

276
Cabe aclarar que este es un “estándar” que NO siempre se sigue, habrá
servomotores cuyo rango sea distinto, ya sea ligeramente o totalmente a
lo que se presenta en esa imagen.

Debes de revisar siempre el datasheet del fabricante antes de usar el


servomotor(Y cualquier componente en general).

Desgraciadamente MikroC no cuenta con una librería especial para


controlar servomotores, pero podemos generar un sistema simple para
controlar un servomotor usando simples delays

El circuito a utilizar será el siguiente:

Recuerda que el servomotor tiene 3 cables y su función es la siguiente:

Rojo: voltaje positivo


Naranja: señal
Café: 0V

El servo a utilizar será el tower pro sg90

Ahora sí, comencemos con el código.

277
int pos1;
int pos2;
bit mem1;
bit mem2;
void main(){
TRISA = 1;
TRISC = 0;
PORTA = 0;
PORTC = 0;
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
pos1 = 0;
pos2 = 0;
while(1){
pos2 = pos2 + 1;
delay_us(8);
if(RA0_bit == 1 && mem1 == 0){
mem1 = 1;
}
if(RA0_bit == 0 && mem1 == 1){
pos1 = pos1 + 5;
mem1 = 0;
}
if(RA1_bit == 1 && mem2 == 0){
mem2 = 1;
}
if(RA1_bit == 0 && mem2 == 1){
pos1 = pos1 – 5;
mem2 = 0;
}
if(pos1>pos2){
RC0_bit = 1;
}
if(pos1<pos2){
RC0_bit = 0;
}

if(pos2 > 2500){


pos2= 0;
}
}
}

278
13. Uso de motores paso a paso.

Los motores paso a paso (o step motor en inglés) son una clase de
motor que se caracteriza por darnos la posibilidad de controlar tanto la
velocidad como el grado de avance. Así es, el grado de avance.

Cuando decimos grado de avance, nos referimos a cuantos grados


avanza por cada paso o pulso que recibe. Siendo 360º el total, y
suponiendo que avanza 5º por pulso, le tomará 72 pulsos para dar una
vuelta completa.

¿Esto para qué nos es útil?

Para aplicaciones donde necesitamos de un avance preciso, como por


ejemplo en máquinas CNC, impresoras 3D, impresoras de tinta, lectores
de dvd y blu ray, etc.

279
Existen 2 tipos de motores a pasos: los unipolares y los bipolares.

Los motores a paso unipolares tienen una construcción interna que es


de la siguiente manera:

Los motores paso a paso unipolares tienen la característica de tener un


tap central en sus bobinas, esto nos permite cambiar el sentido de la
corriente en cada bobinado simplemente aplicando un voltaje ya sea a
un extremo o al otro extremo de la bobina. Este tap central se suele
conectar a positivo. Esto los hace los más sencillos para operar.

Los motores paso a paso bipolares tienen la caracteristica que para


seguir la secuencia, debemos invertir la polaridad de las bobinas, pero al
ser solo de 2 terminales por bobina, debemos usar un puente H POR
CADA bobina. Lo que hace algo más complicado usarlos en
comparación con los unipolares.
.

280
Para controlar el motor a pasos unipolar, solo necesitamos hacer la
secuencia mandando a negativo cada extremo de cada bobinado,
podemos usar un amplificador Darlington como el uln2003A, el cual es
de colector abierto y cuenta con diodos anti flyback internos.

En el motor tendremos 6 cables.

El blanco y amarillo serán el común e irán a positivo.

Los cables rojo, azul, verde y negro serán los extremos de las bobinas y
debemos de seguir las siguientes secuencias para hacer los giros.

Para hacer girar el motor en sentido de las manecillas del reloj:

#paso Rojo Azul Verde Negro


1 0 0 1 1
2 0 1 1 0
3 1 1 0 0
4 1 0 0 1

Para hacer girar el motor en sentido contrario, solo debemos invertir la


secuencia

#paso Rojo Azul Verde Negro


1 1 0 0 1
2 1 1 0 0
3 0 1 1 0
4 0 0 1 1

281
Para controlar el motor bipolar, necesitamos de 2 puentes H, pero por
fortuna tenemos una solución mejor, el integrado l293D, el cual es un
puente H doble integrado en un solo chip.

La secuencia de activación para el sentido de las manecillas es la siguiente:

#paso Rojo Amarillo Negro Naranja


1 0 1 1 0
2 0 1 0 1
3 1 0 0 1
4 1 0 1 0

La secuencia de activación para el sentido contrario es la siguiente:

#paso Rojo Amarillo Negro Naranja


1 1 0 1 0
2 1 0 0 1
3 0 1 0 1
4 0 1 1 0

282
Así es como se ve el driver Darlington uln2003A :

Así es como se ve el puente H doble L293D:

Probablemente te estés preguntando ¿Si los motores paso a paso


unipolares son más sencillos de utilizar, para que utilizar los bipolares?

Los motores unipolares, al tener bobinas con tap central, generan un


campo magnético más débil al inducirles corriente, pues es como si solo
aprovecharas la mitad de la bobina. Es por esto que para aplicaciones
de mayor potencia, se usan los motores paso a paso bipolares.

Controlar un motor a pasos usando un microcontrolador es muy sencillo,


pues solo necesitamos generar una secuencia tanto para girar hacia un
sentido, como para girar hacia el otro, hagamos un código que
funcionará para ambos tipos de motores a pasos.

283
El circuito a usar para el motor a pasos unipolar será el siguiente:

Y el circuito para el motor bipolar será el siguiente:

short velocidad;

284
Código para motor unipolar.

void main(){
TRISA = 1;
TRISC =0;
PORTA = 0;
PORTC = 0;
C1ON_bit = 0;
C2ON_bit = 0;
ANSEL = 0;
ANSELH = 0;
while(1){
if(RA0_bit == 1){
PORTC = 0b00001100;
delay_ms(20);
PORTC = 0b00000110;
delay_ms(20);
PORTC = 0b00000011;
delay_ms(20);
PORTC = 0b00001001;
delay_ms(20);
}
if(RA1_bit == 1){
PORTC = 0b00001001;
delay_ms(20);
PORTC = 0b00000011;
delay_ms(20);
PORTC = 0b00000110;
delay_ms(20);
PORTC = 0b00001100;
delay_ms(20);
}

}
}

285
Código para motor bipolar

void main(){
TRISA = 1;
TRISC =0;
PORTA = 0;
PORTC = 0;
C1ON_bit = 0;
C2ON_bit = 0;
ANSEL = 0;
ANSELH = 0;
while(1){
if(RA0_bit == 1){
PORTC = 0b00000110;
delay_ms(20);
PORTC = 0b00001010;
delay_ms(20);
PORTC = 0b00001001;
delay_ms(20);
PORTC = 0b00000101;
delay_ms(20);
}
if(RA1_bit == 1){
PORTC = 0b00000101;
delay_ms(20);
PORTC = 0b00001001;
delay_ms(20);
PORTC = 0b00001010;
delay_ms(20);
PORTC = 0b00000110;
delay_ms(20);
}

}
}

286
En ambos códigos el principio de funcionamiento es el mismo.

Simplemente al presionar un botón, creamos una secuencia de


encendido en el puerto C.

Al presionar el botón 1, o RA0, creamos la secuencia para sentido de las


manecillas.

Al presionar el botón 2 o RA1, creamos la secuencia para el sentido


contrario.

¿Cómo podemos variar la velocidad de giro del motor?

Variando el valor de los delays para la secuencia.

Un delay de mayor tiempo será una velocidad de giro más lenta.

Un delay de menor tiempo será una velocidad de giro más rápida.

Lo ideal es que todos los delays de la secuencia tengan el mismo


tiempo, o si no el giro se puede comportar mal.

287
14. Uso de memoria eeprom interna.

Las memorias eeprom son memorias de una capacidad pequeña, pero


muy confiables para guardar datos que NO se deben perder y tenerlos
ahí por mucho tiempo.

Estos datos pueden ser configuraciones, valores de variables,


mediciones, etc. Siempre y cuando no exceda el tamaño de la memoria.

El pic 16f886 tiene una eeprom interna de 256 bytes o 2048 bits.

En mikroC podemos usar esta memoria usando simplemente 2


instrucciones:

EEPROM_Read(dirección);

Esta instrucción se encarga de leer el dato en “X” dirección, dentro de


este paréntesis escribimos la dirección que queremos leer.

Por ejemplo, si queremos leer un dato guardado en la dirección “0”,


hacemos lo siguiente:

EEPROM_Read(0);

Siendo la dirección desde 0 hasta 255, por ser 256 bytes o 256
conjuntos de 8 bits.

288
La siguiente instrucción es:

EEPROM_Write(dirección,dato);

Esta instrucción se usa para escribir un dato en la eeprom.

Dentro del paréntesis colocamos primero la dirección de memoria donde


alojaremos el dato seguido de una coma “,” para escribir la variable a
guardar.

Por ejemplo, si queremos escribir la variable “temp” en la dirección 1,


escribimos:

EEPROM_Write(1,temp);

Ahora hagamos un circuito donde podamos ver esta función, una


variable controlada por 2 botones y mostrada en un lcd.

Con el primer botón incrementas el valor y con el segundo reduces el


valor.

289
sbit LCD_RS at RC0_bit;
sbit LCD_EN at RC1_bit;
sbit LCD_D4 at RC2_bit;
sbit LCD_D5 at RC3_bit;
sbit LCD_D6 at RC4_bit;
sbit LCD_D7 at RC5_bit;

sbit LCD_RS_Direction at TRISC0_bit;


sbit LCD_EN_Direction at TRISC1_bit;
sbit LCD_D4_Direction at TRISC2_bit;
sbit LCD_D5_Direction at TRISC3_bit;
sbit LCD_D6_Direction at TRISC4_bit;
sbit LCD_D7_Direction at TRISC5_bit;

short contador;
char numero [6];
bit mem1;
bit mem2;

void main(){
TRISA = 1;
TRISC = 0;
PORTA = 0;
PORTC = 0;
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
contador = EEPROM_Read(0);
mem1 = 0;
mem2 = 0;

while(1){
if(RA0_bit == 1 && mem1 == 0){
mem1 = 1;
}
if(RA0_bit == 0 && mem1 == 1){
contador = contador + 1;
EEPROM_Write(0,contador);
mem1 = 0;
}

290
if(RA1_bit == 1 && mem2 == 0){
mem2 = 1;
}
if(RA1_bit == 0 && mem2 == 1){
contador = contador - 1;
EEPROM_Write(0,contador);
mem2 = 0;
}

ShortToStr(contador,numero);
Lcd_out(1,1,numero);

}
}

Este código funciona de una manera muy sencilla.

Al estar operando normalmente guarda la variable cada que esta es


cambiada ¿Pero cómo comprobamos su funcionamiento?

Una vez que hayas ingresado algún número, desconecta la alimentación


del pic para que se apague todo, luego vuélvelo a conectar y observa
que el número que ingresaste sigue ahí.

Esto es porque la memoria EEPROM guardara el valor aunque quites la


alimentación, y lo mantendrá ahí por años si es necesario.

291
15. Uso del Timer/counter 0.

El pic 16f886 tiene internamente 3 timers/counters, los cuales son


Timer0, Timer1 y Timer2.

En este libro solo abordaremos el Timer0, pues el Timer1 y Timer2


funcionan de una manera muy similar, comprendiendo el uso del Timer0
puedes usar el Timer1 y Timer2.

El Timer0 es un timer/contador de 8 bits, es decir, puede hacer la


función de temporizador al igual que de contador.

Veamos primero la función de temporizador.

¿Cuál es el propósito de usar el temporizador si podemos usar los


delays?

Probablemente te hayas hecho esta pregunta, y te tengo una respuesta


más que acertada.

Precisión, es el motivo por el cual habrás de preferir en usar los


temporizadores internos antes de usar un delay.

Obviamente todo dependerá de la función que deseas realizar, pero si


necesitas de un temporizador preciso, esta es la opción a utilizar.

El timer funciona en base a un preescaler o un subdivisor, el cual puede


ser: 1,2,4,8,16,32,64,128,256.

Usar un preescaler mayor significa un delay mayor o frecuencia menor,


mientras que al usar un preescaler menor significa un delay menor o
frecuencia mayor.

Para calcular el tiempo de la oscilación tenemos la formula siguiente:

P= 256x(preescaler)(4xTosc).

Tosc se obtiene de la siguiente manera. Debemos saber la frecuencia


del oscilador que estamos usando, en este caso usamos el oscilador
interno del pic que funciona a 8MHz. Pero debemos convertir este valor
de frecuencia a tiempo.

Para convertirlo a tiempo simplemente sacamos inversa, de la siguiente


manera: 1 / 8,000,000 = 0.000000125s

292
Ahora si podemos usarlo en la formula.
Con un preescalador de 16 obtenemos lo siguiente:

P = 256x(16)x(4x0.000000125)
P = 0.002048s o 2.048ms.

Ese será el tiempo máximo generado por el Timer0 usando ese


preescalador y esa frecuencia de oscilador.

Al ser el timer de 8 bits, significa que cuenta desde 0 (o el valor que le


asignemos en el código) hasta 255. Al llegar a 255 el timer se
“desborda” y empieza de nuevo desde 0 (o el valor que le asignemos en
el código).

Ya que sabemos esto, ahora vamos a ver como configurar y utilizar el


timer0.

Usaremos la instrucción OPTION_REG para inicializar el Timer0, los


bits mostrados en esta tabla indican lo siguiente:

Bit 7 RBPU : indica si se usan las resistencias pullup internas.

Bit 6 INTEDG: bit usando para activar o desactivar las interrupciones.

Bit 5 T0CS: bit usado para indicar la fuente de reloj que usara el timer0,
siendo 1 para usarse el clk exterior y funcionar como contador y 0 para
usar el clk interno y funcionar como temporizador.

Bit 4 T0SE: bit usado para la configuración como contador, lo veremos


más adelante.

Bit 3 PSA: Asignación de preescaler a Timer0 o WDT.

Bit 2 a 0: configuración de 3 bits para el preescalador.

293
Estos 3 últimos bits se configuran con esta tabla, ignorando la sección
de WDT que es para el watchdog.

Si queremos un preescaler de 32, usamos “100”


Si queremos un preescaler de 128, usamos “110”

Bien, ahora cabe aclarar algo muy importante antes de hacer el código.

¿Recuerdas que mencioné que el tiempo maximo generado anterior


usando el preescaler de 16 a una frecuencia de reloj interna a 8MHz es
de 2ms?

¿También recuerdas que dije que el Timer0 es de 8 bits, y que cuenta


de 0 o un valor asignado hasta 255 para luego reiniciar?

Bien, aquí es donde entra en juego el “valor asignado”.

Si el tiempo máximo generado es de 2ms o 0.002, y el Timer es de 8


bits, significa que cada transición de bit equivale a 0.0000078125s

¿Qué quiere decir esto?

Que al contar desde 0 a 255, va aumentando 0.0000078125s por cada


bit incrementado

Pero el punto es que podemos hacer que el valor de inicio no sea 0,


para que nuestro valor total de tiempo sea distinto al máximo, que en
este caso es de 2ms.

Por ejemplo.

294
Si iniciamos el Timer0 en 60, significa que en lugar de contar 255, le
restamos 60 y tenemos un conteo final de: 195. Al ser un conteo menor,
significa que el tiempo de salida es menor también.

Multiplicando 0.0000078125s x 195 obtenemos un tiempo de: 1.5ms

El cual es 0.5ms menor a 2ms.

O si iniciamos el Timer0 en 200, la resta nos da un conteo de 55.


Multiplicamos 0.0000078125s x 55 y tenemos un tiempo de: 0.429ms

Es muy importante que comprendas esto, pues de esta manera puede


manipular la frecuencia de salida.

Ahora ya podemos hacer un código usando este módulo.

Usaremos la misma configuración que en el ejemplo anterior. El reloj


interno a 8 MHz y el preescaler de 16.

Esto significa que nuestro OPTION_REG = 0b00000011.

Recuerda que del bit 2 al 0 lo usamos para configurar el preescaler.

El preescaler de 16 = 011.

Y como vamos a generar una salida de 2ms, nuestro Timer0 lo iniciamos


en 0 siempre.

En código, el Timer0 lo usamos como “TMR0”.

El circuito a utilizar será el siguiente:

295
Ahora sí, vayamos al código.

void main() {
TRISB = 0;
PORTB = 0;
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
OPTION_REG = 0b00000011;
TMR0 = 0;
while(1){
if(TMR0 == 255){
RB5_bit = 1;
TMR0 = 0;
}
if(TMR0 >= 128 && TMR0 <255){
RB5_bit = 0;
}

}
}

Como podrás notar, el código es realmente simple.

Lo que hicimos fue generar una onda cuadrada de un duty cycle de


aprox 50% a un tiempo de 2ms aprox. O una frecuencia de 500Hz aprox.

Para comprobarlo, puedes usar un osciloscopio y observar la onda o


usar un multímetro para medir la frecuencia de salida y notarás que
efectivamente nuestra salida es de esa frecuencia.

Prueba cambiando los valores del preescaler y de inicio de TMR0 para


obtener valores de salida distintos.

296
Ahora veamos el Timer0 en función de contador.

El timer0 en función de temporizador incrementa su valor en función al


preescalador y la frecuencia de operación del oscilador.

En función de contador es distinto.

Como puedes observar en la imagen, el pic cuenta con un pin llamado


“T0CKI” que es la entrada de un “reloj externo”

El timer0 como contador incrementa su valor de 0 a 255 en función a los


pulsos recibidos en este pin.

Usar el Timer0 en función de contador es más sencillo.

Debemos revisar de nuevo los bits de configuración.

Bit 5 T0CS: debemos ponerlo como 1 para que leer el reloj externo
mediante T0CKI

Bit 4 T0SE: este bit se usa especificar la transición leida, siendo 1 para
flanco de bajada y 0 para flanco de subida

Los bits 3 al 0 no se usan para la configuracion de contador, por lo que


se dejan en 0.

297
Quedando así: OPTION_REG = 0b00100000;

Para probar el contador, mostraremos el valor en un lcd 16x2.

El circuito a utilizar será el siguiente:

El display mostrará lo siguiente:

298
sbit LCD_RS at RC0_bit;
sbit LCD_EN at RC1_bit;
sbit LCD_D4 at RC2_bit;
sbit LCD_D5 at RC3_bit;
sbit LCD_D6 at RC4_bit;
sbit LCD_D7 at RC5_bit;

sbit LCD_RS_Direction at TRISC0_bit;


sbit LCD_EN_Direction at TRISC1_bit;
sbit LCD_D4_Direction at TRISC2_bit;
sbit LCD_D5_Direction at TRISC3_bit;
sbit LCD_D6_Direction at TRISC4_bit;
sbit LCD_D7_Direction at TRISC5_bit;

short contador;
char numero[6];

void main() {
TRISB = 0;
PORTB = 0;
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
OPTION_REG = 0b00100000;
contador = 0;
lcd_init();
lcd_cmd(_lcd_cursor_off);
lcd_cmd(_lcd_clear);
TMR0 = 0;
while(1){
contador = TMR0;
shorttostr(contador,numero);
lcd_out(1,1,numero);

}
}

En este caso no es necesario usar un bit para contrarrestar el rebote, ya


que al leer el flanco de subida y no el 1 como tal, se protege de esta
situación.

299
16. Uso de interrupciones.

Habrá ocasiones, proyectos, circunstancias, donde al pic lo


someteremos a una carga de procesamiento elevada.

Ya sea porque tiene que procesar una cantidad de código muy grande,
porque tenemos muchos periféricos actuando al mismo tiempo, etc.

Y en estas ocasiones se dará el caso donde nuestro pic comience a


“bloquearse” o “generar un cuello de botella”

Esto porque el pic ejecuta las instrucciones en serie, es decir, una tras
otra.

El hecho de que el pic no pueda procesar cosas en paralelo hace que no


sea capaz de hacer demasiadas cosas a la vez… ¿O sí?

En estas situaciones donde le metemos demasiada carga al procesador


del pic tenemos una herramienta muy útil, las interrupciones.

Las interrupciones son una herramienta muy útil en estos casos, pues
como su nombre lo indica, es una instrucción especial que hace que se
DETENGA todas las demás instrucciones que esté ejecutando el pic
para hacer esa instrucción.

Como podrás ver, es útil, sobre todo para situaciones críticas ¿Cómo
cuáles?

Supongamos que tenemos una maquina haciendo un proceso


complicado, tenemos una buena cantidad de sensores mandando datos
al pic y por ende, el pic tiene que ejecutar un código largo y pesado.

Por algún motivo desconocido, el pic se cuelga y no es capaz de


procesar todo el código, lo que pone en riesgo la ejecución de la
máquina, ya que este proceso puede dañar a la misma máquina, al
operador y a lo que está procesando.

Pero el diseñador de la maquina ha hecho una buena movida, incluyó un


botón de reinicio de emergencia, el cual no solo apaga la máquina, si no
que ejecuta una instrucción que hace que el material se mueva a una
área segura, y la maquina regrese también a una posición segura.

300
¿Pero cómo fue capaz de hacer esto si el procesador se cuelga?
Gracias a las interrupciones.

En este ejemplo, como en muchos otros, las interrupciones nos dan la


posibilidad de ejecutar instrucciones casi de manera independiente del
código principal. Esto se asemeja de cierta manera al procesamiento de
datos en paralelo.

El pic16f886 cuenta con diferentes fuentes de interrupciones para usar


en diferentes situaciones.

Interrupción externa.
La interrupción externa es activada por un factor externo, el cual puede
ser un botón, un encoder, un sensor, etc.

En el pic 16f886 la interrupción externa es realizara por el pin RB0, el


cual tiene también la función INT (interrupción externa).

Otros microcontroladores de gamas más altas tienen más fuentes de


interrupción externa, INT0, INT1, INT2, etc.

301
Como dijimos anteriormente, esta interrupción puede ocurrir por 2
situaciones:

 Por flanco de subida en el pin INT, es decir, pasar de 0 a 1.


 Por flanco de bajada en el pin INT, es decir, pasar de 1 a 0.

Para activar esta interrupción debemos hacer lo siguiente:

El bit de la instrucción OPTION_REG que debemos revisar es “INTEDG”

INTEDG o interrupción por flanco es el bit que nos habilita la interrupción


por el pin INT.

Al ponerlo en 1 se configura como flanco de subida, es decir, la


transición de 0 a 1.

Al ponerlo en 0 se configura como flanco de bajada, es decir, la


transición de 1 a 0.

Después de esto, nos toca usar una nueva instrucción, INTCON

Esta instrucción controla el registro y habilitación de interrupciones.

Cada bit cumple la siguiente función:

 GIE: General interrupt enabler o habiltiador general de


interrupciones. Este bit siempre deberá estar en 1 para poder
habilitar el uso de instrucciones.
 PEIE: Peripheral interrupt enabler bit o habilitador de
interrupciones por periféricos. Este bit habilita las interrupciones
por periféricos internos del pic.

302
 T0IE: Timer0 interrupt enabler: Este bit habilita las interrupciones
por el timer0.
 INTE: Interrupt enabler: este bit habilita las interrupciones
externas.
 RBIE: PORTB change interrupt enabler: habilita las interrupciones
por cambio de estado en el puerto B.

Del bit 2 al 0, constan de las banderas de interrupción, estas banderas


indican con un 1 cuando la interrupción se ha hecho y con un 0 cuando
aún no sucede. Cabe aclarar que estas banderas se deben regresar a 0
mediante software.

Los bits que tendremos que poner a 1 para habilitar la interrupción


externa INT, serán GIE y INTE.

Como ejemplo de esta interrupción, lo haremos con un led oscilando a


baja frecuencia, pero al habilitar la interrupción este se detendrá y
activará a otro que solo hará un pulso, para luego regresar al código
principal.

Circuito a utilizar:

Ahora veamos el código.

303
void main() {

TRISB = 1;

PORTB = 0;

TRISC = 0;

OPTION_REG = 0b01000000;

INTCON = 0b10010000;

ANSEL = 0;

ANSELH = 0;

while(1){

RC0_bit = 1;

delay_ms(500);

RC0_bit = 0;

delay_ms(500);

void interrupt(){

if(INTF == 1){

RC1_bit = 1;

delay_ms(200);

RC1_bit = 0;

delay_ms(200);

INTCON.INTF = 0;

Del código hay que resaltar varias cosas.

304
Las interrupciones debes hacerlas mediante un void distinto, esto porque
se deben ejecutar fuera del bucle principal.

La bandera INTF será la que declare cuando se ha realizado la


interrupción. Es por eso que el encendido momentáneo del led 2 se
realiza cuando la bandera INTF es igual a 1.

La bandera INTF se debe declarar como 0 mediante software, ya que no


se reinicia sola, es por eso que después del if se declara como 0 usando
la instrucción INTCON.INTF = 0, esto para que al terminar de ejecutarse
la instrucción if, la bandera se mande a 0.

Interrupción por Timer0.


Ya que hemos realizado interrupciones con factores externos, toca
hacerlo con factores internos.

Ya conoces el funcionamiento del Timer0, si te saltaste esa parte,


regresa y estúdiala para poder comprender lo siguiente.

La interrupción por Timer0 ocurre cuando se desborda el timer, es decir,


cuando llega a 255.

¿Esto para que nos es útil?

Para que una interrupción se esté ejecutando cada cierto tiempo


establecido generado por el Timer0.

Primero debemos configurar el OPTION_REG

Usaremos el timer con un preescaler de 8, a una frecuencia de reloj de


8MHz. La configuración quedará de la siguiente manera:

OPTION_REG = 0b00000111;

Esto nos dará un tiempo máximo de: 32ms.

305
Para activar las interrupciones por desborde del timer0 necesitamos
configurar INTCON de la siguiente manera:

Debemos activar GIE, T0IE y T0IF.

INTCON = 0b10100100;

El ejemplo a utilizar será incrementar una variable exactamente cada


32ms, para poder incrementar una variable, y mostrarlo en un display de
4 digitos de 7 segmentos.

El circuito a utilizar será el siguiente:

306
short contador;
short var;
short unidad;
short decena;
short centena;
short millar;
int numero;
void main() {
TRISB = 0;
PORTB = 0;
TRISC = 0;
PORTC = 0;
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
contador = 0;
OPTION_REG = 0b00000111;
INTCON = 0b10100100;
TMR0 = 0;
var = 0;
numero = 0;
while(1){
contador = contador + 1;
delay_ms(1);

if(contador == 1){
RB0_bit = 1;
RB1_bit = 0;
RB2_bit = 0;
RB3_bit = 0;
var = millar;
}

if(contador == 2){
RB0_bit = 0;
RB1_bit = 1;
RB2_bit = 0;
RB3_bit = 0;
var = centena;
}

if(contador == 3){
RB0_bit = 0;

307
RB1_bit = 0;
RB2_bit = 1;
RB3_bit = 0;
var = decena;
}
if(contador == 4){
RB0_bit = 0;
RB1_bit = 0;
RB2_bit = 0;
RB3_bit = 1;
var = unidad;
}

millar = (numero / 1000);


centena = (numero - (millar * 1000))/100;
decena = (numero -(millar*1000)-(centena*100))/10;
unidad = (numero -(millar*1000)-(centena*100)-(decena*10));

if(contador > 4){


contador = 0;
}

switch(var){
case 0 : PORTC = 63;break;
case 1 : PORTC = 6;break;
case 2 : PORTC = 91;break;
case 3 : PORTC = 79;break;
case 4 : PORTC = 102;break;
case 5 : PORTC = 109;break;
case 6 : PORTC = 125;break;
case 7 : PORTC = 7;break;
case 8 : PORTC = 127;break;
case 9 : PORTC = 111;break;
}
}
}
void interrupt(){
if(T0IF == 1){
numero = numero + 1;
TMR0 = 0;
INTCON.T0IF = 0;
}
}

308
¿Cuál es el punto de usar el TMR0 y la interrupción en esta aplicación?

Para poder crear un incremento lo más preciso posible de 32ms.

Al tener tantas cosas ejecutándose y haciendo la multiplicación, crear un


timing preciso puede ser complicado.

Usando el TMR0 y la interrupción forzamos al procesador a dejar de


lado todo en ese instante e incrementar la variable de manera mucho
más precisa.

Como la multiplexacion no requiere de mucha precisión, solo de que se


haga la secuencia, usar interrupciones no afecta al programa principal.

Pero si tuviéramos en el programa principal, supongamos, una señal


para mantener estable a un servomotor, la interrupción si podría afectar.

Las interrupciones no se deben usar cuando el código principal requiere


de un tiempo preciso.

Pues la interrupción tiene un tiempo indefinido de operación (alrededor


de 10-100 us) que es lo que tarda en ejecutarse.

309
17. Comunicación serial.

Hasta ahora, solo hemos visto un tipo de comunicación, la comunicación


paralela.

¿Qué es la comunicación paralela?

La comunicación paralela consiste en mandar datos de manera paralela,


ya sea en arreglos de 4 bits, 8 bits, 16 bits, 32bits, etc.

Y se denomina paralela, porque se usa un pin de cada puerto para


definirse como un bit de la comunicación.

Es decir, que por ejemplo, para recibir o enviar datos en 8 bits,


necesitamos 8 pines, o un puerto entero del pic.

Un claro ejemplo de esto fue cuando hicimos el circuito conversor


analógico a digital con el ADC0804.

El integrado convierte la señal analógica en una señal binaria de 8 bits,


pero enviados de manera paralela, ya que cada pin representa 1 bit.

Supongamos que nuestro PIC no cuenta con un ADC interno, y por lo


tanto debemos usar un ADC externo, usaremos el ADC0804.

Para comunicar el PIC con el ADC necesitamos 8 pines, pues el ADC es


de 8 bits. Este circuito quedaría así:

310
Como puedes ver, necesitamos un puerto ENTERO del PIC para poder
comunicar el ADC con el PIC.

Y eso que la resolución del ADC es solo de 8 bits, si tuviéramos una


resolución de 12 bits, necesitaríamos 12 pines.

Esto nos hace perder muchos pines que podríamos necesitar para otras
funciones.

¿Qué podemos hacer para comunicar el PIC con otros dispositivos y


poder ahorrar la mayor cantidad de pines?

Aquí es donde entra la comunicación serial

¿Qué es la comunicación serial?

A diferencia de la comunicación paralela, donde necesitamos 1 pin para


cada bit, en la comunicación usamos un solo pin para mandar la
información o para recibirla, esto dependiendo del protocolo a seguir.

Es decir, que cada bit se transmite en serie para formar un dato de 8 bits
o cualquier otra magnitud.

Existen diversos protocolos usados para la comunicación serial, como lo


son:

 USART
 I2C
 USB

En este libro solo usaremos USART, y I2C, pues el PIC16f886 no cuenta


con un módulo interno para comunicación USB, solo USART y I2C.

311
Comunicación I2C

La comunicación I2C se lleva a cabo mediante 2 pines en el pic:

SCL: Serial Clock. Se encarga de crear un reloj para sincronizar al


emisor maestro con los esclavos.

SDA: Serial Data. Se encarga de enviar y recibir información.

En este caso el maestro será el microcontrolador, pues es quien ejecuta


las instrucciones y quien ordena a los demás componentes.

Los esclavos serán las memorias (u otros dispositivos que tengamos


conectados) pues estos obedecen al maestro, ya que este escribe datos
en ellas u ordena que le envíen información.

312
Sabiendo los pines presentes en el microcontrolador, toca hacer el
código.

MikroC cuenta con una librería para comunicación I2C que nos facilita
mucho el trabajo. Y consta de las siguientes instrucciones:

I2C1_Init(reloj) : Inicia el módulo I2C y establece la velocidad de reloj.

I2C1_Start() : Genera la condición de inicio y da un valor de 0 si no se


presentan errores de transmisión, en caso contrario dará un valor
diferente a 0.

I2C1_Repeated_Start() : Repite el inicio.

I2C1_Is_Idle() : Usamos esta función para determinar si el bus de datos


se encuentra ocupado o no. Si el bus está disponible da un 1, en caso
contrario da un 0.

I2C1_Rd(ack): Esta función lee el bus y confirma mediante ack. Si ack


manda 1 la confirmación es positiva, y manda 0 si la confirmación es
negativa.

I2C1_Wr(data): Esta función envía el dato “data” por el bus y regresa un


0 en caso de que la transmisión fuese exitosa, en caso contrario regresa
un valor diferente a 0.

Debemos recordar que al ser una transmisión de datos en bytes, o 8


bits, toda variable o dato debe ser de tipo “short”.

Antes de adentrarnos al código y al circuito, primero te daré una


explicación que te hará entender mejor este sistema.

Imagínate que un cartero debe entregar una serie de paquetes. Cada


paquete tiene obviamente una dirección distinta, pues son para hogares
distintos.

Lo mismo pasa con el protocolo I2C. El maestro es el cartero, y


cada serie de datos tiene antes una dirección a donde se debe
enviar.

Cada esclavo tiene asignada una dirección previamente, la cual se


puede modificar según su función y esto se encuentra en el datasheet
del componente.

Es por esto que podemos conectar diversos dispositivos en una misma


línea de datos, porque cada uno cuenta con una dirección, y cada serie
de datos llegará según la dirección que se le asigne.

313
Como ejemplo, usaremos el multiplexor de entradas/salidas PCF8574

El circuito integrado PCF8574 es un multiplexor de entradas/salidas que


funciona mediante comunicación I2C.

Este funciona para aumentar la cantidad de entradas o salidas presentes


en nuestro microcontrolador, ya que usando el protocolo de
comunicación serial I2C nos permite manipular 8 bits para que actúen
como entrada o salida.

Este integrado funciona hasta 7V.

Y nos ofrece 8 entradas/salidas.

El pin INT nos sirve para crear interrupciones en situaciones de cambio


de estado en modo de entradas. Esto nos puede servir para generar
interrupciones externas.

Como mencionamos anteriormente, a cada esclavo se le debe asignar


una dirección. En este circuito integrado se le asigna usando los pines
A0, A1 y A2.

El datasheet del fabricante nos ofrece una tabla para asignarle las
direcciones.

314
L = bajo o 0V

H = Alto o 5V.

Al ser una configuración de 3 bits podemos asignar 8 direcciones


distintas al integrado.

Tenemos 2 direcciones de configuración:

Read Address o “dirección de lectura”: Con esta dirección


establecemos que el esclavo mandara datos o que el PIC los va a
recibir.

Write Address o “dirección de escritura”: Con esta dirección


establecemos que el esclavo recibirá datos o que el PIC los va a
mandar.

Como usaremos el integrado para leer botones, o en configuración de


entrada, le daremos una dirección de lectura.

Como le quiero dar la dirección 79, tenemos que poner los 3 bits A2, 1 y
0 en H.

El circuito a utilizar será el siguiente:

315
Como verás, los pines de SCL y SDA están conectados mediante
resistencias de 1k a 5V. Esto se llama configuración PULL-UP.

Al igual que las entradas, se usa la configuración PULL-UP, es por esto


que los botones van conectados de las entradas a 0V.

Al inicio todos los leds estarán encendidos, y solo se apagará el led


correspondiente al bit que presiones.

Por ejemplo, el Led que va a RA0 se apagara si presionamos el botón


que va a P0. Recuerda que estamos usando una configuración de 8 bits.

Tampoco te olvides de conectar el voltaje de alimentación y 0V del


PCF8574, los cuales son los pines 16 para positivo y 8 para negativo.

Ahora sí, vayamos a la siguiente página para analizar el código.

316
short entradas;

void main() {

TRISA = 0;

PORTA = 0;

ANSEL = 0;

ANSELH = 0;

C1ON_bit = 0;

C2ON_bit = 0;

I2C1_Init(100000);

while(1){

I2C1_Start();

I2C1_Wr(79);

entradas = I2C1_Rd(0);

I2C1_Stop();

PORTA = entradas;

Como verás, el código es muy corto, pero analicemos las instrucciones.

Primero iniciamos con una frecuencia de 100,000 bits por segundo o


bps.

Dentro del while, iniciamos el módulo I2C.

Como mencionamos anteriormente, la dirección que le daríamos al


esclavo sería de 79. Entonces primero debemos llamarlo, usando la
instrucción Wr.

Ya que se haya llamado, usamos la instrucción Rd para leer el valor y


dárselo a la variable “entradas”.

Una vez terminado esto, usamos la instrucción Stop y le damos el valor


a PORTA con la variable “entradas.

317
Comunicación UART.

Universal Asynchronous Receiver/Transmitter o Receptor/Transmisor


asíncrono universal.

Es un sistema de comunicación serial universal empleado en muchos


sistemas digitales, como las computadoras.

¿Pero que lo diferencia de la comunicación I2C?

Bien, si recuerdas, en la comunicación I2C necesitamos de 2 pines.

SDA y SCL, siendo SDA el transmisor/receptor de datos. Y SCL siendo


el reloj de sincronización.

Ahí está la palabra clave… “sincronización”.

Lo que diferencia al protocolo UART de I2C es que no necesitamos de


un reloj de sincronización para establecer una comunicación.

Otra diferencia es que el protocolo UART tiene la característica de ser


“Full-duplex”. Esto quiere decir que podemos recibir y enviar datos al
mismo tiempo.

Es por esto que el módulo UART tiene 2 pines.

RX: Recepción de datos.

TX: Transmisión de datos.

318
MikroC cuenta con una librería especial para este protocolo de
comunicación. El cual consta de las siguientes instrucciones:

UART1_Init(baud_rate): Con esta instrucción iniciamos el módulo


UART, y dentro del paréntesis establecemos la velocidad o el “baud
rate”

UART1_Data_Ready(): Esta función indica si hay un dato listo para ser


recibido, si da un 1 significa que el dato puede ser leído, de lo contrario
no hay datos ingresando.

UART1_Tx_Idle(): Esta función establece si el búfer de transmisión se


encuentra ocupado enviando un dato, si esta instrucción da un 1, está
ocupado, si da un 0 está disponible para enviar otro dato.

UART1_Read(): Esta función lee el dato de entrada.

UART1_Read_Text(*Output,*Delimiter,Attempts): Función que lee


una cadena de caracteres.

UART1_Write(_data): Transmite el dato “_data” ingresado en el


parámetro de entrada.

UART1_Write_Text(UART_text):. Transmite una cadena de texto.

La comunicación UART tiene una velocidad de transmisión de datos, la


cual debe ser la misma entre el transmisor y el receptor para tener una
comunicación efectiva.

Esta velocidad se define como Baudios.

Baudios es un término usado para definir la cantidad de bits por segundo


que se transmiten. 1Buadio = 1bit por segundo.

Una velocidad de transferencia usada casi por estándar en este tipo de


comunicaciones es 9600 baudios.

Cabe aclarar que no es regla siempre usar esta velocidad, pero la


mayoría de los dispositivos UART usan por default esta velocidad.
Recuerda siempre revisar antes y no asumir.

319
Como ejemplo, haremos lo siguiente:

Vamos a usar 2 pic. Uno lo usaremos como emisor y el otro como


receptor.

El emisor tendrá 4 teclas, cada uno representando una letra, al presionar


la tecla se enviará la letra al receptor, y este la mostrara en un display
lcd 16x2.

El circuito a utilizar será el siguiente:

Recuerda que al hacer la conexión, los pines TX y RX se conectan de


manera invertida.

El pin TX del transmisor se conecta al pin RX del receptor.

El pin RX del transmisor se conecta al pin TX del receptor.

Esto por la función de ambos pines es fijo, un pin TX no se puede usar


como RX o viceversa.

También recuerda que vamos a hacer un código para cada PIC, uno
para el transmisor y otro para el receptor.

320
Código del PIC transmisor.

void main() {

TRISA = 1;

PORTA = 0;

ANSEL = 0;

ANSELH = 0;

C1ON_bit = 0;

C2ON_bit = 0;

UART1_Init(9600);

while(1){

if(RA0_bit == 1){

UART1_Write(97);

if(RA1_bit == 1){

UART1_Write(98);

if(RA2_bit == 1){

UART1_Write(99);

if(RA3_bit == 1){

UART1_Write(100);

321
Código del PIC receptor.

sbit LCD_RS at RB5_bit;

sbit LCD_EN at RB4_bit;

sbit LCD_D4 at RB3_bit;

sbit LCD_D5 at RB2_bit;

sbit LCD_D6 at RB1_bit;

sbit LCD_D7 at RB0_bit;

sbit LCD_RS_Direction at TRISB5_bit;

sbit LCD_EN_Direction at TRISB4_bit;

sbit LCD_D4_Direction at TRISB3_bit;

sbit LCD_D5_Direction at TRISB2_bit;

sbit LCD_D6_Direction at TRISB1_bit;

sbit LCD_D7_Direction at TRISB0_bit;

char dato;

void main() {

TRISA = 0;

PORTA = 0;

C1ON_bit = 0;

C2ON_bit = 0;

ANSEL = 0;

ANSELH = 0;

Lcd_Init();

Lcd_cmd(_lcd_clear);

Lcd_cmd(_lcd_cursor_off);

322
UART1_Init(9600);

while(1){

if(UART1_Data_Ready()==1){

dato = UART1_Read();

Lcd_out(1,1,"Recepcion:");

if(dato == 97){

lcd_out(2,1,"a");

if(dato == 98){

lcd_out(2,1,"b");

if(dato == 99){

lcd_out(2,1,"c");

if(dato == 100){

lcd_out(2,1,"d");

Muestra de LCD:

323
Proyectos

324
Proyecto #1 : Semaforo en pic16f886

En este proyecto haremos un semáforo doble, de 6 lamparas, constando


de verde, amarillo y rojo por cada semáforo.

El diagrama a utilizar es el siguiente:

El código constara de crear la secuencia de activación de un semáforo,


siendo 30 segundos para cambio de rojo a verde, 30 segundos de verde
a amarillo y 20 segundos para amarillo a rojo.

325
int contador;
void main() {
TRISC = 0;
PORTC = 0;
C1ON_bit = 0;
C2ON_bit = 0;
ANSEL = 0;
ANSELH = 0;
contador = 0;
while(1){
contador = contador + 1;
delay_ms(100);
if(contador <= 300){
PORTC = 0b00100001;
}
if(contador > 300 && contador < 500){
PORTC = 0b00100010;
}
if(contador > 500 && contador < 800){
PORTC = 0b00001100;
}
if(contador > 800 && contador < 1000){
PORTC = 0b00010100;
}
if(contador >= 1000){
contador = 0;
}

}
}

El código es muy sencillo, simplemente consta de un contador y una


serie de if’s que activa la secuencia según el contador.

El contador aumenta cada 100ms, por lo que cada 10 unidades es igual


a 1 segundo.

326
Proyecto#2: Termometro de control.

Este termómetro constará de lo siguiente:

Temperatura mostrada en un lcd 16x2 con un sensor lm35.

Debajo tendremos la temperatura de activación, la cual activará un


relevador para controlar el encendido o apagado de la refrigeración. Este
relevador se activará cuando la temperatura leída por el lm35. Y solo se
apagara una vez que la temperatura leida sea 10º menor a la de control.

Circuito:

Ahora veamos el código:

327
sbit LCD_RS at RC0_bit;
sbit LCD_EN at RC1_bit;
sbit LCD_D7 at RC5_bit;
sbit LCD_D6 at RC4_bit;
sbit LCD_D5 at RC3_bit;
sbit LCD_D4 at RC2_bit;

sbit LCD_RS_Direction at TRISC0_bit;


sbit LCD_EN_Direction at TRISC1_bit;
sbit LCD_D7_Direction at TRISC5_bit;
sbit LCD_D6_Direction at TRISC4_bit;
sbit LCD_D5_Direction at TRISC3_bit;
sbit LCD_D4_Direction at TRISC2_bit;

signed short Tem = 0;


char temperatura[6];
char configuracion[6];
short i;

bit mem1;
bit mem2;
void main(){

ANSEL = 0b00000001;
ANSELH = 0;
TRISA = 1;
TRISC = 0;
TRISB = 0;
PORTA = 0;
PORTB = 0;
PORTC = 0;
C1ON_bit = 0;
C2ON_bit = 0;
i = 30;
mem1 = 0;
mem2 = 0;
ADC_Init();
PORTA = 0;
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);

328
while(1){
if(RA1_bit == 1 && mem1 == 0){
mem1 = 1;;
}
if(RA1_bit == 0 && mem1 == 1){
i = i + 1;
mem1 = 0;
}
if(RA2_bit == 1 && mem2 == 0){
mem2 = 1;
}
if(RA2_bit == 0 && mem2 == 1){
i = i - 1;
mem2 = 0;
}

if(Tem > i ){

RB0_bit = 1;
Lcd_Out(2,13,"ON ");
}
if(Tem <= i-10){
RB0_bit = 0;
Lcd_Out(2,13,"OFF");
}

Tem = (adc_read(0)/2.05);
ShortToStr(Tem,temperatura);
ShortToStr(i,configuracion);

Lcd_Out(1,1,"temp.:");
Lcd_out(1,8,temperatura);
lcd_chr(1,13,223);
lcd_out(1,14,"C");
lcd_out(2,1,"act:");
lcd_out(2,5,configuracion);
lcd_chr(2,9,223);

}
}

329
El display resultante será así:

Si quieres cambiar el rango de temperatura de apagado solo modifica la


siguiente instrucción:

if(Tem <= i-“temperatura a desear”){


RB0_bit = 0;
Lcd_Out(2,13,"OFF");
}

Ya que será la resta de i – los grados que tu consideres necesarios.

330
Proyecto #3 voltimetro con pic16f886 y lcd 16x2

En este proyecto haremos una fuente lineal usando un lm317 y un


transistor de paso, pero con la característica que usaremos el pic16f886

El rango de medición será de 0 a 100V pero solo de DC. OJO: no midas


voltajes de AC con este sistema.

.
El circuito a utilizar es el siguiente:

331
El código a emplear será el siguiente:

sbit LCD_RS at RC0_bit;


sbit LCD_EN at RC1_bit;
sbit LCD_D7 at RC5_bit;
sbit LCD_D6 at RC4_bit;
sbit LCD_D5 at RC3_bit;
sbit LCD_D4 at RC2_bit;

sbit LCD_RS_Direction at TRISC0_bit;


sbit LCD_EN_Direction at TRISC1_bit;
sbit LCD_D7_Direction at TRISC5_bit;
sbit LCD_D6_Direction at TRISC4_bit;
sbit LCD_D5_Direction at TRISC3_bit;
sbit LCD_D4_Direction at TRISC2_bit;

float volts;
char voltaje[8];

void main() {
TRISA = 1;
PORTA = 0;
ANSEL = 0b00000001;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
lcd_init();
lcd_cmd(_lcd_cursor_off);
lcd_cmd(_lcd_clear);
while(1){
volts = adc_read(0)/9.66;

FloatToStr(volts,voltaje);
lcd_out(1,1,"V:");
lcd_out(1,4,voltaje);

delay_ms(200);

332
¿Cómo hemos logrado medir 100V si el adc del pic es de 5V?

Usando un divisor de voltaje. ¿Pero cómo calculamos la relación del


divisor de voltaje? Simple.

Nuestro voltaje máximo de medición es de 100V y nuestro voltaje


máximo de entrada del ADC del pic es de 5V.

Dividimos: 100 / 5 y obtenemos: 20

Entonces debemos crear un divisor de voltaje de factor de 20.

Para esto usamos R1 : 20k y R2 : 1k

De esta manera generamos un divisor de factor


de 20.

Pero añadimos un zener adicional en paralelo


con r2 de 5V para proteger la entrada ante cualquier
descuido.

333
Proyecto #4: Controlador digital de sentido y velocidad de motor
con puente H y muestreo en lcd.

En este proyecto haremos un controlador digital para motor DC,


controlando tanto el sentido de giro como la velocidad y serán mostrados
en LCD el % de velocidad y sentido de giro.

Este será el circuito a utilizar. Es algo largo así que ten cuidado con las
conexiones.

Los primeros 2 botones serán utilizados para configurar la velocidad.

Los botones 3 y 4 serán utilizados para cambiar el sentido de giro.

Al iniciar el circuito debes primero elegir el sentido de giro y luego ya


podrás elegir la velocidad

334
sbit LCD_RS at RA0_bit;
sbit LCD_EN at RA1_bit;
sbit LCD_D7 at RA5_bit;
sbit LCD_D6 at RA4_bit;
sbit LCD_D5 at RA3_bit;
sbit LCD_D4 at RA2_bit;

sbit LCD_RS_Direction at TRISA0_bit;


sbit LCD_EN_Direction at TRISA1_bit;
sbit LCD_D7_Direction at TRISA5_bit;
sbit LCD_D6_Direction at TRISA4_bit;
sbit LCD_D5_Direction at TRISA3_bit;
sbit LCD_D4_Direction at TRISA2_bit;

short duty;
short vel;
bit cw;
bit ccw;
bit mem1;
bit mem2;
char velocidad [6];

void main() {
TRISA = 0;
TRISB = 1;
TRISC = 0;
PORTA = 0;
PORTB = 0;
PORTC = 0;
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
cw = 0;
ccw = 0;
mem1 = 0;
mem2 = 0;
duty = 0;
vel;
lcd_init();
lcd_cmd(_lcd_cursor_off);
lcd_cmd(_lcd_clear);
PWM1_Init(2000);

335
PWM2_Init(2000);
PWM2_stop();
PWM1_stop();
while(1){
if(RB0_bit == 1 && mem1 == 0){
mem1 = 1;
}
if(RB0_bit == 0 && mem1 == 1){
duty = duty + 10;
mem1 = 1;
}

if(RB1_bit == 1 && mem2 == 0){


mem2 = 1;
}
if(RB1_bit == 0 && mem2 == 1){
duty = duty - 10;
mem2 = 0;
}
if(duty > 255){
duty = 255;
}
if(duty < 0){
duty = 0;
}

if(RB2_bit == 1){
cw = 1;
ccw = 0;
lcd_out(2,10,"CW ");
}
if(RB3_bit == 1){
cw = 0;
ccw = 1;
lcd_out(2,10,"CCW");
}
if(cw == 1){
PWM2_stop();
PWM1_start();
PWM1_set_duty(duty);
}

336
if(ccw == 1){
PWM1_stop();
PWM2_start();
PWM2_set_duty(duty);
}

vel = duty / 2.55;


shorttostr(vel,velocidad);

lcd_out(1,1,"velocidad:");
lcd_out(1,12,velocidad);
lcd_out(1,16,"%");
lcd_out(2,1,"sentido:");
}

Lo que debemos resaltar del código es lo siguiente:

if(cw == 1){
PWM2_stop();
PWM1_start();
PWM1_set_duty(duty);
}
if(ccw == 1){
PWM1_stop();
PWM2_start();
PWM2_set_duty(duty);
}

Notaras que al inicio de la instrucción en ambos, primero se para la


salida de PWM anterior antes de dar inicio a la salida de PWM deseada.

Esto para evitar que ambas estén encendidas al mismo tiempo y que no
ocurra un corto circuito.

337
Proyecto #5: Fuente de poder lineal con control digital en pic16f886
y display lcd 16x2

En este proyecto haremos una fuente de poder lineal, la cual será


controlada por un pic16f886 y cuyos valores de voltaje de salida serán
mostrados en un lcd16x2.

En este proyecto aplicaremos los temas “DAC con pwm” y “lectura de


adc”.

La corriente de salida será dependiendo de la cantidad de transistores


de paso que coloques en la salida.

Esto será lo mostrado por el display:

338
sbit LCD_RS at RB7_bit;
sbit LCD_EN at RB6_bit;
sbit LCD_D7 at RB5_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D4 at RB2_bit;

sbit LCD_RS_Direction at TRISB7_bit;


sbit LCD_EN_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB2_bit;

short duty;
float medicion;
char resultado[8];
bit mem1;
bit mem2;
bit mem3;
bit mem4;
void main() {
TRISA = 1;
TRISB = 0;
TRISC = 0;
ANSEL = 0b00000001;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
duty = 0;
mem1 = 0;
mem2 = 0;
mem3 = 0;
mem4 = 0;
LCD_Init();
LCD_cmd(_lcd_cursor_off);
LCD_cmd(_lcd_clear);
PWM1_init(2000);
PWM1_start();
while(1){
if(RA1_bit == 1 && mem1 == 0){
mem1 = 1;
}

339
if(RA1_bit == 0 && mem1 == 1){
duty = duty + 10;
mem1 = 0;
}
if(RA2_bit == 1 && mem2 == 0){
mem2 = 1;
}
if(RA2_bit == 0 && mem2 == 1){
duty = duty - 10;
mem2 = 0;
}
if(RA3_bit == 1 && mem3 == 0){
mem3 = 1;
}
if(RA3_bit == 0 && mem3 == 1){
duty = duty + 1;
mem3 = 0;
}
if(RA4_bit == 1 && mem4 == 0){
mem4 = 1;
}
if(RA4_bit == 0 && mem4 == 1){
duty = duty - 10;
mem4 = 0;
}

if(duty < 0 ){
duty = 0;
}
if(duty > 255){
duty = 255;
}

PWM1_set_duty(duty);
medicion = adc_read(0) * 0.0098;
floattostr(medicion,resultado);
lcd_out(1,1,"V:");
lcd_out(1,4,resultado);

}
}

340
Proyecto #6: Generador de voltaje de referencia de 8 bits de
precisión controlado por un teclado matriz y mostrado en lcd 16x2.

En este proyecto vamos a armar un generador de voltaje con control


digital. ¿Cuál es la función de un generador de voltaje? Generar un
voltaje lo más preciso posible para luego ser comparado con otras
cosas. Por ejemplo, ver que tan preciso es un multímetro. O que tanto
ruido mete un amplificador operacional a una señal.

341
Código:

sbit LCD_RS at TRISB5_bit;


sbit LCD_EN at TRISB4_bit;
sbit LCD_D4 at TRISB3_bit;
sbit LCD_D5 at TRISB2_bit;
sbit LCD_D6 at TRISB1_bit;
sbit LCD_D7 at TRISB0_bit;

sbit LCD_RS_Direction at TRISB5_bit;


sbit LCD_EN_Direction at TRISB4_bit;
sbit LCD_D4_Direction at TRISB3_bit;
sbit LCD_D5_Direction at TRISB2_bit;
sbit LCD_D6_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB0_bit;

short h;
short contador1;
short contador2;
short tecla;
short var;
short dig1;
short dig2;
short dig3;
short dig4;
int duty;
bit mem1;
bit mem2;
bit mem3;
bit mem4;
bit mem5;
bit mem6;
bit mem7;
bit mem8;
bit mem9;
bit mem0;
char teclas [6];
void main() {
TRISA = 0;
TRISB = 0;
TRISC0_bit = 1;
TRISC1_bit = 1;
TRISC6_bit = 1;

342
TRISC7_bit = 1;
TRISC2_bit = 0;
PORTA = 0;
PORTB = 0;
PORTC = 0;
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
lcd_init();
lcd_cmd(_lcd_cursor_off);
lcd_cmd(_lcd_clear);
pwm1_init(2000);
pwm1_start();
lcd_out(1,6,"mV");
lcd_out(2,1,"Res: 8 bits");
contador1 = 0;
contador2 = 0;
mem1 = 0;
mem2 = 0;
mem3 = 0;
mem4 = 0;
mem5 = 0;
mem6 = 0;
mem7 = 0;
mem9 = 0;
mem0 = 0;
dig1 = 0;
dig2 = 0;
dig3 = 0;
dig4 = 0;
h = 0;
tecla = 0;
var = 0;
while(1){
contador1 = contador1 + 1;
contador2 = contador2 + 1;
delay_us(800);
if(contador1 == 1){
ra0_bit = 1;
ra1_bit = 0;
ra2_bit = 0;
ra3_bit = 0;
}

343
if(contador1 == 2){
ra0_bit = 0;
ra1_bit = 1;
ra2_bit = 0;
ra3_bit = 0;
}
if(contador1 == 3){
ra0_bit = 0;
ra1_bit = 0;
ra2_bit = 1;
ra3_bit = 0;
}
if(contador1 == 4){
ra0_bit = 0;
ra1_bit = 0;
ra2_bit = 0;
ra3_bit = 1;
}
if(contador1 > 4){
contador1 = 0;
}
if(PORTA == 0b00000001){
if(rc0_bit == 1 && mem1 == 0){
mem1 = 1;
}
if(rc0_bit == 0 && mem1 == 1){
tecla = 1;
h = h + 1;
mem1 = 0;
}
if(rc1_bit == 1 && mem2 == 0){
mem2 = 1;
}
if(rc1_bit == 0 && mem2 == 1){
tecla = 2;
h = h + 1;
mem2 = 0;
}
if(rc7_bit == 1 && mem3 == 0){
mem3 = 1;
}
if(rc7_bit == 0 && mem3 == 1){
tecla = 3;
h = h + 1;

344
mem3 = 0;
}
if(rc6_bit == 1){
tecla = 10;
h = h + 1;
}
}
if(PORTA == 0b00000010){
if(rc0_bit == 1 && mem4 == 0){
mem4 = 1;
}
if(rc0_bit == 0 && mem4 == 1){
tecla = 4;
h = h + 1;
mem4 = 0;
}
if(rc1_bit == 1 && mem5 == 0){
mem5 = 1;
}
if(rc1_bit == 0 && mem5 == 1){
tecla = 5;
h = h + 1;
mem5 = 0;
}
if(rc7_bit == 1 && mem6 == 0){
mem6 = 1;
}
if(rc7_bit == 0 && mem6 == 1){
tecla = 6;
h = h + 1;
mem6 = 0;
}
if(rc6_bit == 1){
tecla = 11;
h = h + 1;
}
}
if(PORTA == 0b00000100){
if(rc0_bit == 1 && mem7 == 0){
mem7 = 1;
}
if(rc0_bit == 0 && mem7 == 1){
tecla = 7;
h = h + 1;

345
mem7 = 0;
}
if(rc1_bit == 1 && mem8 == 0){
mem8 = 1;
}
if(rc1_bit == 0 && mem8 == 1){
tecla = 8;
h = h + 1;
mem8 = 0;
}
if(rc7_bit == 1 && mem9 == 0){
mem9 = 1;
}
if(rc7_bit == 0 && mem9 == 1){
tecla = 9;
h = h + 1;
mem9 = 0;
}
if(rc6_bit == 1){
tecla = 12;
h = h + 1;
}
}
if(PORTA == 0b00001000){
if(rc0_bit == 1){
tecla = 13;
h = h + 1;
}
if(rc1_bit == 1 && mem0 == 0){
mem0 = 1;
}
if(rc1_bit == 0 && mem0 == 1){
tecla = 0;
h = h + 1;
mem0 = 0;
}
if(rc7_bit == 1){
tecla = 15;
h = h + 1;
}
if(rc6_bit == 1){
tecla = 16;
h = h + 1;
}

346
}

switch(tecla){
case 0 : lcd_out(1,h,"0");break;
case 1 : lcd_out(1,h,"1");break;
case 2 : lcd_out(1,h,"2");break;
case 3 : lcd_out(1,h,"3");break;
case 4 : lcd_out(1,h,"4");break;
case 5 : lcd_out(1,h,"5");break;
case 6 : lcd_out(1,h,"6");break;
case 7 : lcd_out(1,h,"7");break;
case 8 : lcd_out(1,h,"8");break;
case 9 : lcd_out(1,h,"9");break;

}
if(h > 4){
h = 1;
}
if(h == 1){
dig1 = tecla;
}
if(h == 2){
dig2 = tecla;
}
if(h == 3){
dig3 = tecla;
}
if(h == 4){
dig4 = tecla;
}
duty = ((dig1 * 1000) + (dig2 * 100) + (dig3*10)+(dig4))/19.4;
pwm1_set_duty(duty);
if(tecla == 16){
lcd_out(1,1," ");
h = 0;
duty = 0;
}
}
}

347
Proyecto #7: Carga variable digital.

Una carga variable es una herramienta usada principalmente para


probar fuentes de poder. Esta nos permite crear una “carga” cuyo valor
podemos modificar para consumir determinada potencia.

De esta manera podemos saber si una fuente de poder puede entregar


X corriente o es estable a X potencia.

348
Código:

sbit LCD_RS at RB5_bit;


sbit LCD_EN at RB4_bit;
sbit LCD_D4 at RB3_bit;
sbit LCD_D5 at RB2_bit;
sbit LCD_D6 at RB1_bit;
sbit LCD_D7 at RB0_bit;

sbit LCD_RS_Direction at TRISB5_bit;


sbit LCD_EN_Direction at TRISB4_bit;
sbit LCD_D4_Direction at TRISB3_bit;
sbit LCD_D5_Direction at TRISB2_bit;
sbit LCD_D6_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB0_bit;

int A;
char corriente [15];
int duty;
int contador;
bit guardar;
bit guardar2;
bit lock;
bit seguro1;
bit seguro2;
void main() {

TRISA = 1;
TRISB = 0;
TRISC = 0;
PORTA = 0;
PORTB = 0;
PORTC = 0;
ANSEL = 0b0000001;
ANSELH = 0;
C1on_bit = 0;
C2on_bit = 0;
duty = 90;
lock = 0;
A = 0;
seguro1 = 0;
seguro2 = 0;
PWM1_start();
PWM1_init(2000);

349
lcd_init();
adc_init();
lcd_cmd(_lcd_clear);
lcd_cmd(_lcd_cursor_off);
lcd_out(1,1,"carga variable");
lcd_out(2,1,"digital Ver:1.0");
delay_ms(1000);
lcd_cmd(_lcd_clear);
while(1){
delay_ms(1);
contador = contador + 1;
if(ra2_bit == 1){
delay_ms(100);
duty = duty + 10;
}
if(ra3_bit == 1){
delay_ms(100);
duty = duty - 10;
}
if(duty > 255){
duty = 255;
}
if(duty < 0){
duty = 0;
}
pwm1_set_duty(duty);

if(contador >= 150){


A = ((adc_get_sample(0) * 3.25)/0.5);
inttostr(A,corriente);
lcd_out(1,10,"mA");
lcd_out(1,1,"A:");
lcd_out(1,4,corriente);
contador = 0;
}
}
}

350
Proyecto #8: Juego invasión alienígena.

Como último proyecto, haremos un videojuego simple hecho para ser


mostrado en un LCD 16x2.

Consta de una nave espacial que debe evadir y disparar a naves


alienígenas para destruirlas, si una nave toca a la tuya, el juego termina
y se muestra el puntaje final.

351
sbit LCD_RS at RB5_bit;
sbit LCD_EN at RB4_bit;
sbit LCD_D4 at RB3_bit;
sbit LCD_D5 at RB2_bit;
sbit LCD_D6 at RB1_bit;
sbit LCD_D7 at RB0_bit;

sbit LCD_RS_Direction at TRISB5_bit;


sbit LCD_EN_Direction at TRISB4_bit;
sbit LCD_D4_Direction at TRISB3_bit;
sbit LCD_D5_Direction at TRISB2_bit;
sbit LCD_D6_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB0_bit;

const char character[] = {17,10,31,21,31,31,10,17};


const char character2[] = {0,4,13,31,31,13,4,0};
int pos1;
int pos2;
int pos3;
int pos4;
int pos5;
int pos6;
int pos7;
int per;
int posdisp;
int m;
int n;
int o;
int u;
int k;
int retardo;
int record;
int row1;
int row2;
int row3;
int row4;
int l;
int disparo1;
int disparo2;
char rec[15];
int posdisp2;
void CustomChar(char pos_row, char pos_char) {
char i;
Lcd_Cmd(64);

352
for (i = 0; i<=7; i++) Lcd_Chr_CP(character[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 0);
}
void CustomChar1(char pos_row, char pos_char) {
char i;
Lcd_Cmd(72);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character2[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 1);
}

const char character3[] = {0,0,0,14,10,14,0,0};

void CustomChar3(char pos_row, char pos_char) {


char i;
Lcd_Cmd(80);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character3[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 2);
}

const char character4[] = {21,10,17,0,17,10,17,4};

void CustomChar4(char pos_row, char pos_char) {


char i;
Lcd_Cmd(88);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character4[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 3);
}

void main() {
Customchar;
Customchar1;
Customchar3;
Customchar4;
trisb = 0;
trisa = 1;
porta = 0;

353
ansel = 0;
anselh = 0;
c1on_bit = 0;
c2on_bit = 0;
lcd_init();
lcd_cmd(_lcd_cursor_off);
pos1 = 1;
m = 0;
n = 0;
o = 0;
u = 0;
pos2 = 4;
pos3 = 1;
pos4 = 1;
pos6 = 9;
pos7 = 3;
per = 0;
retardo = 100;
record = 0;
posdisp = 0;
posdisp2 = 0;
lcd_out(1,1,"invasion");
lcd_out(2,1,"alienigena");
delay_ms(1000);
lcd_cmd(_lcd_clear);
lcd_out(1,1,"hecho por:");
lcd_out(2,1,"Carlos Gonzalez");
delay_ms(1000);
lcd_cmd(_lcd_clear);
CustomChar1(1,16);
row1 = 1;
row2 = 2;
row3 = 1;
row4 = 2;
l = 0;
disparo1 = 0;
disparo2 = 0;
while(1){

if(per == 0){
Vdelay_ms(retardo);
m = m + 1;
n = n +1 ;

354
o = o + 1;
k = k + 1;
u = u + 1;
retardo = retardo - 1;
if(m == 1){
lcd_out(row1,pos2," ");
pos2 = pos2 + 1;
m = 0;
Customchar(1,pos2);
}

if(retardo < 1){


retardo = 1;
}
if(pos2 > 16){
pos2 = 1;
}
if(pos3 > 16){
pos3 = 1;
}
if(pos6 > 16){
pos6 = 1;
}
if(pos7 > 16){
pos7 = 1;
}

if(n == 1){
lcd_out(row2,pos3," ");
pos3 = pos3 + 1;
n = 0;
Customchar(2,pos3);
}
if(retardo < 200){
lcd_out(row2,pos6," ");
pos6 = pos6 + 1;
Customchar(2,pos6);

if(retardo < 100){


lcd_out(row1,pos7," ");
pos7 = pos7 + 1;
Customchar(1,pos7);

355
}
if(ra0_bit == 1){
pos4 = 16;
row3 = 1;
lcd_out(2,16," ");
customchar1(row3,pos4);
pos5 = 0;

}
if(ra1_bit == 1){
pos4 = 0;
row3 = 2;
lcd_out(1,16," ");
pos5 = 16;
customchar1(row3,pos5);

}
if(ra2_bit == 1 && row3 == 1){
disparo1 = 1;
posdisp = 15;
posdisp2 = 0;
}
if(ra2_bit == 1 && row3 == 2){
disparo2 = 1;
posdisp = 0;
posdisp2 = 15;
}

if (disparo1 == 1 && disparo2 == 0 && row3 == 1 && row3 != 2){

lcd_out(row3,posdisp," ");
posdisp = posdisp - 1;
lcd_out(row3,posdisp,"=");
if(posdisp < 1){
posdisp = 0;
disparo1 = 0;
}
}
if (disparo2 == 1 && disparo1 == 0 && row3 == 2 && row3 != 1){
lcd_out(row3,posdisp2," ");
posdisp2 = posdisp2 - 1;
lcd_out(row3,posdisp2,"=");
if(disparo2 < 1){
disparo2 = 0;

356
}
}

if(posdisp == pos2){
CustomChar3(1,posdisp);
delay_ms(100);
Customchar4(1,posdisp);
delay_ms(100);
lcd_out(1,posdisp," ");
pos2 = 2;
posdisp = 0;
disparo1 = 0;
record = record + 10;
}
if(posdisp2 == pos3){
CustomChar3(2,posdisp2);
delay_ms(100);
Customchar4(2,posdisp2);
delay_ms(100);
lcd_out(2,posdisp2," ");
pos3 = 2;
posdisp2 = 0;
disparo2 = 0;
record = record + 10;
}
if(posdisp == pos7){
CustomChar3(1,posdisp);
delay_ms(100);
Customchar4(1,posdisp);
delay_ms(100);
lcd_out(1,posdisp," ");
pos7 = 0;
posdisp = 0;
disparo1 = 0;
record = record + 10;
}
if(posdisp2 == pos6){
CustomChar3(2,posdisp2);
delay_ms(100);
Customchar4(2,posdisp2);
delay_ms(100);
lcd_out(2,posdisp2," ");
pos6 = 3;
posdisp2 = 0;

357
disparo2 = 0;
record = record + 10;
}
if(pos4 == pos2){
per = 1;
}
if(pos5 == pos3){
per = 1;
}
if(pos4 == pos7){
per = 1;
}
if(pos5 == pos6){
per = 1;
}
record = record + 1;
}

inttostr(record,rec);
if(per == 1){

lcd_out(1,1,"puntos:");
lcd_out(1,9,rec);
lcd_out(2,1,"press restart");

if(ra3_bit == 1){
delay_ms(50);
lcd_cmd(_lcd_clear);
per = 0;
CustomChar1(1,16);
retardo = 250;
record = 0;
pos2 = 4;
pos3 = 1;
pos4 = 1;
pos6 = 9;
pos7 = 3;
row3 = 1;
}
}

}
}

358
359
Extras
En esta sección encontraras informacion adicional util referente a todo lo
visto en el libro.

360
Tipos de encapsulados
Los encapsulados son muy importantes al momento de elegir un
componente electronico.

Ya que estos dictan diferentes parametros como lo son:

 Potencia maxima de disipación.


 Volumen
 Peso
 Costo
 Otras caracteristicas electricas

Por ejemplo, en los transistores through hole puedes encontrar los


siguientes encapsulados:

TO-92 A, B y C

Usado para transistores de baja potencia (en el orden de los mW).

Cada letra hace cambiar el orden de los pines.

361
TO-126

Encapsulado usado principalmente por SCR’s. No es un encapsulado


común pero su potencia de disipacion es mayor que la de los TO-92 ya
que se pueden montar a un disipador.

TO-220

Empleado mayormente por transistores de mediana potencia, SCR’s,


triacs y diodos de potencia.

Este tipo de encapsulado suele usarse para potencias de 30W o


mayores.

Montandose a un disipador aumenta su rendimiento aún mas.

362
TO-03P

Empleado para transistores de alta potencia, usualmente para


amplificadores de audio o electronica de potencia.

T0-03

El encapsulado que mas potencia puede disipar. Usado para


transistores, reguladores de voltaje, circuitos integrados de potencia, etc.

363
En circuitos integrados puedes encontrar los siguientes encapsulados:

Encapsulado SIP (Single line package).

El encapsulado SIP o encapsulado de una linea, es un tipo de


encapsulado usado en circuitos integrados cuya configuración de pines
está presente en una sola linea.

Suele usarse principalmente en circuitos integrados amplificadores de


auido, esto debido a que los hace mas facil de montar sobre un
disipador.

364
Encapsulado DIP (Dual in-line
package).

El encapsulado DIP o encapsulado de doble linea, es un encapsulado en


el cual se presentan pines por ambos lados del encapsulado, y se usa
en infinidad de circuitos integrados.

Generalmente despues del nombre DIP se incluye en numero, como por


ejemplo DIP14. Esto indica la cantidad de pines presentes en el
encapsulado.

365
Encapsulado QIP(Quadruple
in-line package).
El encapsulado QIP o encapsulado de linea cuadruple, es un
encapsulado en el cual se tiene 4 lineas de pines.

Esta configuración se usa para circuitos integrados que tienen una


enorme cantidad de pines, siendo mas común en electronica digital.

Tambien cabe remarcar que este tipo de encapsulados solo son vistos
en tecnología SMD (montaje superficial). Esto para ahorrar espacio y
reducir el tamaño de las PCB.

366
Encapsulado LGA.
El encapsulado LGA tiene la caracteristica de poseer los pines por
debajo del cuerpo. Teniendo forma de pads y los cuales solo pueden ser
soldados usando reflow o hot oven.

Este tipo de encapsulados se usan principalmente para reducir mucho el


espacio necesario ocupado por los integrados, y también para
producción en serie, ya que debido a su caracteristica de ser
complicados para montar, estos se montan en linea de producción.

367
Lectura y comprensión de datasheets.
Los datasheets o hojas de datos, son documentos realizados por los
fabricantes de componentes donde se especifican:

 Caracteristicas electricas
 Capacidades termicas
 Dimensiones
 Etc.

Estos son muy útiles para poder verificar si un componente cumple con
las características necesarias para nuestra aplicación

Usualmente un datasheet contiene demasiada información la cual puede


intimidar o frustrar a principiantes, pero a continuación te voy a explicar
cómo identificar la información que es esencial de conocer para diversos
componentes.

Una página confiable y grande de datasheets es :

http://www.alldatasheet.es/

Ahí puedes encontrar la librería más grande de datasheets disponible en


internet.

Bien, como primer ejemplo usaremos el transistor NPN tip31c, veremos


su datasheet y buscaremos la información más importante que debemos
conocer de un transistor BJT.

368
Usaremos más en específico al fabricante ON semiconductor.

La primera tabla en la que debemos fijarnos será la de “Maximum


Ratings” o “Valores máximos”.

Los valores más importantes a interpretar de este datasheet son los


siguientes:

Collector-Emitter Voltage o VCEO: Este valor indica el voltaje máximo


que soporta el transistor, para nuestro caso que es el Tip31C, será de
100V.

Collector Current: Aquí tenemos 2 partes, continúa y pico.

El valor continuo es el cual se someterá continuamente, como podría ser


una carga resistiva, y en el datasheet indica que son 3 amperes.

El valor pico es el cual se produce momentáneamente y por periodos de


tiempo cortos, como podría suceder con una carga inductiva. El
datasheet especifica que el máximo es de 5 amperes.

Base current: Corriente de base máxima.

369
Total power dissipation: Este es el valor de potencia máximo que
puede disipar. Aquí hay que tener mucho cuidado pues muchos
principiantes caen en una trampa mortal.

El datasheet especifica que la potencia máxima que puede disipar son


40W… PERO a una temperatura de 25ºC.

Es realista pensar que un transistor disipando 40W de potencia esté a


25ºC.. No.

Es por eso que ahí mismo dice “Derate above 25º C” lo cual significa
que el valor DISMINUYE pasando los 25ºC. ¿Cuánto? 0.32W/ºC

Operating and store junction temperatura range: Este valor indica el


rango de temperatura en el cual el transistor puede operar, el datasheet
indica que puede operar entre -65 a 150 grados.

Un último valor que debemos revisar es el HFE

El valor de HFE se refiere a la ganancia del transistor.

Será el factor de amplificación de corriente de colector en función de la


corriente de base.

Esto será importante saber, pues la corriente de colector depende


directamente del HFE y de la corriente de base.

Si el valor del HFE es muy bajo, al igual que nuestra corriente de base,
podría hacer que no sea útil para nuestra aplicación.

370
Ahora veamos el datasheet del regulador 7805.

Lo primero que veremos serán los encapsulados disponibles para este


regulador. Al igual que la función de cada pin.

Lo primero que debemos ver son los valores máximos absolutos.

Input voltage: Voltaje de entrada máximo. En este caso 35V.

Thermal resistance junction: Resistencia térmica en disipador. En este


caso 5ºC * W

Operating temperature: temperatura de operación -40º a 125º

371
En esta tabla tenemos diversos valores de funcionamiento más
detallados, verás que en la tabla se divide tanto para el lm7805l como
para el lm7805, a continuación solo haremos referencia al lm7805.

En esta tabla se incluyen valores mínimos, típicos y máximos. Es


importante tener en cuenta estos 3 valores.

Output voltage: Voltaje de salida, el cual puede ser desde 4.75V hasta
5.25V.

Quiescent current: Corriente de consumo inactivo, se refiere a cuanta


corriente consume el regulador al no tener ninguna carga en su salida, el
datasheet especifica que puede ser de 5mA a 8mA

Droput voltage: Caida de voltaje respecto a Vin y Vout. En este caso es


de 2V.

Peak current: Consumo pico de corriente, en este caso, 2.2 Amperes.

372
Tipos de transformadores.

Existen diversos tipos de transformadores presentes, a continuación


veremos algunos de los tipos más comunes usados por productos y
proyectos.

Transformador de línea

Se refiere como transformador de línea a todo transformador que


funcione con el voltaje y frecuencia de línea.

Por ejemplo, en México funcionarían a 127V y 60hz.

Son los transformadores más comunes especialmente en equipos viejos


o en equipos que no consumen mucha potencia.

Esto debido a que estos transformadores son muy ineficientes.

Además de que para potencias altas, ocupan demasiado espacio y


tienen un peso elevado.

373
Transformador de aislamiento

Transformadores cuya relación de bobinado es de 1:1, es decir que el


voltaje de salida es igual al de entrada.

Estos transformadores se usan principalmente para tener una salida de


voltaje aislado de referencia a tierra y no sufrir riesgo de electrocución.

Transformador de línea through hole

Estos transformadores tienen la misma característica que un


transformador de línea convencional, a diferencia de que estos están
hechos para montarse directamente en un PCB.

Estos transformadores son usados para aplicaciones de baja potencia.

374
Transformadores toroidales.

Los transformadores toroidales funcionan también voltaje y frecuencia


de línea.

Pero son mucho más eficientes que un transformador convencional.

Aprovecha de mejor manera la inducción magnética debido a su forma


de dona, lo que hace que se pierda menos energía.

Tienen un menor peso y dimensiones.

También se pueden incluir más bobinados sin tener que incrementar el


tamaño del núcleo.

Es por esto que es más común ver estos transformadores en equipos


modernos de audio o fuentes de poder lineales.

375
Transformadores de alta frecuencia.

Estos transformadores, a diferencia de los transformadores de línea,


funcionan a frecuencias distintas.

Usualmente desde 40KHz a 200KHz, esto con el fin de poder reducir el


tamaño del núcleo considerablemente.

Presentes en las fuentes conmutadas, los verás en todo tipo de


electrodomésticos, usualmente los de tamaño reducido como
televisores, computadores, cargadores, etc.

Son los transformadores más eficientes en relación energía/tamaño.

Cabe recalcar que estos transformadores no se pueden usar con el


voltaje ni frecuencia de línea, para poder emplear un transformador de
alta frecuencia se debe usar un circuito oscilador, los cuales ya están
presentes en circuitos integrados específicos para fuentes conmutadas.

376
Tipos de switches.
Existen diversos tipos de switches que puedes usar para proyectos, los
que mencionaremos a continuación son los mas populares.

Push button

Los push button son botones de acción momentánea, es decir, que solo
cierran al momento en el que tú los presionas.

Muy populares para todo tipo de usos, usualmente puedes encontrar de


4 pines y de 2 pines.

El funcionamiento de ambos es el mismo, solo que los de 4 pines tienen


un mejor agarre en protoboards.

También los puedes encontrar en esa presentación, que es más robusta.

377
Switch

Los switches, a diferencia de los push buttons, se quedan en un estado


seleccionado, ya sea abierto o cerrado. Esto es más útil cuando
necesitamos que la energía esté siempre fluyendo al presionarlo o abrir
el circuito al cambiar su estado.

Switch SPDT

Los switches SPDT o de 1 polo, 2 tiros, son switches que pueden


funcionar también como selectores.

Puede usarse para poder seleccionar entre 2 señales distintas, o para


introducir una señal en 2 puntos distintos.

Puede usarse como selector al igual que como switch convencional


usando solo 2 pines.

378
Switch DPDT

Los switches DPDT o dos polos dos tiros, son switches que cuentan con
2 entradas y 4 salidas, o lo opuesto, 2 salidas y 4 entradas.

Switch rotatorio

Este tipo de switch tiene la característica de rotar para seleccionar


diferentes tiros, ideal para selectores de múltiples señales.

379
Tipos de capacitores y valores
comerciales.

Existen diversos tipos de capacitores, los cuales cuentan con diversas


características.

Capacitores cerámicos.

Los capacitores cerámicos tienen la característica de NO tener


polaridad, de soportar voltajes altos (100V o más) y de ser muy baratos.

Estos tienen un código numérico en el frente, el cual indica el valor del


capacitor en picofaradios, y funciona de la siguiente manera.

Los primeros 2 dígitos forman el número, y el siguiente digito indica la


cantidad de ceros posterior al número.

Por ejemplo:
104 = 100,000 pF

Lo que equivale a 100nF o 0.1uF

380
Capacitores de poliéster.

Los capacitores de poliéster tienen características similares a las de los


capacitores cerámicos.

A diferencia de que estos capacitores soportan voltajes muchos


mayores, por lo que es más común encontrarlos en filtros de fuentes de
poder de alto voltaje. Como fuentes conmutadas o filtros EMI.

Estos no cuentan con polaridad.

Para identificar el valor del capacitor, vemos el código impreso en él, y


usamos como referencia la siguiente tabla:

Por ejemplo, para un capacitor


cuyo valor impreso es: 473

Los primeros 2 digitos forman un


numero : 47.

El tercero será el multiplicador, en


nuestro caso es 3, lo que corresponde
a 1000

1000*47 = 47,000pF o 47nF.

381
Capacitores de tantalio.

Los capacitores de tantalio tienen la propiedad de tener una polaridad


(un positivo y un negativo) al igual que solo soportan bajos voltajes.

Debido a sus propiedades químicas, los capacitores poseen una baja


ESR (Resistencia en serie equivalente). La más baja de todos los
capacitores, lo que los hace ideales para filtros de desacoplo en altas
frecuencias.

Existen diversos valores a identificar en un capacitor de tantalio,


veámoslos.

382
Capacitores electrolíticos.

Los capacitores electrolíticos son los capacitores que más carga pueden
retener. La relación de carga que pueden retener y el voltaje máximo
serán directamente proporcionales al tamaño del capacitor.

Identificar un capacitor electrolítico es muy sencillo.

383
Valores comerciales de capacitores.

Existe una serie de valores standard de capacitores producidos, los


cuales son los que se pueden adquirir por los fabricantes. Otros valores
ajenos a estos no son posibles de conseguir, y se deben de realizar
empleando arreglos.

Aplicando los valores más chicos (pF y nF) a los capacitores cerámicos
y de poliéster.

Y los mayores (uF) a los capacitores de tantalio y electrolíticos.

384
Tipos de resistencias y valores
comerciales

Existen diversos tipos de resistencias empleadas para diferentes fines,


veamos los tipos más usados.

Resistencias de carbón

Las resistencias de carbón están presentes en diferentes tamaños. El


tamaño indica la potencia que puede disipar dicha resistencia.

Resistencia de 0.1W
Solo presente en SMD

Resistencia de 1/8 W

Resistencia de ¼ W

Resistencia de 1/2W

385
Resistencia de 1W

Resistencia de 2W

Debido a la propiedad misma del carbón, no se suelen hacer


resistencias de carbón mayores 2W.

Para identificar el valor de una resistencia de carbón hacemos lo


siguiente:

Aplicándolo para esta resistencia:


Los primeros 2 digitos se juntan para
formar un número. El tercero será
el multiplicador.

Café = 1 Negro = 0 Rojo = 100

386
10 * 100 = 1000 ohms.

Resistencias de cerámica.

Las resistencias de cerámica son empleadas para disipar más potencia.

Resistencia de 5W

Resistencia de 10W

Resistencia de 20W

Identificar este tipo de resistencias es muy sencillo.

387
La resistencia y potencia están marcados con numero en el frente.

Valores comerciales.

Existen estándares de valores hechos por fabricantes, a continuación te


muestro una tabla con los valores más comunes que se pueden
encontrar.

388
Tipos de baterías
Existen diferentes tipos de baterías, cada una con diferentes
características para cada tipo de aplicación, veamos a continuación los
tipos de baterías más comunes.

Batería cell 3.6V

Este tipo de baterías poseen un bajo voltaje y una baja corriente de


salida. Usadas en ambientes de tamaños limitados y circuitos de bajo
consumo de energía, como calculadoras, BIOS de computadoras,
RTC’s, etc.

389
Batería AAA

Baterías de baja capacidad usadas para ambientes de espacio limitado y


circuitos de bajo consumo. Su capacidad suele ser de 1.5V 0.81Wh

Batería AA

Baterías de baja capacidad usadas para ambientes de espacio limitado y


circuitos de bajo consumo. Su capacidad suele ser de 1.5V y 2.55Wh

390
Batería C

Usada para circuitos de bajo voltaje pero consumo de corriente mayor.


Su capacidad suele ser de 1.5V y 5.7Wh.

Batería D

Usada para circuitos de bajo voltaje pero consumo de corriente mayor.


Su capacidad suele ser de 1.5V y 12Wh.

391
Batería de 9V

Baterías usadas para ambientes de tamaño reducido y consumo de


energía bajo. Su capacidad suele ser de 9V y 5Wh.

Batería de 6V de alta capacidad

Baterías de bajo voltaje pero con alta corriente de salida. Usadas para
circuitos que consumen mucha corriente. Suelen tener la capacidad de
6V y 48Wh.

392
Batería de 12V

Batería de 12V, con una gran capacidad. Usada en circuitos que


consumen mucha corriente, como un auto o un banco de baterías para
paneles solares. Su capacidad suele ser de 12V y 480Wh.

Batería Li-ion

Batería de tipo recargable de bajo voltaje, con posibilidad de recargarse,


su capacidad suele ser de 3.8V y 7.6Wh.

393
También tenemos la batería de 7.4V de li-ion. Este tipo de baterías se
usa para proyectos de mayor requerimiento de voltaje, como los drones,
robots, carros RC, etc. Su capacidad suele ser de 7.4V y 16.8Wh.

394
¿Cómo se mide la capacidad de
baterías y energía consumida?

Existen distintos factores que pueden determinar el usar un tipo de


batería u otra, uno de ellos y muy importante es la capacidad.

Existen 2 magnitudes usadas para indicar la capacidad de una batería,


estas son: Ah y Wh.

Ah se refiere a “amperes por hora” e indica lo siguiente:

“La cantidad de corriente que puede suministrar la batería durante 1


hora”.

¿A que se traduce esto?

A que por ejemplo, si nuestra batería suministra 2.2Ah y nuestro circuito


consume 2.2A, la carga de la batería durará 1 hora.

Si nuestro consumo es la mitad, 1.1A, la carga durará 2 horas.

Si nuestro consumo es un cuarto, 0.55A, la carga durará 4 horas.

Y así sucesivamente.

También se usa el termino mAh, el cual se refiere a mili amperes por


hora. Recuerda que 1000mA = 1A.

El siguiente término es Wh. El cual se refiere a la cantidad de potencia


que puede entregar por hora.

Si nuestra batería entrega 16Wh, y nuestro circuito consume 16W, la


carga durará 1 hora.

También se usa el termino mWh, el cual se refiere a mili watts por hora.
Recuerda que 1000mW = 1W.

395
Por ejemplo:

Esta batería es de 7.4V y 2200mA. ¿Si nuestro circuito consume 4.8W,


cuánto durará la carga de la batería?

La potencia por hora de esta batería es obtenida de la siguiente manera:

Voltaje * Corriente por hora. = 7.4V * 2.2Ah = 16.8Wh.

Ahora, para saber la carga dividimos la potencia por hora sobre la


potencia consumida por el circuito.

16.8Wh / 4.8W = 3.5 horas.

396
Tipos de conectores.

Existen diversos tipos de conectores que se pueden usar en un


proyecto, cada uno con características propias para cada aplicación, a
continuación mencionaremos los más comunes.

Conector molex.

El conector molex es un tipo de conector (Presente en macho y hembra)


el cual es usado para montarse especialmente en PCB.

Este tipo de conectores se usa especialmente para señales o para


consumo de potencia bajo. No es recomendable usarse en corrientes
mayores a 1 amp.

Este conector también está presente en computadoras, de mayores


dimensiones para poder transportar mayor corriente.

397
Conector de bloque

Los conectores de bloque son empleados para poder conectar cables


con la simple acción de atornillarlos, sin tener que soldarlos.

Esto nos da la facilidad de poder realizar o cambiar conexiones en un


circuito.

Este tipo de conectores, a pesar de ser muy convenientes, no se


recomiendan para aplicaciones donde el circuito se somete a mucho
movimiento o vibraciones, ya que los cables pueden soltarse.

Estos varían en tamaño y cantidad de conexiones, pueden ser desde 2


hasta decenas.

398
Conectores header.

Los header son un tipo de conectores usados para diversos fines, pero
principalmente para placas de prototipo, conectar componentes a una
pcb o unir placas entre sí, aquí algunos ejemplos.

399
Conector BNC

Los conectores BNC son usados principalmente para conexiones RCA,


conexiones de antenas y entradas de osciloscopios o equipos de
medición.

400
Conector Banana

Los conectores banana se usan principalmente para salidas de audio o


para salidas de fuentes de poder, debido a que están adaptadas para
soportar flujo de corriente medianamente alto.

401
Conectores de audio

Conector 3.5mm

Conector de audio más popular, usado en computadoras, teléfonos


celulares, etc.

Conector 6.35mm

Conector de audio de mayor tamaño, empleado principalmente en


amplificadores de audio e instrumentos musicales.

402

También podría gustarte