Sunteți pe pagina 1din 261

RESUMEN

Contenido
INDICE..............................................................................................................................1
INTRODUCCION.............................................................................................................5
ARQUITECTURA DE MICROCONTROLADORES.....................................................6
Diferencias entre Microprocesador y Microcontrolador...............................................6
MICROPROCESADOR............................................................................................6
MICROCONTROLADOR........................................................................................6
Arquitectura Interna del microcontrolador PIC y el microcontrolador ATmega...........7
Arquitecturas segn el Hardware...............................................................................7
Arquitecturas segn el Software................................................................................9
Registros de Propsito General y Especiales...............................................................10
Registros de propsito especfico:.........................................................................10
Registros de propsito general:.............................................................................10
Distribucin de Pines...................................................................................................11
Recursos comunes a todos los microcontroladores..................................................11
Recursos especiales de los microcontroladores.......................................................12
PROGRAMACIN DE MICROCONTROLADORES PIC..........................................19
Tipos de Datos.............................................................................................................20
Tipo entero (int).......................................................................................................22
Tipo punto flotante (float)........................................................................................22
Tipo carcter (char)..................................................................................................22
Juego de Instrucciones.................................................................................................23
Fusibles e Interrupciones.............................................................................................24
Fusibles....................................................................................................................24
Interrupciones...........................................................................................................29
Funciones para control DIO.........................................................................................41
Interaccin Microcontrolador PC (USART).............................................................82
EJERCICIO 9...........................................................................................................85
EJERCICIO PROPUESTO......................................................................................87
SEGUNDO PARCIAL....................................................................................................88
MODULO CCP...............................................................................................................88
2

INTRODUCCIN:......................................................................................................88
SNTESIS:...................................................................................................................88
Mdulo CCP1..............................................................................................................90
Mdulo CCP2:.............................................................................................................90
MODO CAPTURA:....................................................................................................91
MODO COMPARACIN:..........................................................................................93
Modo PWM:................................................................................................................95
Funciones CCP en compilador CCS............................................................................97
SENSORES (LM35, ULTRASNICO Y TCRT5000)...................................................98
Caractersticas de los sensores.....................................................................................99
Sensor LM35 (sensor de temperatura).........................................................................99
SENSOR ULTRASNICO.......................................................................................101
SENSOR INFRARROJO..........................................................................................102
Control PWM para Motores DC y AC..........................................................................104
MOTOR DE CORRIENTE CONTINUA.................................................................104
FUNDAMENTOS DE OPERACIN DE LOS MOTORES ELCTRICOS...........104
COMUNICACIN I2C Y SPI......................................................................................107
Introduccin...............................................................................................................107
Marco Terico............................................................................................................107
COMUNICACIN SPI (SERIAL PERIPHERAL INTERFACE)................................112
SPI Data Registers (SPIxDH:SPIxDL)......................................................................118
COMUNICACIN BLUETOOTH ZBEEE - RF......................................................120
BLUETOOTH............................................................................................................120
Qu es Bluetooth?....................................................................................................122
De dnde viene el nombre Bluetooth?.....................................................................123
Objetivos principales de la tecnologa Bluetooth......................................................123
Funcionamiento.........................................................................................................123
ZIGBEE.....................................................................................................................124
ESTRUCTURA......................................................................................................126
Caractersticas........................................................................................................127
Ventajas..................................................................................................................128
Tipos de Dispositivos.............................................................................................128
Topologa................................................................................................................129
3

Seguridad................................................................................................................131
Futuro del Zigbee...................................................................................................132
EJERCICIOS RESUELTOS..........................................................................................133
Cdigo ejercicio 1......................................................................................................133
Cdigo ejercicio 2......................................................................................................136
Cdigo ejercicio 3......................................................................................................139
Cdigo ejercicio 4......................................................................................................141
Cdigo ejercicio 6......................................................................................................144
Cdigo ejercicio 7......................................................................................................146
Cdigo ejercicio 8......................................................................................................148
Cdigo Ejercicio 9.....................................................................................................151
CUESTIONARIO..........................................................................................................154
TEMA 1.- Diferencias entre el Microprocesador y Microcontrolador..................154
Tema 2.- Arquitectura Interna del Uc PIC..............................................................156
Tema 3.- Registros de propsito General y Especiales..........................................159
Tema 4.- Distribuciones de pines...........................................................................162
Tema 5.- Caractersticas Elctricas........................................................................163
Tema 6.- Tipo de datos...........................................................................................165
Tema 7.- Juego de Instrucciones............................................................................167
Tema 8.- Fusibles e Interrupciones........................................................................168
Tema 9.- Funciones para control............................................................................171
Tema 10.- Interaccin Uc PC (USART)..............................................................173
Tema 11.- SENSORIZACION (LM35, ULTRASNICO Y TCR 5000)..............174
Tema 12.- Control PWM para Motores DC y AC..................................................180
Tema 13.- COMUNICACIN I2C Y SPI..............................................................185
Tema 14.- ZIGBEE................................................................................................191
Tema 15.- Bluetooth...............................................................................................196
Tema 16.- RF..........................................................................................................201
BIBLIOGRAFA...........................................................................................................205

INTRODUCCION
El presente trabajo es una introduccin primaria a la programacin de
microcontroladores, se referencia las caractersticas importantes de dos
microprocesadores de gama media y alta como son el pic16f887 y el pic18f4550.
Un microcontrolador es un dispositivo electrnico capaz de llevar a cabo procesos
lgicos. Estos procesos o acciones son programados en lenguaje ensamblador o lenguaje
c por el usuario, y son introducidos en este a travs de un programador.
Este resumen est orientado con informacin bsica de los microcontroladores para la
mejor compresin de las bases tericas. As pues adems de aprender todo sobre el
mundo del PIC, es necesario saber algo de electrnica y electrnica digital, de lo
contrario todo lo que escriba aqu sobre microcontroladores no ser entendible.

ARQUITECTURA DE MICROCONTROLADORES
Diferencias entre Microprocesador y Microcontrolador
MICROPROCESADOR
Es un dispositivo electrnico que necesita de todos los perifricos para poder funcionar
correctamente, es decir, tener una motherboard como soporte (con todos los buses que
necesite el microprocesador: bus de direccin, datos, control, etc), tener tambin el
banco de memoria tanto RAM como ROM y ms.
Este microprocesador puede hacer cualquier funcin que se le ordene dependiendo del
software que lo gobierne.

Figura 1 Microprocesador Fuente: Ral lvarez Torrico, Entendiendo los bits de configuracin en
elPIC16 de Microchip, Disponible Fuente:

MICROCONTROLADOR
Internamente ya estn implementados todos los buses, el banco de memoria, clock,
temporizadores, etc y tambin est el software que lo gobierna, pero este software es
nico y tiene una sola funcin la cual es para el cual fue diseado. Es un sistema cerrado
mientras que un microprocesador es un sistema abierto desde este punto de vista, puede
realizar muchsima ms funciones ahora.

Figura 2 Microcontrolador Fuente: Ral lvarez Torrico, Entendiendo los bits de configuracin en elPIC16 de
Microchip, Disponible

Un microcontrolador es un solo circuito integrado que contiene todos los elementos


electrnicos que se utilizaban para hacer funcionar un sistema basado con un
microprocesador; es decir contiene en un solo integrado la Unidad de Proceso, la
memoria RAM, memoria ROM , puertos de entrada, salidas y otros perifricos,
reduccin de espacio.
6

El microcontrolador es en definitiva un circuito integrado que incluye todos los


componentes integrados. Debido a su reducido tamao es posible montar el controlador
en el propio dispositivo al que gobierna. En este caso el controlador recibe el nombre de
controlador empotrado o embebido.

Diagrama 1 Fuente Sptimo A 2015 - 2016

Arquitectura Interna del microcontrolador PIC y el microcontrolador


ATmega
Arquitecturas segn el Hardware
Arquitectura Segmentada
Divide la bsqueda de las instrucciones de manera que cuando se ejecute la instruccin
actual, ya se est buscando la siguiente. Multiplica la velocidad de ejecucin al doble
que la Von Neumann
Mquina secuencial
Buses de datos y direcciones compartidos
Diseo multietapa (Pipeline)
El diseo multietapa le permite ejecutar ms de una operacin a la vez
Se encuentra combinada con software CISC y en pocas ocasiones con RISC
Ms rpida que Von Neumann
Arquitectura Von Neumann
Tradicionalmente los sistemas con microprocesadores se basan en esta arquitectura, en
la cual la unidad central de proceso (CPU), est conectada a una memoria principal
nica (casi siempre slo RAM) donde se guardan las instrucciones del programa y los
datos. A dicha memoria se accede a travs de un sistema de buses nico (control,
direcciones y datos): En un sistema con arquitectura Von Neumann el tamao de la
unidad de datos o instrucciones est fijado por el ancho del bus que comunica la
memoria con la CPU. As un microprocesador de 8 bits con un bus de 8 bits, tendr que
7

manejar datos e instrucciones de una o ms unidades de 8 bits (bytes) de longitud. Si


tiene que acceder a una instruccin o dato de ms de un byte de longitud, tendr que
realizar ms de un acceso a la memoria. El tener un nico bus hace que el
microprocesador sea ms lento en su respuesta, ya que no puede buscar en memoria una
nueva instruccin mientras no finalicen las transferencias de datos de la instruccin
anterior. Las principales limitaciones que nos encontramos con la arquitectura Von
Neumann son: La limitacin de la longitud de las instrucciones por el bus de datos,
que hace que el microprocesador tenga que realizar varios accesos a memoria para
buscar instrucciones complejas. La limitacin de la velocidad de operacin a causa del
bus nico para datos e instrucciones que no deja acceder simultneamente a unos y
otras, lo cual impide superponer ambos tiempos de acceso.

Figura 3 Arquitectura Von Neumann

Caractersticas
Mquina secuencial
Ejecuta solo una operacin a la vez
Bus de datos y direcciones compartidos
Lenta
Generalmente se combina con software tipo CISC
Arquitectura Harvard
Este modelo, que utilizan los microcontroladores PIC, tiene la unidad central de proceso
(CPU) conectada a dos memorias (una con las instrucciones y otra con los datos) por
medio de dos buses diferentes.

Figura 4 Arquitectura Harvard Fuente online: Arquitectura Pic

Una de las memorias contiene solamente las instrucciones del programa (Memoria de
Programa), y los otros slo almacenos datos (Memoria de Datos). Ambos buses son
totalmente independientes lo que permite que la CPU pueda acceder de forma
independiente y simultnea a la memoria de datos y a la de instrucciones. Como los
buses son independientes stos pueden tener distintos contenidos en la misma direccin
y tambin distinta lngitud. Tambien la longitud de los datos y las instrucciones puede
ser distinta, lo que optimiza el uso de la memoria en general. Para un procesador de Set
de Instrucciones Reducido, o RISC (Reduced Instruccin Set Computer), el set de
instrucciones y el bus de memoria de programa pueden disearse de tal manera que
todas las instrucciones tengan una sola posicin de memoria de programa de longitud.
Adems, al ser los buses independientes, la CPU puede acceder a los datos para
completar la ejecucin de una instruccin, y al mismo tiempo leer la siguiente
instruccin a ejecutar. Ventajas de esta arquitectura: El tamao de las instrucciones no
esta relacionado con el de los datos, y por lo tanto puede ser optimizado para que
cualquier instruccin ocupe una sola posicin de memoria de programa, logrando as
mayor velocidad y menor longitud de programa.
Caracteristicas
Separa los buses de datos, direcciones y control, y los hace totalmente
independientes.
Lo anterior permite leer instrucciones con mayor velocidad
Pueden direccionar altas cantidades de memoria
Se combinan con software RISC

Arquitecturas segn el Software


El tiempo de acceso a las instrucciones puede superponerse con el de los datos,
logrando una mayor velocidad en cada operacin.
Se encarga de direccionar la memoria de instrucciones, recibir el cdigo de la
instruccin en curso, su decodificacin y la ejecucin de la operacin que implica la
instruccin, as como la bsqueda de los operandos y el almacenamiento del resultado.
Existen tres orientaciones en cuanto a la arquitectura y funcionalidad de los
procesadores actuales:
CISC: Un gran nmero de procesadores usados en los microcontroladores estn
basados en la filosofa CISC (Computadores de Juego de Instrucciones Complejo).
Disponen de ms de 80 instrucciones mquina en su repertorio, algunas de las cuales
son muy sofisticadas y potentes, requiriendo muchos ciclos para su ejecucin. Una
ventaja de los procesadores CISC es que ofrecen al programador instrucciones
complejas que actan como macros.
Complex Instruction Set Computer
Set de instrucciones grande
Ofrece una amplia gama de operaciones
Facilita el trabajo de programacin
Reduce el tamao del cdigo de programa
Incrementa el costo de aprender la programacin
9

RISC: Tanto la industria de los ordenadores como la de los microcontroladores estn


decantndose hacia la filosofa RISC (Computadores de Juego de Instrucciones
Reducido). En estos procesadores el repertorio de instrucciones mquina es muy
reducido y las instrucciones son simples y, generalmente, se ejecutan en un ciclo (en
realidad en cuatro, pero secuencialmente, de forma que a cada ciclo de reloj se termina
la ejecucin de una instruccin excepto en las instrucciones de salto). La sencillez y
rapidez de las instrucciones permiten optimizar el hardware y el software del
procesador.
Reduced Instructio Set Computer
Pocas instrucciones
Ms fcil de aprender el mtodo de programacin
Mayor tamao del cdigo de programa
SISC: En los microcontroladores destinados a aplicaciones muy concretas, el juego de
instrucciones, adems de ser reducido, es especfico, o sea, las instrucciones se
adaptan a las necesidades de la aplicacin prevista. Esta filosofa se ha bautizado con el
nombre de SISC (Computadores de Juego de Instrucciones Especfico).
Combinacin de CISC con RISC
Complex-Reduced Instruction Set Computer

Registros de Propsito General y Especiales


Registros de propsito especfico:
Se utilizan para una tarea determinada.
Estn asociados a las unidades funcionales y cumplen funciones especficas: PIC, MDR,
IR, ALUOut, etc.

Registros de propsito general:


Se utilizan para almacenar datos o direcciones de forma flexible.
Agrupados en bancos de registros.
Los registros de propsito general se utilizan para almacenar datos temporalmente.
Aun cuando estos registros pueden mantener cualquier tipo de datos, algunos tienen
cierta funcionalidad especfica o son usados de manera especial por algunas
instrucciones.

10

Distribucin de Pines
Los PIC son integrados capaces de ser programados desde un computador y seguir una
secuencia.
PIC (MicroChip). Familia de microcontroladores que gana popularidad da a da.
Fueron los primeros microcontroladores RISC. Sern los empleados en este mdulo.
Es preciso resaltar en este punto que existen innumerables familias de
microcontroladores, cada una de las cuales posee un gran nmero de variantes.

Figura 5 Familia Microcontroladores


Fuente: Microchip https://es.wikiversity.org/wiki/Estructura_del_microcontrolador

Recursos comunes a todos los microcontroladores.


Al estar todos los microcontroladores integrados en un chip, su estructura fundamental y
sus caractersticas bsicas son muy parecidas. Todos deben disponer de los bloques
esenciales Procesador, memoria de datos y de instrucciones, lneas de E/S, oscilador de
reloj y mdulos controladores de perifricos. Sin embargo, cada fabricante intenta
enfatizar los recursos ms idneos para las aplicaciones a las que se destinan
preferentemente.
En este apartado se hace un recorrido de todos los recursos que se encuentran en todos
los microcontroladores describiendo las diversas alternativas y opciones que pueden
encontrarse segn el modelo seleccionado.
Memoria.
En los microcontroladores, la memoria de instrucciones y datos est integrada en el
propio chip. Una parte debe ser no voltil, tipo ROM, y se destina a contener las
instrucciones del programa. Otra parte de la memoria ser tipo RAM, voltil, y se
destina a guardar las variables y los datos.

11

La RAM en estos dispositivos es de poca capacidad pues slo debe contener las
variables y los cambios de informacin que se produzcan en el transcurso del programa.
Los usuarios de ordenadores estn habituados a manejar Megabytes de memoria, pero
los diseadores de aplicaciones con microcontroladores trabajan con capacidades de
ROM comprendidas entre 512 bytes y 8 k bytes y de RAM comprendidas entre 20 y
512 bytes (en la gama media de microcontroladores, en la alta se superan estas cifras).
Segn el tipo de memoria ROM que dispongan los microcontroladores, la aplicacin y
utilizacin de los mismos es diferente. Se describen las cinco versiones de memoria no
voltil que se pueden encontrar en los microcontroladores del mercado.
Puertos de Entrada/Salida.
Los puertos de entrada/salida de un microcontrolador permiten la comunicacin con los
perifricos externos. Adems, muchas de las patas que configuran el puerto suelen tener
varias funciones multiplexadas, como por ejemplo ser puerto de E/S y entrada analgica
al convertidor A/D.
El reloj del microcontrolador.
Todos los microcontroladores disponen de un circuito oscilador que genera una onda
cuadrada de alta frecuencia, que proporciona los impulsos de reloj usados en la
sincronizacin de todas las operaciones del sistema.
Generalmente, el circuito de reloj est incorporado en el microcontrolador y slo se
necesitan unos pocos componentes exteriores para seleccionar y estabilizar la frecuencia
de trabajo. Dichos componentes suelen consistir en un cristal de cuarzo junto a
elementos pasivos (dos condensadores del orden de los picofaradios), un resonador
cermico (no hacen falta condensadores) o una red R-C.
Aumentar la frecuencia de reloj supone disminuir el tiempo en que se ejecutan las
instrucciones, pero ello va acompaado de un incremento del consumo de energa.

Recursos especiales de los microcontroladores.


Cada fabricante oferta numerosas versiones de una arquitectura bsica de
microcontrolador. En algunas ampla las capacidades de las memorias, en otras
incorpora nuevos recursos, en otras reduce las prestaciones al mnimo para aplicaciones
muy simples, etc. La labor del diseador es encontrar el modelo mnimo que satisfaga
todos los requerimientos de su aplicacin. De esta forma, se minimizar el coste.
Los principales recursos especficos que incorporan los microcontroladores son:
Temporizadores o Timers.
Perro guardin o Watchdog.
Proteccin ante fallo de alimentacin o Brownout.
Estado de reposo o de bajo consumo.
Conversor A/D.
Conversor D/A.
Comparador analgico.
Modulador de anchura de pulsos o PWM.
Puertos de E/S digitales.
12

Puertos de comunicacin serie/paralelo.


Temporizadores o Timers.
Se emplean para controlar periodos de tiempo (temporizadores) y para llevar la cuenta
de acontecimientos que suceden en el exterior (contadores).
Para la medida de tiempos se carga un registro con el valor adecuado y a continuacin
dicho valor se va incrementando o decrementando al ritmo de los impulsos de reloj o
algn mltiplo hasta que se desborde y llegue a 0, momento en el que se produce una
interrupcin.
Cuando se desean contar acontecimientos que se materializan por cambios de nivel o
flancos en alguna de las patas del microcontrolador, el mencionado registro se va
incrementando o decrementando al ritmo de dichos impulsos.
Perro guardin o Watchdog
Cuando el ordenador se bloquea por un fallo del software u otra causa, se pulsa el botn
del reset y se reinicia el sistema. Pero un microcontrolador funciona sin el control de un
supervisor y de forma continuada. El Perro guardin consiste en un temporizador que,
cuando se desborda y pasa por 0, provoca un reset automticamente en el sistema.
Se debe disear el programa de trabajo que controla la tarea de forma que refresque o
inicialice al Perro guardin antes de que provoque el reset. Si falla el programa o se
bloquea, no se refrescar al Perro guardin y, al completar su temporizacin provocar
el reset del micro.
Proteccin ante fallo de alimentacin o Brownout
Se trata de un circuito que resetea al microcontrolador cuando el voltaje de alimentacin
(VDD) es inferior a un voltaje mnimo (brownout). Mientras el voltaje de
alimentacin sea inferior al de brownout el dispositivo se mantiene reseteado,
comenzando a funcionar normalmente cuando se sobrepasa dicho valor.
Estado de reposo de bajo consumo
Son abundantes las situaciones en las que el microcontrolador debe esperar, sin hacer
nada, a que se produzca algn acontecimiento externo que le ponga de nuevo en
funcionamiento. Para ahorrar energa los microcontroladores disponen de una
instruccin especial (SLEEP en los PIC), que les pasa al estado de reposo o de bajo
consumo, en el cual los requerimientos de potencia son mnimos. En dicho estado se
detiene el reloj principal y se congelan sus circuitos asociados. Al activarse una
interrupcin provocada por un evento externo, el microcontrolador se despierta y
reanuda su trabajo.
Conversor A/D
Los microcontroladores que incorporan un Conversor A/D (Analgico/Digital) pueden
procesar seales analgicas cuyo valor oscile entre la tensin de alimentacin y el 0
(para otro tipo de seales har falta una etapa previa de adaptacin de la seal). Suelen
disponer de un multiplexor que permite aplicar a la entrada del conversor varias seales
analgicas en distintas patas del circuito integrado.
13

Conversor D/A
Transforma datos digitales en su correspondiente seal analgica, que saca al exterior
por una de las patas del micro. La inclusin de un conversor D/A en un micro es mucho
ms rara (y cara) que la de un conversor A/D. La salida analgica tiene una limitacin
de corriente y de amplitud, por lo que en muchas ocasiones ser necesaria una etapa de
salida (amplificador + potencia).
Comparador analgico
Algunos modelos de microcontroladores disponen internamente de un Amplificador
Operacional que acta como comparador entre una seal fija de referencia y otra
variable que se aplica por una de las patas del micro. La salida del comparador
proporciona un nivel lgico 1 0 segn la seal de entrada sea mayor o menor que la de
referencia. Tambin hay modelos de microcontroladores con un mdulo de tensin de
referencia que proporciona diversas tensiones de referencia que se pueden aplicar en los
comparadores.
Modulador de anchura de pulsos o PWM
Son circuitos que proporcionan en su salida pulsos de tensin de ancho variable
(modificable por software), muy usados en la regulacin de velocidad de motores y
aplicaciones de electrnica de potencia.
Puertos de E/S digitales
Todos los microcontroladores destinan algunas de sus patas a proporcionar lneas de E/S
digitales. Por lo general, estas lneas se agrupan de ocho en ocho formando Puertos.
Las lneas digitales de los Puertos pueden configurarse como Entrada o como Salida
cargando un 1 un 0 en el bit correspondiente de un registro destinado a su
configuracin. Muchos micros tienen la capacidad de generar interrupciones cuando
cambia la entrada de alguna de las lneas. Eso es especialmente til cuando el micro est
en estado de bajo consumo, que as puede ser despertado por un evento externo en una
de sus patas.
Puertos de comunicacin
Los puertos de comunicacin dotan al microcontrolador de la posibilidad de
comunicarse con dispositivos externos, buses de microprocesadores, buses de sistemas,
buses de redes y otros elementos bajo distintas normas y protocolos. Algunos modelos
de micros disponen de recursos que permiten directamente esta tarea, entre los que
destacan:

UART, adaptador de comunicacin serie asncrona.

USART, adaptador de comunicacin serie sncrona y asncrona

Puerto paralela esclavo para poder conectarse con los buses de otros
microprocesadores.

USB (Universal Serial Bus), que es un bus serie de alta velocidad.


14

Bus I2C, que es un interfaz serie de dos hilos desarrollado por Philips.

CAN (Controller Area Network), para permitir la comunicacin de los


distintos sistemas de un automvil.

DIAGRAMA DE BLOQUES
El siguiente es su diagrama circuital por bloques, que se debe entender desde la
electrnica, que es la base del trabajo de programacin de los PIC:

Figura 6 Diagrama de Bloques PIC16F887 Fuente: Wikipedia Arquitectura de Pic


Fuente: https://es.wikiversity.org/wiki/Estructura_del_microcontrolador

La distribucin de pines es la siguiente, as es como se ve por fuera y cada pin tiene una
o ms funciones asignadas, cada vez que se utiliza una funcin hay que tener en cuenta
que no se deben usar las otras asignadas en el mismo pin, es decir, un terminal solo
puede realizar una funcin al tiempo, as en la etapa de planeacin del proyecto se debe
definir que funcin utilizar para cada pin, de las que este est en habilidad de
desempear.
Eficiencia del cdigo: permiten una gran compactacin de los programas.
Rapidez de ejecucin: a frecuencia de 20MHz->5 millones de instr./seg.
Seguridad en acceso por la separacin de memoria de datos y de programa.
Juego reducido de instrucciones y de fcil aprendizaje.
Compatibilidad de pines y cdigo entre dispositivos de la misma familia o sin reduccin
de las prestaciones internas (muy verstiles).
15

Gran variedad de versiones en distintos encapsulados (desde 8 hasta 84 pines) sin


reduccin de las prestaciones internas (muy verstiles).
Posibilidad de proteccin del cdigo muy fiable.
Herramientas de desarrollo software y hardware abundantes y de bajo coste.
Pines de configuracin

Figura 7 Distribucin de pines del PIC 16F887 Fuente: Datasheet

16

Figura 8 Distribucin de pines del PIC 16F887 Fuente: Datasheet

17

Figura 9 Distribucin de pines del PIC 16F887 Fuente: Datasheet

18

PROGRAMACIN DE MICROCONTROLADORES PIC


Programacin en Asambler
Definicin:
Los lenguajes de programacin son la herramienta con que se cuenta para indicar a las
computadoras la secuencia de instrucciones o comandos para realizar las diferentes
funciones que desarrollan.
El nivel ms bajo de programacin es tratar directamente con el microprocesador, el
cual trabaja en cdigo binario. El lenguaje ensamblador es la codificacin que permite
trabajar a este nivel de programacin, las instrucciones escritas en cdigo binario se
conocen con el nombre de cdigo de mquina.
El lenguaje ensamblador es una codificacin especial que permite agrupar comandos
cortos y con cierto sentido este cdigo de mquina. Cada comando se lo conoce como
mnemnico. [2]
Estructura del lenguaje Ensamblador
En su formato ms simple consta de dos partes:
- Cdigo de Operacin
- Parmetros del Comando
Comando
ADD

destino, origen
AX, 1234

ADD es el comando que se va a ejecutar.


AX es el registro destino donde se va a aquedar el resultado.
1234 es el segundo valor que se va a operar. [2]
Ventajas del Lenguaje Ensamblador
-

Las rutinas escritas en ensamblador pueden ser ms rpidas en


comparacin a las creadas en compilador.
Las rutinas pueden tener un tamao menor en comparacin a las
creadas por compilador, ya que puede hacerse para cumplir un algoritmo
especfico que no tenga necesidad de validaciones redundantes.
Permite programar caractersticas particulares del hardware del
sistema o de dispositivos externos, que no se pueden usar en lenguajes de
alto nivel.
Nos permite tener una mejor idea de cmo trabajan las computadoras
y los dispositivos electrnicos programables. [2]

[2]: Steren, ABC de la Mecatrnica, Mxico.


19

Tipos de Datos
Para conocer los tipos de datos vamos a comenzar analizando primero:
Qu son las variables?
Pues sencillamente el poder identificar con un nombre una o varias posiciones de
memoria de la RAM de nuestro PIC y de esta manera el poder almacenar all los datos
(informacin) que va a utilizar nuestro programa.
En C para poder utilizar una variable primeramente hay que declararla siguiendo la
siguiente sintaxis:
Tipo nombre variable =valor;
Ejemplo de variable declarada:
int i;
Ejemplo de variable declarada e inicializada:
int i=5;
En una misma lnea se puede declarar ms de una variable siguiendo el siguiente
formato:
Tipo nombre_variable1, nombre_variable2,....;
Hay que tener en cuenta que la lnea tiene que acabar en punto y coma.
El tipo de datos es obligatorio ponerlo y le dice al compilador cuantas celdillas de
memoria tiene que reservar para almacenar el valor de la variable. Los tipos de datos
pueden variar de un compilador a otro, vamos a ver los tipos de datos que podemos usar
con nuestro compilador CCS.
Los tipos de datos bsicos que utiliza nuestro compilador son los siguientes:

Figura 10 Tipo de Datos Fuente: Programacin en C

Sin embargo el compilador CCS tambin admite los siguientes tipos de datos definidos
en el estndar C y que son los que normalmente se utilizan a la hora de programar:

Figura 11 Tipo de Datos C Fuente: Programacin en C

Todos los tipos excepto float son por defecto sin signo, aunque pueden llevar el
especificador unsigned signed y su rango de valores ser el que corresponda a su tipo
bsico.
20

Estos son los tipos bsicos, tambin estn los tipos de datos compuestos como
Enumeraciones, Estructuras y Uniones que estn formados por una combinacin de los
bsicos y que los veremos ms adelante.
El nombre de la variable no puede ser una palabra clave (reservada por el compilador
para realizar unas funciones determinadas y los caracteres que podemos utilizar son las
letras: a-z y A-Z ( ojo! la o no est permitida), los nmeros: 0-9 y el smbolo de
subrayado. Adems hay que tener en cuenta que el primer carcter no puede ser un
nmero.
En el lenguaje C, los datos tienen un tipo, o sea, cada dato utilizado en el programa debe
tener su tipo especificado. Esto permite al compilador conocer el tamao de dato
(nmero de bytes requerido en la memoria) y su representacin. Hay varios tipos de
datos que se pueden utilizar en el lenguaje de programacin miPiC dependiendo del
tamao de dato y del rango de valores. La tabla muestra el rango de valores que los
datos pueden tener cuando se utilizan en su forma bsica.
TIPO DE DESCRIPCIN
D ATO
char

Texto (caracteres)

TAM A O
(NMERO
BITS)
8

RANGO
D E VAL O R E S

DE

int

Valores enteros

16

de -32768 a 32767

float

Valores en punto flotante

32

double

Valores en punto flotante 32


de doble precisin

de
1.1754943508210-38
a
6.805647744071038
de
1.1754943508210-38
a
6.805647744071038

de 0 a 255

Tabla 1 Rango de Valores

Al aadir un prefijo (calificador) a cualquier tipo de dato entero o carcter, el rango de


sus posibles valores cambia as como el nmero de los bytes de memoria necesarios.
Por defecto, los datos de tipo int son con signo, mientras que los de tipo char son sin
signo. El calificador signed (con signo) indica que el dato puede ser positivo o negativo.
El prefijo unsigned indica que el dato puede ser slo positivo. Note que el prefijo es
opcional.
TIPO
DE
D ATO

T I P O D E D ATO TAM A O
CON PREFIJO
(NMERO
BITS)

RANGO
D E VAL O R E S

DE

21

char
int

signed char
unsigned int
short int
signed short int
long int
signed long int

8
16
8
8
32
32

de -128 a 128
de 0 a 65535
de 0 a 255
de -128 a 127
de 0 a 4294967295
de -2147483648 a
2147483647

Tabla 2 Prefijo de Dato

Tipo entero (int)


Un entero es un nmero sin parte fraccionaria que puede estar expresado en los
siguientes formatos:
Hexadecimal (base 16): el nmero empieza con 0x (o 0X). Los enteros hexadecimales
consisten en los dgitos (de 0 a 9) y/o las letras (A, B, C,D, E, F). Por ejemplo: 0x1A.
Decimal (base 10): el nmero consiste en los dgitos (de 0 a 9). El primer dgito no
puede ser 0. En este formato, se puede introducir el signo de nmero (+ o -). Por
ejemplo: 569, -25, +1500.
Octal (base 8): los nmeros se representan a base 8 utilizando slo 8 dgitos (de 0 a 7).
Los enteros octales empiezan con 0. Por ejemplo: 056.
Binario: cuando un entero empieza con 0b (o 0B) se representan como una serie de bits
(0 y 1). Por ejemplo: 0B10011111
0x11 // formato hexadecimal equivale a decimal 17
11 // formato decimal
-152 // formato decimal
011 // formato octal equivale a decimal 9
0b11 // formato binario equivale a decimal 3

Tipo punto flotante (float)


El tipo punto flotante (float) se utiliza para los nmeros reales con el punto decimal. Los
datos de tipo float se pueden representar de varias maneras. Un dato float es siempre
consigno (signed).
0.
// = 0.0
-1.23 // = -1.23
23.45e6 // = 23.45 * 10^6
2e-5 // = 2.0 * 10^-5
3E+10 // = 3.0 * 10^10
.09E34 // = 0.09 * 10^34

Tipo carcter (char)


El tipo char es considerado como un entero por el compilador. No obstante, se utiliza
normalmente para los datos de tipo carcter. Un dato de tipo carcter est encerrado
entre comillas y codificado en un carcter ASCII.
59 // entero
'p' // carcter ASCII 'p'
Una secuencia de caracteres es denominada cadena (string). Las cadenas estn
encerradas entre comillas dobles, por ejemplo:
22

"Presione el botn RA0"

Juego de Instrucciones
El juego de instrucciones para los microcontroladores 16F8XX incluye 35 instrucciones
en total. La razn para un nmero tan reducido de instrucciones yace en la arquitectura
RISC. Esto quiere decir que las instrucciones son bien optimizadas desde el aspecto de
la velocidad operativa, la sencillez de la arquitectura y la compacidad del cdigo. Lo
malo de la arquitectura RISC es que se espera del programador que haga frente a estas
instrucciones. Por supuesto, esto es relevante slo si se utiliza el lenguaje ensamblador
para la programacin.

Figura 12 Instrucciones Asambler


Fuente: https://es.wikiversity.org/wiki/Estructura_del_microcontrolador

23

Fusibles e Interrupciones
Fusibles
Armando A. Cullar, Aizol Z. Izaguierreen (2008-Pag. 182)
Los bit's de configuracin o ms comnmente llamados "fusibles" permiten
configurar ciertas funciones en los microcontroladores PIC, como el tipo de
cristal para el oscilador, permiten proteger el cdigo en el micro, entre muchas
funciones.
Fernando E. Valdez, Ramn P. Areny (2007-Pag. 189)
Son configuraciones de la forma de funcionamiento del microcontrolador, se
transfieren al PIC cada vez que se graba un programa.
Jos M. Angulos, Usategui, Susana R. Yesa (2006-Pag. 113)
Los fusibles se utilizan para configurar parmetros importantes del sistema, a
diferencia de los registros de configuracin, estos fusibles estn relacionados con
aspectos ms bsicos e importantes en el funcionamiento del sistema. Adems,
su configuracin queda grabada en memoria Flash, de forma tal que no se pierda
al cortar la alimentacin al microcontrolador.
Definicin Grupal:
Los fusibles permiten configurar ciertas funciones en los microcontroladores
PIC, como por ejemplo el tipo de cristal para el oscilador y principalmente
permite proteger el cdigo en el micro, estos fusibles se encuentran relacionados
con funcionamiento del sistema.
Fusibles de configuracin
Los bits de configuracin o ms comnmente llamados "fusibles" permiten configurar
ciertas funciones en los microcontroladores PIC, como el tipo de cristal para el
oscilador, permiten proteger el cdigo en el micro, entre muchas funciones. La cantidad
de funciones que se pueden configurar con los fusibles dependen del microcontrolador,
si tenemos en el 16F84A 4 funciones, en el 16F88 son alrededor de 13 funciones.
Sirven para configurar algunas funciones del micro, como el tipo de oscilador, la
proteccin de cdigo, habilitar el perro guardin, habilitar el reset maestro, habilitar un
reset inicial, habilitar reset por bajo voltage en la fuente, y otros dependiendo del PIC
usado.
Para el microcontrolador PIC 16F887, la descripcin de los fusibles se encuentra en
tabla 3.
24

Descripcin de los fusibles


NOMBRE

DEBUG

LVP
FCMEN

IESO

BOREN

CPD

CD

MCLRE

PWRTE

WDTE

DESCRIPCION
DEBUG :Debug in Circuit Debugger Mode bit
1: In Circuit Debugger Disabled RB6/ICSPCLK and RB6/ICSPDAT are
general purpose I/O Pins
0: In Circuit Debugger Disabled RB6/ICSPCLK and RB6/ICSPDAT are
dedicate to the debugger
LVP :Low Voltage Programming Enabled Bit
1: RB3/PGM Pin has PGM function, low voltage programming enabled
0: RB3 pin is digital I/O, HV on MCLR must be for programming.
FCMEN :Fail Safe Clock Monitor Enabled Bit
1: Fail Safe Clock Monitor is Enabled
0: Fail Safe Clock Monitor is disabled
IESO :Internal- External Switchover bit
1: Fail Internal- External Switchover bit is enabled
0: Fail Internal- External Switchover bit is deseabled
BOREN: 1 :0 : BrownOut Reset Selectionbits
11: BOR enabled
10: BOR enabled during operation and disabled in Sleep
01: BOR controlled by SBOREN bit of the PCON Register
00: BOR disabled
: Data Code Protection bit (2 )
CPD
1: Data memory code protection is disabled
0: Data memory code protection is enabled
:Code Protectionbit ( 3)
CD
1: Program memory code protection is disabled
0: Program memory code protection is enabled
pin function selected bit (4 )
MCLRE:RE3/ MCLR
pin function is MC LR
1: RE3/ MCLR
pin function is
0:RE3/ MCLR
digital
input,

MCLRinternally
tried VDD

: Power Up Timer Enabled bit


PWRTE
1: PWRT disable
0: PWRTE enable
WDTE: Watchdog Timer Enable bit
1: WDT enabled
0: WDT disabled and can be enabled by SWDTEN bit of the WDTCON
register

25

FOSC

FOSC 2 :0 :Oscillator Selection Bits


111: RC oscillator CLKOUT function on RA6/OSC2/CLKOUT Pin, RC
on RA7/OSC1/CLKIN
110: RCIO Oscillator: I/O function on RA6/OSC2/CLKOUT Pin, RC on
RA7/OSC1/CLKIN
101: INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC
on RA7/OSC1/CLKIN
100: INTOSCIO oscillator I/O Function on RA6/OSC2 /CLKOUT pin
I/O function on RA7/OSC1/CLKIN
011: EC: I/O Function on RA6/OSC2/CLKOUT pin, CLKIN on
RA7/OSC1/CLKIN
010: HS Ocillator: Hig Speed Crystal /resonator on
RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
001: XT Oscillator: Crystal/Resonator on RA6/OSC/CLKOUT and
RA7/OSC1/CLKIN
000: LP: Low Power Crystal on RA6/OSC2/CLKOUT and
RA7/OSC1/CLKIN

Tabla 3 Descripcin Fusibles

Ejemplos
# FUSES LP
# FUSES XT
# FUSES HS
# FUSES RC
# FUSES WDT
# FUSES NOWDT
# FUSES PROTECT
# FUSES NOPROTECT
# FUSES PUT

Low Power
Cristal Oscilator 4Mhz.
High Speed Oscilator >4Mhz.
Montaje Resistencia Condensador.
Watch Dog Timer Activo
No Watch Dog Timer.
Proteccion de Lectura.
No Proteccion de Lectura.
Power Up Timer.

Tabla 4 Ejemplos de Fusibles

Fusibles PIC16F887
FUSIBLE
DESCRIPCION
CP (Code Protection Codigo de Este fusible si est habilitado en ON evita
Proteccion de Programa)
que otras personas puedan leer el
programa contenido en el PIC
Config
1 = Program memory code protection is
disabled
0 = Program memory code protection is
enabled
FOSC<2:0> (Bits de Seleccin del Define la funcin de los terminales A6 y
Oscilador.)
A7. Ya sea como puertos I/O, como pines
26

para cristal externo o para recibir o emitir


seales de reloj.
Se comporta de acuerdo a:
111: Oscillator RC
110: RC I/O oscillator
101: INTOSC oscillator
100: INTOSCIO oscllator
011: EC: I/O
010: HS oscillator
001: XT oscillator
000: LP oscillator
WRT <1:0> (Flash Program Memory
Self Write Enable bits o bits de
habilitacin de auto escritura de la
memoria flash de programa.)

Protege la memoria de programa contra


escritura de la siguiente manera:
00: 0000h to 0FFFh
01: 0000h to 07FFh
10: 0000h to 00FFh
11: writte protection off
WDTE (Watchdog Timer Enable Fusible temporizador resetea el PIC cada
Temporizador de Perro Guardin)
cierto tiempo para evitar enciclamientos
por error en el programa.
Config
1 = WDT enabled
0 = WDT disabled (pudiendo ser
habilitado por SWDTEN bit del registro
WDTCON)
PWRTE (Power-up Timer Enable Bit Se utiliza para resetear el PIC cada vez
de Permiso para el Timer de que se conecta a la fuente de alimentacin
Alimentacin)
de la aplicacin a usarse.
Config
1 = PWRT disabled
0 = PWRT enabled
BOR4V (Brown-out Reset Selection bit) Permite configurar el nivel de voltaje del
reset o de escritura de la siguiente manera:
0: setea en 2.1 v
1: setea en 4 v
Tabla 5 Fusibles Pic 16F887

Fusibles PIC18F4550
FFUSIBLE
CCP2 MUX bit

DESCRIPCION
El bit de configuracin CCP2 MUX
determina qu pin CCP2 es multiplexado.
Por defecto, se le asigna a RC1 (CCP2MX
= 1) y si el bit de configuracin se borra,
27

System Clock Postscaler Selection

CCP2 se multiplexa con RB3.


Este fusible es el encargado de hacer la
divisin de frecuencia tanto de la seal de
entrada 96MHz o del cristal u oscilador de
entrada.

PLL Prescaler Selection

Este fusible funciona como un


multiplexor. La finalidad es obtener una
frecuencia de 4MHz para el circuito. La
funcin de este fuse es dividir la
frecuencia de entrada del Oscilador (OS1
y OS2) a las siguientes escalas: /No divide
(1), /2, /3, /4, /5, /6, /10, /12.
PORTB A/D
Si uno requiere hacerlo manualmente debe
de configurar los registros ADCON o
ANSEL correspondientes en el MCU.
Esta funcin habilita o no la conversin
Analgica-Digital.
VREGEN: USB Internal Voltage Habilita o deshabilita la utilizacin del
Regulator Enable bit (Modifica el regulador interno del Vbus para el USB.
voltaje del USB)
USBDIV: USB Clock Selection bit
Permite realizar una configuracin para el
oscilador, configura de donde proviene la
velocidad de reloj para el Mdulo USB.
WDTPS3: WDTPS0:Watchdog Timer Seleccin de bits para la configuracin del
Postscale Select bits
Watchdog Timer y para ello debe de
habilitar el uso de este.
STVREN: Stack Full/Underflow Reset Si est activo por causa de un
Enable bit
subdesbordamiento
restablece
el
dispositivo de lo contrario las condiciones
de subdesbordamiento no restablecen el
dispositivo.
ICPRT:
Dedicated
In-Circuit Activa o desactiva el puerto de Puede
Debug/Programming Port (ICPORT) configurar el puerto terminal del programa
Enable bit
para enviar y recibir datos seriales.
Low-Power Timer 1 Oscillator

Establece en nivel de voltaje en la


configuracin del Timer 1, ya que este
puede funcionar en dos diferentes niveles
de consumo de energa

Tabla 6 Fusibles 18F4550

Fusibles PIC16F887 y PIC18F4550


FUSIBLES

DESCRIPCION

INSTRUCCIONES PARA
ACTIVAR/DESACTIVAR
28

MCLRE
Clear)

(Master Resetea el microcontrolador

#FUSES MCLR

FCMEN
(Fail-Safe Visualiza los fallos ocurridos #FUSES FCMEN
Clock Monitor Enable en el pic
Bit)

IESO
(Internal/External
Conmutacin interno externo
Oscillator Switchover
Bit)

CPD (Data Eeprom Protege el cdigo


Code Protection Bit)
microcontrolador

del #FUSES NOCPD


#FUSES CPD

DEBUG (Background Depuracin para icd (serie)


Debugger Enable Bit)

FOSC

HS
LP
XT
EC

#FUSES IESO
#FUSES NOIESO

Oscillator Selection Bits


High-Speed
Crystal/Resonator
Oscillator: Low-Power
Crystal On
Crystal/Resonator
External Clock With
Fosc/4 Output
Establece la oscilacin del
circuito

#FUSES NODEBUG
#FUSES DEBUG

#FUSES HS_OSC
#FUSES XT_OSC
#FUSES LP_OSC
#FUSES EC_OSC

LVP
(Low-Voltage Establece la programacin en #FUSES NOLVP
Icsp Programming)
baja tensin de programacin #FUSES LVP
en b3 (pic16) o b5 (pic18)

WDT
(Watchdog Timer)

Rompe los bucles infinitos

#FUSES NOWDT
#FUSES WDT

Tabla 7 Fusibles PIC16F887 y PIC18F4550

29

Interrupciones
Armando A. Cullar, Aizol Z. Izaguierreen (2008-Pag. 201)
Las interrupciones permiten a cualquier suceso interior o exterior interrumpir la
ejecucin del programa principal en cualquier momento. En el momento de
producirse, el PIC ejecuta un salto a la rutina de atencin a la interrupcin
previamente definida por el programador, donde se atender a la demanda de la
interrupcin.
Fernando E. Valds Prez, Ramn P. Areny (2007-Pag. 217)
Una solicitud de interrupcin o simplemente una interrupcin es un evento de
origen interno o externo que, si es atendido, hace que el microcontrolador
interrumpa la ejecucin del programa en curso y en su lugar ejecute las
interrupciones de otro programa. Normalmente, cuando el programa que atiende
la solicitud de interrupciones ha completado su ejecucin, el microcontrolador
continua con las instrucciones del programa interrumpido, justo con la
instruccin que sigue a la que se estaba ejecutando cuando se produjo la
solicitud de interrupcin.
Jos M. Angulos, Usategui, Susana R. Yesa (2006-Pag. 150)
Las interrupciones son un mecanismo por el que un dispositivo, ante la
ocurrencia de un evento, pide al procesador que interrumpa el programa que se
est ejecutando y pase a ejecutar temporalmente una subrutina especifica. Esta
subrutina recibe el nombre de rutina de atencin a interrupcin. Cuando el
microcontrolador recibe una seal de interrupcin, el contador de programa
apunta a la direccin 04H de la memoria de programa, por eso, all se debe
escribir toda la programacin necesaria para atender dicha interrupcin.#
Definicin Grupal:
Permiten interrumpir la ejecucin del

programa principal en cualquier

momento, es decir pide al procesador que interrumpa el programa que se est


ejecutando y pase a ejecutar temporalmente una subrutina especifica, el PIC
ejecuta un salto a la rutina de atencin a la interrupcin previamente definida por
el programador.
Interrupciones
30

Los 16CXX agregan la posibilidad de contar con sistema de interrupciones. Este


sistema consiste en un mecanismo por el cual un evento interno o externo, asincrnico
respecto del programa, puede interrumpir la ejecucin de ste produciendo
automticamente un salto a una subrutina de atencin, de manera que pueda atender
inmediatamente el evento, y retomar luego la ejecucin del programa exactamente en
donde estaba al momento de ser interrumpido.
Este mecanismo es muy til por ejemplo para el manejo de timers o rutinas que deben
repetirse peridicamente (refresh de display, antirebote de teclado, etc.), deteccin de
pulsos externos, recepcin de datos, etc.
Existen de tres a doce eventos que pueden generar interrupciones en los PIC16CXX
existentes hasta el momento, pero nada impide que puedan agregarse ms en versiones
futuras.
Funcionamiento
En los 16CXX las interrupciones se comportan casi exactamente igual que las
subrutinas. Desde el punto de vista del control del programa, al producirse una
interrupcin se produce el mismo efecto que ocurrira si el programa tuviese un CALL
0004h en el punto en que se produjo la interrupcin.
En uno de los registros de control del sistema de interrupciones existe un bit de
habilitacin general de interrupciones GIE, que debe ser programado en 1 para que las
interrupciones puedan actuar. Al producirse una

interrupcin, este bit se borra

automticamente para evitar nuevas interrupciones.


La instruccin RETFIE que se utiliza al final de la rutina de interrupcin, es idntica a
un retorno de subrutina, salvo que adems coloca en uno automticamente el bit GIE
volviendo a habilitar las interrupciones.
Dentro de la rutina de interrupcin, el programa, Deber probar el estado de los flags de
interrupcin de cada una de las fuentes habilitadas, para detectar cual fue la que causo la
interrupcin y as decidir qu accin tomar.
Interrupciones
Ejemplos:
Interrupciones
#INT_AD
#INT_ADOF
#INT_BUSCOL
#INT_BUTTON
#INT_CAERR

Descripcin
Conversin AD completa.
Conversin AD fuera de rango de tiempo
Colisin de bus
Por botn (14000)
Erro en el mdulo CAN
31

#INT_CANIRX
#INT_CANRX0
#INT_CANRX1
Interrupciones
#INT_AD
#INT_ADOF
#INT_BUSCOL
#INT_BUTTON
#INT_CAERR
#INT_CANIRX
#INT_CANRX0
#INT_CANRX1

Mensaje invalido n el bus CAN


Bus CAN recibe un nuevo mensaje en buffer 0
Bus CAN recibe un nuevo mensaje en buffer 1
Descripcin
Conversin AD completa.
Conversin AD fuera de rango de tiempo
Colisin de bus
Por botn (14000)
Erro en el mdulo CAN
Mensaje invalido n el bus CAN
Bus CAN recibe un nuevo mensaje en buffer 0
Bus CAN recibe un nuevo mensaje en buffer 1

Tabla 8 Ejemplos de interrupciones

Interrupciones INT del microcontrolador PIC


La interrupcin externa en el pin RB0/INT se activa por flanco ascendente o
descendente, dependiendo del bit INTEDG del registro OPTION_REG. Cuando aparece
una transicin vlida en el pin RB0/INT, la bandera INT0IF del registro INTCON toma
un valor de 1. Esta interrupcin puede ser habilitada/deshabilitada con el bit INT0IE del
registro INTCON. La bandera INT0IF tiene que ser borrada por software dentro de la
ISR antes de rehabilitar esta interrupcin. La interrupcin INT puede despertar al PIC,
si el bit INT0IE se program en 1 antes de ingresar al modo Sleep.
Interrupciones del Timer 0
El desbordamiento del registro TMR0 (desde 0xFF a 0x00) genera una interrupcin, lo
cual hace que el bit TMR0IF del registro INTCON sea igual a 1. La generacin de esta
interrupcin se puede habilitar/deshabilitar con el bit TMR0IE del registro INTCON. El
bit TMR0IF tiene que ser borrado por software dentro de la ISR antes de rehabilitar esta
interrupcin. Esta interrupcin no puede despertar al microcontrolador PIC, ya que el
temporizador est apagado durante el modo Sleep.
Interrupciones RB4 RB7
Un cambio de estado en cualquiera de los pines RB<7:4> genera una interrupcin y
hace que la bandera RBIF del registro INTCON tome un valor de 1. Esta interrupcin
puede habilitarse/deshabilitarse con el bit RBIE del registro INTCON. nicamente los
pines configurados como entradas pueden producir esta interrupcin. Los pines de
entrada RB<7:4> se comparan con el estado anterior que tenan en la ltima lectura del
puerto B. Si no hay coincidencia en todos los pines, se genera la interrupcin.
32

Interrupciones RBI (Interrupciones por cambio de estado)


Cuatro pines del PORTB (RB7:RB4) son capaces de disparar una interrupcin por
cambio de estado. Este tipo de interrupciones son comnmente usadas para el manejo de
teclados matriciales, de ah que estos pines tambin los denominen KBI0:KBI3
De estos 4 pines, solo producirn interrupcin aquellos configurados como entradas, si
alguno est configurado como salida, queda excluido de la interrupcin por cambio de
estado.
Interrupciones PIC16F887
Registro INTCON
El registro INTCON contiene varios bits de habilitacin y de bandera para el
desbordamiento en el registro TMR0, e interrupciones por el cambio del estado en el
puerto PORTB y las interrupciones externas en el pin INT.
R/W R/W R/W R/W R/W R/W R/W R/W CARACTERI
(0)
(0)
(0)
(0)
(0)
(0)
(0)
(X)
STICAS
INTC GIE PEI
T0IE INT RBI T0IF INT RBIF NOMBRE DE
ON
E
E
E
F
BIT
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Tabla 9 Registro INT

R/W bit de lectura/escritura


(0) Despus del reinicio, el bit se pone a cero
(x) Despus del reinicio, el estado de bit es desconocido
Interrupciones PIC16F887
INTERRUPCIN
GIE - Global Interrupt Enable bit

PEIE - Perip=heral Interrupt Enable


bit

DESCRIPCIN
Bit de habilitacin de interrupciones
globales
Controla simultneamente todas las fuentes
de interrupciones posibles.
1= Habilita las interrupciones no
enmascaradas.
0= Deshabilita las interrupciones no
enmascaradas.
Bit de habilitacin de interrupciones
perifricas
Es similar al bit GIE, sin embargo controla
interrupciones habilitadas por los
perifricos. Eso significa que no influye en
interrupciones causadas por el
33

temporizador Timer0 o por el cambio del


estado en el puerto PORTB o por el cambio
en el pin RB0/INT.
1= Habilita las interrupciones perifricas
no enmascaradas.
0= Deshabilita las interrupciones
perifricas no enmascaradas.

T0IE - TMR0 Overflow Interrupt


Enable

INTE - RB0/INT External Interrupt


Enable bit

RBIE - RB Port Change Interrupt


Enable bit

T0IF - TMR0 Overflow Interrupt Flag


bit

Bit de habilitacin de interrupciones por el


desbordamiento del temporizador Timer0
controla interrupciones causadas por el
desbordamiento del Timer0.
1= Habilita interrupciones por Timer0.
0= Deshabilita interrupciones por Timer0.
Bit de habilitacin de la interrupcin
externa en RB0
Controla interrupciones causadas por el
cambio del estado lgico en el pin de
entrada RB0/INT (interrupcin externa).
1= Habilita interrupciones externas INT.
0= Deshabilita interrupciones externas INT.
Bit de habilitacin de interrupciones por
cambios en el puerto PORTB.
Cuando se configuran como entradas, los
pines en el puerto PORTB pueden causar
una interrupcin al cambiar el estado lgico
(no importa si se produce bajada o subida
de tensin, lo que importa es que se
produce un cambio). Este bit determina si
una interrupcin va a ocurrir.
1= Habilita interrupciones por cambio en el
puerto PORTB.
0= Deshabilita interrupciones por cambio
en el puerto PORTB.
Bit de bandera de interrupcin por el
desbordamiento del Timer0
Detecta el desbordamiento en el registro
del temporizador Timer0, o sea el contador
se pone a cero.
1= En el registro del Timer0 ha ocurrido
desbordamiento (esta bandera debe
volverse a 0 por software).
34

0= En el registro del Timer0 no ha ocurrido


desbordamiento.

INTF - RB0/INT External Interrupt


Flag bit

RBIF - RB Port Change Interrupt Flag


bit

Bit de bandera de interrupcin externa en


INT. Detecta el cambio en el estado lgico
en el pin INT.
1= Ha ocurrido una interrupcin externa
por INT (esta bandera debe volverse a 0
por software)
0= No ha ocurrido una interrupcin externa
por INT.
Bit de bandera de interrupcin por cambio
en el puerto RB
Detecta cualquier cambio del estado lgico
de alguno de los pines de entrada en el
puerto PORTB.
1= Al menos uno de los pines de E/S de
propsito general en el puerto PORTB ha
cambiado de valor. Despus de leer el
puerto PORTB, el bit RBIF debe volverse a
0 por software.
0= Ninguno de los pines de E/S de
propsito general en el puerto PORTB ha
cambiado de valor.

Tabla 10 Interrupciones PIC16F887

Registro PIE1
El registro PIE1 contiene los bits de habilitacin de interrupciones perifricas.
R/W(
0)
ADIE

PIE 1
Bi Bit 6
t
7

R/W(
0)
RCIE

R/W(
0)
TXIE

Bit 5

Bit 4

R/W(
0)
SSPI
E
Bit 3

R/W(
0)
CCP1
IE
Bit 2

R/W(0
)
TMR2
IE
Bit 1

R/W(0
)
TMR1
IE
Bit 0

Caractersti
cas
Nombre de
bit

Tabla 11 Registro

Bit no implementado
R/W Bit de lectura/escritura
35

(0) Despus del reinicio, el bit se pone a cero


INTERRUPCIONES

DESCRIPCIN

ADIE - A/D Converter Interrupt


Enable bit

Bit de habilitacin de interrupciones del


convertidor A/D.
1 - Habilita la interrupcin ADC.
0 - Deshabilita la interrupcin ADC.

RCIE - EUSART Receive Interrupt


Enable bit

Bit de habilitacin de interrupciones de


recepcin del EUSART.
1 - Habilita la interrupcin de recepcin
del EUSART.
0 - Deshabilita la interrupcin de
recepcin del EUSART.

TXIE - EUSART Transmit Interrupt


Enable bit

TMR2IE - TMR2 to PR2 Match


Interrupt Enable bit

TMR1IE - TMR1 Overflow Interrupt


Enable bit

CCP1IE - CCP1 Interrupt Enable bit

Bit de habilitacin de interrupciones de


transmisin del EUSART.
1 - Habilita la interrupcin de transmisin
del EUSART.
0 - Deshabilita la interrupcin de
transmisin del EUSART.
Bit de habilitacin de la interrupcin de
igualdad entre TMR2 y PR2.
1 - Habilita la interrupcin de igualdad
entre TMR2 y PR2.
0 - Deshabilita la interrupcin de igualdad
entre TMR2 y PR2.
Bit de habilitacin de la interrupcin de
desbordamiento del temporizador Timer1
Habilita generar una peticin de
interrupcin despus de cada
desbordamiento en el registro del
temporizador Timer1, o sea el contador se
pone a cero.
1 - Habilita la interrupcin de
desbordamiento del temporizador Timer1.
0 - Deshabilita la interrupcin de
desbordamiento del temporizador Timer1.
Bit de habilitacin de la interrupcin del
mdulo 1 de Comparacin/Captura/PWM
36

- CCP1
Permite generar una peticin de
interrupcin en el mdulo CCP1 utilizado
para procesamiento de la seal PWM.
1 - Habilita la interrupcin CCP1.
0 - Deshabilita la interrupcin CCP1.
Bit de habilitacin de la interrupcin del
puerto serie sncrono maestro (MSSP)
Habilita generar una peticin de
interrupcin despus de cada transmisin
de datos por el mdulo de comunicacin
serie sncrona (modo SPI o I2C).
1 - Habilita la interrupcin del MSSP.
0 - Deshabilita la interrupcin del MSSP.

SSPIE - Master Synchronous Serial


Port (MSSP) Interrupt Enable bit

Tabla 12 Interrupciones PIC16F887

Registro PIE2:
El registro PIE2 tambin contiene varios bits de habilitacin de interrupciones.

PI
E2

R/W(
0)
OSFI
E
Bit7

R/W(
0)
C2IE

R/W(
0)
C1IE

R/W(
0)
EEIE

Bit6

Bit5

Bit4

R/W(
0)
BCLI
E
Bit3

R/W(0)
ULPW
UIE
Bit2

Bit
1

CCP2
IE
Bit0

Caracterst
icas
Nombre de
Bit

Tabla 13 Registro

Tabla 11. Interrupciones PIC18F4550


Interrupciones PIC16F887 y 18F4550
INTERRUPCION
PARAMETROS
INTCON
(registro de control de
interrupcin)

16f887
INTCON
18F4550
INTCON, INTCON2,
INTCON3

GIE Global Interrupt


Enable bit (bit de
habilitacin de

Interrupcin externa
1 - Interrupciones
habilitadas a nivel

FUNCION
El registro INTCON
contiene varios bits de
habilitacin y de bandera
para el desbordamiento en
el registro TMR0, e
interrupciones por el cambio
del estado en el puerto
PORTB y las interrupciones
externas en el pin INT
Controla simultneamente
todas las fuentes de
interrupciones posibles.
37

interrupciones globales)
GIEH(Interrupciones de alta
prioridad)
PEIE
Peripheral Interrupt Enable
bit (bit de habilitacin de
interrupciones perifricas)
GIEL (Interrupciones de
baja prioridad)

global
0 - Interrupciones
deshabilitadas a nivel
global.
Interrupcin externa
1 - Interrupciones de
perifricos
deshabilitadas a nivel
global
0 - Interrupciones de
perifricos habilitadas a
nivel global.

Es similar al bit GIE, sin


embargo controla
interrupciones habilitadas
por los perifricos. No
influye interrupciones
causadas por el
temporizador Timer0 o por
el cambio del estado en el
puerto PORTB o por el
cambio en el pin RB0/INT.
Controla interrupciones
causadas por el
desbordamiento del Timer0

T0IE - TMR0IE
TMR0 Overflow Interrupt
Enable bit (bit de
habilitacin de
interrupciones por el
desbordamiento del
temporizador Timer0)

Interrupcin externa
1 - Habilita
interrupciones por
Timer0.
0 - Deshabilita
interrupciones por
Timer0.

INTE
External Interrupt Enable
bit (bit de habilitacin de la
interrupcin externa)

Interrupcin externa
1 - Habilita
interrupciones externas
INT.
0 - Deshabilita
interrupciones externas
INT.

Controla interrupciones
causadas por el cambio del
estado lgico en el pin de
entrada RB0/INT en el caso
del 16F887, en el caso del
18F4550 los pines de
entrada con BR0, RB1, RB2

RBIE
RB Port Change Interrupt
Enable bit (bit de
habilitacin de
interrupciones por cambios
en el puerto PORTB)

Interrupcin externa
1 - Habilita
interrupciones por
cambio en el puerto
PORTB.
0 - Deshabilita
interrupciones por
cambio en el puerto
PORTB.

Cuando se configuran como


entradas, los pines en el
puerto PORTB pueden
causar una interrupcin al
cambiar el estado lgico.
Este bit determina si una
interrupcin va a ocurrir.

TMR0 Overflow Interrupt


Flag bit (bit de bandera de
interrupcin por el desbor
damiento del Timer0)

1 - En el registro del
Timer0 ha ocurrido
desbordamiento (esta
bandera debe volverse

Detecta el desbordamiento
en el registro del
temporizador Timer0, es
decir el contador se pone a
38

a 0 por software).
0 - En el registro del
Timer0 no ha ocurrido
desbordamiento.

cero.

INTF- INT0IF
External Interrupt Flag
bit (bit de bandera de
interrupcin externa en INT)

Interrupcin externa
1 - Ha ocurrido una
interrupcin externa
por INT (esta bandera
debe volverse a 0 por
software)
0 - No ha ocurrido una
interrupcin externa
por INT.

Detecta el cambio en el
estado lgico en el o los
pines INT

RBIF
RB Port Change Interrupt
Flag bit (Flag de la
interrupcin por cambio en
el Puerto B)

1 - Al menos uno de los


pines de E/S de
propsito general en el
puerto B ha cambiado
de valor. (Despus de
leer el puerto B, el bit
RBIF debe volverse a 0
por software).
0 - Ninguno de los
pines de E/S de
propsito general en el
puerto B ha cambiado
de valor.

Detecta cualquier cambio


del estado lgico de alguno
de los pines de entrada en el
puerto PORTB.

ADIE
A/D Converter Interrupt
Enable bit (bit de
habilitacin de
interrupciones del
convertidor A/D)
RCIE
EUSART Receive Interrupt
Enable bit (bit de
habilitacin de
interrupciones de recepcin
del EUSART)

1 - Habilita la
interrupcin ADC.
0 - Deshabilita la
interrupcin ADC.

Habilita las interrupciones


del convertido A/D

1 - Habilita la
interrupcin de
recepcin del
EUSART.
0 - Deshabilita la
interrupcin de
recepcin del
EUSART.

Habilita las interrupciones


de recepcin sncrona
EUSART

39

TXIE
EUSART Transmit Interrupt
Enable bit (bit de
habilitacin de
interrupciones de
transmisin del EUSART)

1 - Habilita la
interrupcin de
transmisin del
EUSART.
0 - Deshabilita la
interrupcin de
transmisin del
EUSART.

Habilita las interrupciones


de transmisin sncrona
EUSART

SSPIE
Master Synchronous Serial
Port (MSSP) Interrupt
Enable bit (bit de
habilitacin de la
interrupcin del puerto serie
sncrono maestro (MSSP)
CCP1IE
CCP1 Interrupt Enable
bit (bit de habilitacin de la
interrupcin del mdulo 1 de
Comparacin/Captura/PW
M - CCP1)
TMR2IE
TMR2 to PR2 Match
Interrupt Enable bit (bit de
habilitacin de la
interrupcin de igualdad
entre TMR2 y PR2)

1 - Habilita la
interrupcin del MSSP.
0 - Deshabilita la
interrupcin del MSSP.

Habilita generar una


peticin de interrupcin
despus de cada transmisin
de datos por el mdulo de
comunicacin serie sncrona
(modo SPI o I2C).

1 - Habilita la
interrupcin CCP1.
0 - Deshabilita la
interrupcin CCP1.

Permite generar una


peticin de interrupcin en
el mdulo CCP1 utilizado
para procesamiento de la
seal PWM.

1 - Habilita la
interrupcin de
igualdad entre TMR2 y
PR2.
0 - Deshabilita la
interrupcin de
igualdad entre TMR2 y
PR2.

Habilita una interrupcin si


TMR2 y PR2 son iguales

TMR1IE
TMR1 Overflow Interrupt
Enable bit (bit de
habilitacin de la
interrupcin de
desbordamiento del
temporizador Timer1)

1 - Habilita la
interrupcin de
desbordamiento del
temporizador Timer1.
0 - Deshabilita la
interrupcin de
desbordamiento del
temporizador Timer1.

Habilita generar una


peticin de interrupcin
despus de cada
desbordamiento en el
registro del temporizador
Timer1, es decir el contador
se pone a cero.

Oscillator Fail Interrupt


Enable bit (bit de
habilitacin de la
interrupcin de fallo en el

1 - Habilita la
interrupcin de fallo en
el oscilador.
0 - Deshabilita la

Habilita la interrupcin si se
produce algn tipo de fallo
en el oscilador

40

oscilador)

interrupcin de fallo en
el oscilador.

EEIE
EEPROM Write Operation
Interrupt Enable bit (bit de
habilitacin de la
interrupcin de escritura en
la memoria EEPROM)

1 - Habilita la
interrupcin de
escritura en la memoria
EEPROM.
0 - Deshabilita la
interrupcin de
escritura en la memoria
EEPROM.

BCLIE
Bus Collision Interrupt
Enable bit (bit de
habilitacin de la
interrupcin de colisin de
bus)

1 - Habilita la
Habilita la interrupcin si se
interrupcin de colisin produce una colisin en el
de bus.
bus
0 - Deshabilita la
interrupcin de colisin
de bus.

CCP2IE
CCP2 Interrupt Enable bit
(bit de habilitacin de la
interrupcin del mdulo 2 de
Comparacin/Captura/PW
M (CCP2)
INTEDG
Interrupt Edge Select bit (bit
selector de flanco activo de la
interrupcin externa)

1 - Habilita la
interrupcin del CCP2.
0 - Deshabilita la
interrupcin del CCP2.

Habilita la interrupcin del


mdulo 2 de
Comparacin/Captura/PW
M

Interrupcin externa
1 - Interrupcin por
flanco ascendente
0 - Interrupcin por
flanco descendente
16f887
Una sola interrupcin
INTEDG
18F4550
Tres interrupciones:
INTEDG0, INTEDG1,
INTEDG2

Ejecuta interrupciones
externas en dependencia del
flanco activo que se
configure (subida o bajada)

Habilita las interrupciones


de escritura en la memoria
EEPROM

Tabla 14 PIC16F887 y 18F4550

41

Funciones para control DIO


CREACIN DE UN PROGRAMA USANDO PIC WIZARD
Garca Breijo Eduardo (2008, Pg. 46) Menciona que:
PIC Wizard: Es un comando que nos proporciona un asistente para la creacin
de proyectos, permitiendo al usuario especificar los parmetros del proyecto.
Genera los archivos .c, .h y .pjt.
Tras pedir el nombre del nuevo proyecto aparece una ventana con un submen
para configurar las distintas opciones que presenta y otro submen donde se
muestra el cdigo resultante de la configuracin. Recorriendo las distintas
opciones se llega a obtener el cdigo de configuracin deseado, tras lo cual ya
podemos empezar a escribir el resto del cdigo del programa. Debemos tener en
cuenta que se incluye un fichero de cabecera *.h

donde se encuentra la

configuracin del dispositivo. [ 1 ]


Para la creacin de un programa usando PIC Wizard debemos seguir los siguientes
pasos:
1. En la barra de mens seleccionamos Project.

Figura 13Menu de Project Fuente: PCW

2. En el submen de Project seleccionamos PIC Wizard.

Figura 14 Sub Men PIC WIZARD Fuente: PCW

3. Colocar un nombre al proyecto.


4. Seleccionar la carpeta donde guardaremos el proyecto.
5. Finalmente cuando aparezca la ventana del Asistente de CFP realizamos las
configuraciones necesarias.

42

Figura 15 Ventana de opciones de configuracin Fuente: PCW

La lista en el lado izquierdo muestra todos los mdulos y otras caractersticas

que se pueden modificar para el proyecto actual.


La pestaa Opciones en el lado derecho de la ventana muestra los ajustes que se

pueden modificar para el mdulo seleccionado.


La ficha Cdigo mostrar el cdigo generado a partir de la configuracin del
mdulo actual.

43

EJERCICIO 1
1.1. Tema:
SECUENCIA DE LEDS_MODIFICADO
1.2. Objetivo :
Realizar una el desplazamiento de leds mediante la programacin en MPLAB
utilizando la programacin en lenguaje C.
1.3. Descripcin :
Modificar el ejercicio 1 utilizando en este caso todos los pines del puerto C y
realizar la secuenciad de leds 00 (apagado), 01(Secuencia derecha), 10(secuencia
Izquierda), y con 11 a diferencia del ejercicio anterior realizar el (barrido de leds
Derecha-Izquierda) utilizando el software MPLAB IDE X.
1.4. Materiales y equipos:
DESPLAZAMIENTO DE LEDS
Microcontrolador PIC16F887.
8 diodos Leds.
8 resistencias de 220 ohmios.
Cables.
Fuente de 5V DC.
Quemador de PIC
Software MPLAB IDE X
Software PICkit 2
1.5. Diagramas y esquemas:

Figura 16 Esquema de Ejercicio propuesto # 1

1.6. Cdigo comentado:


; PIC16F887 Configuration Bit Settings
LIST P=16F887
#include "p16F887.inc"

; CONFIG1
; __config 0xE0D2

44

__CONFIG
_CONFIG1,
_FOSC_HS
_WDTE_ON & _PWRTE_OFF & _MCLRE_OFF
_CP_OFF & _CPD_OFF & _BOREN_OFF
_IESO_OFF & _FCMEN_OFF & _LVP_OFF
; CONFIG2
; __config 0xFFFF
__CONFIG _CONFIG2, _BOR4V_BOR40V
_WRT_OFF

&
&
&

&

CNT1 EQU 0X20 ; asigna la variable cont1


CNT2 EQU 0X21
CNT3 EQU 0X22
AUX1 EQU 0X23
AUX2 EQU 0X24
ORG 0
GOTO CONFIGURACION ; salta a la
configuracin
ORG 5
DELAY1
MOVLW 0x01
MOVWF CNT1
DELAY2
MOVLW 0xFF
MOVWF CNT2
DELAY3
MOVLW 0XFF
MOVWF CNT3
START
DECFSZ CNT3
GOTO START
DECFSZ CNT2
GOTO DELAY3
DECFSZ CNT1
GOTO DELAY2
RETURN

; crea la variable delay


;carga en W el valor de 1
;mueve cont1 a W

CONFIGURACION
BSF STATUS, RP0
MOVLW B'00000000'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISC
MOVLW B'00000000'
MOVWF TRISD
MOVLW B'11111111'
MOVWF TRISE
MOVLW B'110'
MOVWF OSCCON
BSF STATUS, RP1
CLRF ANSEL
CLRF ANSELH
BCF STATUS, RP0
BCF STATUS, RP1
CLRF PORTA
CLRF PORTB

CLRF PORTC
CLRF PORTD
CLRF PORTE
CLRF AUX1
CLRF AUX2
MOVLW 0X00
INICIO BTFSC PORTE,0
CALL REV1
BTFSC PORTE,1
CALL ARRIBA
CALL APAGADO
GOTO INICIO
REV1
BTFSC PORTE,1
CALL CENTRO
CALL ABAJO
GOTO INICIO
ARRIBA
MOVLW B'00000001'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000010'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000100'
MOVWF TRISC
CALL DELAY1
MOVLW B'00001000'
MOVWF TRISC
CALL DELAY1
MOVLW B'00010000'
MOVWF TRISC
CALL DELAY1
MOVLW B'00100000'
MOVWF TRISC
CALL DELAY1
MOVLW B'01000000'
MOVWF TRISC
CALL DELAY1
MOVLW B'10000000'
MOVWF TRISC
CALL DELAY1
GOTO INICIO
ABAJO
MOVLW B'10000000'
MOVWF TRISC
CALL DELAY1
MOVLW B'01000000'
MOVWF TRISC
CALL DELAY1
MOVLW B'00100000'
MOVWF TRISC
CALL DELAY1
MOVLW B'00010000'
MOVWF TRISC

45

CALL DELAY1
MOVLW B'00001000'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000100'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000010'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000001'
MOVWF TRISC
CALL DELAY1
GOTO INICIO
CENTRO
MOVLW B'00000001'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000011'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00001111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00011111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00111111'
MOVWF TRISC
CALL DELAY1
MOVLW B'01111111'
MOVWF TRISC
CALL DELAY1

CALL DELAY1
MOVLW B'11111111' ; fin de encendido todos
los leds
MOVWF TRISC
CALL DELAY1
MOVLW B'01111111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00111111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00011111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00001111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000011'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000001'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000000'
MOVWF TRISC
CALL DELAY1
GOTO INICIO
APAGADO
MOVLW B'00000000'
MOVWF TRISC
GOTO INICIO
END

1.7. Resultado:
Se demostr la configuracin de bsica en lenguaje ensamblador para la secuencia de
leds con programacin el lenguaje en C y la utilizacin de los bloque de Trisc.

46

EJERCICIO 2
1.1. Tema:
Mod16 NBCD_ Modificado
1.2. Objetivo :
Realizar el ejercicio 2 con las mismas condiciones anteriores pero usar el Projet
Wizard de PIC C Compiler (CCS).
1.3. Descripcin :
El presente programa nos permite tener el manejo del control digital de entradas y
salidas en el cual realizamos la aplicacin de un Mod16 NBCD, para el cual
realizamos nuestro cdigo en lenguaje C y despus lo implementaremos
fsicamente, cargaremos nuestro cdigo hexadecimal al microcontrolador PIC
16F887 mediante el PICkit 2 y lo implementaremos de acuerdo al diagrama de
Proteus.
1.4. Materiales y equipos:
Mod16 NBCD
Microcontrolador PIC16F887.
Display 7 segmentos.
Dip_switch
4 resistencias de 220 ohmios.
Cables.
Fuente de 5V DC.
Quemador de PIC
Software MPLAB IDE X
Software PICkit 2
1.5. Diagramas y esquemas:

Figura 17 Esquema de Ejercicio propuesto # 2

1.6. Cdigo comentado:


#include <Mod16_NBCD_sin_Decoder.h> //directiva cuando se usa el Projetc Wizard
void main() //Programa Principal
{

47

while (true) //Bucle infinito


{
if(input(Pin_B0)==0 && input(Pin_B1)==0 && input(Pin_B2)==0 && input(Pin_B3)==0) //Deciciones para
imprimir el numero asignado CERO
{ output_C(0x3f); }
if(input(Pin_B0)==1 && input(Pin_B1)==0 && input(Pin_B2)==0 && input(Pin_B3)==0) //uno
{
output_C(0x06);
}
if(input(Pin_B0)==0 && input(Pin_B1)==1 && input(Pin_B2)==0 && input(Pin_B3)==0) //dos
{
output_C(0x5b);
}
if(input(Pin_B0)==1 && input(Pin_B1)==1 && input(Pin_B2)==0 && input(Pin_B3)==0) //tres
{
output_C(0x4f);
}
if(input(Pin_B0)==0 && input(Pin_B1)==0 && input(Pin_B2)==1 && input(Pin_B3)==0) //cuatro
{
output_C(0x66);
}
if(input(Pin_B0)==1 && input(Pin_B1)==0 && input(Pin_B2)==1 && input(Pin_B3)==0) //cinco
{
output_C(0x6d);
}
if(input(Pin_B0)==0 && input(Pin_B1)==1 && input(Pin_B2)==1 && input(Pin_B3)==0) //seis
{
output_C(0x7d);
}
if(input(Pin_B0)==1 && input(Pin_B1)==1 && input(Pin_B2)==1 && input(Pin_B3)==0) //siete
{
output_C(0x07);
}
if(input(Pin_B0)==0 && input(Pin_B1)==0 && input(Pin_B2)==0 && input(Pin_B3)==1) //ocho
{
output_C(0x7f);
}
if(input(Pin_B0)==1 && input(Pin_B1)==0 && input(Pin_B2)==0 && input(Pin_B3)==1) //nueve
{
output_C(0x6f);
}
if(input(Pin_B0)==0 && input(Pin_B1)==1 && input(Pin_B2)==0 && input(Pin_B3)==1) //diez
{
output_C(0x80);
}
if(input(Pin_B0)==1 && input(Pin_B1)==1 && input(Pin_B2)==0 && input(Pin_B3)==1)
//once
{
output_C(0x80);
}
if(input(Pin_B0)==0 && input(Pin_B1)==0 && input(Pin_B2)==1 && input(Pin_B3)==1) //doce
{
output_C(0x80);
}
if(input(Pin_B0)==1 && input(Pin_B1)==0 && input(Pin_B2)==1 && input(Pin_B3)==1) //trece
{
output_C(0x80);
}

48

if(input(Pin_B0)==0 && input(Pin_B1)==1 && input(Pin_B2)==1 && input(Pin_B3)==1) //14


{
output_C(0x80);
}
if(input(Pin_B0)==1 && input(Pin_B1)==1 && input(Pin_B2)==1 && input(Pin_B3)==1) //15
{
output_C(0x80);
}
}
}

1.7. Resultado:
La programacin de una Mod16 NBCD se la realizo sin niguna dificultad aplicando
cdigos ya conocidos y se demostr la configuracin de bsica en MPLAB para la su
control con programacin el lenguaje en C y la utilizacin de los retardos y bloque
trisc.

EJERCICIO PROPUESTO
1.- Modificar el ejercicio 1 utilizando en este caso todos los pines del puerto C y realizar
la secuenciad de leds 00 (apagado), 01(Secuencia derecha), 10(secuencia Izquierda), y
con 11 a diferencia del ejercicio anterior realizar el (barrido de leds Derecha-Izquierda)
utilizando el software MPLAB IDE X.
2.- Realizar el ejercicio 2 con las mismas condiciones anteriores pero usar el Project
Wizard de PIC C Compiler (CCS).

49

CREACIN DE UN PROGRAMA USANDO SOURCE FILE


Garca Breijo Eduardo (2008, Pg. 45) Menciona que:
Source File: Es un comando que nos proporciona un asistente para la creacin de
proyectos sin definir las condiciones iniciales, ya que se presenta un archivo en blanco.
Genera los mismos archivos que Pic Wizard la nica diferencia es que con esta forma
creamos el cdigo desde cero.
Con la opcin NEW

SOURCE FILE, el programa pide el nombre del nuevo

fichero y crea una nueva ventana en blanco donde podemos empezar a escribir. [ 2 ]
Para la creacin de un programa usando SOURCE FILE debemos seguir los siguientes
pasos:
1.
2.
3.
4.

En la barra de mens seleccionamos New Source File


Colocar un nombre al proyecto.
Seleccionar la carpeta donde guardaremos el proyecto.
Finalmente aparecer una ventana en la que empezamos a escribir el programa
desde cero.

Figura 18 Ventana de creacin de programa desde cero Fuente: PCW

Cnovas Lpez Andrs (2003, Pg. 23) Menciona que:


USE DELAY (Clock = frecuencia): Esta directiva indica al compilador la
frecuencia del procesador, en ciclos por segundo, a la vez que habilita el uso de
las funciones DELAY_MS() y DELAY_US().
Opcionalmente podemos usar la funcin restart_WDT() para que el compilador
reinicie el WDT durante el retardo.
Ejemplos:

#use delay (clock=20000000)


#use delay (clock=32000, RESTART_WDT)
50

USE FAST_IO (puerto): Esta directiva afecta al cdigo que el compilador


generar para las instrucciones de entrada y salida. Este mtodo rpido de hacer
I/O ocasiona que el compilador realice I/O sin programar el registro de
direccin. El puerto puede ser A-G.
Ejemplo:

#use fast_io(A) [ 3 ]

FUNCIONES DE I/O DISCRETA


Cnovas Lpez Andrs (2003, Pg. 31 32) Menciona que:
Dentro de la funcin output tenemos ciertas variantes que son:
OUTPUT_BIT(pin, value): Esta funcin saca el bit dado en value(0 o 1) por la
patilla de I/O especificada en pin. El modo de establecer la direccin del
registro, est determinada por la ltima directiva #USE *_IO.
Ejemplo:

output_bit( PIN_B0,input( PIN_B1 ) ); //pone B0 igual que B1


output_bit( PIN_B0, shift_left(&data, 1, input(PIN_B1)));
//saca por B0 el MSB de 'data' y al mismo tiempo
//desplaza el nivel en B1 al LSB de data.

OUTPUT_FLOAT(pin): Esta funcin pone la patilla especificada como pin en


el modo de entrada. Esto permitir que la patilla est flotante para representar un
nivel alto en una conexin de tipo colector abierto.
Ejemplo:
if( (dato & 0x80)==0 )

//comprobamos si es '1' el MSB

output_low(pin_A0);

//si es '1' ponemos a cero el pin A0

else
output_float(pin_A0);

// de lo contrario, ponemos el pin A0 a uno.

OUTPUT_HIGH(pin): Pone a 'uno' el pin indicado. El mtodo de acceso de


I/O depende de la ltima directiva #USE *_IO utilizada.
Ejemplo:

output_high(PIN_A0);

OUTPUT_LOW(pin): Pone a 'cero' el pin indicado. El mtodo de acceso de


I/O depende de la ltima directiva #USE *_IO.
51

Ejemplo:

output_low(PIN_A0);

SET_TRIS_port(value): Estas funciones permiten escribir directamente los


registros tri-estado para la configuracin de los puertos.
Esto debe usarse con FAST_IO() y cuando se accede a los puertos de I/O como
si fueran memoria, igual que cuando se utiliza una directiva #BYTE. Cada bit de
value representa una patilla. Un '1' indica que la patilla es de entrada y un '0' que
es de salida.
Ejemplo:

SET_TRIS_B( 0x0F ); //pone B0, B1, B2 y B3 como entradas; B4, B5,


B6 y B7 // como salidas [ 4 ]

FUNCIONES DE RETARDO
Cnovas Lpez Andrs (2003, Pg. 33) Menciona que:
Dentro de la funcin de retardo tenemos:
DELAY_CYCLES(count):Esta funcin realiza retardos segn el nmero de
ciclos de instruccin especificado en count; los valores posibles van desde 1 a
255. Un ciclo de instruccin es igual a cuatro periodos de reloj.
Ejemplo:

delay_cycles( 3 ); // retardo de 3ciclos instruccin; es igual que un


NOP

DELAY_MS(time): Esta funcin realiza retardos del valor especificado en time.


Dicho valor de tiempo es en milisegundos y el rango es 0-65535. Para obtener
retardos ms largos as como retardos 'variables' es preciso hacer llamadas a una
funcin separada; vase el ejemplo siguiente.
Es preciso utilizar la directiva #use delay(clock=frecuencia) antes de la llamada
a esta funcin, para que el compilador sepa la frecuencia de reloj.
Ejemplo:

#use delay (clock=4000000) // reloj de 4MHz

DELAY_US(time): Esta funcin realiza retardos del valor especificado en time.


Dicho valor es en microsegundos y el rango va desde 0 a 65535. Es necesario
52

utilizar la directiva #use delay antes de la llamada a esta funcin para que el
compilador sepa la frecuencia de reloj.
Ejemplo:

#use delay(clock=20000000) [ 5 ]

53

EJERCICIO 3
1.1. Tema:
Mod16 BCD
1.2. Objetivo :
Realizar el ejercicio 3 con las mismas condiciones anteriores utilizando el
Source File de PIC C Compiler (CCS) y analizar las diferencias entre MPLAB
IDE X vs CCS
1.3. Descripcin :
El presente programa nos permite tener el manejo del control digital de entradas y
salidas en el cual realizamos la aplicacin de un Mod16 BCD, para el cual
realizamos nuestro cdigo en lenguaje assembler en el software MPLAB de
Microchip lo simularemos en Proteus y que despus lo implementaremos
fsicamente, cargaremos nuestro cdigo hexadecimal al microcontrolador PIC
16F887 mediante el PICkit 2 y lo implementaremos de acuerdo al diagrama de
Proteus.
1.4. Materiales y equipos:
Mod16 BCD
Microcontrolador PIC16F887.
Display 7 segmentos.
Dip_switch
4 resistencias de 220 ohmios.
Decoder 74ls47
Cables.
Fuente de 5V DC.
Quemador de PIC
Software MPLAB IDE X
Software PICkit 2
1.5. Diagramas y esquemas:

Figura 19 Esquema de Ejercicio propuesto # 3

1.6. Cdigo comentado:


54

#include <16f887.h> // incluye la libreria del PIC


#fuses XT, NOWDT, NOPROTECT // configura los Fusibles de forma manual
#use delay(clock = 4M) //Delay de 4M
#use standard_io(B)
#use standard_io(C)
void main() //Programa Principal
{
while (true)
{
if(input(Pin_B0)==0 && input(Pin_B1)==0 && input(Pin_B2)==0 && input(Pin_B3)==0) //cero
{ output_C(0); }
if(input(Pin_B0)==1 && input(Pin_B1)==0 && input(Pin_B2)==0 && input(Pin_B3)==0) //uno
{ output_C(1); }
if(input(Pin_B0)==0 && input(Pin_B1)==1 && input(Pin_B2)==0 && input(Pin_B3)==0) //dos
{ output_C(2); }
if(input(Pin_B0)==1 && input(Pin_B1)==1 && input(Pin_B2)==0 && input(Pin_B3)==0) //tres
{ output_C(3); }
if(input(Pin_B0)==0 && input(Pin_B1)==0 && input(Pin_B2)==1 && input(Pin_B3)==0) //cuatro
{ output_C(4); }
if(input(Pin_B0)==1 && input(Pin_B1)==0 && input(Pin_B2)==1 && input(Pin_B3)==0) //cinco
{ output_C(5); }
if(input(Pin_B0)==0 && input(Pin_B1)==1 && input(Pin_B2)==1 && input(Pin_B3)==0) //seis
{ output_C(6); }
if(input(Pin_B0)==1 && input(Pin_B1)==1 && input(Pin_B2)==1 && input(Pin_B3)==0) //siete
{ output_C(7); }
if(input(Pin_B0)==0 && input(Pin_B1)==0 && input(Pin_B2)==0 && input(Pin_B3)==1) //ocho
{ output_C(8); }
if(input(Pin_B0)==1 && input(Pin_B1)==0 && input(Pin_B2)==0 && input(Pin_B3)==1) //nueve
{ output_C(9); }
if(input(Pin_B0)==0 && input(Pin_B1)==1 && input(Pin_B2)==0 && input(Pin_B3)==1) //diez
{ output_C(10); }
if(input(Pin_B0)==1 && input(Pin_B1)==1 && input(Pin_B2)==0 && input(Pin_B3)==1) //once
{ output_C(11); }
if(input(Pin_B0)==0 && input(Pin_B1)==0 && input(Pin_B2)==1 && input(Pin_B3)==1) //doce
{ output_C(12); }
if(input(Pin_B0)==1 && input(Pin_B1)==0 && input(Pin_B2)==1 && input(Pin_B3)==1) //trece
{ output_C(13); }
if(input(Pin_B0)==0 && input(Pin_B1)==1 && input(Pin_B2)==1 && input(Pin_B3)==1) //14
{ output_C(14); }
if(input(Pin_B0)==1 && input(Pin_B1)==1 && input(Pin_B2)==1 && input(Pin_B3)==1) //15
{ output_C(15); }
}
}

1.7. Resultado:
La programacin de una Mod16 BCD se la realizo sin ninguna dificultad aplicando
cdigos ya conocidos y se demostr la configuracin de bsica en MPLAB para la su
control con programacin el lenguaje en C con la ayuda de la visualizacin de un
decoder, la utilizacin de los retardos y bloque trisc..
EJERCICIO PROPUESTO
3.- Realizar el ejercicio 3 con las mismas condiciones anteriores utilizando el Source
File de PIC C Compiler (CCS) y analizar las diferencias entre MPLAB IDE X vs CCS

55

4.- Realizar el ejemplo 4 modificando las funciones bsicas de DIO, reemplazar


Standard

56

FUNCIONES PARA CONTROL

El compilador CCS contiene ms de 307 funciones integradas que simplifiquen el


acceso al hardware, mientras que la produccin eficiente y altamente optimizado
cdigo. [1]
Se incluyen funciones de hardware del dispositivo de caractersticas tales como:
Temporizadores y mdulos PWM
Convertidores A / D
Datos on-chip EEPROM
LCD controladores
Memoria externa buses
PIC16F887.
Es un Microchip que dispone de todos los componentes disponibles en la mayora de los
microcontroladores modernos. Por su bajo precio, un rango amplio de aplicaciones, alta
calidad y disponibilidad, es una solucin perfecta aplicarlo para controlar diferentes
procesos en la industria, en dispositivos de control de mquinas, para medir variables de
procesos etc. Algunas de sus caractersticas principales se enumeran a continuacin.
Entre las caractersticas bsicas del PIC16F887.
TECLADO MATRICIAL.

Figura 20 PIC 16F887

Figura 21 Pines 16F887


Fuente:https://es.wikiversity.org/wiki/Estructura_del_microcontrolador

57

Figura 22 Teclado Matricial Fuente:


dinastiatecnologica.com

Un teclado matricial es un simple arreglo de botones conectados en filas y columnas, de


modo que se pueden leer varios botones con el mnimo nmero de pines requeridos. Un
teclado matricial 4x4 solamente ocupa 4 lneas de un puerto para las filas y otras 4
lneas para las columnas, de este modo se pueden leer 16 teclas utilizando solamente 8
lneas de un microcontrolador.
Si asumimos que todas las columnas y filas inicialmente estn en alto (1 lgico), la
pulsacin de un botn se puede detectar al poner cada fila a en bajo (0 lgico) y checar
cada columna en busca de un cero, si ninguna columna est en bajo entonces el 0 de las
filas se recorre hacia la siguiente y as secuencialmente.
PANTALLA LCD.

Figura 23 Pantalla LCD Fuente:


dinastiatecnologica.com

Una pantalla de cristal lquido o LCD (sigla del ingls liquid crystal display) es una
pantalla delgada y plana formada por un nmero de pxeles en color o monocromos
colocados delante de una fuente de luz o reflectora. A menudo se utiliza en dispositivos
electrnicos de pilas, ya que utiliza cantidades muy pequeas de energa elctrica. Cada
pxel de un LCD tpicamente consiste de una capa de molculas alineadas entre dos
electrodos transparentes, y dos filtros de polarizacin, los ejes de transmisin de cada
uno que estn (en la mayora de los casos) perpendiculares entre s.
MOTOR DC
Un motor CD consiste en un estator, una armadura, un rotor y un colector con
escobillas. La polaridad opuesta entre dos campos magnticos dentro del motor hace
que gire. Los motores CD son el tipo ms simple de motor y se utilizan en
electrodomsticos, como las mquinas de afeitar elctricas, y en ventanas elctricas de
automviles.

58

Figura 24 Motor DC Fuente: dinastiatecnologica.com

Tipos de motores DC
Las bobinas y la armadura en un motor derivado estn conectadas en paralelo,
conocidas como derivacin, causando que la corriente de campo sea proporcional a la
carga del motor
MOTOR A PASOS
Los motores paso a paso operan de manera diferente a otros motores DC, que slo giran
cuando se aplica el voltaje. Un motor paso a paso giratorio es un dispositivo
electromecnico que puede dividir una rotacin completa (360) en un gran nmero de
pasos rotacionales. Los motores paso a paso se controlan electrnicamente y no
necesitan costosos dispositivos de retroalimentacin.
Voltaje:
Los motores paso a paso tienen una tensin elctrica de trabajo. Este valor viene
impreso en su carcasa o por lo menos se especifica en su hoja de datos.
Grados por paso:
Una operacin de medio-paso o semi-paso (half step) del motor duplicar la cantidad de
pasos por revolucin al reducir la cantidad de grados por paso. Las cantidades ms
comunes de grados por paso son: 0,72, 1,8, 3,6, 7,5, 15 y hasta 90. [2]

Figura 25 Motor a pasos Fuente: Estructuras Motores Wikipedia

PUENTE H
Un Puente H o Puente en H es un circuito electrnico que permite a un motor elctrico
DC girar en ambos sentidos, avance y retroceso. Son ampliamente usados en robtica y
como convertidores de potencia. Los puentes H estn disponibles como circuitos
integrados, pero tambin pueden construirse a partir de componentes discretos

59

El puente H se usa para invertir el giro de un motor, pero tambin puede usarse para
frenarlo (de manera brusca), al hacer un corto entre las bornas del motor, o incluso
puede usarse para permitir que el motor frene bajo su propia inercia, cuando
desconectamos el motor de la fuente que lo alimenta. [4]
Acciones del puente H:
S1
1
0
0
1

S2
0
1
0
0

S3
0
1
0
1

S4
1
0
0
0

Resultado
El motor gira en avance
El motor gira en retroceso
El motor se detiene bajo su inercia
El motor frena (fast-stop)

Figura 26 Puente H Transistor Fuente:


roboticaenlasergio.wordpress.com

DIGITAL INPUT - OUTPUT (DIO)

Figura 27 Digital Input - Output Esquema de Ejercicio proteus Fuente: Simulacin 7mo A 2016

60

En el digrama tenemos 4 pines del puerto B y 4 del C que se han pogramado como
salidas para mostrar el resultado del proceso ademas de un switch activa las salidas del
puerto B prendiendo los diodos led y al mismo tiempo activa las salidas del puerto C del
decodificador del display de 7 segmentos que realizara una tarea segn la programacin
predeterminada.
Consideraciones:

Los dipswitch se conectan como entradas del microcontrolador y los LED como salidas
de un proceso.
Los resistencias conectadas a la fuente de alimentacin sirven para fijar un nivel en alto
cuando el dipswitch no est cerrando el circuito.
Se recomienda usar los puertos A (RA0 a RA7) para la conexin de dip switch.
Para encender los LED es recomendable utiliza un buffer, el cual tiene un conjunto de
transistores que invierten el pulso y amplifican la corriente.
Para manejar el display utilizamos un decodificador que se lo puede hacer internamente
con programacion en el pic o externamente usando un C.I. que variara dependiendo si
trabajremos con anodo o catodo comun.
TECLADO MATRICIAL Y PANTALLA LCD
Diagrama No.2: Teclado Matricial Pantalla LCD

Los teclados matriciales generalmente se los conecta al puerto B de manera que se

Figura 28 Teclado y Pantalla Esquema de Ejercicio


proteus Fuente: Simulacin 7mo A 2016

pueda aprovechar las resistencias pull up con las que cuenta este puerto que facilitan
una mejor conexin , mientras que las pantallas lcd se programan de tal manera que
puedan conectarse al puerto A y al puerto C respectivamente.
Consideraciones:
61

El trabajar con teclados organizados matricialmente se requiere el multiplexaje que se


define como una forma de compartir secuencialmente el tiempo para que dos o ms
seales se puedan transmitir a la vez por un mismo medio es decir el canal de

comunicacin .
Las lneas de entrada permanecen en un nivel lgico alto, gracias a los elementos pull-

up exclusivos del puerto B.


Para Tener una mejor eficiencia con los teclados se debe enviar por las lneas de salida

slo un cero a la vez.


El puerto B del microcontrolador se utiliza como bus de datos, y el puerto A se encarga

de generar las seales de control.


En los casos en que slo nos interesa escribir datos en la pantalla LCD, el pin de

seleccin de lectura/escritura (R/W) en el display, se conecta a tierra.


Para el mdulo LCD, se emplea un potencimetro de 5KOhm, conectado entre +5V y
tierra, para controlar el contraste de la pantalla.
MOTOR DC
U2(VSS)

U1
1

0
1

RE3/MCLR/VPP

RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RA0/AN0/ULPWU/C12IN0RC2/P1A/CCP1
RA1/AN1/C12IN1RC3/SCK/SCL
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
RA3/AN3/VREF+/C1IN+
RC5/SDO
RA4/T0CKI/C1OUT
RC6/TX/CK
RA5/AN4/SS/C2OUT
RC7/RX/DT
RA6/OSC2/CLKOUT
RA7/OSC1/CLKIN
RD0
RD1
RB0/AN12/INT
RD2
RB1/AN10/C12IN3RD3
RB2/AN8
RD4
RB3/AN9/PGM/C12IN2RD5/P1B
RB4/AN11
RD6/P1C
RB5/AN13/T1G
RD7/P1D
RB6/ICSPCLK
RB7/ICSPDAT
RE0/AN5
RE1/AN6
RE2/AN7

2
3
4
5
6
7
14
13
33
34
35
36
37
38
39
40

15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30

16
2
7
1
9
10
15

IN1
IN2
EN1

VSS

8
VS OUT1
OUT2

U2
3
6

+88.8
EN2
IN3
IN4

GND

OUT3
GND OUT4

11
14

kRPM

L293D

8
9
10

PIC16F887

Figura 29 Motor DC Fuente: Simulacin 7mo A 2016

El circuito consta de un PIC 16F887, el cual enciende un motor en DC con el bit de


entrada en el puerto A, sus salidas en el puerto C van conectadas al L293D el cual
incluye cuatro circuitos para manejar cargas de potencia media y con sus salidas 3 y 6 se
conecta el motor DC.

[1]

Consideraciones:

Para que el circuito tenga un buen funcionamiento se debe tener en cuenta la polaridad
del motor, debe tener en cuenta una resistencia limitadora de corriente y el voltaje de
62

operacin del microcontrolador a utilizar en este caso se utiliz un PIC 16F887,


debemos tener en cuenta la forma de conexin en los motores para realizarlo de una
forma segura, sabiendo que la frecuencia a la que trabaja el PIC es de 20MHz.
MOTOR A PASOS

Figura 30 Motor a Pasos Fuente: Simulacin 7mo A 2016

El circuito consta de un motor paso a paso el cual es controlado la velocidad mediante


un potencimetro de 1k que se encuentra conectado al puerto RA0 el cual es un puerto
general de entrada y salida
Donde el microcontrolador 16f887 se le conectan un driver a las salidas de
microcontrolador RC0, RC1, RC2, RC3 con los cuales permite un control PWM del
motor a pasos unipolar.
Consideraciones:
Para saber la secuencia del motor se necesita de una fuente de tensin continua

del valor caracterstico del motor (5 Voltios generalmente).


Las entradas son TTL y se activan a nivel alto, tambin disponen de resistencias

de polarizacin internas
Cuando trabajamos con motores paso a paso, muchas veces es necesario tener la

ficha tcnica del motor.


Los motores paso a paso, pueden soportar diversas tensiones (9V, 12V, 15V,
etc.), pero puede que el circuito de control no lo pueda soportar. [2]

63

EJERCICIO 4
1.1. Tema:
Desplazamiento Leds con Pulsador_ Modificado
1.2. Objetivo :
Realizar el ejemplo 4 modificando las funciones bsicas de DIO, reemplazar
Standard IO por fast IO y analizar su funcin.
1.3. Descripcin :
El presente programa nos permite tener el manejo del control digital de entradas
y salidas en el cual realizamos la aplicacin de las luces del auto fantstico, para
el cual realizamos nuestro cdigo en lenguaje assembler en el software MPLAB
de Microchip lo simularemos en Proteus y que despus lo implementaremos
fsicamente, cargaremos nuestro cdigo hexadecimal al microcontrolador PIC
16F887 mediante el PICkit 2 y lo implementaremos de acuerdo al diagrama de
Proteus.
1.4. Materiales y equipos:
DESPLAZAMIENTO DE LEDS
Microcontrolador PIC16F887.
8 diodos Leds.
8 resistencias de 220 ohmios.
Cables.
Pulsador
Fuente de 5V DC.
Quemador de PIC
Software MPLAB IDE X
Software PICkit 2
1.5. Diagramas y esquemas:

Figura 31 Esquema de Ejercicio propuesto #4 Fuente: Simulacin 7mo A 2016

1.6. Cdigo comentado:


64

#include <16f887.h> // incluimos la Libreria del Pic


a Utilizar
#fuses XT, NOWDT, NOPROTECT //Activamos los
Fusibles necesarios
#use delay(clock = 4M) // Declaramos el Delay de
4MHz para trabajar
#use standard_io(B) // Declaramos e puerto B como
salidas o como Entradas
#use fast_io (C) //Uso rapido del puerto C
#use fast_io (A)
int tiempo = 100;
void main() // Programa Principal
{
set_tris_c(0x00); //Declaramos el puerto c como
salidas
set_tris_a(0xff); //Declaramos el puerto Acomo
entradas
while (true) //Bucle infinito
{
if(input(pin_A0)== 0 ) // Consulta si en el Pin A0=0
entonces hace:
{
output_C(1);
//Enciende el bit C0 del puerto C
delay_ms(tiempo);
// Retardo de 100 ms para
encender el Led siguiente
output_C(2);
//Enciende el pin C1 del puerto C
delay_ms(tiempo);
output_C(4);
delay_ms(tiempo);

output_C(8);
delay_ms(tiempo);
output_C(16);
delay_ms(tiempo);
output_C(32);
delay_ms(tiempo);
output_C(64);
delay_ms(tiempo);
output_C(128);
delay_ms(tiempo);
output_C(64);
delay_ms(tiempo);
output_C(32);
delay_ms(tiempo);
output_C(16);
delay_ms(tiempo);
output_C(8);
delay_ms(tiempo);
output_C(4);
delay_ms(tiempo);
output_C(2);
delay_ms(tiempo);
}
if(input(pin_A0)== 1)
{
output_C(0);
}
}
}

1.7. Resultado:
1.8.
1.9. Se demostr la configuracin de bsica en lenguaje ensamblador en MPLAB
para la secuencia de leds con programacin el lenguaje en C y la utilizacin de
un pulsador para dar inicio a la secuencia.

65

1.10.
EJERCICIO 5
1.1. Tema:
Encendido y apagado de un motor DC_Modificado
1.2. Objetivo :
Repetir el ejercicio 5 reemplazando un Transistor por el Driver L293D (Puente
H) para encender y apagar un motor DC
1.3. Descripcin :
El presente programa nos permite tener el manejo del encendido de un motor
DC, para lo cual realizamos elcdigo en PIC C Compiler, luego lo simularemos
en Proteus y posterior lo implementaremos fsicamente, cargaremos nuestro
cdigo hexadecimal al microcontrolador PIC 16F887 mediante el PICkit 2 y lo
implementaremos de acuerdo al diagrama de Proteus.
1.4. Materiales y equipos:
Encendido y apagado de un motor DC
Microcontrolador PIC16F887.
Motor DC.
Transistor
Cables.
Fuente de 5V DC.
Quemador de PIC.
Software PICkit 2
Teclado matricial
Pantalla LCD
Resistencia 10k
1.5. Diagramas y esquemas:

Figura 32 Esquema de Ejercicio propuesto #5 Fuente: Simulacin 7mo A 2016

Diagrama No.1: Esquema de Ejercicio propuesto #5

1.6. Cdigo comentado:


#include <16f887.h>
#fuses
XT,PUT,NOPROTECT,BROWNOUT,NOLVP,NOW
DT
#use delay(clock=4M)
#define LCD_DB4 PIN_B4
//definimos el
LCD en el Port_B
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B2
#define LCD_E PIN_B3
#include <lcd1.c>
LCD
#include <KBD4x4.c>
#use standard_io(C)
C
#use standard_io(B)

lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("MOTOR");
lcd_gotoxy(1,2);
lcd_putc("APAGADO");
output_c(0);
}

void main()
{

//incluimos la libreria del

lcd_init();
kbd_init();
lcd_gotoxy(1,1);
lcd_putc("Pulse A para: ON");
lcd_gotoxy(1,2);
lcd_putc("Puls D para: OFF");

//uso rapido del Puerto A y

char teclado;
while (True)
{
teclado = kbd_getc();
if(teclado!=0)
{
if(teclado == '*')
{
encendido();
}
else if(teclado == 'D')
{
apagado();
}
}
}

void encendido()
{
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("MOTOR");
lcd_gotoxy(1,2);
lcd_putc("ENCENDIDO ");
delay_ms(200);
output_c(1);
}
void apagado()
{

Resultado:
Se demostr la configuracin de bsica en lenguaje ensamblador en MPLAB para el
encendido de un motor dc con teclado matricial y su visualizacin en la pantalla lcd con
programacin el lenguaje en C.

EJERCICIO 6
1.1. Tema:
Secuencia de Leds con LCD y Teclado Matricial
1.2. Objetivo :
Realizar un MOD10 utilizando Decoder y Display anodo comn que cumpla las
siguientes condiciones:
1.3. Descripcin :
Si la tecla pulsada es # realice un conteo de forma ascendente y si es * realice
un el conteo descendente (visulizar en la LCD los estados respectivamente) y si
pulsa cualquier otra tecla visualizar en la LCD (Tecla no asignada) y el Display
se apaga.
1.4. Materiales y equipos:
CONTADOR MOD10
Microcontrolador PIC16F887.
Display
Cables.
Fuente de 5V DC.
Quemador de PIC.
Software PICkit 2
Teclado matricial
Pantalla LCD
Resistencia 10k
1.5. Diagramas y esquemas:

Figura 33 Esquema de Ejercicio propuesto #6 Fuente: Simulacin 7mo A 2016

1.6. Cdigo comentado:

#include <16f887.h>
#fuses XT, NOWDT, NOPROTECT
#use delay(clock = 4M)
#define LCD_DB4 PIN_B4
LCD en el Port_B
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B2
#define LCD_E PIN_B3
#include <lcd1.c>
LCD
#include <KBD4x4.c>
#use standard_io (C)

delay_ms(500);

//retardo de medio

segundo
//definimos el

//incluimos la libreria del

signed int cont=0; //variavle cont con signo


char tecla;
void main()
{
kbd_init();
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("\f# para Ascendente") ;
lcd_gotoxy(1,2);
lcd_putc("* para Descendente") ;
while (true)
{
tecla = kbd_getc();
if(tecla!=0)
{
if(tecla=='C') //Si la entrada en el pin A0=1
{
lcd_gotoxy(1,1);
lcd_putc("\fContador") ;
lcd_gotoxy(1,2);
lcd_putc("Ascendente") ;
for(int i=0; i<=10; i++)
{
output_C(cont);
// saca en el puerto C el
valor del cont
cont++; //Es igual cont=cont+1 cont va
incrementando de uno en uno

if(cont>9) cont=0;
9 regresa a 0

//si el contador pasa de

}
}
if(tecla=='A')
//Si la entrada en el pin A0=0
{
lcd_gotoxy(1,1);
lcd_putc("\fContador") ;
lcd_gotoxy(1,2);
lcd_putc("Descendente") ;
for(int i=0; i<=10; i++)
{
output_C(cont);
//saca en el puerto C el
valor del cont
cont--;
//cont va decrementando de
uno en uno
delay_ms(500);
if(cont<=-1) cont=9;//si cont llega a 0 regresa
de inmediato a 9
}
}
if((tecla!='C')&&(tecla!='A') )
{
lcd_gotoxy(1,1);
lcd_putc("\fTecla No");
lcd_gotoxy(1,2);
lcd_putc("Asignada");
output_c(0b1111);
}
}
}
}

1.7. Resultado:
1.8.
1.9. Se demostr la configuracin de bsica en lenguaje C para obtener una
secuencia de leds con su manejo desde teclado matricial y su visualizacin en
la pantalla lcd el cual tendr mensajes de encendido apagado y seleccin de las
secuencias de desplazamiento.
1.10.
1.11.

1.12.
EJERCICIO 7
1.1. Tema:
1.13. ON-OFF cambio de Giro de un Motor Dc con LCD y Teclado
1.2. Objetivo :
1.14. Variar la velocidad de un motor DC usando las 3 primeras teclas.
1.3. Descripcin :
1.15. El presente programa nos permite tener el manejo del encendido y
cambio de giro de un motor DC mediante el teclado matricial , para lo cual
realizamos el cdigo en PIC C Compiler, luego lo simularemos en Proteus y
posterior lo implementaremos fsicamente, cargaremos nuestro cdigo
hexadecimal al microcontrolador PIC 16F887 mediante el PICkit 2 y lo
implementaremos de acuerdo al diagrama de Proteus.
1.4. Materiales y equipos:
1.16. Encendido_ apagado y cambio giro de un motor DC
Microcontrolador PIC16F887.
Motor DC.
Driver l293
Cables.
Fuente de 5V DC.
Quemador de PIC.
Software PICkit 2
Teclado matricial
Pantalla LCD
Resistencia 10k
1.5. Diagramas y esquemas:
1.17.
1.18.

1.19. Figura 34 Esquema de Ejercicio propuesto #7 Fuente: Simulacin 7mo A 2016

1.20.
1.6. Cdigo comentado:
1.21.
1.22. #include <16f887.h>
1.23. #fuses
XT,PUT,NOPROTECT,BROWNOUT,NO
LVP,NOWDT
1.24. #use delay(clock=4M)
1.25. #define
LCD_DB4
PIN_B4
//definimos el LCD en el Port_B
1.26. #define LCD_DB5 PIN_B5
1.27. #define LCD_DB6 PIN_B6
1.28. #define LCD_DB7 PIN_B7
1.29. #define LCD_RS PIN_B2
1.30. #define LCD_E PIN_B3
1.31.
1.32. #include <lcd1.c>
//incluimos la
libreria del LCD
1.33. #include <KBD4x4.c>
1.34. //#use standard_io(E)
//uso rapido
del Puerto A y C
1.35. #use standard_io(C)
1.36. //#use standard_io(B)
1.37.
1.38. char tecla, aux='0';
1.39. char PWMH=0, PWML=0;
1.40. //int i;
1.41.
1.42. void encendido()
1.43. {
1.44. lcd_putc("\f");
1.45. lcd_gotoxy(1,1);
1.46. lcd_putc("SISTEMA");
1.47. lcd_gotoxy(1,2);
1.48. lcd_putc("ENCENDIDO ");
1.49.
1.50. }
1.51.
1.52. void apagado()
1.53. {
1.54.
lcd_putc("\f");
1.55.
lcd_gotoxy(1,1);
1.56.
lcd_putc("APAGADO");
1.57.
1.58.
output_c(0);
1.59. }
1.60.
1.61. void velocidad1()
1.62. {
1.63.
lcd_putc("\f");
1.64.
lcd_gotoxy(1,2);
1.65.
lcd_putc("Velocidad Uno");
1.66.
delay_ms(500);
1.67. }
1.68.
1.69. void main()
1.70. {

1.71.
1.72.
1.73.
1.74.
1.75.
1.76.
1.77.
1.78.
1.79.
1.80.
1.81.
1.82.

lcd_init();
kbd_init();
port_b_pullups(True);
lcd_gotoxy(1,1);
lcd_putc("Pulse A para: ON");
lcd_gotoxy(1,2);
lcd_putc("Puls D para: OFF");

while (true)
{
tecla = kbd_getc();
if(tecla=='\0') {tecla=aux;}
//si no
se pulsa nada.. tecla = 0
1.83.
if(tecla=='*')
//si tecla=A
enciende
1.84.
{
1.85.
encendido();
1.86.
tecla='0';
1.87.
delay_ms(500);
1.88.
}
1.89.
if(tecla=='D')
1.90.
{
1.91.
apagado();
1.92.
tecla = '0';
1.93.
delay_ms(500);
1.94.
}
1.95.
if((tecla=='A') || (tecla=='B') ||
(tecla=='C') || (tecla=='#')
1.96.
|| (tecla=='5') || (tecla=='6') ||
(tecla=='7')
1.97.
|| (tecla=='8') || (tecla=='9'))
1.98.
{
1.99.
lcd_putc("\f");
1.100.
lcd_gotoxy(1,1);
1.101.
lcd_putc("Tecla no Usada");
1.102.
delay_ms(500);
1.103.
tecla='0';
1.104.
}
1.105.
1.106.
aux=tecla;
1.107.
tecla = tecla-48;
1.108.
PWMH = tecla*63.75;
1.109.
PWML = 255-PWMH;
1.110.
1.111.
for(PWMH;PWMH>0;PW
MH--)
1.112.
{
1.113.
output_high(pin_C0);
1.114.
1.115.
}
1.116.
1.117.
for
(PWML;PWML>0;PWML--)
1.118.
{

1.119.
1.120.
1.121.

output_low(pin_C0);

1.122.
1.123.

}
}

1.7. Resultado:
1.8.
1.9. Se demostr la configuracin del encendido apagado y cambio de giro de un
motor DC con el manejo desde el teclado matricial y su respectiva visualizacin
en la pantalla lcd con programacin el lenguaje en C con la ayuda de un driver
para motor.
1.10.
1.11.

1.12.
EJERCICIO 8
1.1. Tema:
1.13. ON-OFF_Giro_Velocidades_Motor_Pasos_LCD_Teclado
1.2. Objetivo :
1.14. Aadir leds de sealizacin para cada condicin del ejercicio anterior.
1.3. Descripcin :
1.15.
1.16. El presente programa nos permite tener el manejo del encendido y
cambio de giro de un motor a pasos y adems el control de velocidad mediante
el teclado matricial , para lo cual realizamos el cdigo en PIC C Compiler, l
Sistema encendido (VERDE), Sistema apagado (ROJO), Giro Derecha
(AMARILLO), Giro Izquierda ( AZUL).
1.17.
1.4. Materiales y equipos:
1.18.
1.19. ON-OFF_Giro_Velocidades_Motor_Pasos_LCD_Teclado
Microcontrolador PIC16F887.
Motor a pasos
Driver l293
Cables.
Fuente de 5V DC.
Quemador de PIC.
Software PICkit 2
Teclado matricial
Pantalla LCD
Resistencia 10k
1.5. Diagramas y esquemas:

1.20.
1.21. Figura 35 Esquema de Ejercicio propuesto #8 Fuente: Simulacin 7mo A 2016

1.6. Cdigo comentado:


1.22. #include <16f887.h>
1.23. #fuses
XT,PUT,NOPROTECT,BROWNOUT,NO
LVP,NOWDT
1.24. #use delay(clock=4M)

1.25. #define
LCD_DB4
PIN_B4
//definimos el LCD en el Port_B
1.26. #define LCD_DB5 PIN_B5
1.27. #define LCD_DB6 PIN_B6
1.28. #define LCD_DB7 PIN_B7

1.29. #define LCD_RS PIN_B2


1.30. #define LCD_E PIN_B3
1.31.
1.32. #include <lcd1.c>
//incluimos la
libreria del LCD
1.33. #include <KBD4x4.c>
1.34. #use standard_io(E)
//uso rapido del
Puerto A y C
1.35. #use standard_io(C)
1.36. #use standard_io(B)
1.37.
1.38. char teclado;
1.39. int tiempo;
1.40. int i;
1.41.
1.42. void encendido()
1.43. {
1.44. lcd_putc("\f");
1.45. lcd_gotoxy(1,1);
1.46. lcd_putc("SISTEMA");
1.47. lcd_gotoxy(1,2);
1.48. lcd_putc("ENCENDIDO ");
1.49.
1.50. output_A(2);
1.51.
1.52. }
1.53. void giro_derecha()
1.54. {
1.55.
//lcd_putc("\f");
1.56.
lcd_gotoxy(1,1);
1.57.
lcd_putc("Girando Derecha");
1.58.
1.59.
output_c(1);
1.60.
delay_ms(tiempo);
1.61.
output_c(2);
1.62.
delay_ms(tiempo);
1.63.
output_c(4);
1.64.
delay_ms(tiempo);
1.65.
output_c(8);
1.66.
delay_ms(tiempo);
1.67.
1.68.
output_A(4);
1.69.
1.70. }
1.71.
1.72. void giro_izquierda()
1.73. {
1.74.
//lcd_putc("\f");
1.75.
lcd_gotoxy(1,1);
1.76.
lcd_putc("Girando Izquierda");
1.77.
1.78.
output_c(8);
1.79.
delay_ms(tiempo);
1.80.
output_c(4);
1.81.
delay_ms(tiempo);
1.82.
output_c(2);
1.83.
delay_ms(tiempo);
1.84.
output_c(1);

1.85.
delay_ms(tiempo);
1.86.
1.87.
output_A(8);
1.88. }
1.89.
1.90. void apagado()
1.91. {
1.92.
lcd_putc("\f");
1.93.
lcd_gotoxy(1,1);
1.94.
lcd_putc("APAGADO");
1.95.
1.96.
output_c(0);
1.97.
delay_ms(100);
1.98.
output_A(1);
1.99. }
1.100.
1.101.
void velocidad1()
1.102.
{
1.103.
lcd_putc("\f");
1.104.
lcd_gotoxy(1,2);
1.105.
lcd_putc("Velocidad Uno");
1.106.
tiempo=100;
1.107.
}
1.108.
1.109.
void velocidad2()
1.110.
{
1.111.
lcd_putc("\f");
1.112.
lcd_gotoxy(1,2);
1.113.
lcd_putc("Velocidad Dos");
1.114.
tiempo=50;
1.115.
}
1.116.
1.117.
void velocidad3()
1.118.
{
1.119.
lcd_putc("\f");
1.120.
lcd_gotoxy(1,2);
1.121.
lcd_putc("Velocidad Tres");
1.122.
tiempo=10;
1.123.
}
1.124.
/*
1.125.
char leert(char tecla1) //metodo
para leer teclado_Matricial (no necesario)
1.126.
{
1.127.
//output_high(pin_e1);
1.128.
if(tecla1 != 0)
1.129.
{
1.130.
if(tecla1 == '1')
1.131.
{
1.132.
// output_low(pin_e1);
1.133.
return(tecla1);
1.134.
}
1.135.
else if(tecla1 == '4')
1.136.
{
1.137.
// output_low(pin_e1);
1.138.
return(tecla1);
1.139.
}
1.140.
else if(tecla1 == 'D')
1.141.
{

1.142.
//output_low(pin_e1);
1.143.
return(tecla1);
1.144.
}
1.145.
}
1.146.
//output_low(pin_e1);
1.147.
return(0);
1.148.
} */
1.149.
1.150.
void main()
1.151.
{
1.152.
1.153.
lcd_init();
1.154.
kbd_init();
1.155.
lcd_gotoxy(1,1);
1.156.
lcd_putc("Pulse A para: ON");
1.157.
lcd_gotoxy(1,2);
1.158.
lcd_putc("Puls D para: OFF");
1.159.
1.160.
while (True)
1.161.
{
1.162.
teclado = kbd_getc();
1.163.
if(teclado!=0)
1.164.
{
1.165.
if(teclado == '*')
1.166.
{
1.167.
encendido();
1.168.
1.169.
while(teclado!='D')
1.170.
{
1.171.
teclado=kbd_getc();
1.172.
1.173.
if(teclado=='1')
1.174.
{
1.175.
tiempo = 100;
1.176.
velocidad1();
1.177.
1.178.
while(true)//
while((leert(kbd_getc())!='D')
&&
(leert(kbd_getc())!='4'))
1.179.
{
1.180.
giroDerecha:
1.181.
giro_derecha();
1.182.
1.183.
teclado = 0;
1.184.
for(i=0; i<=100; i++)
1.185.
{
1.186.
teclado=kbd_getc();
1.187.
if(teclado!=0)
1.188.
{
1.189.
if(teclado == '4')
{goto giroIzquierda;}
1.190.
else if(teclado ==
'D') {goto off;}

1.191.
else if(teclado ==
'A') {velocidad1();}
1.192.
else if(teclado ==
'B') {velocidad2();}
1.193.
else if(teclado ==
'C') {velocidad3();}
1.194.
}
1.195.
}
1.196.
}
1.197.
}
1.198.
1.199.
if(teclado == '4')
1.200.
{
1.201.
tiempo=100;
1.202.
velocidad1();
1.203.
1.204.
while(true)
//while((leert(kbd_getc())!='D')
&&
(leert(kbd_getc())!='1'))
1.205.
{
1.206.
giroIzquierda:
1.207.
giro_izquierda();
1.208.
1.209.
teclado = 0;
1.210.
for (i=0; i<=100; i++)
1.211.
{
1.212.
teclado = kbd_getc();
1.213.
if(teclado!=0)
1.214.
{
1.215.
if(teclado == 'D')
{goto off;}
1.216.
else if(teclado == '1')
{goto giroDerecha;}
1.217.
else if(teclado == 'A')
{velocidad1();}
1.218.
else if(teclado == 'B')
{velocidad2();}
1.219.
else if(teclado == 'C')
{velocidad3();}
1.220.
}
1.221.
}
1.222.
}
1.223.
}
1.224.
} goto off;
1.225.
1.226.
}
1.227.
off:
1.228.
apagado();
1.229.
}
1.230.
}
1.231.
}
1.232.

1.7. Resultado:
1.8. Se demostr la configuracin del (on_off) cambio de giro y control de
velocidad de un motor a pasos con el manejo desde el teclado matricial y su

respectiva visualizacin en la pantalla lcd con programacin el lenguaje en C


con la ayuda de un driver para motor.
1.9.

1.10.
EJERCICIO PROPUESTO
1.11.
5.- Reemplazar un Transistor por el Driver L293D (Puente H) para
encender y apagar un
1.12.
6.- Realizar un MOD10 utilizando Decoder y Display anodo comn que
cumpla las siguientes condiciones:
1.13.

Si la tecla pulsada es # realice un conteo de forma ascendente y si es *

realice un el conteo descendente (visulizar en la LCD los estados


respectivamente) y si pulsa cualquier otra tecla visualizar en la LCD (Tecla no
asignada) y el Display se apaga.
1.14.

7.- Variar la velocidad de un motor DC usando las 3 primeras teclas.

1.15.

8.- Aadir leds de sealizacin para cada condicin del ejercicio anterior.

1.16.

Sistema encendido (VERDE), Sistema apagado (ROJO), Giro Derecha

(AMARILLO), Giro Izquierda ( AZUL).

1.17.
1.18.

1.19.
1.20.

Interaccin Microcontrolador PC (USART)

1.21.
Uso de las Seales RS232.
Tierra de Chasis.- Se conecta internamente al chasis del dispositivo.
Recibe Datos (RXD).- Por esta pata entran los datos del dispositivo

1.22.
1.23.
externo.
1.24.
Transmite Datos (TXD).- Por esta pata salen los datos para ir al
dispositivo externo.
1.25.
Terminal de Datos Listo (DTR).- Esta pata realiza el control maestro
del dispositivo externo. Cuando este pin esta en 1, el dispositivo externo no
transmite ni recibe datos.
1.26.
Tierra de seal.- Se ha dicho que los datos se envan como voltajes + o
-. Pues bien, esta pata es la referencia de seal para esos voltajes.
1.27.
Conjunto de Datos Listo (DSR).- Por lo general, los dispositivos
externos tienen esta patita con un valor permanente de 0.
1.28.
Solicita Permiso para Enviar Datos (RTS).- Esta parte del hardware se
usa para estrecharse la mano entre los dispositivos que se estn comunicando. Si
el dispositivo externo est de acuerdo, pone un 0 en la patita que se llama Pista
Libre para Enviar Datos (CTS).
1.29.
Pista Libre para Enviar Datos (CTS).- sta es la otra mitad del
hardware usado para estrecharse la mano. El dispositivo externo pone esta pata en
0 cuando est lista para recibir datos.
1.30.
Timbre Telefnico (RI).- Esta patita se usa slo cuando un PLC
(Programable Logical Controller) est conectado a un mdem. [1]
1.31.
Descripcin de pines
1.32.

Figura 36 Pines DB9 Fuente: www.db9-pinout.com

1.33.
Aplicaciones
1.34.
Los dispositivos de redes, como los enrutadores y switches, a menudo
tienen puertos serie para modificar su configuracin. Los puertos serie se usan
frecuentemente en estas reas porque son sencillos, baratos y permiten la
interoperabilidad entre dispositivos. La desventaja es que la configuracin de las

conexiones serie requiere, en la mayora de los casos, un conocimiento avanzado por


parte del usuario y el uso de comandos complejos si la implementacin no es
adecuada [3]
1.35.
Puerto RS-232
1.36.
Resea Histrica
1.37.
Es una de las normas ms populares empleadas en la comunicacin serie
(su insercin en el PC incremento su popularidad). Fue desarrollada en la dcada de
los 60 para gobernar la interconexin de terminales y MODEM. Est patrocinada
por la EIA (Asociacin de Industrias Elctricas).
1.38.
Durante los ltimos 30 aos que este estndar ha estado en uso, los
equipos han evolucionado tremendamente, pero la norma inicial RS-232 ha
cambiado muy poco y los pocos que se han producido han sido debidos a la
interpretacin propia de algunos fabricantes.
1.39.
Los ordenadores se conectan con cualquier equipo perifrico, a travs de
sus puertos paralelo o serie, o los ms recientes como el USB (Universal Serial Bus,
el cual deja desbancados a los otros con 12 Mb/s), pero en ste caso solo
analizaremos el puerto serie RS-232 por ser un estndar impuesto en todos los
equipos informticos. [1]
1.40.
Consideraciones en la comunicacin serie
1.41.
La norma RS232 resuelve tres aspectos en la comunicacin que se
establece entre el DTE, Equipo Terminal de Datos, por ejemplo un PC y el DCE,
Equipo para la comunicacin de datos, por ejemplo un ratn:
1.42.
Caractersticas elctricas de la seal
1.43.
Se establece que la longitud mxima del cable no debe ser superior a los
15 metros y la velocidad mxima de transmisin es, en principio, 128.000 bps. Los
niveles lgicos no son compatibles TTL, considerando:
1.44.
1 lgico entre -3V y -15V
1.45.
0 lgico entre +3V y +15V
1.46.
Caractersticas mecnicas de los conectores
1.47.
Se utiliza un conector de 25 patillas, DB 25, o de 9 patillas, DB 9, donde
el conector macho identifica al DTE (Equipo Terminal de Datos) y el conector
hembra al DCE (Equipo para la comunicacin de datos). [2]

1.48.

RS 232

1.49.
1.50. Figura 37 COMUNICACION PIC PC Fuente: www.db9-pinout.com

1.51.
La denominada RS-232 es una interfaz que designa una norma para el
intercambio serie de datos binarios entre un DTE (o Equipo terminal de datos) y
un DCE (o Equipo de terminacin del circuito de datos), aunque existen otras
situaciones en las que tambin se utiliza la interfaz RS-232.
1.52.
La interfaz RS-232 est diseada para distancias cortas, de unos 15
metros o menos, y para unas velocidades de comunicacin bajas, de no ms de
20 KBytes. A pesar de ello, muchas veces se utiliza a mayores velocidades con
un resultado aceptable.
1.53.
La interfaz puede trabajar en comunicacin asncrona o sncrona y tipos
de canal simplex, half duplex o full duplex. En un canal simplex los datos
siempre viajarn en una direccin, por ejemplo desde DCE a DTE. En un canal
half dplex, los datos pueden viajar en una u otra direccin, pero slo durante
un determinado periodo de tiempo; luego la lnea debe ser conmutada antes que
los datos puedan viajar en la otra direccin. En un canal full duplex, los datos
pueden viajar en ambos sentidos simultneamente. Las lneas de handshaking
de la RS-232 se usan para resolver los problemas asociados con este modo de
operacin, tal como en qu direccin los datos deben viajar en un instante
determinado.
1.54.

1.55.

EJERCICIO 9

1.1. Tema:
1.56. Utilizacin del puerto USART
1.2. Objetivo :
1.57.
Determinar la utilizacin del puerto USART, visualizar los estados en la
pantalla LCD.
1.3. Descripcin :
1.58. Encender el motor DC desde el teclado matricial y apagar desde la PC
mediante la comunicacin USART, visualizar los estados en la pantalla LCD.
1.4. Materiales y equipos:
1.59. Comunicacin pic_pc
Microcontrolador PIC16F887.
Cables.
Fuente de 5V DC.
Quemador de PIC.
Software PICkit 2
LCD 2x16
Teclado matricial (4x4)
Max RS232
Protoboard
1.5. Diagramas y esquemas:
1.60.

1.61. Figura 38 Esquema de Ejercicio Propuestos #9 Fuente: Simulacin 7moA 2016

1.62.
1.63.
1.64.
1.65.

1.6. Cdigo comentado:


1.66. #include <16f887.h>
1.67. #fuses
XT,PUT,NOPROTECT,BROWNOUT,N
OLVP,NOWDT
1.68. #use delay(clock=4M)
1.69. #define
LCD_DB4
PIN_B4
//definimos el LCD en el Port_B
1.70. #define LCD_DB5 PIN_B5
1.71. #define LCD_DB6 PIN_B6
1.72. #define LCD_DB7 PIN_B7
1.73. #define LCD_RS PIN_B2
1.74. #define LCD_E PIN_B3
1.75.
1.76. #include <lcd1.c>
//incluimos la
libreria del LCD
1.77. #include <KBD4x4.c>
1.78. //#use standard_io(E)
//uso rapido
del Puerto A y C
1.79. #use standard_io(A)
1.80. //#use standard_io(B)
1.81.
1.82. #use rs232(baud=9600, xmit=pin_C6,
rcv=pin_C7, bits=8, parity=N)
1.83. // directiva usada para la comunicacion
serial RS232
1.84. void menu()
1.85. {
1.86. lcd_gotoxy(1,1);
1.87. lcd_putc("\f MENU");
1.88. lcd_gotoxy(1,2);
1.89. lcd_putc("Comunicacion RS232");
1.90.
1.91. puts("\fMenu CONTROL DE MOTOR
DC\r\r");
1.92. puts(" A ENCIENDE EL MOTOR DC
DESDE EL TECLADO\r\r");
1.93. puts(" D APAGA EL MOTOR DC
DESDE LA PC");
1.94.
1.95. }
1.96.
1.97. int dato;
1.98.
1.99. #int_rda
//habilitacion
de
la
interrupcion de RS232 en CCS
1.100.
void serial()
1.101.
{
1.102.
dato=getc(); //coge el caracter
que se tx y guarda en dato
1.103.
}
1.104.

1.105.
void
control_teclado()
////metodo para comunicacion entre PIC
y PC
1.106.
{
1.107.
char tecla;
1.108.
kbd_init();
1.109.
lcd_gotoxy(1,1);
1.110.
lcd_putc("\f TX Teclado");
1.111.
1.112.
1.113.
while(true)
1.114.
{
1.115.
tecla=kbd_getc();
1.116.
if(tecla!=0)
1.117.
{
1.118.
if(tecla=='*') //si tecla
pulsado es 1(Proteus) entonces visualiza
1(Teclado_Real)
1.119.
{
1.120.
printf("\f\rMOTOR DC
ENCENDIDO");
1.121.
delay_ms(100);
1.122.
output_A(1);
1.123.
}
1.124.
1.125.
if(tecla=='D')
1.126.
{
1.127.
goto salida;
1.128.
}
1.129.
1.130.
}
1.131.
1.132.
}
1.133.
salida:
1.134.
menu();
1.135.
1.136.
}
1.137.
1.138.
void control_PC()
//metodo
para comunicacion entre PC y PIC
1.139.
{
1.140.
lcd_init();
1.141.
enable_interrupts(int_rda);
1.142.
enable_interrupts(global);
1.143.
lcd_gotoxy(1,1);
1.144.
lcd_putc("\fTx PC");
1.145.
1.146.
while (true)
1.147.
{
1.148.
dato=getc();
1.149.
if(dato!=0)
1.150.
{
1.151.
if(dato=='d')

1.152.
{
1.153.
printf("\f\rMOTOR DC
APAGADO");
1.154.
delay_ms(100);
1.155.
output_A(0);
1.156.
1.157.
printf("\r\rPuse SPACE
para menu");
1.158.
}
1.159.
1.160.
if(dato==' ') { goto salida1;}
1.161.
1.162.
}
1.163.
}
1.164.
salida1:
1.165.
menu();
1.166.
}
1.167.
void main()
1.168.
{
1.169.
lcd_init();
1.170.
enable_interrupts(int_rda);
1.171.
enable_interrupts(global);
1.172.
lcd_gotoxy(1,1);
1.173.
lcd_putc("Comunicacion");
1.174.
lcd_gotoxy(1,2);
1.175.
lcd_putc("Serial");

1.176.
1.177.
puts("\f
Conexion
Establecida\r");
1.178.
puts("Pulsa SPACE para ir al
Menu");
1.179.
1.180.
while(true)
1.181.
{
1.182.
for(;;)
1.183.
{
1.184.
dato = getc();
1.185.
switch(dato)
1.186.
{
1.187.
case ' ': menu();
1.188.
break;
1.189.
1.190.
case 'a': control_teclado();
1.191.
break;
1.192.
1.193.
case 'x': control_PC();
1.194.
break;
1.195.
}
1.196.
}
1.197.
}
1.198.
}

1.7. Resultado:
1.8. Mediante la activacin del teclado matricial el microcontrolador se encarga de
realizar el encendido - apagado del sistema para empezar a transmitir y recibir
informacin. Con la pulsacin de una tecla del teclado matricial el
microcontrolador PIC (16F887) se encarga de enviar el carcter a la pantalla
LCD para poder ser visualizado.
1.9.

1.10.

EJERCICIO PROPUESTO

1.11.

9.- Encender el motor DC desde el teclado matricial y apagar desde la PC

mediante la comunicacin USART, visualizar los estados en la pantalla LCD.


1.12.

89

1.13.

SEGUNDO PARCIAL

1.14.

MODULO CCP

1.15.

INTRODUCCIN:

1.16.

La mayora de microcontroladores actuales disponen de un perifrico

denominado Mdulo de Captura Comparacin y PWM o CCP


1.17.

Este mdulo consta de un registro de 16bits CCPx (x=1, 2) que puede

operar como registro de captura de datos, comparacin de datos o como registro


para fijar el ciclo de trabajo de una seal.
1.18.

El modo de captura proporciona el acceso al estado actual de un

registro que cambia su valor constantemente. En este caso, es el registro del


temporizador Timer1.
1.19.

El modo de comparacin compara constantemente valores de dos

registros. Uno de ellos es el registro del temporizador Timer1. Este circuito


tambin le permite al usuario activar un evento externo despus de que haya
expirado una cantidad de tiempo predeterminada.
1.20.

PWM (Pulse Width Modulation - modulacin por ancho de pulsos)

puede generar seales de frecuencia y de ciclo de trabajo variados por uno o


ms pines de salida.

1.21.

SNTESIS:

1.22.
1.23.

Registros asociados a cada mdulo (lectura/escritura):

1.24.

CCPRx (CCPRxH:CCPRxL): Registro de datos de 16 bits

1.25.

En modo captura, CCPRx funciona como Registro de Captura


En modo compara, CCPRx funciona como Registro de Comparacin
En modo PWM, CCPRx funciona determina el Duty Cycle
1.26.

1.27.

CCPxCON: Registro de control

1.28.

Los mdulos CCP hacen uso de los timers

90

1.29.
1.30. Figura 39 Figura No.21 Asociacin de los modos CCP con los Timer Fuente:
https://es.wikiversity.org/wiki/Estructura_del_microcontrolador

1.31.

El PIC16F887 cuenta con dos Mdulos CCP con las siguientes

caractersticas:
1.32.

Modo Captura: Registro de 16 bits y resolucin mxima de 12.5 ns.


Modo Comparacin: Registro de 16 bits y resolucin mxima de 200 ns.
Modo PWM: Registro de 10 bits y frecuencia mxima de 20 kHz.

1.33.
1.34.

El PIC16F887 dispone de dos mdulos denominados CCP1 y CCP2

asociados a los registros CCPR1 y CCPR2 pines RC2 (CCP1) y RC1(CCP2)


1.35.

El PIC18F4550 cuenta con dos Mdulo CCP y un mdulo CCP mejorado

con las siguientes caractersticas:


1.36.

Modo Captura: Registro de 16 bits y resolucin mxima de 5.2 ns (TcY/16)


Modo Comparacin: Registro de 16 bits y resolucin mxima de 83.3 ns (TcY)
Modo PWM: Registro de 10 bits
1.37.

1.38.

Mdulo CCP:

Mdulo CCP mejorado:

Mltiples modos de salida


Polaridad seleccionable
Tiempo muerto de programacin
Auto-Apagado y Auto-Reseteo

1.39.
1.40.

El PIC18F4550 dispone de dos mdulos denominados CCP1 y CCP2

asociados a los registros CCPR1 y CCPR2 pines RC2 (CCp1) y RC1/RB3


(CCP2). La directiva #programa se utiliza para fijar el pin asociado al mdulo
CCP2 de la siguiente manera:
1.41.

#pragma config CCP2MX=ON //CCP2 en RC1

1.42.

#pragma config CCP2MX =OFF CCP2 en RB3

91

1.43.

1.44. Figura 40 Interaccin entre los dos Mdulos CCP1 y CCP2


1.45. Fuente: https://es.wikiversity.org/wiki/Estructura_del_microcontrolador

1.46.

Mdulo CCP1

1.47.

Una parte central de este circuito es un registro CCPR1 de 16 bits que

consiste en registros CCPR1L y CCOR1H. Se utiliza para capturar y comparar


sus valores con los nmeros almacenados en el registro del temporizador
Timer1 (TMR1H y TMR1L).
1.48.

1.49. Figura 41 Registro de Modulo CCPR1 Fuente:


https://es.wikiversity.org/wiki/Estructura_del_microcontrolador

1.50.

Si est habilitado por software, puede ocurrir el reinicio del temporizador

Timer1 al igualarse los valores en modo de Comparacin. Adems, el mdulo


CCP1 puede generar seales PWM de frecuencia y de ciclo de trabajo variados.

Los bits del registro CCP1CON estn en control del mdulo CCP1
92

Consta de dos registros de 8 bits: CCPR1H y CCPR1L.


Registro de control: CCP1CON.
Accin especial: Generada mediante una comparacin. Resetea Timer1.

1.51.

Mdulo CCP2:

1.52.

Con exclusin de los nombres diferentes de los registros y de los bits,

este mdulo es una muy buena copia del mdulo CCP1 puesto en modo normal.
La nica diferencia significativa entre ellos es el funcionamiento en modo de
comparacin del mdulo CCP2. La diferencia se refiere a la seal de reinicio
del temporizador T1. Concretamente, si el convertidor A/D est habilitado, al
igualarse los valores de los registros TMR1 y CCPR2, la seal de reinicio del
temporizador T1 iniciar automticamente la conversin A/D. Similar al
mdulo anterior, este circuito tambin est bajo el control de los bits del registro
de control. Esta vez es el registro CCP2CON.

Consta de dos registros de 8 bits: CCPR2H y CCPR2L.


Registro de control: CCP2CON.
Accin especial: Generada mediante una comparacin. Resetea Timer1; Lanza
una conversin A/D.
1.53.

1.54. Figura 42 Registro de Modulo CCPR1 Fuente:


https://es.wikiversity.org/wiki/Estructura_del_microcontrolador

93

1.55.

MODO CAPTURA:

1.56.
1.57.

En modo captura el mdulo es capaz de almacenar el valor del TIMER1

o TIMER3 cuando se produce un evento flanco de subida bajada cada (4 o 16


flancos de subida bajada etc.) en los pines CCP1/CCP2.
1.58.
1.59.

Cada uno de los mdulos CCP tiene asociados varios registros (x=1 o 2):

1.60.

CCPxCON: con este registro definiremos el tipo de operacin (Capture /


Compare / PWM) del mdulo. El valor para seleccionar modo de CAPTURA es:
1.61.

0b 000001xx

En este modo, el registro del temporizador Timer1 (que consiste en los TMR1H
y TMR1L) se copia al registro CCP1 (que consiste en los CCPR1H y CCPR1L)
en las siguientes situaciones:
1.62.

1.63.

Los dos ltimos bits configuran el tipo de evento a capturar:

1.64.

00: capturar cada cada de la lnea.


01: capturar cada subida de la lnea.
10: capturar cada 4 subida de lnea.

11: capturar cada 16 subida de lnea

1.65.
1.66.

CCPRxH(Byte alto), CCPRxL(Byte bajo): dos registros de 8 bits. En

el modo captura guardan el valor de un Timer1corriendo en modo 16 bits en el


momento de producirse el evento, ambos registros son de lectura/escritura.
1.67.

TMR1/TMR3: deben estar en modo Timer o Contador sncrono.


Al cambiar el modo de captura se debe colocar en o el bit CCPxIE y CCxIF

94

1.68.
1.69. Figura 43 Fuente Diagrama de Bloques de Modo Captura Datasheet 16F887 y 18F4550

1.70.

Condiciones de funcionamiento en el Modo Captura:

El pin CCPx debe configurarse como entrada.


TMR1/TMR3 debe funcionar en modo temporizador o en modo contador

sncrono. En modo contador asncrono puede que la captura no funcione.


Podra generarse una falsa interrupcin de captura al cambiar el modo de

captura. Se aconseja deshabilitar CCPxIE al cambiar el modo de captura.


Tambin podra generarse una falsa interrupcin al cambiar el prescaler.
Adems, un cambio directo no resetea la cuenta de flancos. Se evitan estas
situaciones reseteando el mdulo CCP (CCPxCON 0) antes de llevar a cabo

un cambio de modo y/o un cambio de prescaler.


Se recomienda la siguiente secuencia de programa, escrita en ensamblador:
1.71.
1.72.

BANKESEL CCP1CON

1.73.
1.74.

CLRF

CCP1CON ;REGISTRO DE CONTROL BORRADO

1.75.
1.76.

;MDULO CCP1 EST APAGADO


MOVLW XX

;NUEVO MODO DEL PRE-ESCALADOR EST

SELECCIONADO
1.77.

MOVWF

CCP1CON ;EN EL REGISTRO DE CONTROL SE

INTRODUCE UN NUEVO VALOR


1.78.

;MDULO CCP1 SE ENCIENDE

SIMULTNEAMENTE
1.79.
1.80.
1.81.

EJERCICIO 1
Tema: Modo Captura del Mdulo CCP
95

1.82.

Descripcin: Realizamos el modo captura del

mdulo CCP ,ejecutando una seal con una frecuencia variable implementando
una seal de reloj astable de 6hz a 5khz para su variacin y poder capturar la
frecuencia mientras variamos.
1.83.

Materiales:

PIC 16F887
555
1 capacitor de 1F
2 resistencias de 220
1 potencimetro de 50k
Pantalla LCD
1.84.

1.85. Fig1. Modo Captura


1.86. Simulacin: Proteus
1.87.

1.88.
1.89.
#i
nclude <16f887.h>
1.90.
#f
uses xt,nowdt,noprotect,nolvp
1.91.
#
use delay (clock=4000000)

1.92.
#
define LCD_DB4 PIN_D4
1.93.
#
define LCD_DB5 PIN_D5
1.94.
#
define LCD_DB6 PIN_D6
96

1.95.
#
define LCD_DB7 PIN_D7
1.96.
#
define LCD_RS PIN_D1
1.97.
#
define LCD_E PIN_D0
1.98.
#i
nclude <lcd1.c>
1.99.
1.100.
in
t1 nuevopulso=0;
1.101.
in
t16
TFB=0,TFS=0,TFTOTAL=0;
1.102.
fl
oat APERIODO=0.0,frec=0.0;
1.103.
in
t1 cambio=0;
1.104.
1.105.
#i
nt_ccp1
1.106.
v
oid ccp1_int(){
1.107.
if
(cambio==0){ // Funcion en
flanco de subida
1.108.
T
FS=CCP_1; //Guarda el valor
del registro en la variable
1.109.
c
ambio=1;
// Control del
cambio de flanco
1.110.
}
else
1.111.
1.112.
{
1.113.
T
FB=CCP_1; //guarda el valor
del registro en la variable
1.114.
c
ambio=0;
// Control del
cambio de flanco
1.115.
if
(nuevopulso==0){
//Fin del
pulso
1.116.
n
uevopulso=1; //Pulso a medir
1.117.
}
1.118.
}
1.119.
}

1.120.
1.121.
v
oid main(){
1.122.
lc
d_init(); //Inicializa la lcd
1.123.
se
tup_timer_1(T1_INTERNAL);
//Configuracion del timer 1
1.124.
se
tup_ccp1(CCP_CAPTURE_RE
);
//Inicia ccp como modo
captura de flanco de subida
1.125.
c
ambio=0; // Setea el cambio
para el modo de aptura
1.126.
e
nable_interrupts(int_ccp1);
//Habilita interrupcion de CCP1
1.127.
e
nable_interrupts(global);
//Habilita interrupcion global
1.128.
1.129.
w
hile(true){
1.130.
if
(nuevopulso==1){ // Detecta si
se tienen los datos de un pulso
nuevo
1.131.
T
FTOTAL=(TFB-TFS);
//
Calcula el ancho del pulso
1.132.
A
PERIODO=(TFTOTAL*1.0); //
Determina el ancho del pulso en
us,
1.133.
fr
ec=1000000/(APERIODO); // a
4M==> 1M frecuencia de
instrucin (T=1us)
1.134.
p
rintf
(lcd_putc,"
***CAPTURA***");
1.135.
lcd_gotoxy(1,3);
1.136.
1.137.
pr
intf(lcd_putc,"\nfrecue=
%6.1fHz ",frec);
1.138.
d
elay_ms (2);
97

1.139.
n
uevopulso=0;
1.140.
}
1.143.
EJERCICIO PROPUESTO
1.144.

1.141.
1.142.

}
}

El siguiente programa trabaja con el mdulo CCP en modo Captura

es decir capta un valor que llega al timer en este caso Timer1 que es un
generador de pulsos, entonces al variar la frecuencia tomo el ultimo valor y lo
visualiza en una pantalla LCD

1.145.

MODO COMPARACIN:

1.146.

El valor almacenado en el registro CCP1 se compara constantemente al

valor almacenado en el registro del temporizador Timer1o Timer3. Al igualarse


los valores, el estado lgico en el pin de salida puede ser cambiado, pudiendo
ser alto, bajo Conmutado (de bajo a alto o viceversa), No cambiar (refleja el
estado del latch de E/S).
1.147.

Para poner el mdulo CCP1 en este modo de funcionamiento, se deben

cumplir dos condiciones:

El pin RC2/CCP1 debe estar configurado como salida

El temporizador Timer1 debe estar sincronizado con el reloj interno.

98

1.148.

1.149.

Figura 44 Diagrama de Bloques de Modo Comparacion Fuente: Datasheet Pic 16F887 y


18F4550

1.150.
1.151.

Cuando CCPRx coincide con TMR1 (en sus 16 bits)

1.152.

El pin RCy/CCPx se pone a 1


El pin RCy/CCPx se pone a 0
Se genera una interrupcin
Lanza una accin especial
Cada coincidencia da lugar a CCPxIF=1

1.153.

Condiciones de funcionamiento en el modo comparacin:

1.154.

El pin CCPx debe configurarse como salida.


99

TMR1 debe funcionar en modo temporizador o en modo contador sncrono. En

modo contador asncrono puede que la comparacin no funcione.


Cuando se selecciona generar interrupcin, el pin CCPx no se veafectado.
Se puede generar una accin especial por hardware.

1.155.

CCP1: Resetea TMR1.

CCP2: Resetea TMR1 y lanza una conversin A/D (si est activado)

En ningn caso se pone a o el flag TMR1IF

1.156.
1.157.

EJERCICO 2

1.158.

Tema: Modo Comparacin del Mdulo CCP

1.159.

Descripcin: Realizamos el modo comparacin

del mdulo CCP, para efectuar una relacin de mayor que, menor que e igual
con un set point de 3v e ir comparando con el voltaje que genera nuestro
circuito varindolo con un potencimetro.
1.160.

Materiales:

PIC 18F4550
3 leds
3 resistencia de 220
Pantalla LCD
Potencimetro de 1k

100

1.161.

1.162.
1.163.

Fig1. Modo Comparacin


Simulacin: Proteus
1.164.

1.165.
#i
nclude <18f4550.h>
1.166.
#
device adc=8
1.167.
#f
uses XT, NOWDT
1.168.
#
use delay(clock=4M)
1.169.
#i
nclude <lcd.c>
1.170.
#
define
LCD_ENABLE_PIN
PIN_D0
//
//
1.171.
#
define
LCD_RS_PIN
PIN_D1
//
//
1.172.
#
define
LCD_RW_PIN
PIN_D2
//
//

1.173.
#
define
LCD_DATA4
PIN_D4
//
//
1.174.
#
define
LCD_DATA5
PIN_D5
//
//
1.175.
#
define
LCD_DATA6
PIN_D6
//
//
1.176.
#
define
LCD_DATA7
PIN_D7
1.177.
#
use standard_io(c)
1.178.
#
use standard_io(b)
1.179.
in
t8 cont=0;
101

1.180.
in
t16 digital;
1.181.
fl
oat voltaje,resolucion;
1.182.
in
t8 i;
1.183.
in
t1 cambio=0;
1.184.
v
oid
main
(void);
//funcin principal
1.185.
v
oid
ccp2_int
(void);
//funcin por
interrupcin
1.186.
1.187.
#i
nt_ccp2
1.188.
v
oid ccp2_int(){
1.189.
1.190.
1.191.
if
(++cambio==1){
//Conmutacin estado salida
CCP2
1.192.
setup_ccp2(CCP_COMPARE_i
nt);
//Modo comparacin,
conmutacin salida a 0
1.193.
ccp_2=i;
//carga
del ccp2 con valor semiperiodo
alto
1.194.
output_low(pin_c0);
1.195.
output_low(pin_c5);
1.196.
output_high(pin_c4);
1.197.
}
1.198.
else{
1.199.
setup_ccp2(CCP_COMPARE_
SET_ON_MATCH);
//Modo
comparacin,
conmutacin
salida a 1

1.200.
ccp_2=i;
//Carga del
ccp2 con valor semiperiodo
bajo
1.201.
output_high(pin_c6);
1.202.
}
1.203.
set_timer1(0);
//
Reinicio del temporizador para
comparacin
1.204.
1.205.
}
1.206.
1.207.
v
oid main() {
1.208.
1.209.
lc
d_init();
1.210.
se
tup_adc_ports(AN0|
VSS_VDD);
1.211.
se
tup_adc(ADC_CLOCK_INTE
RNAL);
1.212.
pr
intf(lcd_putc,"\tGrupo
1
Compare");
1.213.
d
elay_ms(600);
1.214.
se
tup_timer_1(T1_external_sync|
T1_DIV_BY_1);
//Configuracin Timer para
comparacin
1.215.
e
nable_interrupts(int_ccp2);
//habilitacin interrupcin por
comparacin
1.216.
e
nable_interrupts(GLOBAL);
//Habilitacin de toda las
interrupciones
1.217.
1.218.
w
hile(true){
1.219.
d
elay_ms(5);
1.220.
se
t_adc_channel(0);
102

1.221.
re
solucion=read_adc();
1.222.
di
gital=read_adc();
1.223.
o
utput_b(digital);
1.224.
v
oltaje=(resolucion*5/255);
1.225.
i=
voltaje;
1.226.
//
printf(LCD_PUTC, "\f");
1.227.
pr
intf(lcd_putc,"\tVoltaje
%f",voltaje);
1.228.
pr
intf(lcd_putc,"\nSet Point
3
V");
1.229.
d
elay_ms(5);
1.230.
lc
d_gotoxy(1,1);
1.231.
//
printf(lcd_putc,"\t
%f",resolucion);
1.232.
d
elay_ms(100);
1.233.
//
printf(lcd_putc,"\contador=
%i",cont);
1.234.
d
elay_ms(5);
1.235.
se
t_timer1(cont);
1.236.
c
cp_2=0b10011001; // damos el
valor al modulo
1.237.
1.238.
if
(get_timer1()==0)// realizamos
las comparaciones
1.239.
{
1.240.
d
elay_ms(10);
1.241.
se
t_timer1(digital);
1.242.
if
(get_timer1()<ccp_2)
1.243.
{

1.244.
o
utput_high(pin_c0);
1.245.
o
utput_low(pin_c5);
1.246.
o
utput_low(pin_c4);
1.247.
c
ont=4;
1.248.
}
1.249.
se
t_timer1(cont);
1.250.
c
ont=cont+1;
1.251.
}
1.252.
1.253.
if
(get_timer1()==1)
1.254.
{
1.255.
1.256.
d
elay_ms(10);
1.257.
se
t_timer1(digital);
1.258.
if
(get_timer1()>ccp_2)
1.259.
{
1.260.
o
utput_low(pin_c0);
1.261.
o
utput_low(pin_c4);
1.262.
o
utput_high(pin_c5);
1.263.
c
ont=4;
1.264.
}
1.265.
se
t_timer1(cont);
1.266.
c
ont=cont+1;
1.267.
}
1.268.
if
(get_timer1()==2)
1.269.
{
1.270.
se
t_timer1(digital);
1.271.
se
tup_ccp2(CCP_COMPARE_SE
T_ON_MATCH);
//
la
comparacion esta en 1
103

1.272.
t_timer1(cont);
1.273.
ont=cont+1;
1.274.
1.275.
(get_timer1()>=3)
1.276.

se

1.277.
ont=0;
1.278.
elay_ms(100);
1.279.
1.280.
1.281.

c
}
if

c
d
}
}
}

{
1.282.

1.283.

EJERCICO PROPUESTO

1.284.
El siguiente programa trabaja con el mdulo CCP en modo comparacin,
para esto tomo como referencia un voltaje externo de 5 volts como referencia
para compararlo con el timer 1 o 2 y de esta manera encender tres posiciones
diferentes haciendo referencia a un set point.

1.285.

Modo PWM:

1.286.
1.287.

El mdulo en modo PWM utiliza el Timer2 para generar un tren de

pulsos de amplitud y ciclo de trabajo variable seal PWM.


1.288.

Para una frecuencia determinada Fpwm (1-10Khz) obtenemos un

periodo Tpwm Fijando el ciclo de trabajo duty_cicle podemos variar la


potencia entregada en el pin de salida asociado RC2 RC1 RB3. Para un periodo
Tpwm fijo, se puede modificar el tiempo que permanece en alto la seal o
(duty_cicle). Si aplicamos esta seal a una carga (lmpara) podemos
controlar la potencia entregada y, por lo tanto, el nivel de iluminacin segn la
figura.

104

1.289.
1.290.

1.291.

Figura 45 Diagrama de Bloques de Modo PWM Fuente: Datasheet 16F887 y 18F4550

En modo PWM, el pin CCPx puede generar una seal de salida PWM de

10bits de resolucin. Los pines CCPx deben estar configurados como salidas
para funcionar en modo PWM
1.292.

TMR2 se concatena con un reloj interno de 2 bits con frecuencia fosc

para poder crear una base de tiempos de 10 bits.


1.293.

Condiciones de funcionamiento en el modo PWM:

1.294.

El perodo de pulso de salida (T) se determina por el registro PR2 del

temporizador Timer2. El perodo de PWM se puede calcular por la siguiente


ecuacin
1.295.
1.296. =(2+1)42
1.297.
1.298.

El ciclo de trabajo de PWM se especifica al utilizar en total 10 bits: los

ocho bits ms significativos del registro CCPR1L y los dos bits menos
significativos adicionales del registro CCP1CON (DC1B1 y DC1B0). El
resultado es un nmero de 10 bits dado por la siguiente frmula
1.299.
1.300.

=(:<5:4>)2

1.301.
105

1.302.

CCPRxH es de slo lectura en PWM.

1.303.

El pin de salida se va a poner a 1 constantemente, si por error el ancho de pulso


generado es ms largo que el perodo de PWM.

En esta aplicacin, no se puede utilizar el post-escalador del temporizador


Timer2 para generar perodos de PWM largos.

1.304.
1.305.

Cuando TMR2 (+ 2 bits) se iguala a CCPxH (+ 2 bits), CCPx 0.

1.306.

Existe una resolucin (nmero de bits) mxima que se puede obtener con el
funcionamiento en modo PWM.

1.307.

1.308.
1.309.
1.310.

Pasos para configurar e iniciar el mdulo CCP1 para funcionar en

modo PWM:
1.311.

Para configurar e iniciar el mdulo CCP1 para funcionar en modo PWM,

siga los siguientes pasos:

Deshabilitar el pin de salida del CCP1. Deber estar configurado como entrada.

Seleccionar el perodo de seal PWM al introducir el valor en el registro PR2.

Configurar el mdulo CCP1 para funcionar en modo PWM al combinar los bits
del registro CCP1CON.

Ajustar el ciclo de trabajo de seal PWM al introducir el valor en el registro


CCPR1L y al utilizar los bits DC1B1 y DC1B0 del registro CCP1CON.

Configurar e iniciar el temporizador Timer2:

Poner a cero el bit de bandera de interrupcin TMR2IF en el registro


PIR1
106

Ajustar el valor de divisin de frecuencia del temporizador Timer2 por


los bits

T2CKPS1 y T2CKPS0 del registro T2CON.

Iniciar el temporizador Timer2 al poner a uno el bit TMR2ON del


registro T2CON.

Habilitar los pines de salida de PWM despus de que haya sido acabado un ciclo
de PWM:

Esperar el desbordamiento del temporizador Timer2 (el bit TMR2IF del

registro PIR1 se pone a uno)


Configurar el pin apropiado como salida al poner a cero el bit en el
registro TRIS.
1.312.

EJERCICO 3

1.313.

Tema: Modo PWM del Mdulo CCP

1.314.

Descripcin: Realizamos el modo PWM del

mdulo CCP, donde efectuamos con nuestra programacin el ciclo de trabajo


del PWM utilizando las diferentes ecuaciones y poder generar un cdigo q
cumpla con los requerimientos establecidos.
1.315.

Materiales:

PIC 16F887
Teclado matricial
8 resistencia de 10k
Pantalla LCD
Osciloscopio

107

1.316.

1.317.
1.318.

Fig1. Modo PWM


Simulacin: Proteus
1.319.

1.320.
nclude <16f887.h>
1.321.
uses
XT,NOWDT,nomclr,NOLVP
1.322.
use delay(clock=4000000)
1.323.
define LCD_DB4 PIN_D4
1.324.
define LCD_DB5 PIN_D5
1.325.
define LCD_DB6 PIN_D6
1.326.
define LCD_DB7 PIN_D7
1.327.
define LCD_RS PIN_D2
1.328.
define LCD_E PIN_D3
1.329.
nclude <lcd1.c>

#i
#f
#
#
#
#
#
#
#
#i

1.330.
#i
nclude <kbd_lib.c>
1.331.
#
use fast_io(C)
1.332.
1.333.
v
oid main ()
1.334.
{
1.335.
c
omienzo:
1.336.
c
har k;
//variable char para
guardar valor de tec
1.337.
c
har dato[3]; //matriz de 3 datos
para ingreso de valor pwm
centen decena unidad
1.338.
in
t i;
//indice de la matriz de 3
valores para el ingreso del
teclado
108

1.339.
in
t c, d, u;
//valores para pwm
1.340.
in
t16 PWM;
//entero de
longitud 16 paraalmacenar
valor de pwm
1.341.
se
t_tris_c(0b00000000);
//se
debe establecer el puerto C
donde esta CCP como salida
para que funcione bien
1.342.
1.343.
lc
d_init();
//INICIAR LCD
1.344.
k
bd_init();
//INICIAR
TECLADO
1.345.
p
ort_b_pullups(TRUE);
//activar pull ups del pueto b
1.346.
1.347.
lc
d_putc("\f Grupo 1 PWM \n");
//\f borra el lcd \cambia
siguiente linea
1.348.
d
elay_ms(1000);
1.349.
1.350.
while (true)
1.351.
{
1.352.
k=kbd_getc();
1.353.
i
f(k!=0){
1.354.
i
f(k=='A'){
1.355.
1.356.
inicio:
1.357.
//etqueta de retorno si se desea
ingresar otro valor con A
1.358.
i=0;
1.359.
1.360.
printf(lcd_putc,"\f
ON:
INGRESE ");

1.361.
1.362.
while(i<=2)
//ciclo
whilw para ingreso de los
valores PWm uno por uno en la
matriz
1.363.
{
1.364.
k=kbd_getc();
//captura el
valor del puerto en K
1.365.
if(k!=0)
1.366.
{
1.367.
dato[i]=k; //almacena el valor
obtenido en el indice i de la
matriz dato PWM
1.368.
i++;
1.369.
printf(lcd_putc,"%u",k48);
//pone el dato en
pantalla en valor numerico %u
-48
1.370.
}
1.371.
}
1.372.
1.373.
c=(dato[0]-48);
//calculo
de los valores numericos de
char a numero
1.374.
d=(dato[1]-48);
1.375.
u=dato[2]-48;
1.376.
PWM=(100*c+10*d+u)*10.225
; //valor del PWM por 1024
debido a la resolucion
1.377.
1.378.
if ((100*c+10*d+u)>100||c>1)
//si el valor es mayor a 100 o en
centena mayor de 1
1.379.
{
109

1.380.
printf(lcd_putc,"\f Incorrecto");
1.381.
delay_ms(500);
1.382.
}
1.383.
else
// si el valor es
correcto genera el PWM
1.384.
{
1.385.
printf(lcd_putc,"\f PWM = %u
%u%u ",c,d,u);
1.386.
printf(lcd_putc,"\n Press A new
valor");
1.387.
delay_ms(2000);
1.388.
1.389.
pwm:
1.390.
1.391.
// configuraciones para el PWM
en timer 2 y CCP1
1.392.
1.393.
setup_timer_2(T2_DIV_BY_16
, 255, 1); //con 100 es 628 hz
con 255 244 hz revisar formula
1.394.
setup_ccp1(CCP_PWM);
1.395.
set_pwm1_duty(PWM);
//ciclo de trabajo segun valor de
PWM almacenado
1.413.
1.414.

1.396.
1.397.
k=kbd_getc();
1.398.
if(k=='A')
1.399.
{
1.400.
goto inicio;//obtengo el valor de
k si presiono A se regresa al
inicio
1.401.
}
1.402.
1.403.
goto pwm; //si no presiono A
se queda en el mismo ciclo con
el mismo valor de duty
1.404.
}
1.405.
}
1.406.
k=kbd_getc();
1.407.
i
f(k=='B'){
1.408.
l
cd_putc("\f Apagado");
1.409.
}
1.410.
goto comienzo;
1.411.
}
1.412.
}}

EJERCICO PROPUESTO

1.415.
El siguiente cdigo presenta el modo PWM del mdulo CCP, lo que nos
permitir variar el ciclo de trabajo de una seal cuadrtica en 3 posiciones
diferentes y verificar la forma de onda y la variacin de la misma en diodo led.

1.416.
1.417.
1.418.
1.419.
110

1.420.

Funciones CCP en compilador CCS


1.421.

1.422.

SETUP_CCP1(mode)

1.423.

SETUP_CCP2(mode)

1.424.

Estas funciones inicializa el contador CCP. Para acceder a los contadores

CCP se utilizan las variables CCP_1 y CCP_2. Los valores para mode son:
1.425.

CCP_OFF

1.426.

CCP_CAPTURE_FE

1.427.

CCP_CAPTURE_RE

1.428.

CCP_CAPTURE_DIV_4

1.429.

CCP_CAPTURE_DIV_16

1.430.

CCP_COMPARE_SET_ON_MATCH

1.431.

CCP_COMPARE_CLR_ON_MATCH

1.432.

CCP_COMPARE_INT

1.433.

CCP_COMPARE_RESET_TIMER

1.434.

CCP_PWM

1.435.

CCP_PWM_PLUS_1 (slo si se utiliza un ciclo de trabajo de 8 bits)

1.436.

CCP_PWM_PLUS_2 (slo si se utiliza un ciclo de trabajo de 8 bits)

1.437.

CCP_PWM_PLUS_3 (slo si se utiliza un ciclo de trabajo de 8 bits)

1.438.

SETUP_COMPARATOR(mode)

1.439.
1.440.

Slo los PIC de la serie 16c62x pueden usar esta funcin (vase el

archivo de cabecera 16c620.h), donde mode puede ser:


1.441.

A0_A3_A1_A2

1.442.

A0_A2_A1_A2

1.443.

NC_NC_A1_A2

1.444.

NC_NC_NC_NC

1.445.

A0_VR_A2_VR

1.446.

A3_VR_A2_VR

1.447.

A0_A2_A1_A2_OUT_ON_A3_A4

1.448.

A3_A2_A1_A2

1.449.

Cada uno de los cuatro tems separado por '_' son C1-, C1+, C2 -, C2+

1.450.
111

1.451.

Ejemplo:

1.452.

setup_comparator (A0_A3_A1_A2); //inicializa dos comparadores

independientes
1.453.
1.454.

SET_PWM1_DUTY(value)

1.455.

SET_PWM2_DUTY(value)

1.456.
1.457.

Estas funciones escriben los 10 bits de value al dispositivo PWM para

establecer el ciclo de trabajo. Se puede usar un valor de 8 bits si no son


necesarios los bits menos significativos.

1.458. SENSORES (LM35, ULTRASNICO Y


TCRT5000)
1.459.
1.460.
1.461.

Sensores y actuadores son ejemplos de transductores.


Un transductor es un dispositivo que convierte energa de tipo calrica,

lumnica, acstica, presin, movimiento, caudal, etc. a otra generalmente


elctrica para poder medirla y eventualmente controlarla en forma relativamente
fcil.

1.462.

Caractersticas de los sensores

1.463.

Cuando se disean sistemas de adquisicin de datos con computadora,

hay aspectos a cerca de los sensores que es necesario tener en cuenta:


-

La naturaleza de la seal que el sensor transductor genera: voltaje, rango de


amplitud, respuesta en frecuencia, precisin necesaria, determinan el tipo de
acondicionamiento de seal, convertidor A/D y cualquier otro hardware a

utilizar.
La influencia de las seales de ruido as como los efectos de carga del hardware

de adquisicin de datos sobre el sensor.


La calibracin del sensor con respecto a la variable fsica. Si la respuesta del
sensor a los cambios de la variable fsica es lineal o no. Una calibracin mal

hecha va a producir mediciones errneas.


La interdependencia entre los distintos componentes del sistema de adquisicin
de datos, por ejemplo un sensor muy bueno, con un pobre convertidor A/D no
sirve de casi nada.
112

La precisin del sensor, esto es la capacidad de medir el mismo valor repetidas

veces en idnticas condiciones.


El tiempo de respuesta del sensor, es decir, el tiempo requerido para responder a

un cambio brusco de la variable que est siendo censada.


El coeficiente de temperatura del sensor, el cual viene dado por el cambio que se
produce en la respuesta del sensor debido al cambio en la temperatura a la cual
se encuentra, por ejemplo el aumento en las corrientes de fuga y el voltaje offset

de un amplificador, el aumento de la corriente en la oscuridad de un fotodiodo.


La histresis de un sensor, la cual se define como la dependencia de la salida del
sensor de la respuesta anterior. Esta es muy comn en sistemas magnticos y

mecnicos. [1]
1.464.

1.465.

Sensor LM35 (sensor de temperatura)

1.466.

La serie LM35 es la precisin de circuitos integrados de temperatura,

cuya tensin de salida es linealmente proporcional a la Celsius (centgrados) la


temperatura. LM35 tiene as una ventaja sobre los sensores de temperatura
lineal calibrada en Kelvin, como el usuario no est obligado a restar una gran
constante voltaje de su produccin para obtener centgrados conveniente
escalado.
1.467.

El LM35 no requiere ninguna calibracin externa o recorte para

proporcionar una precisin tpica de g 1/4 C a temperatura ambiente y g 3/4 C


durante un total de +150 -55 C Rango de temperatura. De bajo costo est
asegurada por el recorte y calibracin al nivel de la oblea. El LM35 de baja
impedancia de salida, salida lineal y precisa calibracin inherente hace una
interfaz para la lectura o los circuitos de control especialmente fcil.
1.468.

Lo se puede utilizar con fuentes de alimentacin individuales, o con ms

y suministros de menos. Como se seala a slo 60mA de su suministro, tiene


muy bajo calentamiento espontneo, menos del 0,1 C en aire quieto. El LM35
es tasados para funcionar en un -55 +150 a C de temperatura rango, mientras
que el LM35C est pensado para una b40 C a A110 gama (B10 con mayor
precisin). La serie LM35 es envasado disponibles en paquetes hermticos de
transistores A-46, mientras que el LM35C, LM35CA y LM35D tambin estn
disponibles en el plstico TO-92 Transistor paquete. El LM35D es tambin

113

disponible en una superficie 8-plomo montar esbozo paquete pequeo y un


plstico A-202 paquete.

1.469.
1.470.
1.471.

1.472.
-

Figura 46 Sensor de temperatura LM35

Fuente: http://blog.utp.edu.co/jnsanchez/files/2011/03/LM351.pdf

Caractersticas

Calibrada directamente en grados Celsius (centgrados)


Lineal + 10,0 mV / C factor de escala 0,5 C exactitud regulable (a +25 C)
Calificacin para la plena -55 a +150 C Rango
Apto para aplicaciones remotas
Bajo costo debido a la oblea-nivel de recorte
Opera de 4 a 30 voltios
Menos de 60 A de corriente de fuga
Bajo nivel de calefaccin, 0,08 C en aire
No linealidad slo 1/4 C tpico
Impedancia de salida baja, de 0,1 para carga de 1 [2]

1.473.

Aplicaciones Tpicas

1.474.
1.475.
1.476.

Figura 47 Sensor de temperatura LM35

Fuente. http://blog.utp.edu.co/jnsanchez/files/2011/03/LM351.pdf

1.477.

114

1.478.
1.479.
1.480.

Figura 48 Sensor de temperatura LM35

Fuente. http://blog.utp.edu.co/jnsanchez/files/2011/03/LM351.pdf

1.481.
1.482.

EJERCICO 4

1.483.

Tema: Sensor LM35

1.484.

Descripcin:

Realizamos

un

control

de

temperatura mediante el sensado de un LM35, el cual nos permite visualizar la


temperatura ambiente de un lugar y podemos variarla dependiendo el objeto que
le acerquemos al sensor ya sea una temperatura alta y baja.
1.485.

Materiales:

PIC 18F4550
Sensor LM35
Pantalla LCD
1.486.

115

1.487.

1.488.
1.489.

1.490.
#
1.491.
in
clude <18f4550.h>
1.492.
#f
uses
INTRC,
NOWDT,
NOPUT,
NOMCLR,
NOBROWNOUT,
NOLVP,
NOCPD, NOPROTECT,HS
1.493.
#
device adc=10
1.494.
#
use delay (clock=20M)
1.495.
#
define LCD_DB4 PIN_D4
1.496.
#
define LCD_DB5 PIN_D5
1.497.
#
define LCD_DB6 PIN_D6
1.498.
#
define LCD_DB7 PIN_D7
1.499.
#
define LCD_RS PIN_D1

Fig1. Medidor de Temperatura


Simulacin: Proteus

1.500.
#
define LCD_E PIN_D0
1.501.
#i
nclude <lcd1.c>
1.502.
1.503.
///
/////////////////LECTURA
DE
DATOS///////////////////
1.504.
v
oid main (){
1.505.
fl
oat temp1;
1.506.
fl
oat temp,tempf=0.0,tempt=0.0;
1.507.
in
t read,i;
1.508.
lc
d_init();
1.509.
w
hile (true){

116

1.510.
se
tup_adc(ADC_CLOCK_INTE
RNAL);
1.511.
Setup_adc_ports(AN0);
/
/PONE
PUERTO
RA0
ANALOGO
1.512.
setup_counters(rtcc_internal,rtc
c_div_1);
1.513.
set_adc_channel(0);
//
INDICA EL PIN A LEER RA0
1.514.
delay_us(20);
1.515.
for(i=0;i<5;i=i+1)
1.516.
{
1.517.
read=read_adc();
1.518.
temp1=(float)read;
//LEE EL VALOR DEL PIN
1.519.
delay_us(10);
1.520.
1.521.
if(temp1<=10)
1.522.
{
1.523.
temp=(temp1*0.004999585*10
0)+0.001;//0.01960784314*100
);
//CONVIERTE EL
VALOR LEIDO DE HEXA AL
REAL
el
numero
0.01960784314
1.524.
tempf=tempf+temp; //viene de
dividir (5/255) y el resultado se
multiplica por 100 para alcanzar
150 grados
1.525.
delay_ms(10);
1.526.
}
1.527.
if(temp1<=49&&temp1>10)

1.528.
{
1.529.
temp=(temp1*0.004999585*10
0)-0.49;//0.01960784314*100);
//CONVIERTE EL VALOR
LEIDO DE HEXA AL REAL el
numero 0.01960784314
1.530.
tempf=tempf+temp; //viene de
dividir (5/255) y el resultado se
multiplica por 100 para alcanzar
150 grados
1.531.
delay_ms(10);
1.532.
}
1.533.
if(temp1<=90&&temp1>49)
1.534.
{
1.535.
temp=(temp1*0.004999585*10
0)-0.99;//0.01960784314*100);
//CONVIERTE EL VALOR
LEIDO DE HEXA AL REAL el
numero 0.01960784314
1.536.
tempf=tempf+temp; //viene de
dividir (5/255) y el resultado se
multiplica por 100 para alcanzar
150 grados
1.537.
delay_ms(10);
1.538.
}
1.539.
if(temp1<=131&&temp1>90)
1.540.
{
1.541.
temp=(temp1*0.004999585*10
0)-1.49;//0.01960784314*100);
//CONVIERTE EL VALOR
LEIDO DE HEXA AL REAL el
numero 0.01960784314
1.542.
tempf=tempf+temp; //viene de
dividir (5/255) y el resultado se
117

multiplica por 100 para alcanzar


150 grados
1.543.
delay_ms(10);
1.544.
}
1.545.
if(temp1<=172&&temp1>131)
1.546.
{
1.547.
temp=(temp1*0.004999585*10
0)-1.99;//0.01960784314*100);
//CONVIERTE EL VALOR
LEIDO DE HEXA AL REAL el
numero 0.01960784314
1.548.
tempf=tempf+temp; //viene de
dividir (5/255) y el resultado se
multiplica por 100 para alcanzar
150 grados
1.549.
delay_ms(10);
1.550.
}
1.551.
if(temp1<=213&&temp1>172)
1.552.
{
1.553.
temp=(temp1*0.004999585*10
0)-2.49;//0.01960784314*100);
1.566.
1.567.
}
1.568.
1.569.

1.570.

//CONVIERTE EL VALOR
LEIDO DE HEXA AL REAL el
numero 0.01960784314
1.554.
tempf=tempf+temp; //viene de
dividir (5/255) y el resultado se
multiplica por 100 para alcanzar
150 grados
1.555.
delay_ms(10);
1.556.
}
1.557.
}
1.558.
tempt=tempf/5.0;
1.559.
printf(lcd_putc,"
\fTEMPERATURA \nT= %2.2f
oC",tempt); //MUESTRA EN
EL LCD EL VALOR DE
TEMPERATURA
1.560.
i=0;
1.561.
tempf=0.0;
1.562.
tempt=0.0;
1.563.
delay_us(20);
1.564.
1.565.
}

EJERCICIO PROPUESTO

1.571.
El siguiente programa est configurado para captar la seal analgica de
un sensor lm35 y visualizarla en una pantalla lcd.
1.572.
1.573.

1.574.

SENSOR ULTRASNICO

1.575.

Un sensor ultrasnico transmite ondas ultrasnicas en el aire y detecta las

ondas reflejadas desde un objeto. Hay muchas aplicaciones para sensores de

118

ultrasonidos, tales como en sistemas de alarma de intrusin, puertas automticas


y sensores de copia de seguridad para automviles.
1.576.

Acompaado por el rpido desarrollo de la tecnologa de procesamiento

de la informacin, nuevos campos de aplicacin, tales como equipos de


automatizacin de fbricas de automviles y la electrnica van en aumento. [3]
1.577.
1.578.

SENSOR ULTRASONIDOS HC-SR04

El sensor de ultrasonidos se enmarca dentro de los sensores para medir

distancias o superar obstculos, entre otras posibles funciones.


1.579.

En este caso vamos a utilizarlo para la medicin de distancias. Esto lo

consigue enviando un ultrasonido (inaudible para el odo humano por su alta


frecuencia) a travs de uno de la pareja de cilindros que compone el sensor (un
transductor) y espera a que dicho sonido rebote sobre un objeto y vuelva,
retorno captado por el otro cilindro.
1.580.

Este sensor en concreto tiene un rango de distancias sensible entre 3cm y

3m con una precisin de 3mm.

1.581.
1.582.
1.583.

Figura 49 Sensor ultrasnico

Fuente: http://www.parsicitalia.it/files/HC-SR04-Datasheet.pdf

1.584.

Funcionamiento

1.585.

El sensor PING funciona mediante la transmisin de una rfaga de

ultrasonido en una frecuencia muy por encima del rango auditivo humano y
provee un pulso de salida, el cual corresponde con el tiempo requerido por el
eco (rebote) para retornar hasta el sensor. Al medir la duracin de este pulso se
puede calcular fcilmente la distancia al objetivo.
1.586.

Las caractersticas ms importantes del sensor PING son las siguientes:

Rango: 2 cm a 3 m
LED indicador de rfaga que muestra la actividad del sensor
Interfaz bidireccional por pulso, en un nico pin de E/S para comunicacin con

microcontroladores TTL (5V) o CMOS (3.3V)


Disparo de entrada: pulso TTL positivo, 2 s mnimo, 5 s tpico
119

Pulso eco de salida: pulso positivo TTL, 115 s mnimo a 18.5 ms mximo. [4]
1.587.

EJERCICIO 5

1.588.

Tema: Sensor Ultrasnico

1.589.

Descripcin: Realizamos un programa que con la

sensorizacion de un ultrasnico podemos detectar a que distancia se encuentra


un objeto sensado por el mismo. Programando de una manera adecuada para
que la distancia mostrada en la LCD sea precisa con la distancia que se
encuentra el objeto.
1.590.

Materiales:

PIC 16F887
Sensor Ultrasnico
Pantalla LCD
1.591.
1.592.

1.593.
1.594.

Fig1Sensor Ultrasnico
Simulacin: Proteus

120

1.595.
#i
nclude <16F887.h>
1.596.
#
FUSES
XT,NOWDT,NOPROTECT,PU
T,NOBROWNOUT,NOLVP
1.597.
#
use delay(clock=4000000)
1.598.
#
define LCD_DB4 PIN_D4
1.599.
#
define LCD_DB5 PIN_D5
1.600.
#
define LCD_DB6 PIN_D6
1.601.
#
define LCD_DB7 PIN_D7
1.602.
#
define LCD_RS PIN_D1
1.603.
#
define LCD_E PIN_D0
1.604.
#i
nclude <lcd1.c>
1.605.
1.606.
1.607.
in
t16 tiempo;
1.608.
fl
oat distancia;
1.609.
#
define trig pin_B1
1.610.
#
define echo pin_B0
1.611.
#
USE standard_io(b)
1.612.
1.613.
v
oid main()
1.614.
{
1.615.
lc
d_init();
1.616.
pr
intf(LCD_PUTC,
"\f
Ultrasonico.");
1.617.
d
elay_ms(500);
1.618.
pr
intf(LCD_PUTC,
"\f
Ultrasonico..");
1.619.
d
elay_ms(500);

1.620.
pr
intf(LCD_PUTC,
"\f
Ultrasonico...");
1.621.
d
elay_ms(500);
1.622.
1.623.
se
tup_timer_1(T1_INTERNAL|
T1_DIV_BY_8);
1.624.
1.625.
w
hile(1)
1.626.
{
1.627.
o
utput_high(trig);
1.628.
d
elay_us(20);
1.629.
o
utput_low(trig);
1.630.
w
hile(!input(echo))
1.631.
{
}
1.632.
se
t_timer1(0);
1.633.
w
hile(input(echo))
1.634.
{
}
1.635.
ti
empo=get_timer1();
1.636.
if
(tiempo<41)
1.637.
{
1.638.
if
(tiempo<41&&tiempo>34)
1.639.
{
1.640.
di
stancia=(tiempo*7.45)/(58.0);
1.641.
pr
intf(LCD_PUTC, "\fContador :
%Lu \nDistancia = %0.2f
cm",tiempo,distancia);
1.642.
d
elay_ms(500);
1.643.
}
1.644.
if
(tiempo<=34&&tiempo>31)
1.645.
{
121

1.646.
di
stancia=(tiempo*7.1)/(58.0);
1.647.
pr
intf(LCD_PUTC, "\fContador :
%Lu \nDistancia = %0.2f
cm",tiempo,distancia);
1.648.
d
elay_ms(500);
1.649.
}
1.650.
if
(tiempo<=31&&tiempo>28)
1.651.
{
1.652.
di
stancia=(tiempo*6)/(58.0);
1.653.
pr
intf(LCD_PUTC, "\fContador :
%Lu \nDistancia = %0.2f
cm",tiempo,distancia);
1.654.
d
elay_ms(500);
1.655.
}
1.656.
if
(tiempo<=28&&tiempo>20)
1.657.
{
1.670.
1.671.

1.658.
di
stancia=(tiempo*5.3)/(58.0);
1.659.
pr
intf(LCD_PUTC, "\fContador :
%Lu \nDistancia = %0.2f
cm",tiempo,distancia);
1.660.
d
elay_ms(500);
1.661.
}
1.662.
}
1.663.
el
se{
1.664.
di
stancia=(tiempo*8.05)/(58.0);
1.665.
pr
intf(LCD_PUTC, "\fContador :
%Lu \nDistancia = %0.2f
cm",tiempo,distancia);
1.666.
d
elay_ms(500);
1.667.
}
1.668.
}
1.669.
}

1.672.

EJERCICO PROPUESTO

1.673.

El siguiente programa trabaja con una serie de bits de resolucin que

permiten hacer u calculo a la seal analgica que es enviada por medio del
sensor e indicarnos la distancia qu este se encuentra. Sin embargo en proteus al
no contar con las libreras necesarias del sensor no se puede correr el programa.
1.674.

1.675.

SENSOR INFRARROJO

1.676.

Como sensores de luz ambiental juegan un papel cada vez ms

importante en nuestras vidas, sensor de proximidad se convierte en un


compaero simple y de bajo costo que permite una amplia gama de las
aplicaciones para hacer nuestra vida diaria ms fcil.
1.677.

Sensor de proximidad basado en la deteccin de seales de infrarrojos

requiere de dos partes: LED infrarrojo y sensor de infrarrojos. El LED de


infrarrojos emite seal de infrarrojos al objeto de deteccin, una porcin de
122

seal que rebota de la superficie de deteccin de objeto, esta seal infrarroja


reflejada entonces fue capturada por el sensor de infrarrojos.
1.678.

La intensidad de los cambios de la seal de infrarrojos capturados en

consecuencia cuando un objeto de deteccin es cada vez ms cerca o en


movimiento, la seal infrarroja capturada se procesa en tiempo real a travs de
la luz para la conversin digital para revelar la distancia o incluso el
movimiento del objeto detectable.[5]

1.679.
1.680.
1.681.

Figura 50 No hay deteccin, no hay objeto.

Fuente. http://www.intersil.com/content/dam/Intersil/documents/an14/an1436.pdf
1.682.

Figura No 32.

1.683.
1.684.
1.685.

Figura 51 Objeto detectable dentro de 10 cm de deteccin de proximidad.


Fuente. http://www.intersil.com/content/dam/Intersil/documents/an14/an1436.pdf

1.686.

SENSOR INFRARROJO TCRT5000

1.687.

Este sensor consiste en un emisor de infrarrojos LED y un Fototransistor.

1.688.

La construccin compacta, detecta la presencia de un objeto usando la

viga reflexiva del IR del objeto.


1.689.

El LED emite un haz de luz invisible para el ojo humano, que se refleja

en una superficie adyacente (3-15mm) y capturado por el fototransistor, que


tiene una pelcula de filtrado de luz natural, que permite el paso de infrarrojos
emitida por los LED. Por lo tanto, de acuerdo con la reflectividad de la
superficie, el fototransistor recibe un valor mayor o menor de la reflexin.
1.690.

Detecta materiales reflexivos tales como papel, tarjetas de IBM, cintas

magnticas, etc.
1.691.

Funcionamiento
123

1.692.

El sensor se alimenta por sus patitas 1 y 3 y estas corresponden a Vcc y

Gnd respectivamente, la patita 2 es la salida del detector y la patita 4 es la salida


que modula al led emisor externo. Mediante el potencimetro P1 se vara la
distancia a la que es detectado el objeto. Contra ms baja sea la resistencia de
este potencimetro, ms intensa ser la luz emitida por el diodo de IR y por lo
tanto mayor la distancia a la que puede detectar el objeto.
1.693.

El siguiente esquema vemos el simple circuito necesario para hacer

funcionar al sensor.
1.694.

Usos

1.695.

Se usan para deteccin de obstculos por reflexin y deteccin de

oponentes en combates de sumo.


1.696.

Especificaciones:

Deteccin de distancia: 12m m


Longitud de onda del funcionamiento: 950 milmetros [6]
1.697.

EJERCICIO 6

1.698.

Tema: Sensor Infrarrojo

1.699.

Descripcin: Realizamos un control de deteccin

de objetos con un sensor infrarrojo el cual detecta la presencia de un objeto en


la distancia establecida en la programacin.
1.700.

Materiales:

PIC 16F887
Sensor Infrarrojo
1 resistencia de 10k
1 resistencia de 150
Pantalla LCD
1.701.

124

1.702.

1.703.
1.704.

1.705.
1.706.
#i
nclude <16f887.h>
1.707.
#f
uses
XT,
NOWDT,
NOPROTECT,
NOLVP,
NOCPD, NOWRT, NODEBUG
1.708.
#
device *=16
1.709.
#
device adc=10
1.710.
#
use delay(clock=4M)
1.711.
#
define LCD_DB4 PIN_D4
1.712.
#
define LCD_DB5 PIN_D5
1.713.
#
define LCD_DB6 PIN_D6
1.714.
#
define LCD_DB7 PIN_D7
1.715.
#
define LCD_RS PIN_D2
1.716.
#
define LCD_E PIN_D3
1.717.
#i
nclude <lcd.c>

Fig1Sensor Infrarrojo
Simulacin: Proteus

1.718.
1.719.
1.720.
in
t16 value;
1.721.
fl
oat32 y;
1.722.
v
oid main()
1.723.
{
1.724.
se
tup_adc_ports(sAN0|
VSS_VDD);//
entrada
del
sensor
1.725.
se
tup_adc(ADC_CLOCK_INTE
RNAL);
1.726.
se
t_adc_channel(0);
1.727.
1.728.
lc
d_init();
1.729.
lc
d_gotoxy(5,1);
1.730.
pr
intf(lcd_putc,"Grupo 1");
1.731.
pr
intf(lcd_putc,"\n Infrarrojo");
125

1.732.
d
elay_ms(650);
1.733.
lc
d_init();
1.734.
1.735.
1.736.
w
hile(true)// ciclo para generar el
valor de la distancia que
proporciona el sensor
1.737.
{
1.738.
d
elay_ms(50);
1.739.
v
alue=read_adc();//devuelve el
valor del adc
1.740.
y
=value*0.005;// funcion para
generar la distancia
1.741.
y
=y-1.183;
1.742.
1.743.
lc
d_gotoxy(5,2);
1.744.
pr
intf(lcd_putc,"%2.2f cm",y);//
visualizacion de la distancia en
el lcd
1.745.
lc
d_gotoxy(5,1);
1.746.
pr
intf(lcd_putc,"Distancia");
1.763.

1.747.
d
elay_ms(1000);
1.748.
if
((y<=3)&&(y>=1))// condicion
para detectar en un rango
especifico a un objeto
1.749.
{
1.750.
pr
intf(lcd_putc,"\f
Detecta
Objeto");
1.751.
d
elay_ms(1000);
1.752.
pr
intf(lcd_putc,"\f");
1.753.
}
1.754.
el
se// caso contrario no detecta el
objeto ; fuera de rango
1.755.
{
1.756.
pr
intf(lcd_putc,"\f No Detecta
Objeto");
1.757.
d
elay_ms(1000);
1.758.
pr
intf(lcd_putc,"\f");
1.759.
}
1.760.
}
1.761.
1.762.
}

1.764.
1.765.

EJERCICIO PROPUESTO

1.766.
El siguiente programa detecta la presencia de un sensor infrarrojo en el
rango permisible del mismo lo que indicara n mensaje de detectado y no
detectado en un pantalla LCD
1.767.

1.768.
1.769. Control PWM para Motores DC y AC
1.770.
1.771.

Stephen J. Chapman (2000, Pg. 351) Menciona que:


126

1.772. Los motores son mquinas utilizadas para convertir potencia elctrica
en potencia mecnica. [ 1 ]

1.773.

MOTOR DE CORRIENTE CONTINUA

1.774.

Un motor elctrico de Corriente Continua es esencialmente una mquina

que convierte energa elctrica en movimiento o trabajo mecnico, a travs de


medios electromagnticos.
1.775.

EJERCICO 7

1.776.

Tema: PWM con motor DC

1.777.

Descripcin: Realizamos un control de velocidad

con un PWM el cual generamos desde una programacin realizada en PIC C , y


este varia la velocidad del motor DC dependiendo el PWM es decir el duty que
generamos desde el teclado matricial.
1.778.

Materiales:

PIC 16F887
Motor DC
Teclado Matricial

8 resistencias de 10k
Pantalla LCD
Puente H L293D

127

Fig1 PWM con motor DC


Simulacin: Proteus

#include <16f887.h>
#fuses
XT,NOWDT,nomclr,NOLVP
#use delay(clock=4000000)
#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_D5
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7
#define LCD_RS PIN_D2
#define LCD_E PIN_D3
#include <lcd1.c>
#include <kbd_lib.c>
#use fast_io(C)
void main ()
{
comienzo:
char k;
//variable char para
guardar valor de tec

char dato[3]; //matriz de 3 datos


para ingreso de valor pwm
centen decena unidad
int i;
//indice de la matriz de
3 valores para el ingreso del
teclado
int c, d, u; //valores para pwm
int16 PWM;
//entero de
longitud 16 paraalmacenar valor
de pwm
set_tris_c(0b00000000);
//se
debe establecer el puerto C
donde esta CCP como salida
para que funcione bien
lcd_init();
//INICIAR LCD
kbd_init();
//INICIAR
TECLADO
port_b_pullups(TRUE);
//activar pull ups del pueto b
128

lcd_putc("\f Grupo 1 PWM \n");


//\f borra el lcd \cambia
siguiente linea
delay_ms(1000);
while (true)
{
k=kbd_getc();
if(k!=0){
if(k=='A'){

inicio:
//etqueta de retorno si se
desea ingresar otro valor con A
i=0;
printf(lcd_putc,"\f
INGRESE ");

ON:

while(i<=2)
//ciclo
whilw para ingreso de los
valores PWm uno por uno en la
matriz
{
k=kbd_getc(); //captura el
valor del puerto en K
if(k!=0)
{
dato[i]=k; //almacena el
valor obtenido en el indice i de
la matriz dato PWM
i++;
printf(lcd_putc,"%u",k48);
//pone el dato en pantalla
en valor numerico %u -48
}
}
c=(dato[0]-48);
//calculo
de los valores numericos de char
a numero
d=(dato[1]-48);
u=dato[2]-48;

PWM=(100*c+10*d+u)*10.22
5; //valor del PWM por 1024
debido a la resolucion
if ((100*c+10*d+u)>100||c>1)
//si el valor es mayor a 100 o en
centena mayor de 1
{
printf(lcd_putc,"\f
Incorrecto");
delay_ms(500);
}
else
// si el valor es
correcto genera el PWM
{
printf(lcd_putc,"\f PWM = %u
%u%u ",c,d,u);
printf(lcd_putc,"\n Press A
new valor");
delay_ms(2000);
pwm:
// configuraciones para el
PWM en timer 2 y CCP1
setup_timer_2(T2_DIV_BY_1
6, 255, 1); //con 100 es 628 hz
con 255 244 hz revisar formula
setup_ccp1(CCP_PWM);
set_pwm1_duty(PWM);
//ciclo de trabajo segun valor de
PWM almacenado
k=kbd_getc();
if(k=='A')
{
goto inicio;//obtengo el valor
de k si presiono A se regresa al
inicio
}
goto pwm; //si no presiono A
se queda en el mismo ciclo con
el mismo valor de duty
}
129

}
k=kbd_getc();
if(k=='B'){
lcd_putc("\f Apagado");

}
goto comienzo;
}
}}

EJERCICIO PROPUESTO

El siguiente programa tiene por objetivo disear un lenguaje de programacin


que nos permita variar el ciclo de trabajo de una seal cuadrtica y verificar su
funcionaiento en un motor de 5volts.

FUNDAMENTOS DE OPERACIN DE LOS MOTORES


ELCTRICOS

En magnetismo se conoce la existencia de dos polos: polo norte (N) y polo sur
(S), que son las regiones donde se concentran las lneas de fuerza de un imn.
Un motor para funcionar se vale de las fuerzas de atraccin y repulsin que
existen entre los polos. De acuerdo con esto, todo motor tiene que estar formado
con polos alternados entre el estator y el rotor, ya que los polos magnticos
iguales se repelen, y polos magnticos diferentes se atraen, produciendo as el
movimiento de rotacin.

Un motor elctrico opera primordialmente en base a dos principios: El de


induccin, descubierto por Michael Faraday en 1831; que seala, que si un
conductor se mueve a travs de un campo magntico o est situado en las
proximidades de otro conductor por el que circula una corriente de intensidad
variable, se induce una corriente elctrica en el primer conductor. Y el principio
que Andr Ampre observo en 1820, en el que establece: que si una corriente
pasa a travs de un conductor situado en el interior de un campo magntico, ste
ejerce una fuerza mecnica o f.e.m. (fuerza electromotriz), sobre el conductor.

Antonio Nachez (2000, Pg. 5) Menciona que:

Los tiristores constituyen una familia de dispositivos que pueden tomar

diferentes nombres y caractersticas, pero donde todos los elementos que la


componen se basan en el mismo principio de funcionamiento.

Los dispositivos mas conocidos de la familia de los tiristores para

aplicaciones de potencia son: [ 2 ]


130


SCR (Silicon controled Rectifiers)
TRIAC
GTO (Gate Turn Off)

SCR
El SCR (Silicon Controled Rectifier / Rectificador controlado de silicio) es un
dispositivo semiconductor de 4 capas que funciona como un conmutador casi
ideal.
Estructura y smbolo de un SCR

Figura 52 Estructura SCR

Fuente: http://www2.uca.es/grup-invest/instrument_electro/Ramiro/docencia_archivos/Tiristores.PDF

A = nodo, G = compuerta o Gate y C = K = ctodo


Funcionamiento bsico del SCR

Figura 53 Circuito de Corrientes Fuente: http://www2.uca.es/grupinvest/instrument_electro/Ramiro/docencia_archivos/Tiristores.PDF

Al aplicarse una corriente IG al terminal G (base de Q2 y colector de Q1), se


producen dos corrientes: IC2 = IB1.

IB1 es la corriente base del transistor Q1 y causa que exista una corriente de
colector de Q1 (IC1) que a su vez alimenta la base del transistor Q2 (IB2), este a
su vez causa ms corriente en IC2, que es lo mismos que IB1 en la base de Q1

Los parmetros del SCR son:


- VRDM: Mximo voljaje inverso de cebado (VG = 0)
- VFOM: Mximo voltaje directo sin cebado (VG = 0)
- IF: Mxima corriente directa permitida.
131

- PG: Mxima disipacin de potencia entre compuerta y ctodo.


- VGT-IGT: Mximo voltaje o corriente requerida en la compuerta (G) para el
cebado
- IH: Mnima corriente de nodo requerida para mantener cebado el SCR
- dv/dt: Mxima variacin de voltaje sin producir cebado.
- di/dt: Mxima variacin de corriente aceptada antes de destruir el SCR.

Triac
El Triac es un dispositivo semiconductor que pertenece a la familia de los
dispositivos de control: los tiristores. El triac es en esencia la conexin de dos
tiristores en paralelo pero conectados en sentido opuesto y compartiendo la
misma compuerta.

Figura 54 Simbologia TRIAC

Fuente: http://www2.uca.es/grup-invest/instrument_electro/Ramiro/docencia_archivos/Tiristores.PDF

A1: Anodo 1, A2: Anodo 2, G: Compuerta

El triac slo se utiliza en corriente alterna y al igual que el tiristor, se dispara por
la compuerta. Como el triac funciona en corriente alterna, habr una parte de la
onda que ser positiva y otra negativa.

Funcionamiento del Triac

La parte positiva de la onda (semiciclo positivo) pasar por el triac siempre y


cuando haya habido una seal de disparo en la compuerta, de esta manera la
corriente circular de arriba hacia abajo (pasar por el tiristor que apunta hacia
abajo), de igual manera:

La parte negativa de la onda (semiciclo negativo) pasar por el triac siempre y


cuando haya habido una seal de disparo en la compuerta, de esta manera la

132

corriente circular de abajo hacia arriba (pasar por el tiristor que apunta hacia
arriba)

Para ambos semiciclos la seal de disparo se obtiene de la misma patilla (la


puerta o compuerta).

EJERCICIO 8

Tema: PWM con motor AC y TRIAC

Descripcin: Realizamos un control de velocidad con un PWM acoplando una


etapa de potencia con un TRIAC utilizando un cruce por cero; el cual generamos
desde una programacin realizada en PIC C , y este varia la velocidad del motor
DC dependiendo el PWM es decir el duty que generamos desde el teclado
matricial.

Materiales:

Pantalla LCD
Teclado matricial
Motor AC
Pic 16F887
Transformador
Puente de Diodos
Resistencias
MOC
TRIAC

133

Fig1 PWM con motor AC y TRIAC


Simulacin: Proteus

#include <16F887.h>
#fuses intrc_io, nowdt, nomclr,
noput
#use delay(clock=4M)
#include <kbd_4x4.c>
#BYTE WPUB =0X95
#BYTE OPTION_REG = 0X81
#include <lcd3.c>
char k;
int y,z;
void main()
{
OPTION_REG = 0;
WPUB= 0B11111111;
//port_b_pullups(true);
kbd_init();
lcd_init();
lcd_putc("\f !BIENVENIDO!\n
Presione #");
delay_us(100);

while (true)
{
delay_us(100);
k=kbd_getc();
if(k!=0)
{
y=k-48;
switch (y)
{
case(1):
z=1;
lcd_putc("\f nivel de PWM\n
15/o");
delay_us(20);
break;
case(2):
z=2;
134

lcd_putc("\f nivel de PWM \n


30/o");
delay_us(20);
break;
case(3):
z=3;
printf(lcd_putc,"\f nivel de
PWM \n 50/o");
delay_us(20);
break;
case (4):
z=4;
printf(lcd_putc,"\f nivel de
PWM \n 65/o");
delay_us(20);
break;
case (5):
z=5;
printf(lcd_putc,"\f nivel de
PWM \n 90/o");
delay_us(20);
break;
case (6):
lcd_putc("\f !BIENVENIDO!\n
Presione #");
output_low(pin_c0);
delay_us(20);
K=0;
z=0;
}
}else output_low(pin_c0);
if((z==1))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);

delay_us(7200);
output_high(pin_c0);
delay_us(1000);
}
}
}else if((z==2))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(6000);
output_high(pin_c0);
delay_us(2200);
}
}
}else if((z==3))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(4800);
output_high(pin_c0);
delay_us(3400);
}
}
}else if((z==4))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(3600);
output_high(pin_c0);
delay_us(4600);
}
}
135

}else if((z==5))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
}

output_low(pin_c0);
delay_us(2400);
output_high(pin_c0);
delay_us(5800);
}
}

}
}

EJERCICO PROPUETO

El siguiente programa tiene por objetivo establecer un lenguaje de programacin


que permita controlar el ciclo de trabajo de en seal PWM adems de acoplarse
a un circuito de potencia que detectara el cruce pro cero y variara la cantidad de
energa que legue a la carga.

COMUNICACIN I2C Y SPI


Introduccin

La comunicacin entre microcontroladores se puede

realizar de dos formas ya sea sncrona o paralela: la primera enva los datos
simultneamente mientras que la otra enva dato por dato. La familia PIC18
dispone de varias posibilidades de comunicaciones serie. Dispone de un puerto
dedicado a comunicaciones sncronas serie, el SSP (Serial Synchronous Port).
Dicho puerto puede dedicarse a varios protocolos, tales como SPI o I2C. Ambos
son precisos, esto es, si se configura el perifrico para SPI no podr usarse para
I2C y viceversa. Si se precisan de forma conjunta comunicaciones I2C y SPI la
nica solucin es un microcontrolador con dos puertos SSP.

Marco Terico

COMUNICACIN I2C (INTER-INTEGRATED


CIRCUIT)

136

Eduardo J. Carletti (2008) Menciona que:

El bus I2C, un estndar que facilita la comunicacin

entre microcontroladores, memorias y otros dispositivos con cierto nivel


de "inteligencia", slo requiere de dos lneas de seal y un comn y
permite el intercambio de informacin entre muchos dispositivos a una
velocidad aceptable, de unos 100 Kbits por segundo. La metodologa de
comunicacin de datos del bus I2C es en serie y sincrnica. Una de las
seales del bus marca el tiempo (pulsos de reloj) y la otra se utiliza para
intercambiar datos. [1]

Juan Ricardo Penagos Plazas (2006) Menciona que:

El bus I2C (Inter-Integrated Circuit) o Interconexin

de Circuitos Integrados es un interfaz serie de dos conductores que se


encuentra actualmente en la mayora de microcontroladores PIC. La
especificacin original, o modo Estndar, es para velocidades de
transmisin de hasta 100kbps.

El bus I2C emplea un protocolo para asegurar la

transferencia confiable de los datos. Cuando se transmiten datos, uno de


los dispositivos es el maestro (que suele ser un microcontrolador PIC), el
cual inicia la transferencia en el bus y genera las seales de reloj para
permitir esa transferencia, mientras que los otros dispositivos se
comportan como esclavos. [2]

Garca Eduardo Breijo (2008, Pag 190) Menciona que:

la comunicacin I2C es una interfaz derivada del

mdulo MSSP para acceder a la comunicacin con otros dispositivos


perifricos o programables que soporta los siguientes modos de
hardware, maestro, multi - maestro y modo esclavo, que por consiguiente
son capaces de transmitir una trama de datos. [3]
137

Aspectos Generales: El bus comunicaciones serie

sncrona es muy utilizado en la industria para la comunicacin entre


microcontroladores y sus perifricos en sistemas integrados. Dentro de los
parmetros a considerar tenemos:

Utiliza nicamente dos lneas para trasmitir los datos (SDA) y la

seal de reloj (SCL).


Necesitan resistencias pull-up, ya que los dispositivos slo pueden

forzar al bus a ponerse a 0.


La lnea de tierra debe ser comn a todos los dispositivos
Es bidireccional Half-Duplex y sigue el modelo maestro-esclavo.
Los dispositivos de un bus I2C tienen una direccin nica para cada

uno, y pueden clasificarse como maestros o como esclavos.


El maestro es el que inicia la trasferencia de datos y genera la seal

de reloj.
El esclavo espera a que un maestro se comunique con l para generar

la trasferencia.
El bus I2C es multimaestro, lo que quiere decir que puede haber ms
de un maestro conectado y controlando el bus. Existen mecanismos
para evitar que dos maestros comiencen una trasferencia de

informacin al mismo tiempo.

Figura 55 Conexin de maestro y esclavos en I2


Fuente: http://www.nxp.com/documents/application_note/AN10216.pdf

El bus serie I2C ha sido extendido para soportar

velocidades de hasta 3,4 MHZ/s, combinado con una funcin de


desplazamiento del nivel de voltaje, en modo High-speed (Hs-mode) ofrece
una solucin ideal para los sistemas de tecnologa mixta, donde las altas
velocidades y la variedad de voltajes (5v, 3v o menor) son comnmente
usados.
138

Figura 56 Trminos del Bus I2C

Fuente: http://www.nxp.com/documents/application_note/AN10216.pdf

Instrucciones en el Bus I2C: Para operar sus esclavos

sobre el bus I2C solo son necesarios seis simples cdigos suficientes para
enviar o recibir informacin:

Bit de start
7 bits o 10 bits de direccionamiento
Un R/W bit que define si el esclavo es transmitir o receptar
Un bit ACK de reconocimiento
Mensajes dividido en bytes
Un bit de stop
Formato de las tramas en la comunicacin I2C: Los

datos transferidos tienen la forma de la siguiente figura:

139

Figura 57 Transferencia de Datos Completa

Fuente: http://www.nxp.com/documents/application_note/AN10216.pdf

Despus de la condicin Start, se enva la direccin del

esclavo con el que se quiere comunicar, esta direccin tiene 7 bits seguidos
por un octavo de bit que corresponde a R/W (0: Indica transmisin, 1: Indica
solicitud de datos). Una transferencia de datos siempre acaba con una
condicin de stop generada por el master, sin embargo si un master todava
desea comunicarse con el bus, puede generar repetidamente condiciones de
Start y direccionar a otro esclavo sin generar primero la condicin de stop.

Varias combinaciones de lectura y escritura son

posibles dentro de una misma transferencia de datos.

Los posibles formatos de transferencia son:

Master transmite al esclavo-receptor. Direccionado 7/10 bits, no


cambia el bit de direccin

Master lee a un esclavo inmediatamente despus del primer byte

En el momento del primer reconocimiento el mastertrasmisor ser conveniente en un master-receptor y el esclavo-receptor


en un esclavo-transmisor. El primer reconocimiento es aun generado
por el esclavo. La condicin de stop es generado por el Master, el

cual ha enviado previamente un no-reconocimiento.


Formato combinado
140

Figura 58 Master Transmite sin Cambiar de Bit de Transmision Fuente:


http://www.nxp.com/documents/application_note/AN10216.pdf

Figura 59 Formato Combinado


Fuente: http://www.nxp.com/documents/application_note/AN10216.pdf

Direccionamiento: El procedimiento de direccin

para el bus I2C es tal que el primer byte despus de la condicin de Start
usualmente determina que esclavo ha sido seleccionado por el master

La excepcin se da en la llamada general (byte 0000

0000) con la que se direcciona a todos los dispositivos, cuando esta direccin
es usada, todos los dispositivos en teora deben responder con un
reconocimiento,

sin

embargo

algunos

dispositivos

pueden

estar

condicionados a ignorar esta direccin. El segundo byte de la llamada


general define entonces la accin a tomar.

Hay dos formatos de direccin. El ms simple es el

formato de 7 bits

con un bit R/W que permite direccionar hasta 128

dispositivos, que en la prctica se reduce a 112 debido a que las restantes


direcciones son de uso reservado. El ms complejo es el de 10-bit con un bit
R/W. Para el formato de 10-bit, dos bytes deben ser transmitidos con los
primeros cinco bits que especifiquen una direccin de 10-bit.

141

Figura 60 Formato de Direccionamiento de 7 Bits

Fuente: http://www.nxp.com/documents/application_note/AN10216.pdf

Figura 61 Formato de Direccionamiento de 7 bits

Fuente: http://www.nxp.com/documents/application_note/AN10216.pdf

Figura 62 Formato de Llamada General

Fuente: http://www.nxp.com/documents/application_note/AN10216.pdf

EJERCICO 9
Tema: PWM con motor AC y TRIAC

Descripcin: Realizamos un control de velocidad con un PWM acoplando una


etapa de potencia con un TRIAC utilizando un cruce por cero; el cual generamos
desde una programacin realizada en PIC C , y este varia la velocidad del motor
DC dependiendo el PWM es decir el duty que generamos desde el teclado
matricial.

Materiales:

Pantalla LCD
Teclado matricial
Motor AC
Pic 16F887
142

Transformador
Puente de Diodos
Resistencias
MOC
TRIAC

Fig1 PWM con motor AC y TRIAC


Simulacin: Proteus

#include <16F887.h>
#fuses intrc_io, nowdt, nomclr,
noput
#use delay(clock=4M)
#include <kbd_4x4.c>
#BYTE WPUB =0X95
#BYTE OPTION_REG = 0X81
#include <lcd3.c>
char k;
int y,z;
void main()
{
OPTION_REG = 0;

WPUB= 0B11111111;
//port_b_pullups(true);
kbd_init();
lcd_init();
lcd_putc("\f !BIENVENIDO!\n
Presione #");
delay_us(100);
while (true)
{
delay_us(100);
k=kbd_getc();
if(k!=0)
{
143

y=k-48;
switch (y)
{
case(1):
z=1;
lcd_putc("\f nivel de PWM\n
15/o");
delay_us(20);
break;
case(2):
z=2;
lcd_putc("\f nivel de PWM \n
30/o");
delay_us(20);
break;
case(3):
z=3;
printf(lcd_putc,"\f nivel de
PWM \n 50/o");
delay_us(20);
break;
case (4):
z=4;
printf(lcd_putc,"\f nivel de
PWM \n 65/o");
delay_us(20);
break;
case (5):
z=5;
printf(lcd_putc,"\f nivel de
PWM \n 90/o");
delay_us(20);
break;
case (6):
lcd_putc("\f !BIENVENIDO!\n
Presione #");
output_low(pin_c0);

delay_us(20);
K=0;
z=0;
}
}else output_low(pin_c0);
if((z==1))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(7200);
output_high(pin_c0);
delay_us(1000);
}
}
}else if((z==2))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(6000);
output_high(pin_c0);
delay_us(2200);
}
}
}else if((z==3))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(4800);
output_high(pin_c0);
delay_us(3400);
}
144

}
}else if((z==4))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(3600);
output_high(pin_c0);
delay_us(4600);
}
}
}else if((z==5))
{
while(input(pin_a1))
{
if(input(pin_a0))
{

output_low(pin_c0);
delay_us(2400);
output_high(pin_c0);
delay_us(5800);
}
}
}
}
}

EJERCICO PROPUESTO

El siguiente programa permite la comunicacin entre dos


microcontroladores pic uno denominado maestro y otro
llamado esclavo mediante el protocolo I2C, adems cuenta
con un teclado conectado a ambos pics que envan datos al
presionar una tecla

COMUNICACIN SPI (SERIAL PERIPHERAL


INTERFACE)
Ingeniera en Microcontroladores (Cap. 1, Pg. 3) [ online ] Menciona que:

145

SPI es un bus de tres lneas, sobre el cual se transmiten paquetes de


informacin de 8 bits. Cada una de estas tres lneas porta la informacin
entre los diferentes dispositivos conectados al bus. Cada dispositivo
conectado al bus puede actuar como transmisor y receptor al mismo
tiempo, por lo que este tipo de comunicacin serial es full dplex. Dos de
estas lneas trasfieren los datos (una en cada direccin) y la tercer lnea es
la del reloj. [4]
Sistema de desarrollo para MC (Cap. 5, Pg.97) [ online ] Menciona que:
SPI, es un estndar establecido por Motorola y adoptado posteriormente
por diferentes fabricantes, como Microchip y Atmel. que utiliza 4 lneas
para interconectar dispositivos perifricos de aja y media velocidad. La
comunicacin se realiza siguiendo un modelo maestro/esclavo donde el
maestro

selecciona

al

esclavo

comienza

el

proceso

de

transmisin/recepcin de informacin. SPI constituye un bus full dplex,


es decir, que se puede enviar y recibir informacin de manera simultnea,
lo cual, eleva la tasa de transferencia de los datos. No existe ningn
medio de direccionamiento de los dispositivos esclavos y mucho menos
reconocimiento de la recepcin de datos. [5]
Estndar SPI

[ online ] Menciona que:

El estndar SPI es utilizado para la comunicacin serial entre


dispositivos. Se trata de un enlace de datos en serie, sncrono, y que
opera en modo full dplex, es decir, las seales de datos viajan en ambas
direcciones en forma simultnea. El canal SPI fue diseado para
aplicaciones de trasmisin de datos a velocidades altas (10 Mbps) y
distancias cortas, del orden de 10 a 20 cms, bien dentro de un mismo
PCB (circuito impreso), entre 2 circuitos integrados como podran ser un
microcontrolador y otro dispositivo. Las seales de trasmisin de datos y
control del canal SPI, usan niveles de voltaje TTL o bien 3.3 volts,
dependiendo de la tecnologa de fabricacin del dispositivo. Los
146

dispositivos SPI se comunican entre s utilizando un bus de 4 seales


(MOSI, MISO, SCK, SS) y un esquema maestro/esclavo, en el cual el
maestro inicia el protocolo de trasmisin de los datos.. [6]
Aspectos generales: En esta comunicacin trabajan juntos dos dispositivos, los
2 registros de desplazamiento de 8 bits son conectados desde un registro de
rotacin a izquierda de 16 bits. Una transferencia de datos consiste de un
desplazamiento de 8 bits, el cual resulta en una transferencia de datos entre el
dispositivo master y slave.

Figura 63 Base de Comunicacin SPI entre 2 dispositivos


Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf

En el protocolo SPI existen solo intercambios de datos A y B, ya que por cada


dato enviado debe haber siempre uno recibido. Depende de las circunstancias el
cmo se interprete una transferencia SPI.
Caractersticas del Mdulo SPI: El mdulo SPI incluye las siguientes
caractersticas:

Longitud de datos de transmisin programable a 8 o 16 bits.


Operacin en modo master o slave.
Desplazamiento de datos primero MSB o primero LSB seleccionable
Modo bidireccional en Full-duplex o simple lnea
Tasa de bit de transmisin programable
Registro de datos de transmisin y recepcin de Doble buffer
Opciones de polaridad y fase del clock
Salida de seleccin de slave
Flag de modo de error por falla con posibilidad de interrupcin de CPU
Control de operacin de SPI durante el modo wait

Funcionamiento SPI: El mdulo se habilita seteando el bit SPI enable (SPE)


en el Registro SPI Control Register, dependiendo del lenguaje programador se
147

debe habilitar el SPI-1. Mientras el bit SPE est seteado, los cuatro pines
asociados al mdulo SPI deben cumplir las funciones de:

Selector de esclavo (SS)


Clock serial (SPSCK)
Master out/slave in (MOSI)
Master in/slave out (MISO)

Modo Master: El Mdulo SPI opera en modo master cuando el l bit MSTR se
encuentra seteado. Solo en modo master se pueden iniciar transmisiones. Una
transmisin se inicia leyendo el registro SPIxS mientras el SPTEF = 1 y
escribiendo el registro de datos SPI. Si el registro de desplazamientos est vaco,
el byte se transfiere inmediatamente al a este registro para ser enviado. El dato
comienza a desplazarse hacia el pin de salida MOSI bajo la referencia del clock
de control serial.
Modo Slave: El SPI funciona en modo slave cuando el bits MSTR en el registro
de control 1 est borrado.
SPSCK: En modo slave, SPSCK es el clock entrada que llega desde el
master.
Pines MISO, MOSI: En modo slave, el pin (MISO) tiene la funcin de
salida de datos y el pin (MOSI) tiene la funcin de entrada de datos, esto
se determina por los bits SPC0 y BIDIROE en el registro de control.

Figura 64 : SPI entre dos Diagrama en bloques del mdulo SPI

148

Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf

Figura 65 Registro de control 1 - SPIxC1

SPIE: Habilitacin de interrupcin (para SPRF y MODF)


Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdF

SPE: Habilitacin de sistema

SPTIE; Habilitacin de interrupcin por transmisin


MSTR: Seleccin de modo Master/Slave
CPOL: polaridad de Clock
CPHA: Fase de clock
SSOE: habilitacin de salida de seleccin de slave
LSBFE: primer bit LSB (direccin de desplazamiento)

Figura 66 Bits de seleccin de modo Master o Slave


Figura No 44:
Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf

Registro de control 2 (SPIxC2)

Figura 67 Registro de control 2 (SPIxC2


Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf

SPMIE: Habilitacin de interrupcin por coincidencia


SPIMODE: Modo 8 o 16 bits
MODFEN: Habilita funcin en modo falla como master
BIDIROE: habilita salida en modo bidireccional
SPISWAI: Stop en modo wait
SPC0: Control de pin 0

149

Figura 68 Modos de Operacin


Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf

Registro de Baud rate (SPIxBR)

Figura 69 Seleccin de baud rate de Transferencia


Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf

Figura 70 Registro de Baud rate (SPIxBR)


Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf

Figura 71 Divisor de Baud Rate


Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf

Registro de Estados (SPIxS)

150

Figura 72 Registro de estados (SPIxS)


Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf

SPRF: Flag de buffer de lectura lleno


SPMF: Flag de Match. Cuando el valor en el buffer de recepcin coincide con el
valor en SPIMH:SPIML
SPTEF: Flag de buffer de transmisin vacio
MODF: Flag modo master por falla
EJERCICO 10
Tema:SPI
Descripcin: Realizamos una comunicacin SPI entre 2 pics para poder enviar un dato
de un pic a otro con la ayuda de un teclado matricial y una pantalla LCD para la
visualizacin de los datos enviados y recibidos.
Materiales:

2 teclado matricial
2 PICs
2 pantallas LCD

Fig1 SPI
Simulacin: Proteus

MASTER
151

#include <16F887.h>
#fuses XT,NOMCLR
#use delay (clock=4000000)
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B2
#define LCD_E PIN_B3
#include <lcdPB.c>
#include <KBD4x4.c>
char l;
int teclas;
//Dato a
transmitir
void envio_SPI (){
setup_spi(spi_master | spi_l_to_h |
spi_clk_div_16);
spi_write(teclas);
}
void esclavo1(){
teclas=kbd_getc();
if(teclas!=0){
envio_SPI();
}
}
void main(){
lcd_init();
kbd_init();
while (true){
if(input(pin_a0)){
setup_spi(spi_slave | spi_l_to_h
spi_clk_div_16);
lcd_gotoxy(1,1);
printf (lcd_putc," Maestro ");

if(spi_data_is_in())
{
l=spi_read();
if(l=='1'){
printf(lcd_putc,"\n Recibiendo... 1
");
delay_ms(10);
}
if(l=='2'){
printf(lcd_putc,"\n Recibiendo... 4
");

delay_ms(10);
}
if(l=='3'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='4'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='5'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='6'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='7'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='8'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='9'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='A'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='B'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='C'){

Recibiendo... 7

Recibiendo... 2

Recibiendo... 5

Recibiendo... 8

Recibiendo... 3

Recibiendo... 6

Recibiendo... 9

Recibiendo... *

Recibiendo... 0

152

printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='D'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='*'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='0'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='#'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
}
esclavo1();
}

Recibiendo... #

Recibiendo... D

Recibiendo... A

#include <lcdPB.c>
#include <KBD4x4.c>
char l;
int teclas;
//Dato a
transmitir
void envio_SPI (){
setup_spi(spi_master | spi_l_to_h |
spi_clk_div_16);
spi_write(teclas);
}
void esclavo1(){
teclas=kbd_getc();
if(teclas!=0){
envio_SPI();

Recibiendo... B
}
}
Recibiendo... C

void main(){
lcd_init();
kbd_init();
while (true){
if(input(pin_a0)){
setup_spi(spi_slave | spi_l_to_h
spi_clk_div_16);
lcd_gotoxy(1,1);
printf (lcd_putc," Esclavo ");

else{
lcd_gotoxy(1,1);
printf (lcd_putc,"\f SIN CONEXION
");
delay_ms (10);
}
}
}
ESCLAVO
#include <16F887.h>
#fuses XT,NOMCLR
#use delay (clock=4000000)
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B2
#define LCD_E PIN_B3

if(spi_data_is_in())
{
l=spi_read();
if(l=='1'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='2'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='3'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='4'){
printf(lcd_putc,"\n
");

Recibiendo... 1

Recibiendo... 4

Recibiendo... 7

Recibiendo... 2
153

delay_ms(10);
}
if(l=='5'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='6'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='7'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='8'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='9'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='A'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='B'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='C'){

Recibiendo... 5

Recibiendo... 8

Recibiendo... 3

Recibiendo... 6

Recibiendo... 9

printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='D'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='*'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='0'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='#'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
}
esclavo1();
}

Recibiendo... #

Recibiendo... D

Recibiendo... A

Recibiendo... B

Recibiendo... C

Recibiendo... *

else{

Recibiendo... 0

lcd_gotoxy(1,1);
printf (lcd_putc,"\f SIN CONEXION
");
delay_ms (10);
}
}
}

EJERCICIO PROPUESTO
El siguiente programa permite la comunicacin entre dos microcontroladores pic
uno denominado maestro y otro llamado esclavo mediante el protocolo SPI,
adems cuenta con un teclado conectado a ambos pics que envan datos al
presionar una tecla.

154

SPI Data Registers (SPIxDH:SPIxDL)

Figura 73 Registro de Datos parte baja y alta (SPIxDL)


Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf

En modo 8-bit, solo est disponible SPIxDL. La lectura de SPIxDH retornar


todos ceros. La escritura en SPIxDH ser ignorada.
En modo 16-bit, leyendo cualquier byte (SPIxDH o SPIxDL) se guarda el
contenido de ambos bytes en el buffer en donde se mantiene hasta que se leo
otro byte. Cuando ambos bytes han sido escritos, se transferir como un valor de
16 bits en el buffer de datos de transmisin.
Estructura de la trama: Las tramas de comunicacin son de variada
presentacin y algunas slo involucran la carga til, sin adicionar bits que
permitan el handshaking (coordinacin) entre esclavos y maestro. Para estos
protocolos deber existir una lnea tanto para el dato saliente (TxD) como para el
dato entrante (RxD), as como la posibilidad de hacer comunicacin simultnea
y bidireccional (Full Duplex).

Figura 74 Diferentes Configuraciones en el envo de datos durante el primer


flanco de clock
Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf

Se muestra la configuracin del mdulo en donde el dato a enviar se mantiene


estable durante el primer flanco de clock y el siguiente bit se enva en el segundo
flanco de clock, tenga este cualquiera de las 2 polaridades posibles (lnea
normalmente en alto o en bajo).
Se muestra la configuracin del mdulo en donde cada dato se establece en el
primer flanco del pulso de clock y el dato se mantiene estable durante el segundo
flanco del clock.
155
Figura 75 Diferentes Configuraciones en el envo de datos durante
el segundo flanco de clock

Existen cuatro modos de reloj definidos por el protocolo SPI, estos modos son:
Modo A, Modo B, Modo C, Modo D
Estos determinan el valor de la polaridad del reloj (CPOL = Clock Polarity) y el
bit de fase del reloj (CPHA = Clock Phase).

Figura 76 : Modos de reloj A y B definidos por el protocolo SPI


Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf

Modos SPI (master): relacin reloj/datos: Aunque se tenga establecida la


frecuencia del reloj, todava hay varias opciones para el master, referidas a la
polaridad de la seal de reloj, y la fase entre dicha seal y los datos de
entrada/salida.

Figura 77 Fases entre seal y reloj


Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf

EJERCICIO 11
156

Tema: I2C con LM35


Descripcin: Realizamos una comunicacin I2C entre 2 pics para poder enviar la
temperatura de un lm35 y visualizar el ADC en el otro pic , pudiendo variar la
temperatura con la ayuda de algo frio y algo caliente.
Materiales:

2 pantallas LCD
LM35
3 leds
2 PICs

Fig1 I2C con LM35


Simulacin: Proteus

MASTER
#include <18f4550.h>
#fuses
XT,PUT,NOPROTECT,BROWNOUT,
NOLVP,NOWDT,NOMCLR
#device adc=8
#use delay (clock=4M)
#use
i2c(MASTER,SDA=PIN_B0,
SLOW,
SCL=PIN_B1,
NOFORCE_SW)
#include <lcd3.c>
#include <kbd3.c>
//Uso del
puerto d
#use standard_io(a)
#use standard_io(b)
#use standard_io(d)
#use standard_io(c)

#use standard_io(e)
float t1;
float t11;
float t2;
int8 read;
void envio_I2C (){
i2c_start();
//Comienzo de la
comunicacin I2C ...
i2c_write(0xa0);
//...con la
direccin del PIC esclavo...
i2c_write(read); // Envia dato
i2c_stop();
//Finalizacin de la
transmisin
157

}
}
/
********************************
********************************
**************/
/***************************
FUNCIN
PRINCIPAL
********************************
/
void main(){
kbd_init();
funcin de teclado
lcd_init();
port_d_pullups(TRUE);
while (true){

//Inicializa

setup_adc(ADC_CLOCK_INTERN
AL);
Setup_adc_ports(AN0);
//PONE PUERTO RA0 ANALOGO
setup_counters(rtcc_internal,rtcc_di
v_1);
set_adc_channel(0);
//
INDICA EL PIN A LEER RA0
//delay_us(20);.
read=read_adc();
t1=(float)read;
EL VALOR DEL PIN
t2=t1*2;

//LEE

t11=(t1*5)/255;
//CONVIERTE EL VALOR LEIDO DE
HEXA AL REAL el numero
0.01960784314 viene de dividir (5/255)
y el resultado se multiplica por 100 para
alcanzar 150 grados
printf(lcd_putc,"\fVin = %2.2f
",t11); //MUESTRA EN EL LCD EL
VALOR DE TEMPERATURA
printf(lcd_putc,"\nADC= %2.2f
",t2); //MUESTRA EN EL LCD EL
VALOR DE TEMPERATURA
envio_I2C();
delay_ms(500);

}
ESCLAVO
#include <18F4550.h>
#fuses XT,NOMCLR
#use delay (clock=8M)
#use
I2C(SLAVE,
SDA=PIN_B0
,SLOW,
SCL=PIN_B1,
ADDRESS=0xa0, NOFORCE_SW)
#include <lcd3.c>
#include <kbd3.c>
//Uso del
puerto d
#use fast_io(b)
#use standard_io(d)
#use standard_io(c)
#use standard_io(e)
///////////////
int state;
int8 x;

// I2C var

int8 buffer[0x03];
float t1;
float t11;
float tem;
#INT_SSP
void ssp_interrupt()
{ output_high(PIN_A2);
state=i2c_isr_state();
if(state < 0x80)
enviando datos
{
x = i2c_read();
}

//Master esta

if(state==0x80){
i2c_write(buffer[0x02]);
output_high(PIN_A1);
}
}
void main() {
158

set_tris_b(0b00000011);
lcd_init();
kbd_init();
port_d_pullups(TRUE);
enable_interrupts(INT_SSP);
//Activamos las interrupciones de I2C
enable_interrupts(GLOBAL);

//printf(lcd_putc,"\nADC= %2.2f
",t1); //MUESTRA EN EL LCD EL
VALOR DE TEMPERATURA
if (t1<24)
{
output_high(pin_d0);
output_low(pin_d1);
output_low(pin_d2);

while (true) {
if(state<0x80)
recibe dato
{
//state=0x80;
t1=(float)x;
VALOR DEL PIN

//Se

//LEE EL

t11=(t1*5*100)/255;
//CONVIERTE EL VALOR LEIDO DE
HEXA AL REAL el numero
0.01960784314 viene de dividir (5/255)
y el resultado se multiplica por 100 para
alcanzar 150 grados
//delay_ms(1);
tem=((t11)/2);
printf(lcd_putc,"\fT= %2.2f
C",tem); //MUESTRA EN EL LCD EL
VALOR DE TEMPERATURA
}
}

//delay_ms(10);
}
if (t1>27)
{
output_high(pin_d2);
output_low(pin_d1);
output_low(pin_d0);
//delay_ms(10);
}
if (t1>=24 && t1<=27)
{
output_high(pin_d1);
output_low(pin_d0);
output_low(pin_d2);
//delay_ms(10);
}
delay_ms(500);
}

EJERCICIO PROPUESTO
El siguiente programa tiene por objetivo disear un lenguaje de programacin que
cumpla con los parmetros siguientes: utilizar un microcontrolador pic como maestro al
cual est conectado un teclado matricial y una pantalla lcd que indique las aplicaciones
de sensor lm35 o sensor de proximidad comunicado mediante el protocolo I2C a un
esclavo que tenga comunicacin directa con la pc mediante RS232 y vare la velocidad
del motor y el encendido de luces logrando un sistema completo con los dos sensores
mencionados inicialmente.
EJERCICIO 12
Tema: I2C con LM35 y Motor DC
Descripcin: Realizamos una comunicacin I2C entre 2 pics para poder enviar la
temperatura de un lm35 y visualizar el ADC en el otro pic, pudiendo variar la

159

temperatura con la ayuda de algo frio y algo caliente; haciendo el control de un motor
DC.
Materiales:

2 pantallas LCD
LM35
Motor DC
2 resistencias 1k
2 PICs

Fig1 I2C con LM35


Simulacin: Proteus

MASTER
#include <18f4550.h>
#fuses
XT,PUT,NOPROTECT,BROWNOUT,
NOLVP,NOWDT,NOMCLR
#device adc=8
#use delay (clock=8M)
#use
i2c(MASTER,SDA=PIN_B0,
SLOW,
SCL=PIN_B1,
NOFORCE_SW)
#include <lcd3.c>
#include <kbd3.c>
//Uso del
puerto d
#use standard_io(a)
#use standard_io(b)

#use standard_io(d)
#use standard_io(c)
#use standard_io(e)
float t1,t2;
float t11;
int8 read;
void envio_I2C (){
i2c_start();
//Comienzo de la
comunicacin I2C ...
160

i2c_write(0xa0);
//...con la
direccin del PIC esclavo...
i2c_write(read); // Envia dato
i2c_stop();
//Finalizacin de la
transmisin
}
/
********************************
********************************
**************/
/***************************
FUNCIN
PRINCIPAL
********************************
/
void main(){
kbd_init();
funcin de teclado
lcd_init();
port_d_pullups(TRUE);
while (true){

//Inicializa

setup_adc(ADC_CLOCK_INTERN
AL);
Setup_adc_ports(AN0);
//PONE PUERTO RA0 ANALOGO
setup_counters(rtcc_internal,rtcc_di
v_1);
set_adc_channel(0);
//
INDICA EL PIN A LEER RA0
//delay_us(20);.
read=read_adc();
t1=(float)read*2;
EL VALOR DEL PIN
t2=(t1*255)/150;

//LEE

t11=(t1*5)/255;
//CONVIERTE EL VALOR LEIDO DE
HEXA AL REAL el numero
0.01960784314 viene de dividir (5/255)
y el resultado se multiplica por 100 para
alcanzar 150 grados
printf(lcd_putc,"\fMASTERTEMPERATURA"); //MUESTRA EN
EL
LCD
EL
VALOR
DE
TEMPERATURA

printf(lcd_putc,"\nADC= %2.2f
",t2); //MUESTRA EN EL LCD EL
VALOR DE TEMPERATURA
envio_I2C();
delay_ms(500);

}
}
ESCLAVO
#include <18F4550.h>
#fuses XT,NOMCLR
#use delay (clock=8M)
#use
I2C(SLAVE,
SDA=PIN_B0
,SLOW,
SCL=PIN_B1,
ADDRESS=0xa0, NOFORCE_SW)
#include <lcd3.c>
#include <kbd3.c>
//Uso del
puerto d
#use fast_io(b)
#use standard_io(d)
#use standard_io(c)
#use standard_io(e)
///////////////
int state;
int8 x;

// I2C var

int8 buffer[0x03];
float t1;
float t11;
float tem;
#INT_SSP
void ssp_interrupt()
{ output_high(PIN_A2);
state=i2c_isr_state();
if(state < 0x80)
enviando datos
{
x = i2c_read();
}

//Master esta

if(state==0x80){
161

i2c_write(buffer[0x02]);
output_high(PIN_A1);
}
}
void main() {
set_tris_b(0b00000011);
lcd_init();
kbd_init();
setup_ccp1(ccp_PWM);
setup_timer_2(T2_DIV_BY_16,255,1);
set_pwm1_duty(0);
port_d_pullups(TRUE);
enable_interrupts(INT_SSP);
//Activamos las interrupciones de I2C
enable_interrupts(GLOBAL);
while (true) {
if(state<0x80)
recibe dato
{
//state=0x80;

//delay_ms(1);
tem=((t11));
printf(lcd_putc,"\fTemp= %2.2f
oC",tem); //MUESTRA EN EL LCD
EL VALOR DE TEMPERATURA
//printf(lcd_putc,"\nADC= %2.2f
",t1); //MUESTRA EN EL LCD EL
VALOR DE TEMPERATURA
if (tem<24)
{
printf(lcd_putc,"\nVel1 Duty=> 15
");
set_pwm1_duty(150L);
}
if (tem>27)
{
printf(lcd_putc,"\nVel3 Duty=> 90
");
set_pwm1_duty(900L);
}
if (tem>=24 && tem<=27)
{
printf(lcd_putc,"\nVel2 Duty=> 50

//Se

");
t1=(float)x;
VALOR DEL PIN

//LEE EL

t11=(t1*5*100)/255;
//CONVIERTE EL VALOR LEIDO DE
HEXA AL REAL el numero
0.01960784314 viene de dividir (5/255)
y el resultado se multiplica por 100 para
alcanzar 150 grados

set_pwm1_duty(500L);
}
delay_ms(500);
}
}
}

EJERCICIO PROPUESTO

162

El siguiente programa tiene por objetivo disear un lenguaje de


programacin que cumpla con los parmetros siguientes: utilizar
un microcontrolador pic como maestro al cual est conectado un
teclado matricial y una pantalla lcd que indique las aplicaciones
de sensor lm35 o sensor de proximidad comunicado mediante el
protocolo SPI a un esclavo que tenga comunicacin directa con la
pc mediante RS232 y vare la velocidad del motor y el encendido
de luces logrando un sistema completo con los dos sensores
mencionados inicialmente.

COMUNICACIN BLUETOOTH ZBEEE - RF


BLUETOOTH
Arduino: curso prctico de formacin Escrito por scar Torrente Mencionan
que:
Bluetooth es el nombre de una especificacin industrial (estandarizada oficialmente con
el nombre de IEEE 802.15.2) que define las caractersticas de un tipo de redes
inalmbricas de corto alcance, su principal uso es proporcionar un protocolo de
comunicacin entre distintos dispositivos electrnicos de consumo. el estndar
bluetooth utiliza para la transmisin de vos y datos un enlace de radiofrecuencia en la
banda de los 2,4 GHz.
Redes de computadoras Escrito por Andrew S. Tanenbaum, menciona que:
Bluetooth es una especificacin industrial para Redes Inalmbricas de rea Personal
(WPAN) que posibilita la transmisin de voz y datos entre diferentes dispositivos
mediante un enlace por radiofrecuencia en la banda ISM de los 2,4 GHz. Los
principales objetivos que se pretenden conseguir con esta norma son:
-Facilitar las comunicaciones entre equipos mviles.
-Eliminar los cables y conectores entre stos.
-Ofrecer la posibilidad de crear pequeas redes inalmbricas y facilitar la
sincronizacin de datos entre equipos personales.
Electrnica y Servicio: Autoestreos con bluetooth y USB Escrito por Staff
Menciona que:
163

Bluetooth es una especificacin tecnolgica para redes inalmbricas que permite la


transmisin de voz y datos entre distintos dispositivos mediante una radiofrecuencia
segura (2,4 GHz). Esta tecnologa, por lo tanto, permite las comunicaciones sin cables
ni conectores y la posibilidad de crear redes inalmbricas domsticas para sincronizar y
compartir la informacin que se encuentra almacenada en diversos equipos.
Definicin grupal:
Bluetooth es un protocolo normalizado por el estndar IEEE 802.15.1 para
Redes Inalmbricas de rea Personal (WPAN), el cual consiste en una
comunicacin inalmbrica que posibilita la transmisin de voz y datos entre
diferentes dispositivos mediante un enlace por radiofrecuencia en un rango de
frecuencia libre de uso de 2,4GHz y una cobertura de 10m, extendible con
antenas de alta ganancia hasta los 100m.

164

Bluetooth se encuentra en la clasificacin de redes inalmbricas WPAN el cual es un protocolo normalizado por el estn

Wifi
Radio
Frecuencia

Clase

Potencia mxima
permitida
(mW)

Potencia mxima
permitida
(dBm)

Alcance
(aproximad
o)

Clase
1

100 mW

20 dBm

~100
metros

Clase
2

2.5 mW

4 dBm

~5-10
metros

Clase
3

1 mW

0 dBm

~1 metro

Qu es Bluetooth?
El Bluetooth Special Interest Group (SIG), una asociacin comercial formada por
lderes en telecomunicacin, informtica e industrias de red, est conduciendo el
desarrollo de la tecnologa inalmbrica Bluetooth y llevndola al mercado.
La tecnologa inalmbrica Bluetooth es una tecnologa de ondas de radio de corto
alcance (2.4 gigahertzios de frecuencia) cuyo objetivo es el simplificar las
comunicaciones entre dispositivos informticos, como ordenadores mviles,
telfonos mviles, otros dispositivos de mano y entre estos dispositivos e Internet.
Tambin pretende simplificar la sincronizacin de datos entre los dispositivos y
otros ordenadores.
165

Permite comunicaciones, incluso a travs de obstculos, a distancias de hasta unos


10 metros. Esto significa que, por ejemplo, puedes or tus mp3 desde tu comedor,
cocina, cuarto de bao, etc. Tambin sirve para crear una conexin a Internet
inalmbrica desde tu porttil usando tu telfono mvil. Un caso an ms prctico es
el poder sincronizar libretas de direcciones, calendarios etc en tu PDA, telfono
mvil, ordenador de sobremesa y porttil automticamente y al mismo tiempo.
Los promotores de Bluetooth incluyen Agere, Ericsson, IBM, Intel, Microsoft,
Motorola, Nokia y Toshiba, y centenares de compaas asociadas.

Figura 78 Dispositivos Bluetooth


Fuente. http://www.informatica-hoy.com.ar/telefonos-celulares/Que-es-Bluetooth.php

De dnde viene el nombre Bluetooth?


El nombre viene de Harald Bluetooth, un Vikingo y rey de Dinamarca a de los aos
940 a 981, fue reconocido por su capacidad de ayudar a la gente a comunicarse.
Durante su reinado uni Dinamarca y Noruega.

Objetivos principales de la tecnologa Bluetooth.


1.
2.
3.

Permitir la comunicacin sencilla entre dispositivos fijos y mviles.


Evitar la dependencia de cables que permitan la comunicacin.
Permitir la creacin de pequeas redes de forma inalmbrica.

166

Funcionamiento.
Trabaja en dos capas del modelo OSI que son la de enlace y aplicacin, incluye un
transeiver que trasmite y recibe a una frecuencia de 2.4 GHz Las conexiones que
se realizan son de uno a uno con un rango mximo de 10 metros, si se deseara
implementar la distancia se tendra que utilizar repetidores los cuales nos
ayudaran a abarcar una distancia de 100 metros.
Bluetooth por cuestiones de seguridad cuanta con mecanismos de encriptacin de
64 bits y autentificacin para controlar la conexin y evitar que dispositivos
puedan acceder a los datos o realizar su modificacin.
Durante la transferencia de datos el canal de comunicaciones permanece abierto y
no requiere la intervencin directa del usuario cada vez que se desea transferir voz
o datos de un dispositivo a otro. La velocidad mxima que se alcanza durante la
transferencia es de 700 Kb/s y consume un 97% menos que un telfono mvil. [1]

ZIGBEE
Gallego C. Fogaldo [ online ] Menciona:
ZigBee, tambin conocido como IEEE 802.15.4, por el estndar basado, se
utiliza para la comunicacin inalmbrica mediante radio digital. Se caracteriza
por una comunicacin segura, su sencillez de integracin, su topologa de red
(en malla, aunque pueden encontrarse otras topologas), y sobre todo, por su bajo
consumo. [ 1 ]
Soria Lpez, Jos [ online ] Menciona:
ZigBee es el nombre de la especificacin de un conjunto de protocolos de alto
nivel de comunicacin inalmbrica para su utilizacin con radiodifusin digital
de bajo consumo, basada en el estndar IEEE 802.15.4 de redes inalmbricas de
rea personal (wireless personal area network, WPAN). Su objetivo son las
aplicaciones que requieren comunicaciones seguras con baja tasa de envo de
datos y maximizacin de la vida til de sus bateras.. [ 2 ]
Ortega H. Carlos [ online ] Menciona:
ZigBee es un estndar de comunicaciones inalmbricas diseado por la ZigBee
Alliance. Es un conjunto estandarizado de soluciones que pueden ser
implementadas por cualquier fabricante. ZigBee est basado en el estndar IEEE
167

802.15.4 de redes inalmbricas de rea personal (wireless personal rea Newark,


WPAN) y tiene como objetivo las aplicaciones que requieren comunicaciones
seguras con baja tasa de envo de datos y maximizacin de la vida til de sus
bateras. [ 3 ]
Definicin Grupal:
ZigBee es una nueva tecnologa de mvil de corto alcance y bajo consumo y
que se defini como una solucin inalmbrica de baja capacidad para
aplicaciones en el hogar como la seguridad y la sistematizacin, que est
basado en el estndar 802.15.4.
ZigBee es un estndar de comunicaciones inalmbricas diseado por la ZigBee
Alliance. Es un conjunto estandarizado de soluciones que pueden ser implementadas por
cualquier fabricante. ZigBee est basado en el estndar IEEE 802.15.4 de redes
inalmbricas de rea personal (wireless personal rea Newark, WPAN) y tiene como
objetivo las aplicaciones que requieren comunicaciones seguras con baja tasa de envo
de datos y maximizacin de la vida til de sus bateras.
1998. - Las redes de la familia de ZigBee se conciben, al tiempo que se hizo claro que
Wi-Fi y Bluetooth no seran soluciones vlidas para todos los contextos. En concreto, se
observ una necesidad de redes ad hoc inalmbricas.2003. - El estndar IEEE 802.15.4
se aprueba en mayo.
2003. - En el verano, Philips Semiconductors puso fin a su inversin en redes de mallas.
Philips Lighting ha perpetuado la participacin de Philips, que sigue siendo un miembro
prominente de la ZigBee Alliance.
2004. - ZigBee Alliance anunci en octubre una duplicacin en su nmero de miembros
en el ltimo ao a ms de 100 compaas en 22 pases. En abril de 2005 haba ms de
150 miembros corporativos, y ms de 200 en diciembre del mismo ao.
2004. - Se aprueba la especificacin Zigbee el 14 de diciembre.
2005. - ZigBee 2004 se puso a disposicin del pblico sin fines comerciales el 13 de
junio en San Ramn, California.
2006. - El precio de mercado de un transceptor compatible con ZigBee se acerca al
dlar y el precio de un conjunto de radio, procesador y memoriaronda los tres dlares
(5).2006. - En diciembre se public la actual revisin de la especificacin.
2007. - En Noviembre se public el perfil HOME AUTOMATION de la especificacin.
[1]
168

ESTRUCTURA

Figura 79 Estructura del Zigbee Fuente. http://www.informaticahoy.com.ar/telefonos-celulares/Que-es- Zigbee..php

Siguiendo el estndar del modelo de referencia OSI (8) (Open Systems


Interconnection), en el grfico, aparece la estructura de la arquitectura en capas. Las
primeras dos capas, la fsica y la de acceso al medio MAC (9), son definidas por el
estndar IEEE 802.15.4. Las capas superiores son definidas por la Alianza ZigBee y
corresponden a las capas de red y de aplicacin las cuales contienen los perfiles del uso,
ajustes de la seguridad y la mensajera.Los cometidos principales de la capa de red son
permitir el correcto uso del subnivel MAC y ofrecer un interfaz adecuado para su uso
por parte del nivel inmediatamente superior. Sus capacidades, incluyendo el ruteo, son
las tpicas de un nivel de red clsico.Por una parte, la entidad de datos crea y gestiona
las unidades de datos del nivel de red a partir del payload del nivel de aplicacin y
realiza el ruteo en base a la topologa de la red en la que el dispositivo se encuentra. Por
otra, las funciones de control del nivel controlan la configuracin de nuevos dispositivos
y el establecimiento de nuevas redes; puede decidir si un dispositivo colindante
pertenece a la red e identifica nuevos routers y vecinos.
El control puede detectar as mismo la presencia de receptores, lo que posibilita la
comunicacin directa y la sincronizacin a nivel MAC. La trama general de operaciones
(GOF) es una capa que existe entre la de aplicaciones y el resto de capas. La GOF suele
169

cubrir varios elementos que son comunes a todos los dispositivos, como el
subdireccionamiento, los modos de direccionamientos y la descripcin de dispositivos,
como el tipo de dispositivo, potencia, modos de dormir y coordinadores de cada uno.[2]

Caractersticas

ZigBee, tambin conocido como "HomeRF Lite", es una tecnologa inalmbrica

con velocidades comprendidas entre 20 kB/s y 250 kB/s.


Los rangos de alcance son de 10 m a 75 m.
Puede usar las bandas libres ISM (6) de 2,4 GHz (Mundial), 868 MHz (Europa)

y 915 MHz (EEUU).


Una red ZigBee puede estar formada por hasta 255 nodos los cuales tienen la
mayor parte del tiempo el transceiver ZigBee dormido con objeto de consumir

menos que otras tecnologas inalmbricas.


Un sensor equipado con un transceiver ZigBee pueda ser alimentado con dos

pilas AA durante al menos 6 meses y hasta 2 aos.


La fabricacin de un transmisor ZigBee consta de menos circuitos analgicos de

los que se necesitan habitualmente.


Diferentes tipos de topologas como estrella, punto a punto, malla, rbol.
Acceso de canal mediante CSMA/CA(7) (acceso mltiple por deteccin de

portadora con evasin de colisiones).


Escalabilidad de red -- Un mejor soporte para las redes ms grandes, ofreciendo

ms opciones de gestin, flexibilidad y desempeo.


Fragmentacin -- Nueva capacidad para dividir mensajes ms largos y permitir

la interaccin con otros protocolos y sistemas.


Agilidad de frecuencia -- Redes cambian los canales en forma dinmica en caso

que ocurran interferencias.


Gestin automatizada de direcciones de dispositivos - El conjunto fue
optimizado para grandes redes con gestin de red agregada y herramientas de

configuracin.
Localizacin grupal -- Ofrece una optimizacin adicional de trfico necesaria

para las grandes redes.


Puesta de servicio inalmbrico -- El conjunto fue mejorado con capacidades

seguras para poner en marcha el servicio inalmbrico.


Recoleccin centralizada de datos -- El conjunto fue sintonizado
especficamente para optimizar el flujo de informacin en las grandes redes.[3]

170

Ventajas

Ideal para conexiones punto a punto y punto a multipunto


Diseado para el direccionamiento de informacin y el refrescamiento de la red.
Opera en la banda libre de ISM 2.4 Ghz para conexiones inalmbricas.
ptimo para redes de baja tasa de transferencia de datos.
Alojamiento de 16 bits a 64 bits de direccin extendida.
Reduce tiempos de espera en el envo y recepcin de paquetes.
Deteccin de Energa (ED).
Baja ciclo de trabajo - Proporciona larga duracin de la batera.
Soporte para mltiples topologas de red: Esttica, dinmica, estrella y malla.
Hasta 65.000 nodos en una red.
128-bit AES de cifrado - Provee conexiones seguras entre dispositivos.
Son ms baratos y de construccin ms sencilla.Desventajas
La tasa de transferencia es muy baja.
Solo manipula textos pequeos comparados con otras tecnologas.
Zigbee trabaja de manera que no puede ser compatible con bluetooth en todos
sus aspectos porque no llegan a tener las mismas tasas de transferencia, ni la

misma capacidad de soporte para nodos.


Tiene menor cobertura porque pertenece a redes inalmbricas de tipo WPAN.

Tipos de Dispositivos
Se definen tres tipos distintos de dispositivo ZigBee segn su papel en la red
Coordinador ZigBee (ZigBee Coordinator, ZC): El tipo de dispositivo ms completo.
Debe existir uno por red. Sus funciones son las de encargarse de controlar la red y los
caminos que deben seguir los dispositivos para conectarse entre ellos, requiere memoria
y capacidad de computacin.
Router ZigBee (ZigBee Router, ZR):Interconecta dispositivos separados en la
topologa de la red, adems de ofrecer un nivel de aplicacin para la ejecucin de
cdigo de usuario.
Dispositivo final (ZigBee End Device, ZED):Posee la funcionalidad necesaria para
comunicarse con su nodo padre (el coordinador o un router), pero no puede transmitir
informacin destinada a otros dispositivos. De esta forma, este tipo de nodo puede estar
dormido la mayor parte del tiempo, aumentando la vida media de sus bateras. Un ZED
tiene requerimientos mnimos de memoria y es por tanto significativamente ms barato.
Funcionalidad
Basndose en su funcionalidad, puede plantearse una segunda clasificacin:Dispositivo
de funcionalidad completa (FFD):Tambin conocidos como nodo activo. Es capaz de
recibir mensajes en formato 802.15.4. Gracias a la memoria adicional y a la capacidad
171

de computar, puede funcionar como Coordinador o Router ZigBee, o puede ser usado en
dispositivos de red que acten de interfaces con los usuarios.Dispositivo de
funcionalidad reducida (RFD):Tambin conocido como nodo pasivo. Tiene capacidad y
funcionalidad limitadas con el objetivo de conseguir un bajo coste y una gran
simplicidad. Bsicamente, son los sensores/actuadores de la red.Un nodo ZigBee (tanto
activo como pasivo) reduce su consumo gracias a que puede permanecer dormido la
mayor parte del tiempo (incluso muchos das seguidos). [4]

Topologa
La capa de red soporta mltiples configuraciones de red incluyendo estrella, rbol,
punto a punto y rejilla (malla).
Topologa en estrella
En la configuracin en estrella, uno de los dispositivos tipo FFD asume el rol de
coordinador de red y es responsable de inicializar y mantener los dispositivos en la red.
Todos los dems dispositivos zigbee, conocidos con el nombre de dispositivos finales,
hablan directamente con el coordinador.En la configuracin de rejilla, el coordinador
ZigBee es responsable de inicializar la red y de elegir los parmetros de la red, pero la
red puede ser ampliada a travs del uso de routers ZigBee.

Figura 80 Topologa Malla


Fuente: http://rua.ua.es/dspace/bitstream/10045/1109/7/Informe_ZigBee.pdf

El algoritmo de encaminamiento utiliza un protocolo de pregunta-respuesta (requestresponse) para eliminar las rutas que no sean ptimas, La red final puede tener hasta 254
nodos. Utilizando el direccionamiento local, se puede configurar una red de ms de
65000 nodos (216).
Topologa punto a punto
Para la topologa punto a punto, existe un solo FFD Coordinador. A diferencia con la
topologa estrella, cualquier dispositivo puede comunicarse con otro siempre y cuando
estn en el mismo rango de alcance circundante. Las aplicaciones orientadas para el
172

monitoreo y control de procesos industriales, redes de sensores inalmbricos, entre


otros, son ampliamente usados por estas redes. Proveen confiabilidad en el enrutamiento
de datos (multipath routing).

Figura 81 Topologa punto a punto


Fuente: http://rua.ua.es/dspace/bitstream/10045/1109/7/Informe_ZigBee.pdf

Topologa de rbol
La topologa de rbol es un caso especial de topologa de conexin punto a punto, en la
cual muchos dispositivos son FFDs y los RFD pueden conectarse como un nodo nico
al final de la red. Cualquiera de los FFDs restantes pueden actuar como coordinadores y
proveer servicios de sincronizacin hacia otros dispositivos o coordinadores.

Figura 82 Topologa punto a punto protocolo ZigBee


Fuente: http://rua.ua.es/dspace/bitstream/10045/1109/7/Informe_ZigBee.pdf

Tipos de Trfico de Datos


ZigBee/IEEE 802.15.4 dirige tres tipos de trfico tpicos:
1. Cuando el dato es peridico: La aplicacin dicta la proporcin, el sensor se activa,
chequea los datos y luego desactiva.
2. Cuando el dato es intermitente: La aplicacin, u otro estmulo, determina la
proporcin, como en el caso de los detectores de humo. El dispositivo necesita slo
conectarse a la red cuando la comunicacin se hace necesaria. Este tipo habilita el
ahorro ptimo en la energa.
3. Cuando el dato es repetitivo: La proporcin es a priori fija. Dependiendo de las
hendeduras de tiempo repartidas, los dispositivos operan para las duraciones fijas.[5]

173

Seguridad
La seguridad de las transmisiones y de los datos son puntos clave en la tecnologa
ZigBee. ZigBee utiliza el modelo de seguridad de la subcapa MAC IEEE 802.15.4, la
cual especifica 4 servicios de seguridad. Control de accesos: El dispositivo mantiene
una lista de los dispositivos comprobados en la red. Datos Encriptados: Los cuales usan
una encriptacin con un cdigo de 128 bits. Integracin de tramas: Protegen los datos de
ser modificados por otros. Secuencias de refresco: Comprueban que las tramas no han
sido reemplazadas por otras. El controlador de red comprueba estas tramas de refresco y
su valor, para ver si son las esperadas. Modelo bsico de seguridad. Las claves son la
base de la arquitectura de seguridad y, como tal, su proteccin es fundamental para la
integridad del sistema. Las claves nunca deben transportarse utilizando un canal
inseguro, si bien existe una excepcin momentnea que se da en la fase inicial de la
unin de un dispositivo desconfigurado a una red. La red ZigBee debe tener particular
cuidado, pues una red ad hoc (12) puede ser accesible fsicamente a cualquier
dispositivo externo y el entorno de trabajo no se puede conocer de antemano.

Aplicaciones
Los protocolos ZigBee estn definidos para su uso en aplicaciones embebidas con
requerimientos muy bajos de transmisin de datos y consumo energtico. Se pretende su
uso en aplicaciones de propsito general con caractersticas auto organizativas y bajo
coste (redes en malla, en concreto). Puede utilizarse para realizar control industrial,
albergar sensores empotrados, recolectar datos mdicos, ejercer labores de deteccin de
humo o intrusos o domtica. La red en su conjunto utilizar una cantidad muy pequea
de energa de forma que cada dispositivo individual pueda tener una autonoma de hasta
5 aos antes de necesitar un recambio en su sistema de alimentacin.

174

Figura 83 Aplicaciones Fuente:


http://rua.ua.es/dspace/bitstream/10045/1109/7/Informe_ZigBee
.pdf

Futuro del Zigbee


Se espera que los mdulos ZigBee sean los transmisores inalmbricos ms baratos de la
historia, y adems producidos de forma masiva. Tendrn un coste aproximado de
alrededor de los 6 euros, y dispondrn de una antena integrada, control de frecuencia y
una pequea batera. Ofrecern una solucin tan econmica porque la radio se puede
fabricar con muchos menos circuitos analgicos de los que se necesitan habitualmente.
[6]
Organizadores Grficos

Diagrama 2 ZIGBEE FUENTE: SEPTIMO A 2016

175

EJERCICIOS RESUELTOS

176

EJERCICIOS PROPUESTOS SOLUCIONARIO A LOS EJERCICIOS

Cdigo ejercicio 1.
TEMA:
CCP modo Captura de Timer1
DESCRIPCION
El siguiente programa trabaja con el mdulo CCP en modo Captura es decir capta un
valor que llega al timer en este caso Timer1 que es un generador de pulsos, entonces al
variar la frecuencia tomo el ultimo valor y lo visualiza en una pantalla LCD.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 CI 555
Resistencia de 1K
Resistencia de 220
1 Fuente de alimentacin (5v)
1 Protoboard
Capacitores 10uF
Diodo Led
Potencimetro
CAPTURAS PROTEUS

CODIGO COMENTADO
#include <16f887.h>

#fuses xt, NOWDT, NOPROTECT,


NOLVP, NOMCLR // CONFIGURACION

Estado=0;
if(Senal==0){
Senal=1;
}

DE FUSIBLES

#use delay(clock=4M)
#define LCD_ENABLE_PIN
PIN_D0 // INCLUSION DE LA LIBRERA
PARA LA LCD

#define LCD_RS_PIN
#define LCD_RW_PIN
#define LCD_DATA4
#define LCD_DATA5
#define LCD_DATA6
#define LCD_DATA7
#include <lcd.c>

PIN_D1
PIN_D2
PIN_D4
PIN_D5
PIN_D6
PIN_D7

}
}
void main(){
lcd_init();
setup_timer_1(T1_INTERNAL |
T1_DIV_BY_1); // DECLARACION PARA
MODO CAPTURA

ext_int_edge(0,L_TO_H);
Estado=0;
enable_interrupts(int_ccp1); //
DECLARACION DE INTERRUPCIONES

Int16 TiempoF; // DECLARACION DE LAS


VARIABLES EN MODO CAPTURA

float Periodo;
float Calculo;
float Frecuencia;
int1 Senal=0;
int1 Estado=0;
#int_ccp1 // INCLUSION DE LA SENTENCIA
CCP

void Captura(){
if(Estado==0){
set_timer1(0);
ext_int_edge(0,H_TO_L);
Estado=1;
} else{
TiempoF=get_timer1();
ext_int_edge(0,L_TO_H);

enable_interrupts(global);
setup_ccp1(CCP_CAPTURE_FE);
do {
if(Senal==1){
Calculo=TiempoF*1;
Periodo=Calculo*0.25;
Frecuencia=(1/
(Periodo*2.0))*1000000;
printf (lcd_putc,"Captura de
Datos");
delay_ms(100);
lcd_gotoxy(1,2);
printf(lcd_putc,"\nfrecue=
%9.5fHz ",Frecuencia);
}
Senal=0;
} while (TRUE);
}

Cdigo ejercicio 2.
TEMA:
CCP modo Comparacin voltaje externo
DESCRIPCION
El siguiente programa trabaja con el mdulo CCP en modo comparacin, para esto tomo
como referencia un voltaje externo de 5 volts como referencia para compararlo con el
timer 1 o 2 y de esta manera encender tres posiciones diferentes haciendo referencia a
un set point.
MATERIALES
1 Pantalla LCD

1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro

CAPTURAS PROTEUS

CODIGO COMENTADO
#include <16f887.h>
#device adc=10 // DECLARACION DEL
VALOR ADC PARA LA CONVERSION

#use delay (clock = 4000000)


#fuses NOMCLR,XT
CONFIGURACION DE PINES DE
LCD// DECLARACION DE LOS PINES PARA
LCD

#define LCD_DB4 PIN_D4


#define LCD_DB5 PIN_D5
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7
#define LCD_RS PIN_D2
#define LCD_E PIN_D3
#include <lcd.c>

void main()
{
int v;
int16 q;
int16 z;
float p;
setup_adc_ports(PIN_A0|VSS_VDD);
//

DECLARACION DE LA SENTECNIA CCP


COM.

setup_adc(ADC_CLOCK_INTERNAL)
;

lcd_init();
for (;;)
{
set_adc_channel(0);
delay_us(20);

{
output_high(pin_b2);
output_low(pin_b0);
output_low(pin_b1);
}
if (p>v)
{
output_high(pin_b0);
output_low(pin_b1);
output_low(pin_b2);
}
if ((q>600)&&(q<650))
{
output_high(pin_b1);
output_low(pin_b0);
output_low(pin_b2);
}
}

q = read_adc();
z = 5 * q;
p = z/1024.0;
v=3;
printf(lcd_putc, "\f SetPoint= 3
V"); // DECLARACION DE UN VALOR SET
POINT A COMP.

printf(lcd_putc, "\n V Actual=


%01.1fV", p);
delay_ms(100);
if (p<v) // DECLARACION DE LOS
PINES DE SALIDA LOS LEDS PARA
VISULIZAR LA COM.

Cdigo ejercicio 3.
TEMA:
CCP modo PWM para seal cuadrtica.
DESCRIPCION
El siguiente cdigo presenta el modo PWM del mdulo CCP, lo que nos permitir variar
el ciclo de trabajo de una seal cuadrtica en 3 posiciones diferentes y verificar la
forma de onda y la variacin de la misma en diodo led.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
CAPTURAS PROTEUS

CODIGO COMENTADO
#include <16f887.h>
#fuses xt
#use delay (clock=4M)
#define LCD_ENABLE_PIN PIN_D0
////
#define LCD_RS_PIN
PIN_D1
////
#define LCD_RW_PIN
PIN_D2
////
#define LCD_DATA4
PIN_D4
////
#define LCD_DATA5
PIN_D5
////
#define LCD_DATA6
PIN_D6
////
#define LCD_DATA7
PIN_D7
#include <lcd.c>
#include <kbd_lib.c>
#use fast_io(c)
#use pwm(ccp1,frequency=2k,
duty=50)
void main(){
char e;

int z=0;
//
lcd_init();
printf(lcd_putc,"\fSistema
Encendido");
delay_ms(100);
kbd_init();
setup_adc_ports(NO_ANALOGS);
port_b_pullups(TRUE);
set_tris_c(0x00);
while (true){
e=kbd_getc();
if(e!=0){
if(e=='A') {
printf(lcd_putc,"\f Encendido ");
delay_ms(100);
Z=3;
output_c(0);
pwm_set_duty_percent(0);
delay_ms(100);
}
if(e=='B') {
printf(lcd_putc,"\f Apagado ");

output_c(0);
delay_ms(100);
output_c(0);
Z=1;
pwm_set_duty_percent(0);
delay_ms(100);
}
if(e=='1') {
delay_ms(30);
output_c(0);
if(z==1){
printf(lcd_putc,"\f Debe Encender ");
delay_ms(100);
output_c(0);
}
if(z==3){
printf(lcd_putc,"\f Duty
25");//velocidad 1
pwm_set_duty_percent(250);
delay_ms(100);
}
}
if(e=='2') {
output_c(0);
delay_ms(30);
if(z==1){
printf(lcd_putc,"\f Debe Encender ");
delay_ms(100);
output_c(0);
}
if(z==3){
printf(lcd_putc,"\f Duty 50
");//velocidad 2
pwm_set_duty_percent(500);
delay_ms(100);
}
}

Cdigo ejercicio 4.

if(e=='3') {
output_c(0);
delay_ms(30);
if(z==1){
printf(lcd_putc,"\f Debe Encender ");
delay_ms(100);
output_c(0);
}
if(z==3){
printf(lcd_putc,"\f Duty 75
");//velocidad 2
pwm_set_duty_percent(750);
delay_ms(100);
}
}
if(e=='C') {
output_c(0);
delay_ms(30);
if(z==1){
printf(lcd_putc,"\f Debe Encender ");
delay_ms(100);
output_c(0);
}
if(z==3){
printf(lcd_putc,"\f Duty 85
");//velocidad 2
pwm_set_duty_percent(850);
delay_ms(100);
}
}
}
}
}

TEMA:
CCP modo captura con sensor de temperatura.
DESCRIPCION
El siguiente programa est configurado para captar la seal analgica de un sensor lm35
y visualizarla en una pantalla lcd.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
Sensor lm35
CAPTURAS PROTEUS

#use delay(clock=4M)
#include <lcd.c>
float temperatura;

CODIGO COMENTADO
#include <16f887.h>
#fuses XT, NOWDT, NOPROTECT,
NOLVP, NOCPD, NOWRT,
NODEBUG
#device *=16
#device adc=10

void main()
{
setup_adc_ports(sAN0);//entrada del
LM35
setup_adc(ADC_CLOCK_INTERNAL)
;

set_adc_channel(0);
lcd_init();
lcd_gotoxy(5,1);
printf(lcd_putc,"Temperatura");
delay_ms(350);
lcd_init();

while(true)
{
temperatura=(float)read_adc()/2;
lcd_gotoxy(5,1);
printf(lcd_putc,"%02.1f",temperatura);
lcd_gotoxy(14,1);
printf(lcd_putc,"Grados");
delay_ms(200);

}
}

Cdigo ejercicio 5.
TEMA:
CCP modo comparacin con Sensor Ultrasnico
DESCRIPCION
El siguiente programa trabaja con una serie de bits de resolucin que permiten hacer u
calculo a la seal analgica que es enviada por medio del sensor e indicarnos la
distancia qu este se encuentra. Sin embargo en proteus al no contar con las libreras
necesarias del sensor no se puede correr el programa.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
CAPTURAS PROTEUS

CODIGO COMENTADO
#include <16f887.h>
#fuses XT,NOWDT,NOMCLR
#use delay (clock=4000000)
#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_D5
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7
#define LCD_RS PIN_D2
#define LCD_E PIN_D3
#include <lcd.c>
#use standard_io(b)
#define trig pin_B1
#define echo pin_B0
int16 time;
float distance;

setup_timer_1(T1_INTERNAL|
T1_DIV_BY_8); // initiating timer
while(true)
{
output_high(trig);
ping the sonar
delay_us(20);
sending 20us pulse
output_low(trig);

//
//

while(!input(ECHO))
wait for high state of echo pin
{}

//

// Defining variables

void main()
{
lcd_init();
//
initiating the LCD
printf(LCD_PUTC, "\f
ULTRASONIC");// for LCD & MCU
restart troubleshooting
delay_ms(1000);
//
Boot-up delay, for troubleshooting

set_timer1(0);
timer zero

// setting

while(input(ECHO))
Wait for high state of echo pin
{}
time=get_timer1();
Getting the time
distance=time*10 ;
the distance

//

//
// Calculating

distance=distance/75;
printf(LCD_PUTC, "\nDistance =
%F",distance); // Putting the time and
delay_ms(1000);

}
}

Cdigo ejercicio 6.
TEMA:
CCP modo comparacin con un sensor de presencia
DESCRIPCION
El siguiente programa detecta la presencia de un sensor infrarrojo en el rango permisible
del mismo lo que indicara n mensaje de detectado y no detectado en un pantalla LCD
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
Sensor infrarrojo
CAPTURAS PROTEUS

CODIGO COMENTADO
#include <16f887.h>
#fuses XT, NOWDT, NOPROTECT,
NOLVP, NOCPD, NOWRT,
NODEBUG
#device *=16
#device adc=10
#use delay(clock=4M)
#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_D5
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7
#define LCD_RS PIN_D2
#define LCD_E PIN_D3
#include <lcd.c>

int16 value;
float32 y;
void main()
{
setup_adc_ports(sAN0|
VSS_VDD);//entrada del LM35
setup_adc(ADC_CLOCK_INTERNAL)
;
set_adc_channel(0);
lcd_init();
lcd_gotoxy(5,1);
printf(lcd_putc,"Luminosidad");
delay_ms(350);

lcd_init();

while(true)
{
delay_ms(50);
value=read_adc();
y=value*0.005;
y=y-1.183;
lcd_gotoxy(5,2);
printf(lcd_putc,"%2.3f cm",y);
lcd_gotoxy(5,1);
printf(lcd_putc,"Distancia");
delay_ms(1000);
if((y<=3)&&(y>0))
{
printf(lcd_putc,"\f Detecta");
delay_ms(1000);
printf(lcd_putc,"\f");
}
else
{
printf(lcd_putc,"\f NO Detecta");
delay_ms(1000);
printf(lcd_putc,"\f");
}
}
}

Cdigo ejercicio 7.
TEMA:
Motor DC PWM
DESCRIPCION
El siguiente programa tiene por objetivo disear un lenguaje de programacin que nos
permita variar el ciclo de trabajo de una seal cuadrtica y verificar su funcionaiento en
un motor de 5volts.
MATERIALES

1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
Motor dc

CAPTURAS PROTEUS

CODIGO COMENTADO
#include <18f4550.h>
#fuses xt, nowdt, nowrt, nomclr
#use delay (clock=4M)
#define LCD_ENABLE_PIN PIN_D0
////
#define LCD_RS_PIN
PIN_D1
////
#define LCD_RW_PIN
PIN_D2
////

#define LCD_DATA4
////
#define LCD_DATA5
////
#define LCD_DATA6
////
#define LCD_DATA7
#include <lcd.c>
#include <kbd_lib.c>

PIN_D4
PIN_D5
PIN_D6
PIN_D7

#use pwm(ccp1,frequency=2k,
duty=50)
#use pwm(ccp2,frequency=2k,
duty=50)
char a=10;
short int d=1;
int z;
int i;
int de;
#INT_RB
void teclado(){
char b;
output_toggle(pin_c1);
kbd_init();
do{
b=kbd_getc();
if(b!=0){
a=b;
lcd_putc("\f"+b);
}
}while(b==0);
d=1;
clear_interrupt(int_rb);
}

void main(){
lcd_init();
lcd_putc("\fControl PWM");
delay_ms(100);
set_tris_c(0x00);
set_tris_E(0x00);
port_b_pullups(true);
enable_interrupts(int_rb);
enable_interrupts(global);

while (true){
if(d==1){

set_tris_b(0xf0);
output_low(pin_b0);
output_low(pin_b1);
output_low(pin_b2);
output_low(pin_b3);
d=0;
}
switch(a)
{
case 'A':
lcd_gotoxy(1,1);
printf(lcd_putc,"\fSistema ON ");
delay_ms(100);
z=3;
break;
case 'B' :
printf(lcd_putc,"\fSistema OFF ");
SET_PWM1_DUTY(0);
SET_PWM2_DUTY(0);
delay_ms(100);
z=0;
break;
case 'C' :
printf(lcd_putc,"\fIzquierda
");//encendido
SET_PWM1_DUTY(0);
SET_PWM2_DUTY(0);
delay_ms(100);
de=0;
i=1;
break;
case 'D' :
printf(lcd_putc,"\fDerrecha
");//encendido
SET_PWM1_DUTY(0);
SET_PWM2_DUTY(0);
delay_ms(100);
de=1;
i=0;
break;

case '1':
if(z>1){
if(i==1){
printf(lcd_putc,"\f DC 25");//velocidad
1
SET_PWM1_DUTY(0);
SET_PWM2_DUTY(300);
delay_ms(100);
}
if(de==1){
printf(lcd_putc,"\f DC 25");//velocidad
1
SET_PWM1_DUTY(300);
SET_PWM2_DUTY(0);
delay_ms(100);
}
}
break;
case '2':
if(z>1){
if(i==1){
printf(lcd_putc,"\f DC 75");//velocidad
1
SET_PWM1_DUTY(0);
SET_PWM2_DUTY(400);
delay_ms(100);
}
if(de==1){
printf(lcd_putc,"\f DC 75");//velocidad
1

SET_PWM1_DUTY(400);
SET_PWM2_DUTY(0);
delay_ms(100);
}
}
break;
case '3':
if(z>1){
if(i==1){
printf(lcd_putc,"\f DC 90");//velocidad
1
SET_PWM1_DUTY(0);
SET_PWM2_DUTY(500);
delay_ms(100);
}
if(de==1){
printf(lcd_putc,"\f DC 90");//velocidad
1
SET_PWM1_DUTY(500);
SET_PWM2_DUTY(0);
delay_ms(100);
}
}
break;
default:
printf(lcd_putc,"\fNo Corresponde");
delay_ms(100);
}
}
}

Cdigo ejercicio 8.
TEMA:
Motor AC con TRIAC
DESCRIPCION
El siguiente programa tiene por objetivo establecer un lenguaje de programacin que
permita controlar el ciclo de trabajo de en seal PWM adems de acoplarse a un circuito
de potencia que detectara el cruce pro cero y variara la cantidad de energa que legue a
la carga.
Nota: La simulacin no puede ejecutarse debido a un error en el diseo del circuito en la
parte de potencia.

MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
Motor dc
CAPTURAS PROTEUS

CODIGO COMENTADO
#INCLUDE <16F887.H>
#fuses intrc_io, nowdt, nomclr, noput
#fuses intrc_io, nowdt, nomclr, noput
#use delay(clock=4M)
#include <kbd_lib.c>
#BYTE WPUB =0X95
#BYTE OPTION_REG = 0X81
#include <lcd.c>

char k;
int y,z;
void main()
{
OPTION_REG = 0;
WPUB= 0B11111111;
//port_b_pullups(true);

kbd_init();
lcd_init();
lcd_putc("\f SISTEMA Funcionando");
delay_us(100);
while (true)
{
delay_us(100);
k=kbd_getc();
if(k!=0)
{
y=k-48;
switch (y)
{
case(1):
z=1;
lcd_putc("\f Duty en:\n duty 12 ");
delay_us(20);
break;
case(2):
z=2;
lcd_putc("\f Duty en: \n 25");
delay_us(20);
break;
case(3):
z=3;
printf(lcd_putc,"\f Duty en: \n 45");
delay_us(20);
break;
case (4):
z=4;
printf(lcd_putc,"\f Duty en: \n 60");
delay_us(20);
break;
case (5):
z=5;
printf(lcd_putc,"\f Duty en: \n 85");
delay_us(20);

break;
case (6):
lcd_putc("\f SISTEMA AC");
output_low(pin_c0);
delay_us(20);
K=0;
z=0;
}
}else output_low(pin_c0);
if((z==1))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(7200);
output_high(pin_c0);
delay_us(1000);
}
}
}else if((z==2))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(6000);
output_high(pin_c0);
delay_us(2200);
}
}
}else if((z==3))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);

delay_us(4800);
output_high(pin_c0);
delay_us(3400);
}
}
}else if((z==4))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(3600);
output_high(pin_c0);
delay_us(4600);
}
}

}else if((z==5))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(2400);
output_high(pin_c0);
delay_us(5800);
}
}
}
}
}

Cdigo ejercicio 9.
TEMA:
COMUNICACIN SPI
DESCRIPCION
El siguiente programa permite la comunicacin entre dos microcontroladores pic uno
denominado maestro y otro llamado esclavo mediante el protocolo SPI, adems cuenta
con un teclado conectado a ambos pics que envan datos al presionar una tecla.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
Motor dc
CAPTURAS PROTEUS

CODIGO COMENTADO MAESTRO


#include <18F4550.h> //
DECLARAMOS EL TIPO DE PIC A
UTILIZAR
#fuses XT,NOMCLR
#use delay (clock=4M)
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B2
#define LCD_E PIN_B3
#include <lcd1.c>
#include <vinueza.c>
char rx=0;
Char tecla;
Char dat;
int z;
#INT_SSP
// define
interrupcion SSP
void ssp_interrupt(){
if(z==0){
if(spi_data_is_in()){
//verifica si hay dato en SPI

rx=spi_read();
//k=dat;
lcd_gotoxy(8,1);
printf(lcd_putc,"\f %u",rx);
if(rx!=0){
if(rx==67){
printf(lcd_putc,"\f C ");
delay_ms(100);
}
if(rx==68){
printf(lcd_putc,"\f D ");
delay_ms(100);
}
if(rx==35){
printf(lcd_putc,"\f # ");
delay_ms(100);
}
}
}
}}

void main(){
kbd_init();

lcd_init();
printf(lcd_putc,"\f Maestro ");
delay_ms(100);
while (true){
tecla=kbd_getc();
dat=tecla-48;
if(tecla!=0){
if(tecla=='A'){
setup_spi(spi_master | spi_l_to_h |
spi_clk_div_16);
printf(lcd_putc,"\f Modo TX ");
delay_ms(100);
disable_interrupts(INT_SSP);
z=1;
}
if(tecla=='B'){
z=0;
setup_spi(spi_slave | spi_l_to_h |
spi_clk_div_16| SPI_XMIT_L_TO_H);
printf(lcd_putc,"\f Modo RX ");
delay_ms(100);
enable_interrupts(GLOBAL); // habilita
interrupcion global
enable_interrupts(INT_SSP);
ssp_interrupt();
}

if(tecla=='1'){
spi_write(tecla);
printf(lcd_putc,"\f 1 ");
}
if(tecla=='2'){
spi_write(tecla);
printf(lcd_putc,"\f 2 ");
}
if(tecla=='3'){
spi_write(dat);
printf(lcd_putc,"\f 3 ");
}

if(tecla=='4'){
spi_write(dat);
printf(lcd_putc,"\f 4 ");
}
if(tecla=='5'){
spi_write(dat);
printf(lcd_putc,"\f 5 ");
delay_ms(500);
}
if(tecla=='6'){
spi_write(6);
printf(lcd_putc,"\f 6 ");
delay_ms(500);
}
if(tecla=='7'){
spi_write(dat);
printf(lcd_putc,"\f 7 ");
delay_ms(500);
}
if(tecla=='8'){
spi_write(dat);
printf(lcd_putc,"\f 8 ");
}
if(tecla=='9'){
spi_write(dat);
printf(lcd_putc,"\f 9 ");
}
if(tecla=='C'){
spi_write(dat);
printf(lcd_putc,"\f C");
}
if(tecla=='D'){
spi_write(dat);
printf(lcd_putc,"\f D ");

}
if(tecla=='#'){
spi_write(dat);
printf(lcd_putc,"\f # ");

}
}
}
}

CODIGO COMENTADO ESCLAVO


#include <18F4550.h> //
DECLARAMOS EL TIPO DE PIC A
UTILIZAR
#fuses XT,NOMCLR
#use delay (clock=4M)
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B2
#define LCD_E PIN_B3
#include <lcd1.c>
#include <vinueza.c>
char rx=0;
Char tecla;
Char dat;
int z;
#INT_SSP
// define
interrupcion SSP
void ssp_interrupt(){
if(z==0){
if(spi_data_is_in()){
//verifica si hay dato en SPI
rx=spi_read();
//k=dat;
lcd_gotoxy(8,1);
printf(lcd_putc,"\f %u",rx);
if(rx!=0){
if(rx==67){
printf(lcd_putc,"\f C ");
delay_ms(100);
}

if(rx==68){
printf(lcd_putc,"\f D ");
delay_ms(100);
}
if(rx==35){
printf(lcd_putc,"\f # ");
delay_ms(100);
}
}
}
}}

void main(){
kbd_init();
lcd_init();
printf(lcd_putc,"\f Maestro ");
delay_ms(100);
while (true){
tecla=kbd_getc();
dat=tecla-48;
if(tecla!=0){
if(tecla=='A'){
setup_spi(spi_master | spi_l_to_h |
spi_clk_div_16);
printf(lcd_putc,"\f Modo TX ");
delay_ms(100);
disable_interrupts(INT_SSP);
z=1;
}
if(tecla=='B'){
z=0;
setup_spi(spi_slave | spi_l_to_h |
spi_clk_div_16| SPI_XMIT_L_TO_H);
printf(lcd_putc,"\f Modo RX ");
delay_ms(100);
enable_interrupts(GLOBAL); //habilita
interrupcion global
enable_interrupts(INT_SSP);
ssp_interrupt();
}

delay_ms(500);
}
if(tecla=='8'){
spi_write(dat);
printf(lcd_putc,"\f 8 ");

if(tecla=='1'){
spi_write(tecla);
printf(lcd_putc,"\f 1 ");
}
if(tecla=='2'){
spi_write(tecla);
printf(lcd_putc,"\f 2 ");

}
if(tecla=='9'){
spi_write(dat);
printf(lcd_putc,"\f 9 ");

}
if(tecla=='3'){
spi_write(dat);
printf(lcd_putc,"\f 3 ");

}
if(tecla=='C'){
spi_write(dat);
printf(lcd_putc,"\f C");

}
if(tecla=='4'){
spi_write(dat);
printf(lcd_putc,"\f 4 ");
}
if(tecla=='5'){
spi_write(dat);
printf(lcd_putc,"\f 5 ");
delay_ms(500);
}
if(tecla=='6'){
spi_write(6);
printf(lcd_putc,"\f 6 ");
delay_ms(500);
}
if(tecla=='7'){
spi_write(dat);
printf(lcd_putc,"\f 7 ");

}
if(tecla=='D'){
spi_write(dat);
printf(lcd_putc,"\f D ");

}
if(tecla=='#'){
spi_write(dat);
printf(lcd_putc,"\f # ");

}
}
}
}

Cdigo ejercicio 10.


TEMA:
COMUNICACIN I2C
DESCRIPCION
El siguiente programa permite la comunicacin entre dos microcontroladores pic uno
denominado maestro y otro llamado esclavo mediante el protocolo I2C, adems cuenta
con un teclado conectado a ambos pics que envan datos al presionar una tecla.
MATERIALES

1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro

CAPTURAS PROTEUS

CODIGO COMENTADO MAESTRO


#include <18f4550.h>
#fuses
XT,PUT,NOPROTECT,BROWNOUT,
NOLVP,NOWDT,NOMCLR
#use delay (clock=4000000)
#use i2c(MASTER,SDA=PIN_B0,
SLOW, SCL=PIN_B1,
NOFORCE_SW)
#define LCD_ENABLE_PIN PIN_A0
#define LCD_RS_PIN
PIN_A1
#define LCD_RW_PIN
PIN_A2
#define LCD_DATA4
PIN_B2
#define LCD_DATA5
PIN_B3

#define LCD_DATA6
#define LCD_DATA7
#include <lcd.c>
#include <vinueza.c>
#use standard_io(a)
#use standard_io(b)
#use standard_io(c)
#use standard_io(d)
int8 tecla;
int8 dato1 = 0;
void envio_I2C (){

PIN_B4
PIN_B5

i2c_start();
i2c_write(0xa0);
i2c_write(tecla);
i2c_stop();
}
void recibo_datos()
{
i2c_start ();
i2c_write (0xa0);
i2c_write (0x02+1);
i2c_stop();
i2c_start ();
i2c_write (0xa1);
dato1 = i2c_read(0);
//lcd_putc(dato1);
if (dato1=='0'){
printf(lcd_putc,"\nRecibio 0");
delay_ms(1000);
}
if (dato1=='1'){
printf(lcd_putc,"\nRecibio 1");
delay_ms(1000);
}
if (dato1=='2'){
printf(lcd_putc,"\nRecibio 2");
delay_ms(1000);
}
if (dato1=='3'){
printf(lcd_putc,"\nRecibio 3");
delay_ms(1000);
}
if (dato1=='4'){
printf(lcd_putc,"\nRecibio 4");
delay_ms(1000);
}
if (dato1=='5'){
printf(lcd_putc,"\nRecibio 5");
delay_ms(1000);
}
if (dato1=='6'){
printf(lcd_putc,"\nRecibio 6");
delay_ms(1000);
}

if (dato1=='7'){
printf(lcd_putc,"\nRecibio 7");
delay_ms(1000);
}
if (dato1=='8'){
printf(lcd_putc,"\nRecibio 8");
delay_ms(1000);
}
if (dato1=='9'){
printf(lcd_putc,"\nRecibio 9");
delay_ms(1000);
}
if (dato1=='A'){
printf(lcd_putc,"\nRecibio A");
delay_ms(1000);
}
if (dato1=='B'){
printf(lcd_putc,"\nRecibio B");
delay_ms(1000);
}
if (dato1=='C'){
printf(lcd_putc,"\nRecibio C");
delay_ms(1000);
}
if (dato1=='D'){
printf(lcd_putc,"\nRecibio D");
delay_ms(1000);
}
if (dato1=='*'){
printf(lcd_putc,"\nRecibio *");
delay_ms(1000);
}
if (dato1=='#'){
printf(lcd_putc,"\nRecibio #");
delay_ms(1000);
}
i2c_stop ();
}
void main(){
kbd_init();
lcd_init();
printf(lcd_putc,"\n MAESTRO ");
delay_ms(100);
while (true){
tecla=kbd_getc();

if(tecla!=0){
if (tecla=='0'){

}
if (tecla=='7'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 7");
delay_ms(100);

recibo_datos();
delay_ms(100);
}
if(tecla!='0'){
if (tecla=='1'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 1");
delay_ms(100);
}

}
if (tecla=='8'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 8");
delay_ms(100);
}
if (tecla=='9'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 9");
delay_ms(100);

if (tecla=='2'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 2");
delay_ms(100);
}
if (tecla=='3'){
envio_I2C ();
envio_I2C ();
printf(lcd_putc,"\fEnvio 3");
delay_ms(100);
}
if (tecla=='4'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 4");
delay_ms(100);
}
if (tecla=='5'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 5");
delay_ms(100);
}
if (tecla=='6'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 6");
delay_ms(100);

}
if (tecla=='A'){
envio_I2C ();
printf(lcd_putc,"\fEnvio A");
delay_ms(100);
}
if (tecla=='B'){
envio_I2C ();
printf(lcd_putc,"\fEnvio B");
delay_ms(100);
}
if (tecla=='C'){
envio_I2C ();
printf(lcd_putc,"\fEnvio C");
delay_ms(100);
}
if (tecla=='D'){
envio_I2C ();
printf(lcd_putc,"\fEnvio D");
delay_ms(100);
}

if (tecla=='*'){
envio_I2C ();
printf(lcd_putc,"\fEnvio *");
delay_ms(100);
}
if (tecla=='#'){
envio_I2C ();
printf(lcd_putc,"\fEnvio #");

{
x = i2c_read();
}
if(state < 0x80)
{
x = i2c_read();
}

}
}
}

if(state==0x80){
i2c_write(buffer[0x02]);
output_high(PIN_A1);
}
}

}
}
CODIGO COMENTADO DEL
ESCLAVO
#include <16f887.h>
#fuses XT,NOMCLR
#use delay (clock=4000000)
#use I2C(Slave, SDA=PIN_C4 , SLOW,
SCL=PIN_C3, ADDRESS=0xa0,
NOFORCE_SW)
#include <LCD.c>
#include <kbd_lib.c>
#use standard_io(c)
#use standard_io(e)

void main() {
set_tris_b(0b00000011);
lcd_init();
kbd_init();
enable_interrupts(INT_SSP);
enable_interrupts(GLOBAL);
while (true) {
tecla2=kbd_getc();
if(tecla2!=0){
buffer[0x02]=tecla2;

///////////////
int8 tecla2;
int state;
// I2C var
Int8 x=0;
int8 buffer[0x03];
//int8 address;
#INT_SSP
void ssp_interrupt()
{ output_high(PIN_A2);
state=i2c_isr_state();
if(state <0x80)

if (buffer[0x02]=='0'){
printf(lcd_putc,"\fEnvio 0");}
if (buffer[0x02]=='1'){
printf(lcd_putc,"\fEnvio 1"); }
if (buffer[0x02]=='2'){
printf(lcd_putc,"\fEnvio 2");}
if (buffer[0x02]=='3'){
printf(lcd_putc,"\fEnvio 3");}
if (buffer[0x02]=='4'){
printf(lcd_putc,"\fEnvio 4");}
if (buffer[0x02]=='5'){

printf(lcd_putc,"\fEnvio 5");}
if (buffer[0x02]=='6'){
printf(lcd_putc,"\fEnvio 6");}
if (buffer[0x02]=='7'){
printf(lcd_putc,"\fEnvio 7");}
if (buffer[0x02]=='8'){
printf(lcd_putc,"\fEnvio 8");}
if (buffer[0x02]=='9'){
printf(lcd_putc,"\fEnvio 9");}
if (buffer[0x02]=='A'){
printf(lcd_putc,"\fEnvio A");}
if (buffer[0x02]=='B'){
printf(lcd_putc,"\fEnvio B");}
if (buffer[0x02]=='C'){
printf(lcd_putc,"\fEnvio C");}
if (buffer[0x02]=='D'){
printf(lcd_putc,"\fEnvio D");}
if (buffer[0x02]=='*'){
printf(lcd_putc,"\fEnvio *");}
if (buffer[0x02]=='#'){
printf(lcd_putc,"\fEnvio #");}
}
if(state<0x80)
{
if (x=='0'){
printf(lcd_putc,"\nRecibio 0");}
if (x=='1'){
printf(lcd_putc,"\nRecibio 1"); }
if (x=='2'){
printf(lcd_putc,"\nRecibio 2");}
if (x=='3'){

printf(lcd_putc,"\nRecibio 3");}
if (x=='4'){
printf(lcd_putc,"\nRecibio 4");}
if (x=='5'){
printf(lcd_putc,"\nRecibio 5");}
if (x=='6'){
printf(lcd_putc,"\nRecibio 6");}
if (x=='7'){
printf(lcd_putc,"\nRecibio 7");}
if (x=='8'){
printf(lcd_putc,"\nRecibio 8");}
if (x=='9'){
printf(lcd_putc,"\nRecibio 9");}
if (x=='A'){
printf(lcd_putc,"\nRecibio A");}
if (x=='B'){
printf(lcd_putc,"\nRecibio B");}
if (x=='C'){
printf(lcd_putc,"\nRecibio C");}
if (x=='D'){
printf(lcd_putc,"\nRecibio D");}
if (x=='*'){
printf(lcd_putc,"\nRecibio *");}
if (x=='#'){
printf(lcd_putc,"\nRecibio #");}
}
}
}

Cdigo ejercicio 11.


TEMA:
COMUNICACIN I2C MEDIANTE COMUNICACION RS232 DESDE EL
ESCLAVO
DESCRIPCION
El siguiente programa tiene por objetivo disear un lenguaje de programacin que
cumpla con los parmetros siguientes: utilizar un microcontrolador pic como maestro al
cual est conectado un teclado matricial y una pantalla lcd que indique las aplicaciones
de sensor lm35 o sensor de proximidad comunicado mediante el protocolo I2C a un
esclavo que tenga comunicacin directa con la pc mediante RS232 y vare la velocidad

del motor y el encendido de luces logrando un sistema completo con los dos sensores
mencionados inicialmente.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
Motor dc
CAPTURAS PROTEUS

CODIGO COMENTADO MAESTRO


#include <18F4550.h>
#fuses XT,NOMCLR
#use delay (clock=4M)
#use I2C(MASTER, SDA=PIN_B0,
SLOW, SCL=PIN_B1,
NOFORCE_SW,address=0x60)
#define LCD_ENABLE_PIN PIN_A0
#define LCD_RS_PIN
PIN_A1

#define LCD_RW_PIN
#define LCD_DATA4
#define LCD_DATA5
#define LCD_DATA6
#define LCD_DATA7
#include <lcd.c>
#include <vinueza.c>
char tecla = 0;

PIN_A2
PIN_B2
PIN_B3
PIN_B4
PIN_B5

int z;
char rx;
void envio_I2C (){
i2c_start();
//inicio de la
comunicacin
i2c_write(0xa0); // direccin del
PIC esclavo
i2c_write(tecla); // Envia dato
i2c_stop();
//Finalizacin de la
transmisin
}
#INT_SSP
void Recepcion_I2C (){
if(i2c_poll()) {
rx=i2c_read();
printf (lcd_putc,"=%c ",rx);
}
}
void main(){
lcd_init();
kbd_init();
lcd_putc("\f I2C");
delay_ms(2000);
lcd_putc("\f Maestro");
delay_ms(100);
while(true){

tecla = kbd_getc();
if(tecla != 0){
if(tecla=='A'){
printf(lcd_putc,"\f Modo TX ");
delay_ms(100);
z=1;
}
if(tecla=='B'){

z=0;
printf(lcd_putc,"\f Modo RX ");
delay_ms(100);
enable_interrupts(GLOBAL); //habilita
interrupcion global
enable_interrupts(INT_SSP);
Recepcion_I2C();
}
if(tecla=='1'){
if(z==1){
printf(lcd_putc,"\f Enviado: 1
envio_I2C();
}
}
if(tecla=='2'){
if(z==1){
printf(lcd_putc,"\f Enviado: 2
envio_I2C();
}
}
if(tecla=='3'){
if(z==1){
printf(lcd_putc,"\f Enviado: 3
envio_I2C();;
}
}
if(tecla=='4'){
if(z==1){
printf(lcd_putc,"\f Enviado: 4
envio_I2C();
}
}
if(tecla=='5'){
if(z==1){
printf(lcd_putc,"\f Enviado: 5
envio_I2C();
}
}
if(tecla=='6'){
if(z==1){
printf(lcd_putc,"\f Enviado: 6
envio_I2C();
}
}

");

");

");

");

");

");

if(tecla=='7'){
if(z==1){
printf(lcd_putc,"\f Enviado: 7 ");
envio_I2C();
}
}
if(tecla=='8'){
if(z==1){
printf(lcd_putc,"\f Enviado: 8 ");
envio_I2C();
}
}
if(tecla=='9'){
if(z==1){
printf(lcd_putc,"\f Enviado: 9 ");
envio_I2C();
}
}
if(tecla=='0'){
if(z==1){
printf(lcd_putc,"\f Enviado: 0 ");
envio_I2C();
}
}
if(tecla=='C'){
if(z==1){
printf(lcd_putc,"\f Enviado: C ");
envio_I2C();
}
}
if(tecla=='D'){
if(z==1){
printf(lcd_putc,"\f Enviado: D ");
envio_I2C();
}
}
if(tecla=='#'){
if(z==1){
printf(lcd_putc,"\f Enviado: # ");
envio_I2C();
}
}
}

}
CODIGO COMENTADO ESCLAVO
#fuses XT, NOWDT, NOPROTECT //
fusibles de configuracion
#use delay (clock=4000000) // define
frecuencia de oscilador
#use rs232(baud=9600, xmit=pin_C6,
rcv=pin_C7, bits=8, parity=N)
#use I2C(Slave, SDA=PIN_C4 , SLOW,
SCL=PIN_C3, ADDRESS=0xa0,
NOFORCE_SW)
#use pwm(ccp1,frequency=2K,
duty=50)
#define use_portd_lcd TRUE
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B2
#define LCD_E PIN_B3
#include <lcd1.c>
#use standard_io(d)
void main() {
int DATO;
int t;
int u;
lcd_init();
lcd_gotoxy(1,1);
printf (lcd_putc,"Esclavo ");
PUTS ("UTA - FISEI");
while (1) {
// Recepcin por comunicacin I2C
if(i2c_poll()) {
DATO=i2c_read();
if(DATO!=0){
if(DATO==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Apagado
");

u=0;

t=0;
PUTS ("");
PUTS ("Sistema Apagado ");
PUTS ("Aplicacion Finalizada ");
PUTS ("");
}
if(DATO==2){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Encendido

PUTS (" Aplicacion de


temperatura");
PUTS (" Actualizar datos");
PUTS ("");
}
else{
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);

");
t=0;
u=0;
PUTS ("");
PUTS ("Sistema Iniciado");
PUTS ("");
}
if(DATO==3){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Aplicacion 1
");
t=1;
u=0;
PUTS ("");
PUTS (" Aplicacion de
temperatura");
PUTS (" Actualizar datos");
PUTS ("");
output_low(pin_d0);
output_low(pin_d1);
output_low(pin_d2);
output_low(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
if(DATO==4){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Aplicacion 2
");
t=0;
u=1;
PUTS ("");

}
if (dato<20) {
if(t==1){
pwm_set_duty_percent(150);
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Duty 15
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion De
Temperatura");
PUTS ("Velocidad uno");
PUTS ("Duty 15 ");
}
}
if (dato>20){
if(dato<25) {
if(t==1){
pwm_set_duty_percent(500);
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Duty 50
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion De
Temperatura");
PUTS ("Velocidad dos");
PUTS ("Duty 50 ");
}
}
}
if (dato>26) {
if(t==1){
pwm_set_duty_percent(900);
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Duty 90
");

lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion De
Temperatura");
PUTS ("Velocidad tres");
PUTS ("Duty 90 ");
}
}
if (dato <= 4){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_low(pin_d1);
output_low(pin_d2);
output_low(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);

if (dato >= 11){


if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_low(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 15){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 19){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico

}
}
if (dato >= 8){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_low(pin_d2);
output_low(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}

");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);

output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 23){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");

output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_high(pin_d5);
output_high(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 29){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");

lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_high(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 26){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);

Cdigo ejercicio 12.

lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_high(pin_d5);
output_high(pin_d6);
output_high(pin_d7);
}
}
}
}
}
}

TEMA:
COMUNICACIN I2C MEDIANTE COMUNICACION RS232 DESDE EL SCLAVO
CON UNA ETAPA DE SENSORIZACION
DESCRIPCION
El siguiente programa tiene por objetivo disear un lenguaje de programacin que
cumpla con los parmetros siguientes: utilizar un microcontrolador pic como maestro al
cual est conectado un teclado matricial y una pantalla lcd que indique las aplicaciones
de sensor lm35 o sensor de proximidad comunicado mediante el protocolo SPI a un
esclavo que tenga comunicacin directa con la pc mediante RS232 y vare la velocidad
del motor y el encendido de luces logrando un sistema completo con los dos sensores
mencionados inicialmente.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
Motor dc
CAPTURAS PROTEUS

CODIGO COMENTADO MAESTRO


#include <18F4550.h>
#fuses XT,NOMCLR
#use delay (clock=4M)
#use I2C(MASTER, SDA=PIN_B0, SLOW, SCL=PIN_B1,
NOFORCE_SW,address=0x60)
#define LCD_ENABLE_PIN PIN_A0
#define LCD_RS_PIN
PIN_A1
#define LCD_RW_PIN
PIN_A2
#define LCD_DATA4
PIN_B2
#define LCD_DATA5
PIN_B3
#define LCD_DATA6
PIN_B4
#define LCD_DATA7
PIN_B5
#include <lcd.c>
#include <vinueza.c>
char tecla = 0;
int z;
char rx;
void envio_I2C (){
i2c_start();
//inicio de la comunicacin
i2c_write(0xa0); // direccin del PIC esclavo
i2c_write(tecla); // Envia dato
i2c_stop();
//Finalizacin de la transmisin
}
#INT_SSP
void Recepcion_I2C (){
if(i2c_poll()) {
rx=i2c_read();
printf (lcd_putc,"=%c ",rx);
}
}
void main(){

lcd_init();
kbd_init();
lcd_putc("\f I2C");
delay_ms(2000);
lcd_putc("\f Maestro");
delay_ms(100);
while(true){

tecla = kbd_getc();
if(tecla != 0){
if(tecla=='A'){
printf(lcd_putc,"\f Modo TX ");
delay_ms(100);
z=1;
}
if(tecla=='B'){
z=0;
printf(lcd_putc,"\f Modo RX ");
delay_ms(100);
enable_interrupts(GLOBAL); //habilita interrupcion global
enable_interrupts(INT_SSP);
Recepcion_I2C();
}
if(tecla=='1'){
if(z==1){
printf(lcd_putc,"\f Enviado: 1 ");
envio_I2C();
}
}
if(tecla=='2'){
if(z==1){
printf(lcd_putc,"\f Enviado: 2 ");
envio_I2C();
}
}
if(tecla=='3'){
if(z==1){
printf(lcd_putc,"\f Enviado: 3 ");
envio_I2C();;
}

}
if(tecla=='4'){
if(z==1){
printf(lcd_putc,"\f Enviado: 4
envio_I2C();
}
}
if(tecla=='5'){
if(z==1){
printf(lcd_putc,"\f Enviado: 5
envio_I2C();
}
}
if(tecla=='6'){
if(z==1){
printf(lcd_putc,"\f Enviado: 6
envio_I2C();
}
}
if(tecla=='7'){
if(z==1){
printf(lcd_putc,"\f Enviado: 7
envio_I2C();
}
}
if(tecla=='8'){
if(z==1){
printf(lcd_putc,"\f Enviado: 8
envio_I2C();
}
}
if(tecla=='9'){
if(z==1){
printf(lcd_putc,"\f Enviado: 9
envio_I2C();
}
}
if(tecla=='0'){
if(z==1){
printf(lcd_putc,"\f Enviado: 0
envio_I2C();
}
}
if(tecla=='C'){
if(z==1){

");

");

");

");

");

");

");

printf(lcd_putc,"\f Enviado: C ");


envio_I2C();
}
}
if(tecla=='D'){
if(z==1){
printf(lcd_putc,"\f Enviado: D ");
envio_I2C();
}
}
if(tecla=='#'){
if(z==1){
printf(lcd_putc,"\f Enviado: # ");
envio_I2C();
}
}
}
}
}
CODIGO COMENTADO ESCLAVO
#fuses XT, NOWDT, NOPROTECT // fusibles de configuracion
#use delay (clock=4000000) // define frecuencia de oscilador
#use rs232(baud=9600, xmit=pin_C6, rcv=pin_C7, bits=8, parity=N)
#use I2C(Slave, SDA=PIN_C4 , SLOW, SCL=PIN_C3, ADDRESS=0xa0,
NOFORCE_SW)
#use pwm(ccp1,frequency=2K, duty=50)
#define use_portd_lcd TRUE
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B2
#define LCD_E PIN_B3
#include <lcd1.c>
#use standard_io(d)
void main() {
int DATO;
int t;
int u;
lcd_init();

lcd_gotoxy(1,1);
printf (lcd_putc,"Esclavo ");
PUTS ("UTA - FISEI");
while (1) {
// Recepcin por comunicacin I2C
if(i2c_poll()) {
DATO=i2c_read();
if(DATO!=0){
if(DATO==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Apagado
");
u=0;
t=0;
PUTS ("");
PUTS ("Sistema Apagado ");
PUTS ("Aplicacion Finalizada ");
PUTS ("");
}
if(DATO==2){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Encendido
");
t=0;
u=0;
PUTS ("");
PUTS ("Sistema Iniciado");
PUTS ("");
}
if(DATO==3){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Aplicacion 1 ");
t=1;
u=0;
PUTS ("");
PUTS (" Aplicacion de temperatura");
PUTS (" Actualizar datos");
PUTS ("");
output_low(pin_d0);
output_low(pin_d1);
output_low(pin_d2);
output_low(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);

output_low(pin_d7);
}
if(DATO==4){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Aplicacion 2 ");
t=0;
u=1;
PUTS ("");
PUTS (" Aplicacion de temperatura");
PUTS (" Actualizar datos");
PUTS ("");
}
else{
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
}
if (dato<20) {
if(t==1){
pwm_set_duty_percent(150);
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Duty 15
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion De Temperatura");
PUTS ("Velocidad uno");
PUTS ("Duty 15 ");
}
}
if (dato>20){
if(dato<25) {
if(t==1){
pwm_set_duty_percent(500);
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Duty 50 ");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion De Temperatura");
PUTS ("Velocidad dos");
PUTS ("Duty 50 ");
}
}
}

if (dato>26) {
if(t==1){
pwm_set_duty_percent(900);
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Duty 90
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion De Temperatura");
PUTS ("Velocidad tres");
PUTS ("Duty 90 ");
}
}
if (dato <= 4){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_low(pin_d1);
output_low(pin_d2);
output_low(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 8){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_low(pin_d2);
output_low(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);

}
}
if (dato >= 11){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_low(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 15){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 19){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);

output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 23){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_high(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 26){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_high(pin_d5);
output_high(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 29){
if(u==1){
lcd_gotoxy(1,1);

printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_high(pin_d5);
output_high(pin_d6);
output_high(pin_d7);
}
}
}
}
}
}

CUESTIONARIO
MICROCONTROLADORES

TEMA 1.- Diferencias entre el Microprocesador y Microcontrolador


1.

El microprocesador es un dispositivo de propsito de propsito:


A. General
B. Especfico
C. General y Especfico
D. Ninguna de las Anteriores

Respuesta: A
Justificacin: El microprocesador es un dispositivo de propsito de propsito General.
Referencia: Curso de Ingeniera Tcnica en Informtica de Sistemas.
Dificultad: Media

2.

El microcontrolador es un dispositivo de propsito:


A. General
B. Especfico
C. General y especfico
D. Ninguna de las anteriores

Respuesta: B
Justificacin: El microcontrolador es un dispositivo de propsito Especfico.
Referencia: Curso de Ingeniera Tcnica en Informtica de Sistemas.
Dificultad: Media
3.

Al microcontrolador est limitado por la _____________ que posee.


1.
2.
3.
4.

Comunicacin
Capacidad
Aplicaciones
Arquitectura

Respuesta: D
Justificacin: Al microcontrolador est delimitado por la arquitectura que posee.
Referencia: Mdulo de Microcontroladores.
Dificultad: Media

4.- Ordene:
1.
2.
3.
4.

Ejecuta aplicaciones por s mismo


No tiene la capacidad
De ejecutar aplicaciones y el Microcontrolador
El microcontrolador

A. 4,2,3,1
B. 4,3,2,1
C. 4,1,3,2
D. 4,1,2,3
Respuesta: A
Justificacin: El microcontrolador no tiene la capacidad de ejecutar aplicaciones y el Microcontrolador
ejecuta aplicaciones por s mismo
Referencia: Mdulo de Microcontroladores.
Dificultad: Media
5.- El microprocesador se utiliza para la parte informtica, y el microcontrolador para la parte:
A. Digital

B. Electrnica
C. Robtica
D. Todas las anteriores
Respuesta: C
Justificacin: El microprocesador se utiliza para la parte informtica, y el microcontrolador para la parte
electrnica
Referencia: Mdulo de Microcontroladores.
Dificultad: Media

Tema 2.- Arquitectura Interna del Uc PIC


VERDADERO O FALSO
6.- Que es la arquitectura de Von Neumann?.

A. La arquitectura de Von Neumann es una familia de las arquitecturas de


computadoras que utilizan el mismo dispositivo de almacenamiento tanto para las
instrucciones como para los datos.

B. La arquitectura de Ven

Neumann es una familia de las arquitecturas de


computadoras que utilizan el mismo sincronismo para la trasferencia de datos a
nivel de instrucciones.

C. La arquitectura de Ven Neumann es una familia de las arquitecturas de


computadoras que utilizan una misma instruccin para todo tipo de datos.

D. La arquitectura de Ven Neumann es una familia de las arquitecturas de


computadoras que utilizan diferentes memorias para almacenamiento de las
instrucciones y los datos.

Respuesta: A
Justificacin: Es la arquitectura que utilizan la mayora de computadoras moderadas para administrar o
gestionar las interrupciones de dispositivos externos como ratn, teclado, etc.
Referencia:https://www.academia.edu/8951985/Arquitectura_de_Computadores_Von_Newman_.
Dificultad: Media

7.- Qu es la arquitectura Harvard?

A. La arquitectura de Harvard es una familia de las arquitecturas de computadoras que utilizan el


mismo dispositivo de almacenamiento tanto para las instrucciones como para los datos.

B. La arquitectura de Harvard es una familia de las arquitecturas de computadoras que utilizan


dispositivos de almacenamiento fsicamente separados para las instrucciones y para los datos.

C. La arquitectura de Harvard es una familia de las arquitecturas de computadoras que utilizan la


memoria de la misma forma que la arquitectura Von Neumann.

D. La arquitectura de Harvard es una familia de las arquitecturas de computadoras que utilizan una
misma instruccin para todo tipo de datos.

Respuesta: B
Justificacin: Es la arquitectura que almacena en cachs separados para mejorar el rendimiento.
Referencia: http://comping.galeon.com/productos2326864.html.
Dificultad: Media
8.-De las siguientes caractersticas de microprocesadores basados en la arquitectura CISC (Complex
Instruction Set Computer), una no pertenece a este tipo. Indique cul es sta:
A. Reduce la dificultad de crear compiladores.

B. La CPU trabaja ms rpido al utilizar menos ciclos de reloj para ejecutar instrucciones
C. Reduce los costos de creacin de software.
D. Mejora la compactacin de cdigo.
Respuesta: B
Justificacin: En una arquitectura CISC, al ser un conjunto de instrucciones complejas, cada instruccin
toma de 4 a 10 ciclos de reloj para su ejecucin. La opcin marcada corresponde a un microprocesador de
arquitectura RISC, que slo toma un ciclo de reloj para realizar una instruccin.
Referencia: Gualdrn Gamarra, A., & Pinilla, J. P. (2015). Plataforma para la emulacin y
reconfiguracin de arquitecturas CISC Y RISC..
Dificultad: Media

9.- La siguiente descripcin: Este conjunto de seales se usa para sincronizar las actividades y
transacciones con los perifricos del sistema. Algunas de estas seales, como R/W, son seales que la
CPU enva para indicar qu tipo de operacin se espera en ese momento; a cul de las de las opciones a
continuacin corresponde::
A. Bus de direcciones.
B. Bus de estado.
C. Bus de datos.

D. Bus de control
Respuesta: D
Justificacin: El bus de control transporta datos respecto de las operaciones que se encuentra realizando el
CPU. Los perifricos tambin pueden remitir seales de control a la CPU, como son INT, RESET, BUS
RQ.
Referencia Rossano, V. (2013). Electrnica & microcontroladores PIC. USERSHOP.
Dificultad: Media

10.- El microprocesador es un producto de la tecnologa de integracin


A. SSI (Short Scale Integration / Integracin a Pequea Escala)
B. MSI (Mdium Scale Integration / Integracin a Media Escala )
C. LSI (Large Scale Integration / Integracin a Gran Escala )
D. VLSI: (Very Large Scale Integration / Integracin a Muy Grande Escala)
Respuesta: C

Justificacin: El microprocesador es producto de la tecnologa de integracin a gran escala (LSI), la cual


utiliza tcnicas digitales para sus estructuras de entrada, salida e interna la cual conlleva
aproximadamente unos 1000 componentes integrados individualmente.
Referencia: Edward v. Ramrez. Melvyn Veiss,
Introduccin a los Microprocesadores: equipo y
sistemas,
Cap. 1. Evolucin de los microprocesadores. Pag.13.
Dificultad: Media

Tema 3.- Registros de propsito General y Especiales


11.- Seleccione la definicin ms apropiada para REGISTRO en un microcontrolador.
A. Documento donde se registran acontecimientos de un microcontrolador.
B. Es un espacio de trabajo en la Memoria del microcontrolador.
C. Memoria de datos que contiene un microcontrolador
D. Conjunto de instrucciones que maneja un microcontrolador
Respuesta: B
Justificacin: La definicin ms apropiada del registro en un microcontrolador se dice que es un espacio
de trabajo en la memoria del microcontrolador ya que en l se almacenan datos de acuerdo a la necesidad
del usuario, existen dos tipos de registros los de propsito general y especifico cada una cumpliendo su
funcin en el micro.
Referencia:
Microcontroladores:https://prezi.com/r___paiv3bp2/memorias-y-registros-en-unmicrocontrolador/.
Dificultad: Media
12.- Seleccione la respuesta correcta. La arquitectura de los microcontroladores segn su evolucin est
dada por:

A. Primero la arquitectura Harvard, despus se cre la arquitectura Segmentada y finalmente la


arquitectura Von Neumann.

B. Primero la arquitectura Segmentada, despus se cre la arquitectura Von Neumann y finalmente


la arquitectura Harvard.

C. Primero la arquitectura Von Neumann, despus se cre la arquitectura Segmentada y finalmente


la arquitectura Harvard.

D. Ninguna de las anteriores

Respuesta: C
Justificacin: La evolucin de la arquitectura de los microcontroladores inicia con el Von Neumann (su
utilizacin era muy compleja), despus de un tiempo se crea la arquitectura segmentada (hacia ms fcil
su utilizacin) pero esto no era suficiente, entonces aparece la arquitectura Harvard ayudando al usuario
optimizar tiempo y ahorrar recursos por ende hace que el funcionamiento sea ms eficiente. El balanceo
de carga permite que el router reenve paquetes a la misma red de destino a travs de varias rutas.
Referencia: Microcontroladores: http://www.unicrom.com/Tut_arquitectura_microcontrolador.asp.
Dificultad: Media-Alta
13.- El comando para cambiar el porcentaje del ancho de banda que se usa en EIGRP es:
A. Router(config-if)#bandwith percent eigrp as-number percent
B. Router(config)#bandwith percent eigrp as-number percent

C. Router#bandwith percent eigrp as-number percent


D. Router(config-if)#eigrp as-number percent bandwith percent
Respuesta: A
Justificacin: El comando para cambiar el porcentaje del ancho de banda que se usa en EIGRP es:
Router(config-if)#bandwith percent eigrp as-number percent.
14.- Qu dispositivo cuenta en un nico circuito integrado la unidad central de procesamiento, la memoria
y los recursos de entrada y salida:
A. Motherboard
B. Microprocesador
C. Microcontrolador
D. Motherboard
Respuesta: C
Justificacin: El dispositivo que combina los recursos fundamentales en un microcomputador, es decir la
unidad central de procesamiento, la memoria y los recursos de entrada y salida, en un nico circuito
integrado es el microcontrolador.
Referencia: Fernando Valds. Ramon Palls. Microcontroladores: Fundamentos y aplicaciones con PIC,
pp. 14-15, Primera Edicin. Marcombo, S. A. 2007.
Dificultad: Media

15.- Complete el diagrama de bloques de la Arquitectura Harvard.

A. Datos-CPU-Programa
B. CPU-Datos-Programa
C. Programa-Datos-CPU
D. Programa-CPU-Datos
Respuesta: D
Justificacin: La arquitectura Harvard utiliza memorias separadas para programas en la memoria ROM y
datos en la memoria RAM, los cuales se conectan a la CPU mediante los buses dedicados de instruccin,
direccin y control.
Referencia: Fernando Valds. Ramon Palls. Microcontroladores: Fundamentos y aplicaciones con PIC,
pp. 23, Primera Edicin. Marcombo, S. A. 2007.
Dificultad: Media

Tema 4.- Distribuciones de pines


16.- Como se llama el pin que resetea el PIC?

A.- Reset
B.- Power
C.- MCLR
D.- WDT
Respuesta: C
Justificacin: El pin de reset en los PIC es llamado MCLR (master clear).
Referencia: http://www.utp.edu.co/~eduque/arquitec/PIC16F877.pdf.
Dificultad: Media
17.- Cuantos Puertos tiene en Pic 16f887?.
A. 3
B. 4
C. 2
D. 6
Respuesta: B
Justificacin: El pic 16887 tiene cuatro puertos de entrada y salida (A, B, C, D).
Referencia: http://www.mikroe.com/chapters/view/81/capitulo-3-microcontrolador-pic16f887/#c3v3.
Dificultad: Media
18.- Cual es el nico puerto en el pic 16f887 que tiene resistencias pull ups?:
A. D
B. A
C. B
D. Ninguna de las anteriones
Respuesta: C
Justificacin: el nico puerto en el pic 16f887 que tiene resistencias pull ups es el puerto B.
Referencia: http://www.mikroe.com/chapters/view/81/capitulo-3-microcontrolador-pic16f887/#c3v3.
Dificultad: Media
19.-El mdulo del temporizador Timer0 es un temporizador/contador de _______.
A.
B.
C.
D.

16 bits
32 bits
8 bits
Ninguna de las anteriores

Respuesta: C
Justificacin: El mdulo del temporizador Timer0 es un temporizador/contador de 8 bits.
Referencia: http://www.mikroe.com/chapters/view/81/capitulo-3-microcontrolador-pic16f887/#c3v3.
Dificultad: Media

20.- El mdulo del temporizador Timer1 es un temporizador/contador de ________.

A. 16 bits
B. 32 bits
C. 8 bits
D. Ninguna de las anteriores
Respuesta: A
Justificacin: El mdulo del temporizador Timer1 es un temporizador/contador de 16 bits.
Referencia: http://www.mikroe.com/chapters/view/81/capitulo-3-microcontrolador-pic16f887/#c3v3.
Dificultad: Media

Tema 5.- Caractersticas Elctricas


21.- Con que voltajes trabaja el PIC 16f887:
A.- 0 V - 12 V
B.- 2 V - 5.5 V
C.- 2 V - 15 V
D.- 5 V - 12 V
Respuesta: B
Justificacin: El pic 16f887 trabaja con voltaje TTL desde 2.0V- 5V.
Referencia: Datasheet 16f887.
Dificultad: Media
22.- Cuales son los pines de alimentacin VCC y GND del PIC16f887.
A. 13,14 y 32,31
B. - 13,14 y 30,31
C. 11,12 y 32,31
D.- 1,2 y 13,14
Respuesta: C
Justificacin: los pines de alimentacin VCC y GND del PIC16f887 es el 11,12 y 31,32.
Referencia: http://www.utp.edu.co/~eduque/arquitec/PIC16F877.pdf.
Dificultad: Media
23.- En que pines se coloca el oscilador externo en el pic 16f887?
A.- 11 Y 12
B.- 13 Y 14
C.- 31 Y 32
D.- Ninguna de las anteriores.
Respuesta: B

Justificacin: En los pines 13 y 14 se coloca el oscilador externo en el pic 16f887.


Referencia: http://www.utp.edu.co/~eduque/arquitec/PIC16F877.pdf.
Dificultad: Media
24.- Los pines que se usa para la Tx(transmisin) y Rx(Recepcin) en comunicacin serial en el pic
16f887 son?
A.- 11 y 12
B.- 25 y 26
C.- 16 y 17
D.- Ninguna de las anteriores
Respuesta: B
Justificacin: Los pines que se usa para la Tx(transmisin) y Rx(Recepcin) en comunicacin serial en el
pic 16f887 son el 25 y 26.
Referencia: http://www.utp.edu.co/~eduque/arquitec/PIC16F877.pdf.
Dificultad: Media
25.- La mxima capacidad de corriente de cada uno de los pines de los puertos en modo sink o en modo
fuente es de:
A. 200mA
B.- 150mA
C.- 25mA
D. 250mA
Respuesta: C
Justificacin: La mxima capacidad de corriente de cada uno de los pines de los puertos en modo sink o
en modo fuente es de 25mA.
Referencia: http://www.utp.edu.co/~eduque/arquitec/PIC16F877.pdf.
Dificultad: Media

Tema 6.- Tipo de datos


26.- Cual es el rango en CCS del tipo de dato float?:

A.- 8 bits
B.- 16 bits
C.- 32 bits
D.- 64 bits
Respuesta: C
Justificacin: el rango en CCS del tipo de dato float es 32 bits.
Referencia: http://www.puntoflotante.net/VARIABLES%20ARREGLOS.htm.
Dificultad: Media

27.- Cul es el rango en CCS del tipo de dato char?.


A.- 8 bits
B.- 16 bits
C.- 32 bits
D.- 64 bits
Respuesta: A
Justificacin: el rango en CCS del tipo de dato char es 8 bits.
Referencia: http://www.puntoflotante.net/VARIABLES%20ARREGLOS.htm.
Dificultad: Media
28.- Cul es el rango en CCS del tipo de dato unsigned char?:
A.- 8 bits
B.- 16 bits
C.- 32 bits
D.- Ninguna de las anteriores
Respuesta: A
Justificacin: el rango en CCS del tipo de dato unsigned char es 8 bits.
Referencia: http://www.puntoflotante.net/VARIABLES%20ARREGLOS.htm.
Dificultad: Media
29.- Cul es el rango en CCS del tipo de dato signed int?.
A.- 8 BITS
B.- 16 BITS
C.- 64 BITS
D.- Ninguna de las anteriores
Respuesta: A

Justificacin: el rango en CCS del tipo de dato signed int es 8 bits.


Referencia: http://www.puntoflotante.net/VARIABLES%20ARREGLOS.htm.
Dificultad: Media

30.- Cul es el rango en CCS del tipo de dato unsigned int?


A.- 8 BITS
B.- 64 BITS
C.- 255 BITS
D.- Ninguna de las anteriores
Respuesta: A
Justificacin: el rango en CCS del tipo de dato unsigned int es 8 bits.
Referencia: http://www.puntoflotante.net/VARIABLES%20ARREGLOS.htm.
Dificultad: Media

Tema 7.- Juego de Instrucciones


31.- Cual es el juego de instrucciones que permite sumar W y f?:

A.- SUMWF
B.- MORWR
C.- ADDWF
D.- Ninguna De las anteriores
Respuesta: D
Justificacin: el juego de instrucciones que permite sumar W y f es ADDWF.
Referencia: http://web.udl.es/usuaris/p7806757/ensamblador.html.
Dificultad: Media

32.- Cul es el juego de instrucciones que permite multiplicar W con f?.


A.- ANDWF
B.- MULWF
C.- INWF
D.- Todas las anteriores
Respuesta: A
Justificacin: el juego de instrucciones que permite multiplicar W con f es ANDWF.
Referencia: http://web.udl.es/usuaris/p7806757/ensamblador.html.
Dificultad: Media
33.- Cul es el juego de instrucciones que permite borrar F?:
A.- LIMWF
B.- BLANWF
C.- CLRF
D.- Ninguna de las anteriores
Respuesta: C
Justificacin: el juego de instrucciones que permite borrar F es CLRF.
Referencia: http://web.udl.es/usuaris/p7806757/ensamblador.html.
Dificultad: Media
34.- Cul es el juego de instrucciones que permite mover F es?
A.- MOVWF
B.- MOVF
C.- CHAF
D.- Ninguna de las anteriores
Respuesta: B
Justificacin: el juego de instrucciones que permite mover f es MOVF.
Referencia: http://web.udl.es/usuaris/p7806757/ensamblador.html.
Dificultad: Media

35.- Cul es el juego de instrucciones que permite no operar?

A.- NOP
B.- NOPE
C.- OPN
D.- Ninguna de las anteriores
Respuesta: A
Justificacin: el juego de instrucciones que permite.
Referencia: http://web.udl.es/usuaris/p7806757/ensamblador.html.
Dificultad: Media

Tema 8.- Fusibles e Interrupciones


36.- Para qu sirven los fusibles en el PIC 16F887 y PIC 16F887?:
A.- Los fusibles (fuses) sirven para configurar ciertos aspectos del microcontrolador. Cada
FUSE activa o desactiva una opcin de funcionamiento.
B.- Los fusibles (fuses) sirven para establecer ciertos aspectos del microcontrolador. Cada FUSE
activa o desactiva una instruccin de funcionamiento.
C.- Los fusibles (fuses) sirven para establecer variables en un microcontrolador. Cada FUSE
activa las variables.
D.- Los fusibles (fuses) sirven para configurar ciertos aspectos del microcontrolador. Cada
FUSE activa o desactiva una opcin de funcionamiento.
Respuesta: A
Justificacin: Los fusibles (fuses) sirven para configurar ciertos aspectos del microcontrolador. Cada
FUSE activa o desactiva una opcin de funcionamiento. Ejemplo: #FUSES RC Oscilador con resistencia
y condensador. La velocidad a la que oscile el PIC depender de los valores del condensador y de la
resistencia.
Referencia: http://perso.wanadoo.es/luis_ju/soft/files/pic.pdf.
Dificultad: Media

37.- Librera Fast_IO, afecta al cdigo que el compilador generar para las instrucciones de entrada y
salida. Este mtodo rpido de hacer I/O ocasiona que el compilador realice I/O sin programar el registro
de direccin. Seleccione su correcta sintaxis:
A.- #use fast_io(A)
B.- #use fast_io (puerto)
C.- # fast_io (puerto)
D.- fast_io_b( 0x0F );
Respuesta: B
Justificacin: Librera Fast_IO: Esta directiva afecta al cdigo que el compilador generar para las
instrucciones de entrada y salida. Este mtodo rpido de hacer I/O ocasiona que el compilador realice
I/O sin programar el registro de direccin. El puerto puede ser A-G.
Sintaxis:
#use fast_io (puerto)
Referencia:
Librera
fast_io.
Disponible
en:
https://www.google.com.ec/url?
sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CCoQFjAC&url=http%3A%2F

%2Fwww.robozes.com%2Fpresentaciones%2FCCS.ppt&ei=D5JYVYD8OG9ygPrz4H4Bg&usg=AFQjCNGkGhzQbhyjLimJo1CNdfScmKHXg&sig2=kQoMBO1lkGuLPzSY1N0Ymg.
Dificultad: Media
38.- Para configurar un cristal oscilador de 4Mhz o el oscilador interno del PIC Qu fusible debe ser
activado?
A.- #FUSES XT
B.- # FUSES HS
C.- # FUSES LP
D.- Ninguna de las anteriones
Respuesta: A
Justificacin: Es un acrnimo que viene de XTAL (o cristal en castellano). Este modo de funcionamiento
implica que tendremos que disponer de un cristal de cuarzo externo al Pic y dos condensadores pero
tambin se puede hacer uso del oscilador interno que trabaja en el rango de 31Khz a 8Mhz a. El valor del
cristal generalmente ser de 4Mhz o 10Mhz, y los condensadores sern cermicos de entre 27 y 33 nF. La
exactitud de este dispositivo es muy muy alta, por lo que lo hace muy recomendable para casi todas las
aplicaciones..
Referencia: Rueda Luis, Ero-Pic, Microcontroladores PIC-Fuses del PIC 16F84/C84,2013, Disponible en:
http://perso.wanadoo.es/luis_ju/pic/pic_fuse.html.
Dificultad: Media
39.- Qu funcin cumple la librera FAST_I/O al ser declarado como directiva?
A.- La directiva FAST_I/O afecta al cdigo que el compilador generar para las instrucciones de entrada,
es el mtodo rpido de hacer que I/O ocasiona que el compilador realice I/O sin programar el registro de
direccin.
B.- La directiva FAST_I/O afecta al cdigo que el compilador generar para las instrucciones de salida,
es el mtodo rpido de hacer que I/O ocasiona que el compilador realice I/O sin programar el registro de
direccin.
C.- c. La directiva FAST_I/O afecta al cdigo que el compilador generar para las instrucciones de
entrada y salida, es el mtodo rpido de hacer que I/O ocasiona que el compilador realice I/O sin
programar el registro de direccin.
D.- Ninguna de las anteriores.

Respuesta: C
Justificacin: La funcin que cumple es de declarar entradas y salidas de manera rpida sin programar el
registro de direccin, generando las instrucciones de entrada y salida..
Referencia: Cnovas Lpez Andrs, C Compiler for Microchip PICmicro MCUs-Manual de usuario del
compilador PCW de CCs,-FAST_I/O.
Dificultad: Media

40.- Qu permite hacer la funcin SET_TRIS_X (value)?


A.- Estas funciones permiten escribir directamente los registros tri-estado para la configuracin de los
puertos y no debe ser usado con FAST_IO() y no se accede a los puertos de I/O como si fuera memoria
B.- Estas funciones permiten escribir directamente los registros tri-estado para la configuracin de los
puertos y no debe ser usado con FAST_IO() y cuando se accede a los puertos de I/O como si fuera
memoria
C.- Estas funciones permiten escribir directamente los registros tri-estado para la configuracin de los
puertos y debe ser usado con FAST_IO() y no se accede a los puertos de I/O como si fuera memoria
D.- Estas funciones permiten escribir directamente los registros tri-estado para la configuracin de los

puertos y debe ser usado con FAST_IO() y cuando se accede a los puertos de I/O como si fuera memoria
Respuesta: D
Justificacin: Estas funciones permiten escribir directamente los registros tri-estado para la configuracin
de los puertos. Esto debe usarse con FAST_IO() y cuando se accede a los puertos de I/O como si fueran
memoria, igual que cuando se utiliza una directiva #BYTE. Cada bit de value representa una patilla. Un
'1' indica que la patilla es de entrada y un '0' que es de salida.
Referencia: Cnovas Lpez Andrs, C Compiler for Microchip PICmicro MCUs-Manual de usuario del
compilador PCW de CCs,-FAST_I/O.
Dificultad: Media

Tema 9.- Funciones para control


41.- Qu directiva define qu fusibles deben activarse en el dispositivo cuando se programe?
A.- # USE FUSES
B.- # INCLUDE
C.- # INT
D.- # FUSES
Respuesta: D
Justificacin: La directiva que define qu fusibles deben activarse en el dispositivo cuando se
Programe es # FUSES. Esta directiva no afecta a la compilacin; sin embargo, esta informacin se pone
en el archivo de salida.
Referencia: Manual de usuario del compilador PCW de CCS, fusibles e interrupciones disponible en:
[http://www.cursos.ucv.cl/eie48700/referencias/CCS_C_Manual.pdf].
Dificultad: Media
42.- De cuntos bits permite cargar al registro tris de un puerto del PIC con el comando SET TRIS X ()?.
A.- 1 BIT
B.-64 BITS
C.-8 BITS
D.-128 BITS
Respuesta: B
Justificacin: El comando SET TRIS X () permite cargar un valor al registro tris de un puerto del PIC. El
valor es un nmero de 8 bits que permite configurar a cada pin de un puerto, esta configuracin se refiere
a declararlo como entradas o salidas digitales.
Referencia: Manual de usuario del compilador PCW de CCS, fast_io(), set trisx() disponible en:
[http://www.cursos.ucv.cl/eie48700/referencias/CCS_C_Manual.pdf].
Dificultad: Media
43.- 1. Los registros del procesador se emplean para controlar instrucciones en ejecucin, manejar
direccionamiento de memoria y proporcionar capacidad aritmtica, dentro de los registros de propsito
general cual es el registro que se utiliza para guardar la direccin base de listas de datos en la memoria:
A.Registro AX
B.- Registro BX
C.- Registro CX
D.- Ninguna de las anteriores
Respuesta: B
Justificacin: Los registros de propsito general, como su nombre lo indica, se utilizan en la forma en que
lo desee el programador. Cada uno de estos registros se puede direccionar como un registro de 16bits
(AX, BX, CX, DX). El registro BX es el registro que se utiliza para guardar la direccin base de listas de
datos en la memoria.
Referencia: B. Brey, B. (s.f.). Los Microprocesadores Intel 8086/8088, 80186, 80286, 80386 y 80486
Arquitectura, programacin e interfaces. Prentice Hall.
Dificultad: Media
44.Microcontrolador es un circuito integrado que contiene todos los componentes de un sistema
micro-programable (unidad central de proceso, memoria ROM, memoria RAM, Mdulo de E/S,
Perifricos y Buses de interconexin), la gran ventaja que presenta un microcontrolador frente a un
microprocesador es la inclusin de diversos:

A.Memorias y Datos
B.Buses y Registros
C.Interrupciones y Fusibles
D.- Mdulos y Perifricos
Respuesta: D
Justificacin: Microcontrolador es un circuito integrado que contiene todos los componentes de un
sistema micro-programable (CPU, memoria ROM y RAM, Mdulo de E/S, Perifricos y Buses de
interconexin). La gran ventaja que presenta un microcontrolador frente a un microprocesador es la
inclusin de diversos mdulos y perifricos que permiten que el microcontrolador realice funciones
completas sin necesidad de elementos externos ms all de cristal y un oscilador.
Referencia: Jos Miguel Pay Abad. Microcontroladores y Desarrollo de proyectos de productos
electrnicos, Desarrollo de productos electrnicos.
Dificultad: Media

45.- Una interrupcin es un ______que hace que el microcontrolador deje de ejecutar la ________que
est realizando para atender dicho acontecimiento y luego regrese y contine la tarea que estaba
realizando antes de que se presentara la interrupcin.

A.- diagrama- programacin


B.- flujo - disponibildad
C.- evento tarea
D.- timer funcin
Respuesta: C
Justificacin: Una interrupcin es un evento que hace que el microcontrolador deje de ejecutar la tarea
que est realizando para atender dicho acontecimiento y luego regrese y contine la tarea que estaba
realizando antes de que se presentara la interrupcin.
Referencia: http://www.circuitoselectronicos.org/2011/03/manejo-de-interrupciones-en-los.html.
Dificultad: Media

Tema 10.- Interaccin Uc PC (USART)


46.- Que significa las siglas USART:
A.- Universal Synchronous Asynchronous Receiver-Transmiter
B.- Universal System Asynchronous Receiver-Transmiter
C.- Universal Asynchronous Receiver-Transmiter
D.- Ninguna de las anteriores
Respuesta: A
Justificacin: las siglas USART Universal Synchronous Asynchronous Receiver-Transmiter.
Referencia: Mdulo de Microcontroladores.
Dificultad: Media
47.- Indica el error en la Tx y Rx del Pic.
A.-OER
B.-OERR
C.- OEER
D.- Ninguna De las anteriores
Respuesta: B
Justificacin: OERR Indica el error en la Tx y Rx del Pic.
Referencia: Mdulo de Microcontroladores.
Dificultad: Media
48.- Comando de configuracin necesaria para encender el bit cero del puerto A:
A.-output_high(pin_a0)
B.- output_high(pin_a0);
C.- outputhigh(pin_a0)
D.- Ninguna de las anteriones
Respuesta: B
Justificacin: Comando de configuracin necesaria para encender el bit cero del puerto A.
output_high(pin_a0);
Referencia: Mdulo Microcontroladores.
Dificultad: Media
49.- Comando de configuracin necesaria para apagar el bit cero del puerto A:
A.-outputlow(pin_a0)
B.- output_low(pin_a0);
C.- outputhigh(pin_a0)
D.- Ninguna de las anteriones
Respuesta: B
Justificacin: Comando de configuracin necesaria para encender el bit cero del puerto A.
output_low(pin_a0);
Referencia: Mdulo Microcontroladores
Dificultad: Media

50.- Comando de configuracin necesaria para encender el nible alto y apagar el nible bajo del puerto D
es:
A.-set_tris_d(0xF0)
B.- settris_d(0xF0);
C.- set_tris_d(0xF0);
D.- set_trisd(0xF0);
Respuesta: C
Justificacin: Comando de configuracin necesaria para encender el nible alto y apagar el nible bajo del
puerto D es: set_tris_d(0xF0);
Referencia: Mdulo de Microcontroladores.
Dificultad: Media

Tema 11.- SENSORIZACION (LM35, ULTRASNICO Y TCR 5000)


51. Que sensor nos permite obtener datos mediante un haz de luz invisible para el ojo humano?
a) Sensor Ultrasnico

b) Sensor infrarrojo
c) Sensor de temperatura
d) Sensor de fuerza
Respuesta: b
Justificacin: Un sensor infrarrojo emite un haz de luz invisible para el ojo humano, que se
refleja en una superficie adyacente (3-15mm) y capturado por el fototransistor, que tiene una
pelcula de filtrado de luz natural, que permite el paso de infrarrojos emitida por los LED. Por
lo tanto, de acuerdo con la reflectividad de la superficie, el fototransistor recibe un valor mayor
o menor de la reflexin.
Fuente: http://www.x-robotics.com/sensores.htm
Nivel de dificultad: Fcil

52. Las siguientes aplicaciones: sistemas de alarma de intrusin, puertas automticas y sensores
de copia de seguridad para automviles pueden ser realizadas con un sensor ultrasnico
verdadero o falso justifique.

a) verdadero
b) Falso
c) Ninguna de las Anteriores
d) Sin Justificacin
Respuesta: a
Justificacin: Un sensor ultrasnico transmite ondas ultrasnicas en el aire y detecta las ondas
reflejadas desde un objeto. Hay muchas aplicaciones para sensores de ultrasonidos, tales como
en sistemas de alarma de intrusin, puertas automticas y sensores de copia de seguridad para
automviles.
Fuente: http://stevenengineering.com/Tech_Support/PDFs/32USONIC .pdf.
Nivel de dificultad: Fcil
53. Qu enunciado es correcto?

a) Funciona mediante la recepcin de una rfaga de ultrasonido en una frecuencia muy por
encima del rango auditivo humano y provee un pulso de salida.

a) Funciona mediante la recepcin de una rfaga de ultrasonido en una frecuencia muy por
debajo del rango auditivo humano y provee un pulso de salida.

b) Funciona mediante la transmisin de una rfaga de ultrasonido en una frecuencia en el


rango auditivo humano y provee un pulso de entrada

c) Funciona mediante la transmisin de una rfaga de ultrasonido en una frecuencia muy por
encima del rango auditivo humano y provee un pulso de salida.
Respuesta: d
Justificacin.- Funciona mediante la transmisin de una rfaga de ultrasonido en una frecuencia
muy por encima del rango auditivo humano y provee un pulso de salida, el cual corresponde con
el tiempo requerido por el eco (rebote) para retornar hasta el sensor.
Fuente: http://stevenengineering.com/Tech_Support/PDFs/32USONIC .pdf.
Nivel de Dificultad: Fcil
54. Defina las 4 caractersticas principales para un trabajo ptimo de sensores?

a) La naturaleza de la seal que el sensor transductor genera: voltaje, rango de amplitud,


respuesta en frecuencia, precisin necesaria, determinan el tipo de acondicionamiento de
seal, convertidor A/D y cualquier otro hardware a utilizar.

b) La influencia de las seales de ruido as como los efectos de carga del hardware de
adquisicin de datos sobre el sensor.

c) La calibracin del sensor con respecto a la variable fsica. Si la respuesta del sensor a los
cambios de la variable fsica es lineal o no. Una calibracin mal hecha va a producir
mediciones errneas.

d) La interdependencia entre los distintos componentes del sistema de adquisicin de datos,


por ejemplo un sensor muy bueno, con un pobre convertidor A/D no sirve de casi nada.
Justificacin.- Cuando se disean sistemas de adquisicin de datos con computadora, hay
aspectos a cerca de los sensores que es necesario tener en cuenta: como lo antes mencionados
Fuente: http:// www.unet.edu.ve/~ielectro/sensores.pdf
Nivel de Dificultad: Fcil
55. Elija el comando completo para usar DELAY que se utiliz en la prctica.
a) #include delay (clock=4000000)
b) delay_ms(500);
c) #use delay (clock=4000000)
d) delay_cycles( 3 );
Respuesta: c
Justificacin.- Esta directiva indica al compilador la frecuencia del procesador, en ciclos por
segundo, a la vez que habilita el uso de las funciones DELAY. Ejemplos: #use delay
(clock=20000000) y #use delay (clock=32000, RESTART_WDT).
Fuente: http://www.cursos.ucv.cl/eie48700/referencias/CCS_C_Manual.pdf Pgina. N 23
Nivel de Dificultad: Medio
56. Que rango nos permite trabajar un sensor ultrasnico?
a) Rango: 3 cm a 5 m
b) Rango: 1 cm a 3 m
c) Rango: 10 cm a 3 m
d) Rango: 2 cm a 3 m
Respuesta: d
Justificacin.-Las caractersticas ms importantes del sensor ultrasnico son las siguientes:
-

Rango: 2 cm a 3 m

LED indicador de rfaga que muestra la actividad del sensor

Interfaz bidireccional por pulso, en un nico pin de E/S para comunicacin con

microcontroladores TTL (5V) o CMOS (3.3V)


Fuente: http://stevenengineering.com/Tech_Support/PDFs/32USONIC .pdf.
Nivel de dificultad: Medio
57. El sensor LM35 nos permite obtener datos en :?
a) La

serie

LM35

es

la

precisin

de

circuitos

integrados

de

temperatura, cuya tensin de salida es linealmente proporcional a


Celsius
b) La serie LM35 es la precisin de temperatura, cuya tensin de
salida es linealmente proporcional a Kelvin
c) La

serie

LM35

es

la

precisin

de

circuitos

integrados

de

temperatura, cuya tensin de salida es linealmente proporcional en


voltios
Respuesta: a
Justificacin.-La serie LM35 es la precisin de circuitos integrados de temperatura, cuya tensin
de salida es linealmente proporcional a la Celsius (centgrados) la temperatura. LM35 tiene as
una ventaja sobre los sensores de temperatura lineal calibrada en Kelvin, como el usuario no
est obligado a restar una gran constante voltaje de su produccin para obtener centgrados
conveniente escalado.
Fuente:

Katerin

Jacome

http://es.scribd.com/doc/113120204/Caracterizacion-Sensor-

Lm35#scribd
Nivel de Dificultad: Medio
58. Que nos permite medir un transductor y por qu motivo
a) Energa lumnica, acstica, presin, elctrica, caudal
b) Energa calrica, , acstica, , movimiento, caudal
c) Energa calrica, lumnica, acstica, presin, movimiento, caudal
d) Energa calrica, temperatura , presin, movimiento, caudal
Respuesta: c
Justificacin.- Un transductor es un dispositivo que convierte energa de tipo calrica, lumnica,
acstica, presin, movimiento, caudal, etc. a otra generalmente elctrica para poder medirla y
eventualmente controlarla en forma relativamente fcil.
Fuente:CAPITULOVIISENSORES,http://www.unet.edu.ve/~ielectro/sensores.pdf
Nivel de Dificultad: Medio
59. Complete

Sensor de proximidad basado _________________________requiere de dos partes: LED


_________________. El LED de infrarrojos emite seal de infrarrojos al objeto de deteccin,
una porcin de seal que rebota de la superficie de deteccin de objeto, stos seal infrarroja
reflejada entonces fue capturada por ________________..
a) En la deteccin de seales de infrarrojos--infrarrojo y sensor
de infrarrojos--por el sensor de infrarrojos.
b) En la deteccin de seales de ultrasnicas--ultrasnico y
sensor de infrarrojos--por el sensor de ultrasnico.
c) En la deteccin de seales elctricas--infrarrojo y sensor de
infrarrojos--por el sensor de infrarrojos.
d) En la deteccin de seales de infrarrojos--infrarrojo y sensor
de infrarrojos--por el sensor de temperatura.
Respuesta a
Justificacin: Sensor de proximidad basado en la deteccin de seales de infrarrojos requiere de
dos partes: LED infrarrojo y sensor de infrarrojos. El LED de infrarrojos emite seal de
infrarrojos al objeto de deteccin, una porcin de seal que rebota de la superficie de deteccin
de objeto, esta seal infrarroja reflejada entonces fue capturada por el sensor de infrarrojos.
Fuente:http://www.intersil.com/content/dam/Intersil/documents/an14/an1436
Dificultad: Moderado
60. Qu tipo de sensor nos permite trabajar a un rango mximo de 12mm
a) Ultrasnico
b) temperatura
c) infrarrojo
d) fuerza
Respuesta c
Justificacin: Los sensores infrarrojos se usan para deteccin de obstculos por reflexin y
deteccin de oponentes en combates de sumo.
Especificaciones:

Deteccin de distancia: 12m m

Longitud de onda del funcionamiento: 950 milmetros

Fuente: http://www.x-robotics.com/sensores.htm
Dificultad: Moderado

Tema 12.- Control PWM para Motores DC y AC


61. Un motor elctrico de Corriente Continua es una mquina que convierte energa elctrica en
?.
a) Movimiento o trabajo mecnico
b) Energa Magntica
c) Energa Electromagntica
d) Ninguna de las anteriores
Respuesta: a
Justificacin Un motor elctrico de Corriente Continua es esencialmente una mquina que
convierte energa elctrica en movimiento o trabajo mecnico, a travs de medios
electromagnticos.
Fuente: Maquinas Elctricas - Chapman
Nivel de dificultad: Fcil
62. Un motor para funcionar se vale de las fuerzas de atraccin y repulsin que existen..
a)
Entre los polos
b)

En la Red elctrica

c)

En los bobinados

d)

Ninguna de las anteriores

e) Respuesta: a
f) Justificacin: Un motor para funcionar se vale de las fuerzas de atraccin y repulsin que
existen entre los polos.
g) Fuente: Maquinas Elctricas - Chapman
h) Nivel de dificultad: Fcil
63. El principio que Andr Ampre establece: que si una corriente pasa a travs de un conductor
situado en el interior de un campo magntico, ste ejerce una fuerza. sobre el conductor.
a) Elctrica.
b) Mecnica.
c) Magntica.
d) Electromagntica.
i)

Respuesta: b

j)

Justificacin.- Y el principio que Andr Ampre observo en 1820, en el que establece: que si
una corriente pasa a travs de un conductor situado en el interior de un campo magntico,
ste ejerce una fuerza mecnica o f.e.m. (fuerza electromotriz), sobre el conductor.
k) Fuente: Maquinas Elctricas - Chapman
l) Nivel de Dificultad: Fcil
64. Los dispositivos mas conocidos de la familia de los tiristores para aplicaciones de potencia
son:

a) TRANSISTOR, TRIAC.
b) TRANSISTOR, GTO, SRC.
c) SCR, GTO.
d) SCR, TRIAC, GTO
m)

Respuesta: d

n) Justificacin.- Los dispositivos mas conocidos de la familia de los tiristores para


aplicaciones de potencia son: SCR, TRIAC, GTO.
o) Fuente: Antonio Sanchez - Caractersticas y principios de funcionamiento
p) Nivel de Dificultad: Fcil
65. El SCR (Silicon Controled Rectifier / Rectificador controlado de silicio) es un dispositivo
semiconductor de.. que funciona como un conmutador casi ideal.
q)
a) 3 capas
b) 2 capas
c) 4 capas
d) 1 capa
r) Respuesta: c
s) Justificacin.- El SCR (Silicon Controled Rectifier / Rectificador controlado de silicio)es un
dispositivo semiconductor de 4 capas que funciona como un conmutador casi ideal.
t) Fuente: Antonio Nachez - Caractersticas y principios de funcionamiento
u) Nivel de Dificultad: Medio
66. El Triac es un dispositivo. que pertenece a la familia de los tiristores?
a) Semiconductor.
b) Conductor.
c) De potencia.
d) Ninguna de las anterior
e) Respuesta: a
f) Justificacin.- El Triac es un dispositivo semiconductor que pertenece a la familia de los
dispositivos de control: los tiristores
g) Fuente: Antonio Nachez - Caractersticas y principios de funcionamiento
h) Nivel de dificultad: Medio
67. El triac es en esencia la conexin de pero conectados en sentido opuesto y
compartiendo la misma compuerta
a) 2 SRC en paralelos.
b) 2 SRC en serie.

c) 3 SRC en paralelos.
d) 3 SRC en serie.
i)

Respuesta: a

j)

Justificacin.- El triac es en esencia la conexin de dos SCR (tiristores) en paralelo pero


conectados en sentido opuesto y compartiendo la misma compuerta.

k) Fuente: Antonio Nachez - Caractersticas y principios de funcionamiento


l)

Nivel de Dificultad: Medio

68. Los tiristores constituyen una familia de dispositivos, pero donde todos los elementos que la
componen se basan?
a) En otros principios de funcionamiento
b) En el funcionamiento de los transistores
c) En el mismo principio de funcionamiento
d) En distintos tipos de funcionamientos
m) Respuesta: c
n) Justificacin.- Los tiristores constituyen una familia de dispositivos que pueden tomar
diferentes nombres y caractersticas, pero donde todos los elementos que la componen se
basan en el mismo principio de funcionamiento
o) Fuente: Antonio Nachez - Caractersticas y principios de funcionamiento
p)

Nivel de Dificultad: Medio

69. La parte positiva de la onda (semiciclo positivo) pasar por el triac siempre y cuando haya
habido una?
a) Seal Positiva.
b) Seal Negativa.
c) Seal de disparo en la compuerta.
d) Seal Positiva y negativa.
q) Respuesta c
r) Justificacin: La parte positiva de la onda (semiciclo positivo) pasar por el triac siempre y
cuando haya habido una seal de disparo en la compuerta, de esta manera la corriente
circular de arriba hacia abajo (pasar por el tiristor que apunta hacia abajo).
s) Fuente: Antonio Nachez - Caractersticas y principios de funcionamiento
t)

Dificultad: Medio

70. En que patilla del TRIAC se puede obtener la seal en cualkiera de los 2 semiciclos
(positivo y negativo)?
a) Anodo 1.

b) Compuerta.
c) Anodo 2.
d) No se puede medir en ninguna patilla.
u) Respuesta b
v) Justificacin: Para los semiciclos la seal de disparo se obtiene de la misma patilla (la
puerta o compuerta).
w) Fuente: Antonio Nachez - Caractersticas y principios de funcionamiento
x) Dificultad: Moderado

y)

z) Tema 13.- COMUNICACIN I2C Y SPI


71. Complete
aa) SPI es un ...... de lneas, el cual . paquetes de
de 8 bits.
a) Protocolo, 2, enva, datos
b) Bus, 3, enva, datos
c) Bus, 3, transmite, informacin
d) Protocolo, 2, transmite, informacin
ab) Respuesta: c
ac) SPI es un bus de 3 lneas, por el cual se transmiten paquetes de informacin de 8 bits. Cada
una de estas tres lneas porta la informacin entre los diferentes dispositivos conectados al
bus.
ad) Nivel de dificultad: Medio
ae) Fuente: Ingeniera en Microcontroladores, Curso de Redes de Microcontroladores PIC
(Protocolo SPI), capitulo 1, pgina 1, Mxico Distrito Federal. Disponible en:
http://www.i-micro.com/pdf/articulos/spi.pdf
af)
72. Elija la respuesta correcta:
ag) Las lneas de transmisin del protocolo SPI son:
a) MISO, SS1, SCLK
b) MOSI, MISO, SCLK
c) MOSI, SS1, SS2
d) MISO, SCLK, SS1
ah) Respuesta: b
ai) Todas las lneas del bus de SPI transmiten la informacin sobre una sola direccin entre los
dispositivos que se encuentren conectados al protocolo SPI.
aj) Nivel de dificultad: Fcil
ak) Fuente: Ingeniera en Microcontroladores, Curso de Redes de Microcontroladores PIC
(Protocolo SPI), capitulo 1, pgina 2, Mxico Distrito Federal.
73. Elija la respuesta correcta
al) Qu tipo de comunicacin utiliza el protocolo SPI?
a) Paralelo
b) USB
c) Serie y Paralelo

d) Serie
am)Respuesta: d
an) El estndar SPI es utilizado para la comunicacin serial entre dispositivos. Se trata de un
enlace de datos en serie, sncrono, y que opera en modo full dplex, es decir, las seales de
datos viajan en ambas direcciones en forma simultnea.
ao) Nivel de dificultad: Medio
ap) Fuente:

Estndar

SPI,

Comunicacin

SPI

[Online]

Disponible

en:

http://www.puntoflotante.net/COMUNICACION-SPI-TUTORIAL.htm
74. Elija la respuesta correcta
aq) Que funciones debe cumplir los cuatro pines asociados al mdulo SPI?
a) SS, SPSCK, MOSI, MISO
b) MOSI y MISO
c) MOSI, MISO Y SS
d) SS y SPSCK
ar) Respuesta: a
as) Mientras el bit SPE est seteado, los cuatro pines asociados al mdulo SPI deben cumplir
las funciones de:

Selector de esclavo (SS)


Clock serial (SPSCK)
Master out/slave in (MOSI)
Master in/slave out (MISO)
at)

au) Nivel de dificultad: Difcil


av) Fuente:

Estndar

SPI,

Comunicacin

SPI

[Online]

Disponible

http://www.puntoflotante.net/COMUNICACION-SPI-TUTORIAL.htm
75. Elija la respuesta correcta
aw) Cul es el modo bidireccional de SPI?
a) Duplex
b) Half Duplex
c) Full Duplex
d) Full Full Duplex
ax) Respuesta: c
ay) El mdulo SPI incluye las siguientes caractersticas:

Longitud de datos de transmisin programable a 8 o 16 bits.


Operacin en modo master o slave.
Desplazamiento de datos primero MSB o primero LSB seleccionable

en:

Modo bidireccional en Full-duplex o simple lnea


Tasa de bit de transmisin programable
Registro de datos de transmisin y recepcin de Doble buffer
Opciones de polaridad y fase del clock
Salida de seleccin de slave
Flag de modo de error por falla con posibilidad de interrupcin de CPU
Control de operacin de SPI durante el modo wait

az) Nivel de dificultad: Difcil


ba) Fuente: Ingeniera en Microcontroladores, Protocolo SPI Teora y Aplicaciones Cap. 1,
Pg. 6 [Online] Disponible en: http://www.i-micro.com/pdf/articulos/spi.pdf
76. Elija la respuesta correcta
bb) Cuantos bits y dispositivos utiliza I2C
a) 5 bits y 32 dispositivos
b) 7 bits y 128 dispositivos.
c) 5 bits y 128 dispositivos.
d) 8 bits y 127 dispositivos.
bc) Respuesta: b
bd) Justificacin: Una direccin de 7 bits implica que se pueden poner hasta 128 dispositivos
sobre un bus I2C, ya que un nmero de 7 bits puede ir desde 0 a 127.
be) Nivel de dificultad: Fcil
bf)
bg) Fuente: Eduardo J. Carletti, Descripcin y funcionamiento de la
Comunicacin

I2C,

2007,

Robots Argentina,

[Online]:

Disponible

en:

http://robots-argentina.com.ar/Comunicacion_busI2C.htm
77. Describa que tipos de seales utiliza la comunicacin I2C.
a) SCL-SDA-GND
b) MSB-SCL-GND
c) MOSI-SDA-GND
d) GND-MISO-MOSI
bh) Respuesta: a
bi) Justificacin: Las seales que utiliza son:
bj) SCL (System Clock) es la lnea de los pulsos de reloj que sincronizan el sistema.
bk) SDA (System Data) es la lnea por la que se mueven los datos entre los dispositivos.
bl) GND (Masa) comn de la interconeccin entre todos los dispositivos "enganchados" al bus.
bm)Nivel de dificultad: Media
bn) Fuente: Eduardo J. Carletti, Descripcin y funcionamiento de la Comunicacin I2C,
2007,

Robots

Argentina,

[Online]:

Disponible

http://robotsargentina.com.ar/Comunicacion_busI2C.htm
78. Cul es la funcin que desempean las seales en la comunicacin I2C?

en:

a) Las lneas SDA (serial Data) y SCL (serial Clock) son bidireccionales,
conectadas al positivo de la alimentacin a travs de las resistencias
de pull-up. Cuando el bus est libre, ambas lneas estn en nivel alto.
b) Las lneas SDA (serial Data) y SCL (serial Clock) son unidireccionales,
conectadas al positivo de la alimentacin a travs de las resistencias.
c) Las lneas SDA (serial Data) y SCL (serial Clock) son bidireccionales,
conectadas a la alimentacin a travs de las resistencias de pulldown.
d)

las resistencias de pull-up estn conectadas a SDA y SCL, cuando el


bus est libre, ambas lneas estn en nivel bajo.

bo) Respuesta: a
bp) Justificacin.- Las lneas SDA (serial Data) y SCL (serial Clock) son bidireccionales,
conectadas al positivo de la alimentacin a travs de las resistencias de pull-up. Cuando el
bus est libre, ambas lneas estn en nivel alto.
bq) Nivel de Dificultad: Media
br) Fuente: Eduardo Coquet Comunicacin del Bus I2C, Comunidad de Electrnicos,
[Online]: Disponible en: http://www.comunidadelectronicos.com/articulos/i2c.htm
79. Cul es la funcin del maestro y esclavo?
a) El Maestro sincroniza las seales de reloj y el Esclavo recibe
datos desde el bus.
b) Maestro genera las seales de reloj y termina un envi de
datos y el Esclavo, es direccionado por el multi-maestro.
c) Maestro controla la corrupcin de mensajes y el Esclavo
genera las seales de reloj.
d) Maestro genera las seales de reloj y termina un envi de
datos y el Esclavo, es direccionado por el maestro.
bs) Respuesta: d
bt) Justificacin.- Maestro genera las seales de reloj y termina un envi de datos y el Esclavo,
es direccionado por el maestro.
bu) Nivel de Dificultad: Difcil
bv) Fuente: Eduardo J. Carletti, Comunicacin Bus I2C, Robots. Pasin por la robtica en
Argentina, 2008
80. Elija que velocidad y voltaje maneja el bus I2C.
a) Velocidades hasta de 2.5MHz/s con voltajes de 2V a 5V.

b) Velocidades hasta de 2.8 MHz/s con voltajes de 5V a 2.5V.


c) soportar velocidades de hasta 3,4 MHZ/s y la variedad de
voltajes (5V, 3V o menor).
d) Velocidades de 3,4 MHZ/s y voltajes hasta de 7V a 5 V.
bw)Respuesta: c
bx) Justificacin.- El bus serie I2C ha sido extendido para soportar velocidades de hasta 3,4
MHZ/s, combinado con una funcin de desplazamiento del nivel de voltaje, en modo Highspeed (Hs-mode) ofrece una solucin ideal para los sistemas de tecnologa mixta, donde las
altas velocidades y la variedad de voltajes (5v, 3v o menor) son comnmente usados.
by) Nivel de Dificultad: Difcil
bz) Fuente: MikroElektronica El mundo de los microcontroladores I2C, MikroElektronica,
Capitulo

1(1.3

Detalles

Importantes),

1998,

http://www.comunidadelectronicos.com/articulos/i2c.htm
ca)

[Online]:

Disponible

en:

cb)Tema 14.- ZIGBEE


81. En que estndar IEEE se basa la tecnologa Zigbee?.
E. 802.11
F.

802.11n

G. 802.15.4
H. 802.4.15
cc)
cd) Respuesta: C
ce)
cf) Justificacin: La tecnologa ZigBee (basada en el IEEE 802.15.4) se est consolidando como un
estndar de comunicaciones relativamente nuevo muy similar al Bluetooth (IEEE 802.15.1).
cg) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
en:
http://eprints.ucm.es/8922/1/memoria.pdf
ch) Nivel de Dificultad: Moderado
82. De cuntos nodos como mximo puede contar una red Zigbee?
E. 192
F.

G. 255
H. 512
ci)
cj) Respuesta: C
ck)
cl) Justificacin: Una red ZigBee puede constar de un mximo de 255 nodos, frente a los 8 mximos de
una red Bluetooth.
cm) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
en:
http://eprints.ucm.es/8922/1/memoria.pdf
cn) Nivel de Dificultad: Moderado.
83. Por qu el consumo elctrico en Zigbee es menor que en Bluetooth?
co)
A. El dispositivo se queda dormido la mayor parte de tiempo
B. El dispositivo est siempre transmitiendo y/o recibiendo
C. El dispositivo siempre est trabajando
D. Ninguna de las anteriores
cp)
cq) Respuesta: A
cr) Justificacin: Menor consumo elctrico en sistemas ZigBee que en Bluetooth. Esto se debe a que el
dispositivo ZigBee se queda la mayor parte del tiempo dormido, mientras que en una comunicacin
Bluetooth esto no se puede dar, y siempre se est transmitiendo y/o recibiendo.
cs)
ct) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
en:
http://eprints.ucm.es/8922/1/memoria.pdf
cu) Nivel de Dificultad: Fcil
84. Cul es el ancho de banda con el que trabaja Zigbee?
cv)
E. 256kbps
F.

156kbps

G. 64kbps
H. 250kbps
cw)
cx) Respuesta: D
cy)
cz) Justificacin: El estndar ZigBee tiene un ancho de banda de 250 kbps, mientras que el Bluetooth
tiene 1 Mbps.
da)
db) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
en:
http://eprints.ucm.es/8922/1/memoria.pdf
dc) Nivel de Dificultado: Moderada
85. Cul es el rango de operacin que tiene Zegbee?
dd)
A. 1 a 100m

B. 10 a 75m
C. 40m a 100 m
D. 30 a 50m
de)
df) Respuesta: B
dg)
dh)Justificacin: ZigBee tiene un rango de operacin de 10 a 75 m, respecto al de 1 a 100 m de Bluetooth
di)
dj) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
en:
http://eprints.ucm.es/8922/1/memoria.pdf
dk) Nivel de Dificultad: Fcil
dl)
dm)
dn)
86. Seleccione los 4 tipos de tramas del nivel fsico (tramas del IEEE 802.15.4) que tiene Zegbee?
do)
A. Datos, reconocimiento, comandos MAC, piloto.

B. Reconocimiento, paquetes, datos, algoritmo.


C. Direcciones, datos, piloto, comando MAC.
D. Memoria, reconocimiento, comandos MAC, piloto.
dp)
dq) Respuesta: A
dr)
ds) Justificacin: Trama nivel fsico (tramas del IEEE 802.15.4), es el estndar que define 4 tipos de
tramas, que se analizan de acuerdo a la funcin que desempee. Estas tramas son:
Trama de datos
Trama de reconocimiento
Trama de comandos MAC
Trama piloto (supertrama)
dt)
du)
dv) Fuente: Zigbee: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
dw) Nivel de Dificultad: Fcil
87. A que hace referencia la Trama de datos en Zegbee?
dx)

A. Sirve para confirmar el xito en la recepcin y para validar las tramas de datos y los comandos
MAC. El campo de control en el frame (Frame Control) indica si se espera un ACK o no.
a)

B. Permite verificar la integridad de los datos llamados FCS (Frame Check Sequence) y se incluye
un nmero de secuencia para permitir el reensamblado y la retransmisin.
b)

C. Esta es una trama que permite el control y la configuracin de los nodos as como la formacin
de la red.
c)

D. Son el direccionar a varios dispositivos para que enven informacin, permitir mantener a los
nodos sincronizados sin tener que escuchar permanentemente el canal
dy)
dz) Respuesta: B
ea)
eb) Justificacin: Se permiten hasta 102 bytes como mximo para datos (n) MAX=102 bytes, se incluyen
2 bytes para verificar la integridad de los datos llamados FCS (Frame Check Sequence) y se incluye
un nmero de secuencia para permitir el reensamblado y la retransmisin.
ec)
ed) Fuente: Zigbee: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
ee) Nivel de Dificultad: Moderado
88. Cules son las principales funciones que garantiza Zegbee de la trama de comando MAC a nivel
fisico?
ef)
A. Recepcin, tramas de datos y los comandos MAC, indicacin de calidad del enlace, deteccin
de actividad del canal, RX y TX de datos.
d)

B. Datos, FCS (Frame Check Sequence), reensamblado y la retransmisin, desactivacin de nodos,


deteccin de energa.
e)

C. Control y la configuracin de los nodos, deteccin de energa, indicacin de calidad del enlace.
D. Activacin y desactivacin de nodos, deteccin de energa, indicacin de calidad del enlace,
deteccin de actividad del canal, RX y TX de datos.
eg)
eh) Respuesta: D
ei)
ej) Justificacin: Esta es una trama que permite el control y la configuracin de los nodos as como la
formacin de la red. Para ello, el estndar contempla 26 directivas para garantizar principalmente las
siguientes funciones a nivel fsico:
ek)
el) Activacin y desactivacin de nodos
em) Deteccin de energa
en) Indicacin de calidad del enlace
eo) Deteccin de actividad del canal
ep) RX y TX de datos.
eq)
er) Fuente: Zigbee: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
es) Nivel de Dificultad: Moderado
et)
89. Seleccione el par de palabras correctas, para completar el siguiente enunciado?
eu)
ev) ZigBee opera en las bandas libres de 2.4Ghz,
y
ew)

A.
B.
C.
D.

868Mhz para Europa y 916Mhz para Estados Unidos


885Mhz para Europa y 915Mhz para Inglaterra.
858Mhz para Europa y 915Mhz para Estados Unidos.
858Mhz para Italia y 916Mhz para Estados Unidos.

ex)
ey) Respuesta: C
ez)
fa) Justificacin: ZigBee opera en las bandas libres de 2.4Ghz, 858Mhz para Europa y 915Mhz para
Estados Unidos.De acuerdo al protocolo 802 (incluyendo ZigBee).
fb)
fc) Fuente: Zigbee: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
fd) Nivel de Dificultad: Moderado
90. Seleccione los equipos o los dispositivos con los que Zigbee trabaja, segn su papel en la red?
fe)
A. Coordinador ZigBee (ZigBee Coordinator, ZC), Router ZigBee (ZigBee Router, ZR),
Dispositivo final (ZigBee End Device, ZED).

B. Enrutador ZigBee (ZigBee router, ZC), HUB ZigBee (ZigBee HUB, ZR), Dispositivo final
(ZigBee End Device, ZED).

C. Enrutador ZigBee (ZigBee router, ZC),

Coordinador ZigBee (ZigBee Coordinator, ZC),

Dispositivo final (ZigBee End Device, ZED).

D. HUB ZigBee (ZigBee HUB, ZR), Coordinador ZigBee (ZigBee Coordinator, ZC), Router
ZigBee (ZigBee Router, ZR).
ff)
fg) Respuesta: A
fh)
fi) Justificacin: los equipos o los dispositivos con los que Zigbee trabaja, segn su papel en la red son
tres: Coordinador ZigBee (ZigBee Coordinator, ZC), Router ZigBee (ZigBee Router, ZR),
Dispositivo final (ZigBee End Device, ZED).
fj)
fk) Fuente: Zigbee: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
fl) Nivel de Dificultad: Moderado

fm)

fn) Tema 15.- Bluetooth


91. Seleccione Complete
fo) Qu es Bluetooth? Bluetooth es una. que provee un camino fcil para la
comunicacin entre dispositivos a altas , sin el uso....Posibilita la
transmisin de voz y datos entre diferentes dispositivos mediante un enlace por radiofrecuencia en la
banda ISM de los ..
fp)
E. Aplicacin, frecuencias, banda ancha, 16Ghz

F. Tecnologa, velocidades, cables, 2.4Ghz


G. Tecnologia, capacidades, subredes, 2.4Ghz
f)

H. Tecnologia, capacidades, subredes, 2.6Ghz


fq)
fr) Respuesta: C
fs)
ft) Justificacin: La Bluetooth es una tecnologa que provee un camino fcil para la comunicacin entre
dispositivos a altas velocidades, sin el uso de cables. sta pertenece a la especificacin industrial para
Redes Inalmbricas de rea Personal (WPAN). Posibilita la transmisin de voz y datos entre
diferentes dispositivos mediante un enlace por radiofrecuencia en la banda ISM de los 2,4 GHz.
fu)
fv) Fuente: Prasad R., 1997, Resea de las Comunicaciones Personales Inalmbricas Perspectivas de
Microondas, IEEE Communications Magazn, Volumen 9, Pginas 104-108.
fw) Nivel de Dificultad: Moderado
fx)
92. Elija tres Beneficios que nos da Bluetooth:
fy)
1. Permite trabajar con otros usuarios con frecuencias distintas.
2. Proveer alta velocidad en la comunicacin.
3. Permite conectar hasta 255 nodos.
4. Tecnologa a pequea escala y bajo costo.
5. Ofrecer la posibilidad de crear pequeas redes inalmbricas.
fz)
A. 1, 2, 3

B. 3, 4, 5
C. 1,4, 5
D. 2, 4, 5
ga)
gb)
gc)
gd)
ge)
gf)
gg)
gh)
gi)
gj)
gk)
gl)

Respuesta: D
A continuacin, podemos resumir los principales objetivos que se desean conseguir con esta norma:

Facilitar las comunicaciones entre equipos mviles y fijos.


Proveer alta velocidad en la comunicacin.
Eliminar cables y conectores entre los dispositivos.
Ser lo suficientemente adaptables para el todo tipo de usuarios.
Orecer la posibilidad de crear pequeas redes inalmbricas.
Proporcionar la sincronizacin de datos entre equipos personales.
Tecnologa a pequea escala y bajo costo.
FUENTE: S.A., E. (s.f.). Electro componentes S.A. Obtenido
trocomponentes.com/
gm) Nivel de Dificultad: Moderado
93. Cul el Composicin del paquete de Bluetooth?
gn)

de

http://www.elec-

A.
B.
C.
D.

Cdigo de acceso-cabecera- carga til.


Campo de datos o carga til- flujo-Tipo de acceso
Cabecera-Direccion-Flujo
Cdigo-Hec-Flujo

go)
gp)
gq)
gr)
gs)
gt)

Respuesta: A
Composicin del paquete:
Cdigo de acceso (72 bits): Es usado para sincronizacin, identificacin y compensacin.
Cabecera (54 bits): Contiene informacin del control de enlace con 6 campos:
Campo de datos o carga til (hasta 2746 bits): Contiene el conjunto de datos que supone la
informacin a transmitir
gu) FUENTE: S.A., E. (s.f.). Electro componentes S.A. Obtenido de http://www.electrocomponentes.com/
gv) Nivel de Dificultad: Moderado
94. Elija tres de los 6 campos del control de enlace de la Cabecera del paquete de Bluetooth:
gw) 1. Flujo
gx) 2. nmero de host.
gy) 3. ARQN
gz) 4. Carga til
ha) 5. Direccin.
A. 1, 2, 3

B. 3, 4, 5
C. 2, 4, 5
D. 1, 3, 5
hb)
hc)
hd)
he)
hf)

Respuesta: D
Argumentacin:
Cabecera (54 bits): Contiene informacin de con 6 campos:
Direccin o AM_ADDR: direccin temporal de 3 bits que se utiliza para distinguir los
dispositivos activos en una piconet, siendo la direccin 000 la direccin broadcast.
hg) Tipo: Define qu tipo de paquete es enviado y cuntos slots va a ocupar.
hh)
Flujo o Flow: El bit de control de flujo es usado para notificar al emisor cundo el
buffer
del receptor est lleno y que debe de dejar de transmitir.
hi) ARQN: bit de reconocimiento de paquetes recibidos paquetes correcto o
incorrecto (ltimo paquete recibido). Si es un 1 es un ACK, y con un 0 un NAK.
hj) SEQN: bit que se va invirtiendo para evitar retransmisiones en el receptor.
hk) HEC: Cdigo de redundancia para comprobar errores en la transmisin.
hl) Bibliografa:
hm) S.A., E. (s.f.). Electrocomponentes S.A. Obtenido de http://www.elec- trocomponentes.com/D
hn) Composicin del paquete:
ho) Cdigo de acceso (72 bits): Es usado para sincronizacin, identificacin y compensacin.
hp) Cabecera (54 bits): Contiene informacin del control de enlace con 6 campos:
hq) Campo de datos o carga til (hasta 2746 bits): Contiene el conjunto de datos que supone la
informacin a transmitir
hr) Nivel de Dificultad: Moderado
hs)
95. Cmo es la comunicacin de Bluetooth?

A. El equipo que mejor funcione acta como maestro y es el quien define por que canal enva
mientras los esclavos esperan la informacin.
g)

B. El dispositivo maestro se encarga de definir cmo se establece la comunicacin fsicamente, los


dispositivos esclavos coordinan sus transmisiones segn las especificaciones del maestro.

C. El dispositivo maestro espera que se conecten a l dispositivos que van actuar como esclavos y
ellos son los que definen las condiciones de comunicacin

D. El dispositivo maestro establece la frecuencia, la trama y el dispositivo esclavo solo puede mirar
la trama pero no modificarla.
ht)
hu) Respuesta: B
hv) En una red Bluetooth, cualquier dispositivo puede actuar como maestro o como esclavo:
hw) El dispositivo maestro se encarga de definir cmo se establece la comunicacin fsicamente
(frecuencia de salto, fase, etc.).
hx) Los dispositivos esclavos coordinan sus transmisiones segn las especificaciones del maestro.
Normalmente, el primero que solicita el servicio acta como maestro, excepto cuando la red ya ha
sido establecida.
hy) Bibliografa:
hz) Prasad R., 1997, Resea de las Comunicaciones Personales Inalmbricas Perspectivas de
Microondas, IEEE Communications Magazn, Volumen 9, Pginas 104-108.
96. Cuntos aparatos pueden conectase simultneamente a Bluetooth y cul es su velocidad mxima de
transferencia de datos:

A.
B.
C.
D.

15 equipos _ 750 Kbps

A.
B.
C.
D.

2.6 GHz

8 equipos _ 720 Kbps


7 equipos _ 720 Kbps

10 equipos _ 780 Kbps


ia)
ib) Respuesta: C
ic) Los aparatos Bluetooth pueden conectarse simultneamente hasta a siete aparatos ms. La velocidad
mxima de transferencia de datos es de aproximadamente 720 Kbps por cana
id) Bibliografa: Prasad R., 1997, Resea de las Comunicaciones Personales Inalmbricas Perspectivas
de Microondas, IEEE Communications Magazn, Volumen 9, Pginas 110-11
97. Cul es la frecuencia en la cual opera la tecnologa Bluetooth

2.8 GHz
2,48 GHZ

2.4 GHz
ie)
if) Respuesta correcta: D
ig) Los radios Bluetooth operan en el espectro de banda de 2.4 GHz. Cada unidad incluye una radio, un
controlador de enlaces de banda base y el software para la administracin de los enlaces y flujo de
datos.
ih) Bibliografia: S.A., E. (s.f.). Electrocomponentes S.A. Obtenido de http://www.electrocomponentes.com/
98. Complete los campos de del paquete Cabecera de la trama Bluetooth
ii) Cdigo de Acceso
Cabecera
Carga til
ij)
1
2
3
4
5
6
ik) Direccin
Flujo
HEC
il)

h)

A.
B.
C.
D.
im)
in)
io)
ip)
iq)
ir)
is)
it)
iu)
iv)
iw)
ix)
99.

1.SEQN, 2.TIPO, 3.ARQN


1.Tipo, 2.ARQN, 3.SEQN
1.Tipo, 2.SEQN, 3.ARQN
1.ARQN, 2.SEQN, 3.Tipo

Respuesta: B
Argumentacin:
Cabecera (54 bits): Contiene informacin del control de enlace con 6 campos:
1. Direccin o AM_ADDR:
2. Tipo
3. Flujo
4. ARQN
5. SEQN
6. HEC.
Bibliografa:
S.A., E. (s.f.). Electrocomponentes S.A. Obtenido de http://www.elec- trocomponentes.com/
Cul es la principal diferencia entre los mdulos HC-05 vs HC-06

A.
B.
C.
D.

Hardware es diferente

A.
B.
C.
D.

10 m

Los modos de comando AT


Mdulo Maestro-Esclavo

EL firmware
iy)
iz) Respuesta: D
ja) Esto se debe a que esencialmente el hardware es el mismo para ambos mdulos. La nica diferencia
real es el firmware que viene cargado de fbrica.
jb) Bibliografa:
jc) Prasad R., 1997, Resea de las Comunicaciones Personales Inalmbricas Perspectivas de
Microondas, IEEE Communications Magazn, Volumen 9, Pginas 120-124.
100.Cul es el radio efectivo que permite Bluetooth conectar todo tipo de dispositivos incorporando un
transmisor

25 m
15 m

20 m
jd)
je) Respuesta: A
jf) Argumentacin:
jg) Integrado en un pequeo transmisor de radiofrecuencia que permite conectar entre s todo tipo de
dispositivos electrnicos (telfonos, ordenadores, impresoras, faxes, etc) situados dentro de un radio
limitado de 10 metros (ampliable a 100, aunque con mayor distorsin) sin necesidad de utilizar
cables.
jh) Bibliografa:
ji) Bluetooth: comunicacin inalmbrica: http://html.rincondelvago.com/bluetooth_comunicacioninalambrica.html
jj)

jk) Tema 16.- RF


101.En que estndar IEEE se basa la tecnologa RF?.
I. 802.11
J.

802.11n

K. 802.15.4
L. Ninguno
jl)
jm) Respuesta: D
jn) Justificacin: La tecnologa RF no tiene un estndar o norma en la que trabaje.
jo) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
http://eprints.ucm.es/8922/1/memoria.pdf
jp) Nivel de Dificultad: Moderado
102.De cuntos canales como mximo puede contar una red Zigbee?
I.

J.

Disponible

en:

K. 255
L. 512
jq)
jr) Respuesta: B
js)
jt) Justificacin: Una red RF dependiendo de la configuracin puede trabajar en un canal pero este
puede cambiar debido a las interferencias o afectaciones del enlace.
ju) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
en:
http://eprints.ucm.es/8922/1/memoria.pdf
jv) Nivel de Dificultad: Moderado.
103.Por qu el consumo elctrico en RF es mayor que en Bluetooth?
jw)
E. El dispositivo se queda dormido la mayor parte de tiempo
F. El dispositivo est siempre esta enlazado a al receptor
G. El dispositivo siempre est trabajando
H. Ninguna de las anteriores
jx)
jy) Respuesta: A
jz)
ka)
kb) Justificacin: Mayor consumo elctrico en sistemas RF que en Bluetooth. Esto se debe a que el
dispositivo RF se enlaza mayor parte del tiempo al receptor existen cambios de canal
Bidireccionalmente, mientras que en una comunicacin Bluetooth esto no se puede dar, y siempre se
est transmitiendo y/o recibiendo.
kc)
kd) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
en:
http://eprints.ucm.es/8922/1/memoria.pdf
ke) Nivel de Dificultad: Fcil
104.Cul es el tamao de la trama con el que trabaja RF?
kf)
I. 256bits
J.

128bits

K. 512bits
L. 1024bits
kg)
kh) Respuesta: A
ki)
kj) Justificacin: El estndar RF tiene una trama de 256bps.
kk)
kl) Fuente:
Sistema
Interactivo
de
Docencia
http://eprints.ucm.es/8922/1/memoria.pdf
km) Nivel de Dificultado: Moderada
105.Cul es el rango de operacin que tiene RF?
kn)
E. 1 a 100m

[Online]

Disponible

en:

F. 10 a 75m
G. 1 a 5KM
H. 30 a 50m
ko)
kp) Respuesta: C
kq)
kr) Justificacin: RF tiene un rango de operacin de 1 a 5Km, respecto al de 1 a 100 m de Bluetooth
ks)
kt) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
http://eprints.ucm.es/8922/1/memoria.pdf
ku) Nivel de Dificultad: Fcil
106.Seleccione los 4 tipos de tramas del nivel fsico (tramas del IEEE 802.15.4) que tiene Zegbee?
kv)
E. Datos, reconocimiento, comandos MAC, piloto.

en:

F. Sinc. Datos, Inicio Comunicacin, Longitud, Comandos, Datos, Control de Redundancia,


Finalizacin de la comunicacion.

G. Direcciones, datos, piloto, comando MAC.


H. Memoria, reconocimiento, comandos MAC, piloto.
kw)
kx) Respuesta: B
ky)
kz) Justificacin: Trama de RF
la) Sinc. Datos,
1 byte
lb) Inicio Comunicacin,
1 byte
lc) Longitud,
1 byte
ld) Comandos,
1 byte
le) Datos,
250 bytes
lf) Control de Redundancia,
2 byte
lg) Finalizacin de la comunicacin1 byte
lh)
li) Fuente: Wireless Control That Simply Works. William C. Craig.
Communications.
lj) Nivel de Dificultad: Fcil
107.A que hace referencia la Trama de datos en RF?
lk)

Program Manager Wireless

E. Sirve para confirmar el xito en la recepcin y para validar las tramas de datos y los comandos
MAC. El campo de control en el frame (Frame Control) indica si se espera un ACK o no.
i)

F. Permite verificar la integridad de los datos llamados FCS (Frame Check Sequence) y se incluye
un nmero de secuencia para permitir el reensamblado y la retransmisin.
j)

G. Esta es una trama que permite el control y la configuracin de los nodos as como la formacin
de la red.
k)

H. Son el direccionar a varios dispositivos para que enven informacin, permitir mantener a los
nodos sincronizados sin tener que escuchar permanentemente el canal
ll)
lm) Respuesta: B
ln)
lo) Justificacin: Se permiten hasta 102 bytes como mximo para datos (n) MAX=102 bytes, se incluyen
2 bytes para verificar la integridad de los datos llamados FCS (Frame Check Sequence) y se incluye
un nmero de secuencia para permitir el reensamblado y la retransmisin.
lp)
lq) Fuente: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
lr) Nivel de Dificultad: Moderado
108.Cules son las principales funciones que garantiza la comunicacin de RF?
ls)
E. Recepcin, tramas de datos y los comandos MAC, indicacin de calidad del enlace, deteccin
de actividad del canal, RX y TX de datos.
l)

F. Datos, FCS (Frame Check Sequence), reensamblado y la retransmisin, desactivacin de nodos,


deteccin de energa.
m)

G. Control y la configuracin de los nodos, deteccin de energa, indicacin de calidad del enlace.
H. Activacin y desactivacin de nodos, deteccin de energa, indicacin de calidad del enlace,
deteccin de actividad del canal, RX y TX de datos.
lt)
lu) Respuesta: D
lv)
lw)Justificacin: Esta es una trama que permite el control y la configuracin de los nodos as como la
formacin de la red. Para ello, el estndar contempla 26 directivas para garantizar principalmente las
siguientes funciones a nivel fsico:
lx)
ly)
lz) Fuente: Zigbee: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
ma) Nivel de Dificultad: Moderado
mb)
109.Seleccione el par de palabras correctas, para completar el siguiente enunciado?
mc)
md) Las bandas ms operadas de RF operan en las bandas libres de 2.4Ghz,
y
me)
E. 868Mhz para Europa y 916Mhz para Estados Unidos

F. 433Mhz 868MHZ para Europa y 915Mhz para Inglaterra.


G. 858Mhz para Europa y 915Mhz para Estados Unidos.
H. 858Mhz para Italia y 916Mhz para Estados Unidos.
mf)
mg) Respuesta: C
mh) Bandas: 433MHz, 868MHz, 915MHz

mi) Fuente: CronisRF. Wavenis


mj) Nivel de Dificultad: Moderado
mk)
ml)
110.Seleccione los equipos o los dispositivos con los que RF trabaja, segn su papel en la vida Real?
mm)
A. Coordinador RF, RF-E, Dispositivo final.

B. RF Coordinador de enlace
C. RF RECEPTOR
D. Variador de Frecuencias (CODIFICADORES Y DECODIFICADORES
mn)
mo) Respuesta: D
mp)
mq) Justificacin: los equipos o los dispositivos con los que se realizan el enlace se mantenga estable
mr)
ms) Fuente: RF Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
mt) Nivel de Dificultad: Moderado

mu)
mv)
mw)
mx)
my)

mz)

na) BIBLIOGRAFA
[1] Online: http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf
[2] Online:http://www.mikroe.com/chapters/view/81/capitulo-3-microcontroladorpic16f887/#c3v1
[3] Online: http://iemicrox.blogspot.com/p/pic16f887.html
[4] Online:http://www.microchip.com/wwwproducts/Devices.aspx?
dDocName=en026561#developmentTools
[5] Microchips,
Data
Sheet
PIC18F2455/2550/4455/4550,

Disponible

en

http://ww1.microchip.com/downloads/en/DeviceDoc/39632e.pdf [En lnea - Pdf]


[6] TecMikro, Bits de configuracion de los microcontroladores PIC, Disponible en:
http://www.programarpicenc.com/libro/bits-de-configuracion-microcontroladorespic.html
[7] Ral Alvarez Torrico, Entendiendo los bits de configuracin en elPIC16 de Microchip,
Disponible

en:

http://tecbolivia.com/index.php/articulos-y-tutoriales-

microcontroladores/34-entendiendo-los-bits-de-configuracion-en-el-pic16-de-microchip
[8] MICROCONTROLADORES II. Manejo de Perifericos (Displays, LCD, Teclado y
EEPROM). Profesor Luis Zurita. Marzo 18/2011.
[9] Online:http://www.slideshare.net/lmzurita/manejo-de-perifericos-paramicrocontroladores-en-c.
nb) [8] Eduardo Santamara (2000-Pag. 35) Electrnica digital y microprocesadores
cuarta edicin, 2000, Pag. 35
nc) [9] Edward V. Ramrez, Melvyn Weiss Introduccin a los microprocesadores
segunda edicin 2006-Pag. 45
nd) [10] Eduardo Santamara (2000-Pag. 35) Electrnica digital y microprocesadores
cuarta edicin, 2000, Pag. 40
ne) [11] Enrique Mandado Prez Sistema integrado para el auto aprendizaje Tercera
Edicin 2002-Pag. 2
nf) [12] J. M. Ordua Huertas, Vicente Arnau Llompart Arquitectura y programacin
de microcontroladores Cuarta Edicin 2001-Pag. 3
ng) [13] Users Staff Microcontroladores Quinta Edicin 2003-Pag. 40
nh) [14] Enrique Mandado Prez Sistema integrado para el auto aprendizaje Tercera
Edicin 2002-Pag. 5
ni) [15] Hwang Briggs Arquitectura de computadoras Editorial Mc Graw Hill.
nj) [16] Fernando E. Valdez, Ramn Pallas Microcontroladores: Fundamentos y
Aplicaciones con PIC Quinta edicin, 2007, Marcombo, Capitulo 3, Pag. 69.
nk) [17] P. de Miguel Fundamentos de los computadores Sptima edicin, 1999,
Paraninfo, Capitulo 5, Pag. 135.
nl) [18] [19] W. Stirling Organizacin y Arquitectura de Computadores Quinta
edicin, 2000, Prentice-Hall, Capitulo 5, Pag. 120.
nm) [20] [21] Gordon Mosquera Christian Roberto, Modulo didctico para el
microcontrolador ATMega, Quieto, 2006

nn)
no) [21] Mikel Etxebarria Isuskiza Microcontroladores PIC: teora y prctica Tercera
Edicin, 2003, Capitulo 4, Pag. 67.
np) [22] [23] V. Garca, Tema del Articulo Trucar un servo Disponible en:
http://www.hispavila.com/3ds/atmega/trucarservo.html
nq) [24] Aeromodelismo, "Motores Brushless",19 de marzo del 2015, Ramn Borroso.
[Online]
Disponible
en:
http://www.aeromodelismofacil.com/Motores
%20brushless.htm
nr) [25] Master Ingenieros, Motor Brushless caractersticas fundamentales, Cartagena,
Universidad Politcnica de Cartagena. [Online]
ns) Disponible en: http:// www.adsnt-recursos-masteringenieros-file-motor (1).pdf
nt) [26] Irving L. Kosow (1 de mayo de 1993). Mquinas elctricas y transformadores.
Pearson Educacin. pp. 429. ISBN 9789688802939. Consultado el 26 de enero de
2011.
nu) [27] Robtica uC- Pic, Sensores [online]
nv) Disponible en: http://www.x-robotics.com/sensores.htm#LM35
nw) [28] K. Soria. Todo lo que tienes que saber sobre: HC-SR04 Sensor
Ultrasnico. Septiembre, 2013. [Online].
nx) Disponible en: http://bkargado.blogspot.com/2013/09/todosobrehc-sr04.html
ny) [29] Sensor de Distancia de Ultrasonido HC-SR04. ELECTRONILAB. Bogot
D.C., Colombia. [Online].
nz) Disponible
en:http://electronilab.co/tienda/sensor-de-distancia-de-ultrasonido-hcsr04/
oa) [30] Jorge Gonzlez Coneo, Sistema de monitoreo en tiempo real para la medicin
de temperatura, 2012. [Online]
ob) Disponible en: http://dialnet.unirioja.es/descarga/articulo/4316534.pdf
oc)
od)
oe)
of)
og)

S-ar putea să vă placă și