Está en la página 1de 261

RESUMEN

1
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 según el Hardware...............................................................................7
Arquitecturas según el Software................................................................................9
Registros de Propósito General y Especiales...............................................................10
• Registros de propósito específico:.........................................................................10
• Registros de propósito general:.............................................................................10
Distribución de Pines...................................................................................................11
Recursos comunes a todos los microcontroladores..................................................11
Recursos especiales de los microcontroladores.......................................................12
PROGRAMACIÓN DE MICROCONTROLADORES PIC..........................................19
Tipos de Datos.............................................................................................................20
Tipo entero (int).......................................................................................................22
Tipo punto flotante (float)........................................................................................22
Tipo carácter (char)..................................................................................................22
Juego de Instrucciones.................................................................................................23
Fusibles e Interrupciones.............................................................................................24
Fusibles....................................................................................................................24
Interrupciones...........................................................................................................29
Funciones para control DIO.........................................................................................41
Interacción Microcontrolador – PC (USART).............................................................82
EJERCICIO 9...........................................................................................................85
EJERCICIO PROPUESTO......................................................................................87
SEGUNDO PARCIAL....................................................................................................88
MODULO CCP...............................................................................................................88

2
INTRODUCCIÓN:......................................................................................................88
SÍNTESIS:...................................................................................................................88
Módulo CCP1..............................................................................................................90
Módulo CCP2:.............................................................................................................90
MODO CAPTURA:....................................................................................................91
MODO COMPARACIÓN:..........................................................................................93
Modo PWM:................................................................................................................95
Funciones CCP en compilador CCS............................................................................97
SENSORES (LM35, ULTRASÓNICO Y TCRT5000)...................................................98
Características de los sensores.....................................................................................99
Sensor LM35 (sensor de temperatura).........................................................................99
SENSOR ULTRASÓNICO.......................................................................................101
SENSOR INFRARROJO..........................................................................................102
Control PWM para Motores DC y AC..........................................................................104
MOTOR DE CORRIENTE CONTINUA.................................................................104
FUNDAMENTOS DE OPERACIÓN DE LOS MOTORES ELÉCTRICOS...........104
COMUNICACIÓN I2C Y SPI......................................................................................107
Introducción...............................................................................................................107
Marco Teórico............................................................................................................107
COMUNICACIÓN SPI (SERIAL PERIPHERAL INTERFACE)................................112
SPI Data Registers (SPIxDH:SPIxDL)......................................................................118
COMUNICACIÓN BLUETOOTH – ZBEEE - RF......................................................120
BLUETOOTH............................................................................................................120
¿Qué es Bluetooth?....................................................................................................122
¿De dónde viene el nombre Bluetooth?.....................................................................123
Objetivos principales de la tecnología Bluetooth......................................................123
Funcionamiento.........................................................................................................123
ZIGBEE.....................................................................................................................124
ESTRUCTURA......................................................................................................126
Características........................................................................................................127
Ventajas..................................................................................................................128
Tipos de Dispositivos.............................................................................................128
Topología................................................................................................................129

3
Seguridad................................................................................................................131
Futuro del Zigbee...................................................................................................132
EJERCICIOS RESUELTOS..........................................................................................133
Código ejercicio 1......................................................................................................133
Código ejercicio 2......................................................................................................136
Código ejercicio 3......................................................................................................139
Código ejercicio 4......................................................................................................141
Código ejercicio 6......................................................................................................144
Código ejercicio 7......................................................................................................146
Código ejercicio 8......................................................................................................148
Código 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 propósito General y Especiales..........................................159
Tema 4.- Distribuciones de pines...........................................................................162
Tema 5.- Características Eléctricas........................................................................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.- Interacción Uc – PC (USART)..............................................................173
Tema 11.- SENSORIZACION (LM35, ULTRASÓNICO Y TCR 5000)..............174
Tema 12.- Control PWM para Motores DC y AC..................................................180
Tema 13.- COMUNICACIÓN I2C Y SPI..............................................................185
Tema 14.- ZIGBEE................................................................................................191
Tema 15.- Bluetooth...............................................................................................196
Tema 16.- RF..........................................................................................................201
BIBLIOGRAFÍA...........................................................................................................205

4
INTRODUCCION
El presente trabajo es una introducción primaria a la programación de
microcontroladores, se referencia las características importantes de dos
microprocesadores de gama media y alta como son el pic16f887 y el pic18f4550.
Un microcontrolador es un dispositivo electrónico capaz de llevar a cabo procesos
lógicos. Estos procesos o acciones son programados en lenguaje ensamblador o lenguaje
c por el usuario, y son introducidos en este a través de un programador.
Este resumen está orientado con información básica de los microcontroladores para la
mejor compresión de las bases teóricas. Así pues además de aprender todo sobre el
mundo del PIC, es necesario saber algo de electrónica y electrónica digital, de lo
contrario todo lo que escriba aquí sobre microcontroladores no será entendible.

5
ARQUITECTURA DE MICROCONTROLADORES
Diferencias entre Microprocesador y Microcontrolador
MICROPROCESADOR
Es un dispositivo electrónico que necesita de todos los periféricos para poder funcionar
correctamente, es decir, tener una motherboard como soporte (con todos los buses que
necesite el microprocesador: bus de dirección, datos, control, etc), tener también el
banco de memoria tanto RAM como ROM y más.
Este microprocesador puede hacer cualquier función que se le ordene dependiendo del
software que lo gobierne.

Figura 1 Microprocesador Fuente: Raúl Álvarez Torrico, Entendiendo los bits de configuración en
elPIC16 de Microchip, Disponible Fuente:
MICROCONTROLADOR
Internamente ya están implementados todos los buses, el banco de memoria, clock,
temporizadores, etc y también está el software que lo gobierna, pero este software es
único y tiene una sola función la cual es para el cual fue diseñado. Es un sistema cerrado
mientras que un microprocesador es un sistema abierto desde este punto de vista, puede
realizar muchísima más funciones ahora.

Figura 2 Microcontrolador Fuente: Raúl Álvarez Torrico, Entendiendo los bits de configuración en elPIC16 de
Microchip, Disponible

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


electrónicos 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 periféricos,
reducción de espacio.

6
El microcontrolador es en definitiva un circuito integrado que incluye todos los
componentes integrados. Debido a su reducido tamaño 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 Séptimo A 2015 - 2016

Arquitectura Interna del microcontrolador PIC y el microcontrolador


ATmega
Arquitecturas según el Hardware
Arquitectura Segmentada
Divide la búsqueda de las instrucciones de manera que cuando se ejecute la instrucción
actual, ya se esté buscando la siguiente. Multiplica la velocidad de ejecución al doble
que la Von Neumann
 Máquina secuencial
 Buses de datos y direcciones compartidos
 Diseño multietapa (Pipeline)
 El diseño multietapa le permite ejecutar más de una operación a la vez
 Se encuentra combinada con software CISC y en pocas ocasiones con RISC
 Más rápida 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 sólo RAM) donde se guardan las instrucciones del programa y los
datos. A dicha memoria se accede a través de un sistema de buses único (control,
direcciones y datos): En un sistema con arquitectura Von Neumann el tamaño 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 más unidades de 8 bits (bytes) de longitud. Si
tiene que acceder a una instrucción o dato de más de un byte de longitud, tendrá que
realizar más de un acceso a la memoria. El tener un único bus hace que el
microprocesador sea más lento en su respuesta, ya que no puede buscar en memoria una
nueva instrucción mientras no finalicen las transferencias de datos de la instrucción
anterior. Las principales limitaciones que nos encontramos con la arquitectura Von
Neumann son: • La limitación 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 limitación de la velocidad de operación a causa del
bus único para datos e instrucciones que no deja acceder simultáneamente a unos y
otras, lo cual impide superponer ambos tiempos de acceso.

Figura 3 Arquitectura Von Neumann

Características
 Máquina secuencial
 Ejecuta solo una operación 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

8
Una de las memorias contiene solamente las instrucciones del programa (Memoria de
Programa), y los otros sólo almacenos datos (Memoria de Datos). Ambos buses son
totalmente independientes lo que permite que la CPU pueda acceder de forma
independiente y simultánea a la memoria de datos y a la de instrucciones. Como los
buses son independientes éstos pueden tener distintos contenidos en la misma dirección
y también distinta lóngitud. 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 Instrucción Set Computer), el set de
instrucciones y el bus de memoria de programa pueden diseñarse de tal manera que
todas las instrucciones tengan una sola posición de memoria de programa de longitud.
Además, al ser los buses independientes, la CPU puede acceder a los datos para
completar la ejecución de una instrucción, y al mismo tiempo leer la siguiente
instrucción a ejecutar. Ventajas de esta arquitectura: • El tamaño de las instrucciones no
esta relacionado con el de los datos, y por lo tanto puede ser optimizado para que
cualquier instrucción ocupe una sola posición 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 según el Software


El tiempo de acceso a las instrucciones puede superponerse con el de los datos,
logrando una mayor velocidad en cada operación.
Se encarga de direccionar la memoria de instrucciones, recibir el código de la
instrucción en curso, su decodificación y la ejecución de la operación que implica la
instrucción, así como la búsqueda 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 número de procesadores usados en los microcontroladores están
basados en la filosofía CISC (Computadores de Juego de Instrucciones Complejo).
Disponen de más de 80 instrucciones máquina en su repertorio, algunas de las cuales
son muy sofisticadas y potentes, requiriendo muchos ciclos para su ejecución. Una
ventaja de los procesadores CISC es que ofrecen al programador instrucciones
complejas que actúan como macros.
 Complex Instruction Set Computer
 Set de instrucciones grande
 Ofrece una amplia gama de operaciones
 Facilita el trabajo de programación
 Reduce el tamaño del código de programa
 Incrementa el costo de aprender la programación

9
RISC: Tanto la industria de los ordenadores como la de los microcontroladores están
decantándose hacia la filosofía RISC (Computadores de Juego de Instrucciones
Reducido). En estos procesadores el repertorio de instrucciones máquina 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 ejecución de una instrucción 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
 Más fácil de aprender el método de programación
 Mayor tamaño del código de programa

SISC: En los microcontroladores destinados a aplicaciones muy concretas, el juego de


instrucciones, además de ser reducido, es “específico”, o sea, las instrucciones se
adaptan a las necesidades de la aplicación prevista. Esta filosofía se ha bautizado con el
nombre de SISC (Computadores de Juego de Instrucciones Específico).
 Combinación de CISC con RISC
 Complex-Reduced Instruction Set Computer

Registros de Propósito General y Especiales


• Registros de propósito específico:
Se utilizan para una tarea determinada.
Están asociados a las unidades funcionales y cumplen funciones específicas: PIC, MDR,
IR, ALUOut, etc.

• Registros de propósito general:


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

10
Distribución 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 día a día.
Fueron los primeros microcontroladores RISC. Serán los empleados en este módulo.
Es preciso resaltar en este punto que existen innumerables familias de
microcontroladores, cada una de las cuales posee un gran número 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 características básicas son muy parecidas. Todos deben disponer de los bloques
esenciales Procesador, memoria de datos y de instrucciones, líneas de E/S, oscilador de
reloj y módulos controladores de periféricos. Sin embargo, cada fabricante intenta
enfatizar los recursos más idóneos 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 según el modelo seleccionado.

Memoria.
En los microcontroladores, la memoria de instrucciones y datos está integrada en el
propio chip. Una parte debe ser no volátil, tipo ROM, y se destina a contener las
instrucciones del programa. Otra parte de la memoria será tipo RAM, volátil, y se
destina a guardar las variables y los datos.

11
La RAM en estos dispositivos es de poca capacidad pues sólo debe contener las
variables y los cambios de información que se produzcan en el transcurso del programa.
Los usuarios de ordenadores están habituados a manejar Megabytes de memoria, pero
los diseñadores 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).
Según el tipo de memoria ROM que dispongan los microcontroladores, la aplicación y
utilización de los mismos es diferente. Se describen las cinco versiones de memoria no
volátil que se pueden encontrar en los microcontroladores del mercado.

Puertos de Entrada/Salida.
Los puertos de entrada/salida de un microcontrolador permiten la comunicación con los
periféricos externos. Además, muchas de las patas que configuran el puerto suelen tener
varias funciones multiplexadas, como por ejemplo ser puerto de E/S y entrada analógica
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
sincronización de todas las operaciones del sistema.
Generalmente, el circuito de reloj está incorporado en el microcontrolador y sólo 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
cerámico (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 acompañado de un incremento del consumo de energía.

Recursos especiales de los microcontroladores.


Cada fabricante oferta numerosas versiones de una arquitectura básica de
microcontrolador. En algunas amplía las capacidades de las memorias, en otras
incorpora nuevos recursos, en otras reduce las prestaciones al mínimo para aplicaciones
muy simples, etc. La labor del diseñador es encontrar el modelo mínimo que satisfaga
todos los requerimientos de su aplicación. De esta forma, se minimizará el coste.
Los principales recursos específicos que incorporan los microcontroladores son:
• Temporizadores o “Timers”.
• Perro guardián o “Watchdog”.
• Protección ante fallo de alimentación o “Brownout”.
• Estado de reposo o de bajo consumo.
• Conversor A/D.
• Conversor D/A.
• Comparador analógico.
• Modulador de anchura de pulsos o PWM.
• Puertos de E/S digitales.
12
• Puertos de comunicación 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 continuación
dicho valor se va incrementando o decrementando al ritmo de los impulsos de reloj o
algún múltiplo hasta que se desborde y llegue a 0, momento en el que se produce una
interrupción.

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 guardián o “Watchdog”
Cuando el ordenador se bloquea por un fallo del software u otra causa, se pulsa el botón
del reset y se reinicia el sistema. Pero un microcontrolador funciona sin el control de un
supervisor y de forma continuada. El Perro guardián consiste en un temporizador que,
cuando se desborda y pasa por 0, provoca un reset automáticamente en el sistema.
Se debe diseñar el programa de trabajo que controla la tarea de forma que refresque o
inicialice al Perro guardián antes de que provoque el reset. Si falla el programa o se
bloquea, no se refrescará al Perro guardián y, al completar su temporización provocará
el reset del micro.
Protección ante fallo de alimentación o “Brownout”
Se trata de un circuito que resetea al microcontrolador cuando el voltaje de alimentación
(VDD) es inferior a un voltaje mínimo (“brownout”). Mientras el voltaje de
alimentación 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 algún acontecimiento externo que le ponga de nuevo en
funcionamiento. Para ahorrar energía los microcontroladores disponen de una
instrucción especial (SLEEP en los PIC), que les pasa al estado de reposo o de bajo
consumo, en el cual los requerimientos de potencia son mínimos. En dicho estado se
detiene el reloj principal y se “congelan” sus circuitos asociados. Al activarse una
interrupción provocada por un evento externo, el microcontrolador se despierta y
reanuda su trabajo.
Conversor A/D
Los microcontroladores que incorporan un Conversor A/D (Analógico/Digital) pueden
procesar señales analógicas cuyo valor oscile entre la tensión de alimentación y el 0
(para otro tipo de señales hará falta una etapa previa de adaptación de la señal). Suelen
disponer de un multiplexor que permite aplicar a la entrada del conversor varias señales
analógicas en distintas patas del circuito integrado.

13
Conversor D/A
Transforma datos digitales en su correspondiente señal analógica, que saca al exterior
por una de las patas del micro. La inclusión de un conversor D/A en un micro es mucho
más rara (y cara) que la de un conversor A/D. La salida analógica tiene una limitación
de corriente y de amplitud, por lo que en muchas ocasiones será necesaria una etapa de
salida (amplificador + potencia).
Comparador analógico
Algunos modelos de microcontroladores disponen internamente de un Amplificador
Operacional que actúa como comparador entre una señal fija de referencia y otra
variable que se aplica por una de las patas del micro. La salida del comparador
proporciona un nivel lógico 1 ó 0 según la señal de entrada sea mayor o menor que la de
referencia. También hay modelos de microcontroladores con un módulo de tensión 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 tensión de ancho variable


(modificable por software), muy usados en la regulación de velocidad de motores y
aplicaciones de electrónica de potencia.
Puertos de E/S digitales
Todos los microcontroladores destinan algunas de sus patas a proporcionar líneas de E/S
digitales. Por lo general, estas líneas se agrupan de ocho en ocho formando Puertos.
Las líneas 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
configuración. Muchos micros tienen la capacidad de generar interrupciones cuando
cambia la entrada de alguna de las líneas. 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 comunicación
Los puertos de comunicación 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 comunicación serie asíncrona.

 USART, adaptador de comunicación serie síncrona y asíncrona

 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 comunicación de los


distintos sistemas de un automóvil.

DIAGRAMA DE BLOQUES
El siguiente es su diagrama circuital por bloques, que se debe entender desde la
electrónica, que es la base del trabajo de programación de los PIC:

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

Fuente: https://es.wikiversity.org/wiki/Estructura_del_microcontrolador
La distribución de pines es la siguiente, así es como se ve por fuera y cada pin tiene una
o más funciones asignadas, cada vez que se utiliza una función 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 función al tiempo, así en la etapa de planeación del proyecto se debe
definir que función utilizar para cada pin, de las que este está en habilidad de
desempeñar.
Eficiencia del código: permiten una gran compactación de los programas.
Rapidez de ejecución: a frecuencia de 20MHz->5 millones de instr./seg.
Seguridad en acceso por la separación de memoria de datos y de programa.
Juego reducido de instrucciones y de fácil aprendizaje.
Compatibilidad de pines y código entre dispositivos de la misma familia o sin reducción
de las prestaciones internas (muy versátiles).

15
Gran variedad de versiones en distintos encapsulados (desde 8 hasta 84 pines) sin
reducción de las prestaciones internas (muy versátiles).
Posibilidad de protección del código muy fiable.
Herramientas de desarrollo software y hardware abundantes y de bajo coste.
Pines de configuración

Figura 7 Distribución de pines del PIC 16F887 Fuente: Datasheet

16
Figura 8 Distribución de pines del PIC 16F887 Fuente: Datasheet

17
Figura 9 Distribución de pines del PIC 16F887 Fuente: Datasheet

18
PROGRAMACIÓN DE MICROCONTROLADORES PIC
Programación en Asambler

Definición:

Los lenguajes de programación 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 más bajo de programación es tratar directamente con el microprocesador, el
cual trabaja en código binario. El lenguaje ensamblador es la codificación que permite
trabajar a este nivel de programación, las instrucciones escritas en código binario se
conocen con el nombre de código de máquina.
El lenguaje ensamblador es una codificación especial que permite agrupar comandos
cortos y con cierto sentido este código de máquina. Cada comando se lo conoce como
mnemónico. [2]
Estructura del lenguaje Ensamblador

En su formato más simple consta de dos partes:

- Código de Operación
- Parámetros del Comando

Comando destino, origen


ADD 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 más rápidas en


comparación a las creadas en compilador.
- Las rutinas pueden tener un tamaño menor en comparación a las
creadas por compilador, ya que puede hacerse para cumplir un algoritmo
específico que no tenga necesidad de validaciones redundantes.
- Permite programar características 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 cómo trabajan las computadoras
y los dispositivos electrónicos programables. [2]

[2]: Steren, ABC de la Mecatrónica, México.

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
(información) 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 línea se puede declarar más de una variable siguiendo el siguiente
formato:
Tipo nombre_variable1, nombre_variable2,....;
Hay que tener en cuenta que la línea 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 básicos que utiliza nuestro compilador son los siguientes:

Figura 10 Tipo de Datos Fuente: Programación en C

Sin embargo el compilador CCS también admite los siguientes tipos de datos definidos
en el estándar C y que son los que normalmente se utilizan a la hora de programar:

Figura 11 Tipo de Datos C Fuente: Programación 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
básico.
20
Estos son los tipos básicos, también están los tipos de datos compuestos como
Enumeraciones, Estructuras y Uniones que están formados por una combinación de los
básicos y que los veremos más 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 números: 0-9 y el símbolo de
subrayado. Además hay que tener en cuenta que el primer carácter no puede ser un
número.

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 tamaño de dato
(número de bytes requerido en la memoria) y su representación. Hay varios tipos de
datos que se pueden utilizar en el lenguaje de programación miPiC dependiendo del
tamaño 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 básica.

TIPO DE DESCRIPCIÓN TAM A Ñ O RANGO DE


D ATO (NÚMERO D E VAL O R E S
BITS)
char Texto (caracteres) 8 de 0 a 255
int Valores enteros 16 de -32768 a 32767
float Valores en punto flotante 32 de
±1.17549435082·10-38
a
±6.80564774407·1038
double Valores en punto flotante 32 de
de doble precisión ±1.17549435082·10-38
a
±6.80564774407·1038
Tabla 1 Rango de Valores

Al añadir un prefijo (calificador) a cualquier tipo de dato entero o carácter, el rango de


sus posibles valores cambia así como el número 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 sólo positivo. Note que el prefijo es
opcional.

TIPO T I P O D E D ATO TAM A Ñ O RANGO DE


DE CON PREFIJO (NÚMERO D E VAL O R E S
D ATO BITS)

21
char signed char 8 de -128 a 128
int unsigned int 16 de 0 a 65535
short int 8 de 0 a 255
signed short int 8 de -128 a 127
long int 32 de 0 a 4294967295
signed long int 32 de -2147483648 a
2147483647
Tabla 2 Prefijo de Dato

Tipo entero (int)


Un entero es un número sin parte fraccionaria que puede estar expresado en los
siguientes formatos:
Hexadecimal (base 16): el número empieza con 0x (o 0X). Los enteros hexadecimales
consisten en los dígitos (de 0 a 9) y/o las letras (A, B, C,D, E, F). Por ejemplo: ‘0x1A’.
Decimal (base 10): el número consiste en los dígitos (de 0 a 9). El primer dígito no
puede ser 0. En este formato, se puede introducir el signo de número (‘+’ o ‘-’). Por
ejemplo: 569, -25, +1500.
Octal (base 8): los números se representan a base 8 utilizando sólo 8 dígitos (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 números 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 carácter (char)


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

Juego de Instrucciones
El juego de instrucciones para los microcontroladores 16F8XX incluye 35 instrucciones
en total. La razón para un número 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 código. Lo
malo de la arquitectura RISC es que se espera del programador que haga frente a estas
instrucciones. Por supuesto, esto es relevante sólo si se utiliza el lenguaje ensamblador
para la programación.

Figura 12 Instrucciones Asambler

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

23
Fusibles e Interrupciones
Fusibles
Armando A. Cuéllar, Aizol Z. Izaguierreen (2008-Pag. 182)
“Los bit's de configuración o más comúnmente llamados "fusibles" permiten
configurar ciertas funciones en los microcontroladores PIC, como el tipo de
cristal para el oscilador, permiten proteger el código en el micro, entre muchas
funciones.”
Fernando E. Valdez, Ramón 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 parámetros importantes del sistema, a
diferencia de los registros de configuración, estos fusibles están relacionados con
aspectos más básicos e importantes en el funcionamiento del sistema. Además,
su configuración queda grabada en memoria Flash, de forma tal que no se pierda
al cortar la alimentación al microcontrolador.”
Definición 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 código en el micro, estos fusibles se encuentran relacionados
con funcionamiento del sistema.
Fusibles de configuración
Los bits de configuración o más comúnmente llamados "fusibles" permiten configurar
ciertas funciones en los microcontroladores PIC, como el tipo de cristal para el
oscilador, permiten proteger el código 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
protección de código, habilitar el perro guardián, 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 descripción de los fusibles se encuentra en
tabla 3.

24
Descripción de los fusibles
NOMBRE DESCRIPCION
DEBUG :Debug in Circuit Debugger Mode bit
1: In Circuit Debugger Disabled RB6/ICSPCLK and RB6/ICSPDAT are
general purpose I/O Pins
DEBUG 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
LVP 0: RB3 pin is digital I/O, HV on MCLR must be for programming.
FCMEN :Fail –Safe Clock Monitor Enabled Bit
FCMEN 1: Fail –Safe Clock Monitor is Enabled
0: Fail –Safe Clock Monitor is disabled
IESO :Internal- External Switchover bit
IESO 1: Fail – Internal- External Switchover bit is enabled
0: Fail – Internal- External Switchover bit is deseabled
BOREN: ⟨ 1 :0 ⟩ : Brown−Out Reset Selectionbits
11: BOR enabled
10: BOR enabled during operation and disabled in Sleep
BOREN 01: BOR controlled by SBOREN bit of the PCON Register
00: BOR disabled

´ : Data Code Protection bit (2 )


CPD
´
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
´
CD 0: Program memory code protection is enabled

MCLRE:RE3/ MCLR ´ pin function selected bit (4 )


MCLRE ´ pin function is MC´ LR
1: RE3/ MCLR
´ pin function is
0:RE3/ MCLR digital input,
´
MCLRinternally tried ¿VDD
´
PWRTE : Power –Up Timer Enabled bit
´
PWRTE 1: PWRT disable
0: PWRTE enable
WDTE: Watchdog Timer Enable bit
1: WDT enabled
WDTE 0: WDT disabled and can be enabled by SWDTEN bit of the WDTCON
register

25
FOSC ⟨ 2 :0 ⟩ :Oscillator Selection Bits
111: RC oscillator CLKOUT function on RA6/OSC2/CLKOUT Pin, RC
FOSC 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 Descripción Fusibles

Ejemplos
# FUSES LP Low Power
# FUSES XT Cristal Oscilator ≤ 4Mhz.
# FUSES HS High Speed Oscilator >4Mhz.
# FUSES RC Montaje Resistencia Condensador.
# FUSES WDT Watch Dog Timer Activo
# FUSES NOWDT No Watch Dog Timer.
# FUSES PROTECT Proteccion de Lectura.
# FUSES NOPROTECT No Proteccion de Lectura.
# FUSES PUT 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 Selección del Define la función de los terminales A6 y
Oscilador.) A7. Ya sea como puertos I/O, como pines

26
para cristal externo o para recibir o emitir
señales 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 Protege la memoria de programa contra


Self Write Enable bits o bits de escritura de la siguiente manera:
habilitación de auto escritura de la 00: 0000h to 0FFFh
memoria flash de programa.) 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 Guardián) 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 alimentación
Alimentación) de la aplicación 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 DESCRIPCION
CCP2 MUX bit El bit de configuración CCP2 MUX
determina qué pin CCP2 es multiplexado.
Por defecto, se le asigna a RC1 (CCP2MX
= 1) y si el bit de configuración se borra,

27
CCP2 se multiplexa con RB3.
System Clock Postscaler Selection Este fusible es el encargado de hacer la
división de frecuencia tanto de la señal 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
función 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 función habilita o no la conversión
Analógica-Digital.
VREGEN: USB Internal Voltage Habilita o deshabilita la utilización del
Regulator Enable bit (Modifica el regulador interno del Vbus para el USB.
voltaje del USB)
USBDIV: USB Clock Selection bit Permite realizar una configuración para el
oscilador, configura de donde proviene la
velocidad de reloj para el Módulo USB.
WDTPS3: WDTPS0:Watchdog Timer Selección de bits para la configuración 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


configuración del Timer 1, ya que este
puede funcionar en dos diferentes niveles
de consumo de energía
Tabla 6 Fusibles 18F4550

Fusibles PIC16F887 y PIC18F4550


FUSIBLES DESCRIPCION INSTRUCCIONES PARA
ACTIVAR/DESACTIVAR

28
MCLRE (Master Resetea el microcontrolador #FUSES MCLR
Clear)

FCMEN (Fail-Safe Visualiza los fallos ocurridos #FUSES FCMEN


Clock Monitor Enable en el pic
Bit)

IESO
(Internal/External Conmutación interno externo #FUSES IESO
Oscillator Switchover #FUSES NOIESO
Bit)

CPD (Data Eeprom Protege el código del #FUSES NOCPD


Code Protection Bit) microcontrolador #FUSES CPD

DEBUG (Background Depuración para icd (serie) #FUSES NODEBUG


Debugger Enable Bit) #FUSES DEBUG

FOSC Oscillator Selection Bits


 HS  High-Speed
 LP Crystal/Resonator
 XT  Oscillator: Low-Power #FUSES HS_OSC
 EC Crystal On #FUSES XT_OSC
 Crystal/Resonator #FUSES LP_OSC
 External Clock With #FUSES EC_OSC
Fosc/4 Output
Establece la oscilación del
circuito

LVP (Low-Voltage Establece la programación en #FUSES NOLVP


Icsp Programming) baja tensión de programación #FUSES LVP
en b3 (pic16) o b5 (pic18)

WDT Rompe los bucles infinitos #FUSES NOWDT


(Watchdog Timer) #FUSES WDT

Tabla 7 Fusibles PIC16F887 y PIC18F4550

29
Interrupciones
Armando A. Cuéllar, Aizol Z. Izaguierreen (2008-Pag. 201)
“Las interrupciones permiten a cualquier suceso interior o exterior interrumpir la
ejecución del programa principal en cualquier momento. En el momento de
producirse, el PIC ejecuta un salto a la rutina de atención a la interrupción
previamente definida por el programador, donde se atenderá a la demanda de la
interrupción.”
Fernando E. Valdés Pérez, Ramón P. Areny (2007-Pag. 217)
“Una solicitud de interrupción o simplemente una interrupción es un evento de
origen interno o externo que, si es atendido, hace que el microcontrolador
interrumpa la ejecución 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 ejecución, el microcontrolador
continua con las instrucciones del programa interrumpido, justo con la
instrucción que sigue a la que se estaba ejecutando cuando se produjo la
solicitud de interrupción.”
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 atención a interrupción. Cuando el
microcontrolador recibe una señal de interrupción, el contador de programa
apunta a la dirección 04H de la memoria de programa, por eso, allí se debe
escribir toda la programación necesaria para atender dicha interrupción.#
Definición Grupal:
Permiten interrumpir la ejecución 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 atención a la interrupción 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, asincrónico
respecto del programa, puede interrumpir la ejecución de éste produciendo
automáticamente un salto a una subrutina de atención, de manera que pueda atender
inmediatamente el evento, y retomar luego la ejecución 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 periódicamente (refresh de display, antirebote de teclado, etc.), detección de
pulsos externos, recepción 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 más 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
interrupción se produce el mismo efecto que ocurriría si el programa tuviese un CALL
0004h en el punto en que se produjo la interrupción.
En uno de los registros de control del sistema de interrupciones existe un bit de
habilitación general de interrupciones GIE, que debe ser programado en 1 para que las
interrupciones puedan actuar. Al producirse una interrupción, este bit se borra
automáticamente para evitar nuevas interrupciones.
La instrucción RETFIE que se utiliza al final de la rutina de interrupción, es idéntica a
un retorno de subrutina, salvo que además coloca en uno automáticamente el bit GIE
volviendo a habilitar las interrupciones.
Dentro de la rutina de interrupción, el programa, Deberá probar el estado de los flags de
interrupción de cada una de las fuentes habilitadas, para detectar cual fue la que causo la
interrupción y así decidir qué acción tomar.
Interrupciones
Ejemplos:

Interrupciones Descripción
#INT_AD Conversión AD completa.
#INT_ADOF Conversión AD fuera de rango de tiempo
#INT_BUSCOL Colisión de bus
#INT_BUTTON Por botón (14000)
#INT_CAERR Erro en el módulo CAN

31
#INT_CANIRX Mensaje invalido n el bus CAN
#INT_CANRX0 Bus CAN recibe un nuevo mensaje en buffer 0
#INT_CANRX1 Bus CAN recibe un nuevo mensaje en buffer 1
Interrupciones Descripción
#INT_AD Conversión AD completa.
#INT_ADOF Conversión AD fuera de rango de tiempo
#INT_BUSCOL Colisión de bus
#INT_BUTTON Por botón (14000)
#INT_CAERR Erro en el módulo CAN
#INT_CANIRX Mensaje invalido n el bus CAN
#INT_CANRX0 Bus CAN recibe un nuevo mensaje en buffer 0
#INT_CANRX1 Bus CAN recibe un nuevo mensaje en buffer 1
Tabla 8 Ejemplos de interrupciones

Interrupciones INT del microcontrolador PIC


La interrupción externa en el pin RB0/INT se activa por flanco ascendente o
descendente, dependiendo del bit INTEDG del registro OPTION_REG. Cuando aparece
una transición válida en el pin RB0/INT, la bandera INT0IF del registro INTCON toma
un valor de 1. Esta interrupción 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 interrupción. La interrupción 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 interrupción, lo
cual hace que el bit TMR0IF del registro INTCON sea igual a 1. La generación de esta
interrupción 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
interrupción. Esta interrupción 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 interrupción y
hace que la bandera RBIF del registro INTCON tome un valor de 1. Esta interrupción
puede habilitarse/deshabilitarse con el bit RBIE del registro INTCON. Únicamente los
pines configurados como entradas pueden producir esta interrupción. Los pines de
entrada RB<7:4> se comparan con el estado anterior que tenían en la última lectura del
puerto B. Si no hay coincidencia en todos los pines, se genera la interrupción.

32
Interrupciones RBI (Interrupciones por cambio de estado)
Cuatro pines del PORTB (RB7:RB4) son capaces de disparar una interrupción por
cambio de estado. Este tipo de interrupciones son comúnmente usadas para el manejo de
teclados matriciales, de ahí que estos pines también los denominen KBI0:KBI3
De estos 4 pines, solo producirán interrupción aquellos configurados como entradas, si
alguno está configurado como salida, queda excluido de la interrupción por cambio de
estado.
Interrupciones PIC16F887
Registro INTCON
El registro INTCON contiene varios bits de habilitación 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) Después del reinicio, el bit se pone a cero
(x) Después del reinicio, el estado de bit es desconocido
Interrupciones PIC16F887

INTERRUPCIÓN DESCRIPCIÓN
GIE - Global Interrupt Enable bit Bit de habilitación de interrupciones
globales
Controla simultáneamente todas las fuentes
de interrupciones posibles.
1= Habilita las interrupciones no
enmascaradas.
0= Deshabilita las interrupciones no
enmascaradas.

Bit de habilitación de interrupciones


PEIE - Perip=heral Interrupt Enable periféricas
bit Es similar al bit GIE, sin embargo controla
interrupciones habilitadas por los
periféricos. 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 periféricas
no enmascaradas.
0= Deshabilita las interrupciones
periféricas no enmascaradas.

Bit de habilitación de interrupciones por el


T0IE - TMR0 Overflow Interrupt desbordamiento del temporizador Timer0
Enable controla interrupciones causadas por el
desbordamiento del Timer0.
1= Habilita interrupciones por Timer0.
0= Deshabilita interrupciones por Timer0.
Bit de habilitación de la interrupción
INTE - RB0/INT External Interrupt externa en RB0
Enable bit Controla interrupciones causadas por el
cambio del estado lógico en el pin de
entrada RB0/INT (interrupción externa).
1= Habilita interrupciones externas INT.
0= Deshabilita interrupciones externas INT.

Bit de habilitación de interrupciones por


RBIE - RB Port Change Interrupt cambios en el puerto PORTB.
Enable bit Cuando se configuran como entradas, los
pines en el puerto PORTB pueden causar
una interrupción al cambiar el estado lógico
(no importa si se produce bajada o subida
de tensión, lo que importa es que se
produce un cambio). Este bit determina si
una interrupción 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 interrupción por el


T0IF - TMR0 Overflow Interrupt Flag desbordamiento del Timer0
bit 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.

Bit de bandera de interrupción externa en


INTF - RB0/INT External Interrupt INT. Detecta el cambio en el estado lógico
Flag bit en el pin INT.
1= Ha ocurrido una interrupción externa
por INT (esta bandera debe volverse a 0
por software)
0= No ha ocurrido una interrupción externa
por INT.

Bit de bandera de interrupción por cambio


RBIF - RB Port Change Interrupt Flag en el puerto RB
bit Detecta cualquier cambio del estado lógico
de alguno de los pines de entrada en el
puerto PORTB.
1= Al menos uno de los pines de E/S de
propósito general en el puerto PORTB ha
cambiado de valor. Después de leer el
puerto PORTB, el bit RBIF debe volverse a
0 por software.
0= Ninguno de los pines de E/S de
propósito general en el puerto PORTB ha
cambiado de valor.
Tabla 10 Interrupciones PIC16F887

Registro PIE1
El registro PIE1 contiene los bits de habilitación de interrupciones periféricas.

R/W( R/W( R/W( R/W( R/W( R/W(0 R/W(0 Característi


0) 0) 0) 0) 0) ) ) cas
PIE - ADIE RCIE TXIE SSPI CCP1 TMR2 TMR1 Nombre de
1 E IE IE IE bit
Bi Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
t
7
Tabla 11 Registro

Bit no implementado
R/W Bit de lectura/escritura

35
(0) Después del reinicio, el bit se pone a cero

INTERRUPCIONES DESCRIPCIÓN

ADIE - A/D Converter Interrupt Bit de habilitación de interrupciones del


Enable bit convertidor A/D.
1 - Habilita la interrupción ADC.
0 - Deshabilita la interrupción ADC.

RCIE - EUSART Receive Interrupt Bit de habilitación de interrupciones de


Enable bit recepción del EUSART.
1 - Habilita la interrupción de recepción
del EUSART.
0 - Deshabilita la interrupción de
recepción del EUSART.

Bit de habilitación de interrupciones de


TXIE - EUSART Transmit Interrupt transmisión del EUSART.
Enable bit 1 - Habilita la interrupción de transmisión
del EUSART.
0 - Deshabilita la interrupción de
transmisión del EUSART.

Bit de habilitación de la interrupción de


TMR2IE - TMR2 to PR2 Match igualdad entre TMR2 y PR2.
Interrupt Enable bit 1 - Habilita la interrupción de igualdad
entre TMR2 y PR2.
0 - Deshabilita la interrupción de igualdad
entre TMR2 y PR2.

Bit de habilitación de la interrupción de


TMR1IE - TMR1 Overflow Interrupt desbordamiento del temporizador Timer1
Enable bit Habilita generar una petición de
interrupción después de cada
desbordamiento en el registro del
temporizador Timer1, o sea el contador se
pone a cero.
1 - Habilita la interrupción de
desbordamiento del temporizador Timer1.
0 - Deshabilita la interrupción de
desbordamiento del temporizador Timer1.

Bit de habilitación de la interrupción del


CCP1IE - CCP1 Interrupt Enable bit módulo 1 de Comparación/Captura/PWM

36
- CCP1
Permite generar una petición de
interrupción en el módulo CCP1 utilizado
para procesamiento de la señal PWM.
1 - Habilita la interrupción CCP1.
0 - Deshabilita la interrupción CCP1.

Bit de habilitación de la interrupción del


SSPIE - Master Synchronous Serial puerto serie síncrono maestro (MSSP)
Port (MSSP) Interrupt Enable bit Habilita generar una petición de
interrupción después de cada transmisión
de datos por el módulo de comunicación
serie síncrona (modo SPI o I2C).
1 - Habilita la interrupción del MSSP.
0 - Deshabilita la interrupción del MSSP.

Tabla 12 Interrupciones PIC16F887

Registro PIE2:
El registro PIE2 también contiene varios bits de habilitación de interrupciones.

R/W( R/W( R/W( R/W( R/W( R/W(0) Característ


0) 0) 0) 0) 0) icas
PI OSFI C2IE C1IE EEIE BCLI ULPW - CCP2 Nombre de
E2 E E UIE IE Bit
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit Bit0
1
Tabla 13 Registro

Tabla 11. Interrupciones PIC18F4550

Interrupciones PIC16F887 y 18F4550


INTERRUPCION PARAMETROS FUNCION

INTCON 16f887 El registro INTCON


(registro de control de INTCON contiene varios bits de
interrupción) habilitación y de bandera
18F4550 para el desbordamiento en
INTCON, INTCON2, el registro TMR0, e
INTCON3 interrupciones por el cambio
del estado en el puerto
PORTB y las interrupciones
externas en el pin INT
GIE Global Interrupt Interrupción externa Controla simultáneamente
Enable bit (bit de 1 - Interrupciones todas las fuentes de
habilitación de habilitadas a nivel interrupciones posibles.

37
interrupciones globales) global
GIEH(Interrupciones de alta 0 - Interrupciones
prioridad) deshabilitadas a nivel
global.
PEIE Interrupción externa Es similar al bit GIE, sin
Peripheral Interrupt Enable 1 - Interrupciones de embargo controla
bit (bit de habilitación de periféricos interrupciones habilitadas
interrupciones periféricas) deshabilitadas a nivel por los periféricos. No
GIEL (Interrupciones de global influye interrupciones
baja prioridad) 0 - Interrupciones de causadas por el
periféricos habilitadas a temporizador Timer0 o por
nivel global. el cambio del estado en el
puerto PORTB o por el
cambio en el pin RB0/INT.
T0IE - TMR0IE Interrupción externa Controla interrupciones
TMR0 Overflow Interrupt 1 - Habilita causadas por el
Enable bit (bit de interrupciones por desbordamiento del Timer0
habilitación de Timer0.
interrupciones por el 0 - Deshabilita
desbordamiento del interrupciones por
temporizador Timer0) Timer0.

INTE Interrupción externa Controla interrupciones


External Interrupt Enable 1 - Habilita causadas por el cambio del
bit (bit de habilitación de la interrupciones externas estado lógico en el pin de
interrupción externa) INT. entrada RB0/INT en el caso
0 - Deshabilita del 16F887, en el caso del
interrupciones externas 18F4550 los pines de
INT. entrada con BR0, RB1, RB2

RBIE Interrupción externa Cuando se configuran como


RB Port Change Interrupt 1 - Habilita entradas, los pines en el
Enable bit (bit de interrupciones por puerto PORTB pueden
habilitación de cambio en el puerto causar una interrupción al
interrupciones por cambios PORTB. cambiar el estado lógico.
en el puerto PORTB) 0 - Deshabilita Este bit determina si una
interrupciones por interrupción va a ocurrir.
cambio en el puerto
PORTB.

TMR0 Overflow Interrupt 1 - En el registro del Detecta el desbordamiento


Flag bit (bit de bandera de Timer0 ha ocurrido en el registro del
interrupción por el desbor desbordamiento (esta temporizador Timer0, es
damiento del Timer0) bandera debe volverse decir el contador se pone a

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

INTF- INT0IF Interrupción externa Detecta el cambio en el


External Interrupt Flag 1 - Ha ocurrido una estado lógico en el o los
bit (bit de bandera de interrupción externa pines INT
interrupción externa en INT) por INT (esta bandera
debe volverse a 0 por
software)
0 - No ha ocurrido una
interrupción externa
por INT.

RBIF 1 - Al menos uno de los Detecta cualquier cambio


RB Port Change Interrupt pines de E/S de del estado lógico de alguno
Flag bit (Flag de la propósito general en el de los pines de entrada en el
interrupción por cambio en puerto B ha cambiado puerto PORTB.
el Puerto B) de valor. (Después de
leer el puerto B, el bit
RBIF debe volverse a 0
por software).
0 - Ninguno de los
pines de E/S de
propósito general en el
puerto B ha cambiado
de valor.

ADIE 1 - Habilita la Habilita las interrupciones


A/D Converter Interrupt interrupción ADC. del convertido A/D
Enable bit (bit de 0 - Deshabilita la
habilitación de interrupción ADC.
interrupciones del
convertidor A/D)
RCIE 1 - Habilita la Habilita las interrupciones
EUSART Receive Interrupt interrupción de de recepción síncrona
Enable bit (bit de recepción del EUSART
habilitación de EUSART.
interrupciones de recepción 0 - Deshabilita la
del EUSART) interrupción de
recepción del
EUSART.

39
TXIE 1 - Habilita la Habilita las interrupciones
EUSART Transmit Interrupt interrupción de de transmisión síncrona
Enable bit (bit de transmisión del EUSART
habilitación de EUSART.
interrupciones de 0 - Deshabilita la
transmisión del EUSART) interrupción de
transmisión del
EUSART.

SSPIE 1 - Habilita la Habilita generar una


Master Synchronous Serial interrupción del MSSP. petición de interrupción
Port (MSSP) Interrupt 0 - Deshabilita la después de cada transmisión
Enable bit (bit de interrupción del MSSP. de datos por el módulo de
habilitación de la comunicación serie síncrona
interrupción del puerto serie (modo SPI o I2C).
síncrono maestro (MSSP)
CCP1IE 1 - Habilita la Permite generar una
CCP1 Interrupt Enable interrupción CCP1. petición de interrupción en
bit (bit de habilitación de la 0 - Deshabilita la el módulo CCP1 utilizado
interrupción del módulo 1 de interrupción CCP1. para procesamiento de la
Comparación/Captura/PW señal PWM.
M - CCP1)
TMR2IE 1 - Habilita la Habilita una interrupción si
TMR2 to PR2 Match interrupción de TMR2 y PR2 son iguales
Interrupt Enable bit (bit de igualdad entre TMR2 y
habilitación de la PR2.
interrupción de igualdad 0 - Deshabilita la
entre TMR2 y PR2) interrupción de
igualdad entre TMR2 y
PR2.

TMR1IE 1 - Habilita la Habilita generar una


TMR1 Overflow Interrupt interrupción de petición de interrupción
Enable bit (bit de desbordamiento del después de cada
habilitación de la temporizador Timer1. desbordamiento en el
interrupción de 0 - Deshabilita la registro del temporizador
desbordamiento del interrupción de Timer1, es decir el contador
temporizador Timer1) desbordamiento del se pone a cero.
temporizador Timer1.

Oscillator Fail Interrupt 1 - Habilita la Habilita la interrupción si se


Enable bit (bit de interrupción de fallo en produce algún tipo de fallo
habilitación de la el oscilador. en el oscilador
interrupción de fallo en el 0 - Deshabilita la

40
oscilador) interrupción de fallo en
el oscilador.

EEIE 1 - Habilita la Habilita las interrupciones


EEPROM Write Operation interrupción de de escritura en la memoria
Interrupt Enable bit (bit de escritura en la memoria EEPROM
habilitación de la EEPROM.
interrupción de escritura en 0 - Deshabilita la
la memoria EEPROM) interrupción de
escritura en la memoria
EEPROM.

BCLIE 1 - Habilita la Habilita la interrupción si se


Bus Collision Interrupt interrupción de colisión produce una colisión en el
Enable bit (bit de de bus. bus
habilitación de la 0 - Deshabilita la
interrupción de colisión de interrupción de colisión
bus) de bus.

CCP2IE 1 - Habilita la Habilita la interrupción del


CCP2 Interrupt Enable bit interrupción del CCP2. módulo 2 de
(bit de habilitación de la 0 - Deshabilita la Comparación/Captura/PW
interrupción del módulo 2 de interrupción del CCP2. M
Comparación/Captura/PW
M (CCP2)
INTEDG Interrupción externa Ejecuta interrupciones
Interrupt Edge Select bit (bit 1 - Interrupción por externas en dependencia del
selector de flanco activo de la flanco ascendente flanco activo que se
interrupción externa) 0 - Interrupción por configure (subida o bajada)
flanco descendente
16f887
Una sola interrupción
INTEDG
18F4550
Tres interrupciones:
INTEDG0, INTEDG1,
INTEDG2
Tabla 14 PIC16F887 y 18F4550

41
Funciones para control DIO
CREACIÓN DE UN PROGRAMA USANDO PIC WIZARD
García Breijo Eduardo (2008, Pág. 46) Menciona que:
“PIC Wizard: Es un comando que nos proporciona un asistente para la creación
de proyectos, permitiendo al usuario especificar los parámetros 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 código resultante de la configuración. Recorriendo las distintas
opciones se llega a obtener el código de configuración deseado, tras lo cual ya
podemos empezar a escribir el resto del código del programa. Debemos tener en
cuenta que se incluye un fichero de cabecera *.h donde se encuentra la
configuración del dispositivo. ” [ 1 ]
Para la creación de un programa usando PIC Wizard debemos seguir los siguientes
pasos:
1. En la barra de menús 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 configuración Fuente: PCW

 La lista en el lado izquierdo muestra todos los módulos y otras características


que se pueden modificar para el proyecto actual.
 La pestaña Opciones en el lado derecho de la ventana muestra los ajustes que se
pueden modificar para el módulo seleccionado.
 La ficha Código mostrará el código generado a partir de la configuración del
módulo actual.

43
EJERCICIO 1
1.1. Tema:

SECUENCIA DE LEDS_MODIFICADO

1.2. Objetivo :

Realizar una el desplazamiento de leds mediante la programación en MPLAB


utilizando la programación en lenguaje C.

1.3. Descripción :

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. Código comentado:

; PIC16F887 Configuration Bit Settings ; CONFIG1


LIST P=16F887 ; __config 0xE0D2
#include "p16F887.inc"

44
__CONFIG _CONFIG1, _FOSC_HS & CLRF PORTC
_WDTE_ON & _PWRTE_OFF & _MCLRE_OFF & CLRF PORTD
_CP_OFF & _CPD_OFF & _BOREN_OFF & CLRF PORTE
_IESO_OFF & _FCMEN_OFF & _LVP_OFF CLRF AUX1
; CONFIG2 CLRF AUX2
; __config 0xFFFF MOVLW 0X00
__CONFIG _CONFIG2, _BOR4V_BOR40V &
_WRT_OFF INICIO BTFSC PORTE,0
CALL REV1
CNT1 EQU 0X20 ; asigna la variable cont1 BTFSC PORTE,1
CNT2 EQU 0X21 CALL ARRIBA
CNT3 EQU 0X22 CALL APAGADO
AUX1 EQU 0X23 GOTO INICIO
AUX2 EQU 0X24
ORG 0 REV1
GOTO CONFIGURACION ; salta a la BTFSC PORTE,1
configuración CALL CENTRO
ORG 5 CALL ABAJO
GOTO INICIO
DELAY1 ; crea la variable delay
MOVLW 0x01 ;carga en W el valor de 1 ARRIBA
MOVWF CNT1 ;mueve cont1 a W MOVLW B'00000001'
DELAY2 MOVWF TRISC
MOVLW 0xFF CALL DELAY1
MOVWF CNT2 MOVLW B'00000010'
DELAY3 MOVWF TRISC
MOVLW 0XFF CALL DELAY1
MOVWF CNT3 MOVLW B'00000100'
START MOVWF TRISC
DECFSZ CNT3 CALL DELAY1
GOTO START MOVLW B'00001000'
DECFSZ CNT2 MOVWF TRISC
GOTO DELAY3 CALL DELAY1
DECFSZ CNT1 MOVLW B'00010000'
GOTO DELAY2 MOVWF TRISC
RETURN CALL DELAY1
MOVLW B'00100000'
CONFIGURACION MOVWF TRISC
BSF STATUS, RP0 CALL DELAY1
MOVLW B'00000000' MOVLW B'01000000'
MOVWF TRISA MOVWF TRISC
MOVLW B'00000000' CALL DELAY1
MOVWF TRISB MOVLW B'10000000'
MOVLW B'00000000' MOVWF TRISC
MOVWF TRISC CALL DELAY1
MOVLW B'00000000' GOTO INICIO
MOVWF TRISD ABAJO
MOVLW B'11111111' MOVLW B'10000000'
MOVWF TRISE MOVWF TRISC
MOVLW B'110' CALL DELAY1
MOVWF OSCCON MOVLW B'01000000'
BSF STATUS, RP1 MOVWF TRISC
CLRF ANSEL CALL DELAY1
CLRF ANSELH MOVLW B'00100000'
BCF STATUS, RP0 MOVWF TRISC
BCF STATUS, RP1 CALL DELAY1
CLRF PORTA MOVLW B'00010000'
CLRF PORTB MOVWF TRISC

45
CALL DELAY1 CALL DELAY1
MOVLW B'00001000' MOVLW B'11111111' ; fin de encendido todos
MOVWF TRISC los leds
CALL DELAY1 MOVWF TRISC
MOVLW B'00000100' CALL DELAY1
MOVWF TRISC MOVLW B'01111111'
CALL DELAY1 MOVWF TRISC
MOVLW B'00000010' CALL DELAY1
MOVWF TRISC MOVLW B'00111111'
CALL DELAY1 MOVWF TRISC
MOVLW B'00000001' CALL DELAY1
MOVWF TRISC MOVLW B'00011111'
CALL DELAY1 MOVWF TRISC
GOTO INICIO CALL DELAY1
CENTRO MOVLW B'00001111'
MOVLW B'00000001' MOVWF TRISC
MOVWF TRISC CALL DELAY1
CALL DELAY1 MOVLW B'00000111'
MOVLW B'00000011' MOVWF TRISC
MOVWF TRISC CALL DELAY1
CALL DELAY1 MOVLW B'00000011'
MOVLW B'00000111' MOVWF TRISC
MOVWF TRISC CALL DELAY1
CALL DELAY1 MOVLW B'00000001'
MOVLW B'00001111' MOVWF TRISC
MOVWF TRISC CALL DELAY1
CALL DELAY1 MOVLW B'00000000'
MOVLW B'00011111' MOVWF TRISC
MOVWF TRISC CALL DELAY1
CALL DELAY1
MOVLW B'00111111' GOTO INICIO
MOVWF TRISC APAGADO
CALL DELAY1 MOVLW B'00000000'
MOVLW B'01111111' MOVWF TRISC
MOVWF TRISC GOTO INICIO
CALL DELAY1 END
1.7. Resultado:
Se demostró la configuración de básica en lenguaje ensamblador para la secuencia de
leds con programación el lenguaje en C y la utilización 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. Descripción :

El presente programa nos permite tener el manejo del control digital de entradas y
salidas en el cual realizamos la aplicación de un Mod16 NBCD, para el cual
realizamos nuestro código en lenguaje C y después lo implementaremos
físicamente, cargaremos nuestro código 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. Código 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 programación de una Mod16 NBCD se la realizo sin niguna dificultad aplicando


códigos ya conocidos y se demostró la configuración de básica en MPLAB para la su
control con programación el lenguaje en C y la utilización 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
CREACIÓN DE UN PROGRAMA USANDO SOURCE FILE
García Breijo Eduardo (2008, Pág. 45) Menciona que:
“Source File: Es un comando que nos proporciona un asistente para la creación 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 código desde cero.
Con la opción 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 creación de un programa usando SOURCE FILE debemos seguir los siguientes
pasos:
1. En la barra de menús seleccionamos New → Source File
2. Colocar un nombre al proyecto.
3. Seleccionar la carpeta donde guardaremos el proyecto.
4. Finalmente aparecerá una ventana en la que empezamos a escribir el programa
desde cero.

Figura 18 Ventana de creación de programa desde cero Fuente: PCW

Cánovas López Andrés (2003, Pág. 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 función 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 código que el compilador
generará para las instrucciones de entrada y salida. Este método rápido de hacer
I/O ocasiona que el compilador realice I/O sin programar el registro de
dirección. El puerto puede ser A-G.
Ejemplo:
 #use fast_io(A) ” [ 3 ]

FUNCIONES DE I/O DISCRETA


Cánovas López Andrés (2003, Pág. 31– 32) Menciona que:
“Dentro de la función output tenemos ciertas variantes que son:
OUTPUT_BIT(pin, value): Esta función saca el bit dado en value(0 o 1) por la
patilla de I/O especificada en pin. El modo de establecer la dirección 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 función 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 conexión 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 método 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 método 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 configuración 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
Cánovas López Andrés (2003, Pág. 33) Menciona que:
“Dentro de la función de retardo tenemos:
DELAY_CYCLES(count):Esta función realiza retardos según el número de
ciclos de instrucción especificado en count; los valores posibles van desde 1 a
255. Un ciclo de instrucción es igual a cuatro periodos de reloj.
Ejemplo:
 delay_cycles( 3 ); // retardo de 3ciclos instrucción; es igual que un
NOP

DELAY_MS(time): Esta función realiza retardos del valor especificado en time.


Dicho valor de tiempo es en milisegundos y el rango es 0-65535. Para obtener
retardos más largos así como retardos 'variables' es preciso hacer llamadas a una
función separada; véase el ejemplo siguiente.
Es preciso utilizar la directiva #use delay(clock=frecuencia) antes de la llamada
a esta función, para que el compilador sepa la frecuencia de reloj.
Ejemplo:
 #use delay (clock=4000000) // reloj de 4MHz

DELAY_US(time): Esta función 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 función 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. Descripción :
El presente programa nos permite tener el manejo del control digital de entradas y
salidas en el cual realizamos la aplicación de un Mod16 BCD, para el cual
realizamos nuestro código en lenguaje assembler en el software MPLAB de
Microchip lo simularemos en Proteus y que después lo implementaremos
físicamente, cargaremos nuestro código 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. Código 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 programación de una Mod16 BCD se la realizo sin ninguna dificultad aplicando
códigos ya conocidos y se demostró la configuración de básica en MPLAB para la su
control con programación el lenguaje en C con la ayuda de la visualización de un
decoder, la utilización 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 básicas de DIO, reemplazar
Standard

56
FUNCIONES PARA CONTROL
El compilador CCS contiene más de 307 funciones integradas que simplifiquen el
acceso al hardware, mientras que la producción eficiente y altamente optimizado
código. [1]
Se incluyen funciones de hardware del dispositivo de características tales como:
 Temporizadores y módulos 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 mayoría de los
microcontroladores modernos. Por su bajo precio, un rango amplio de aplicaciones, alta
calidad y disponibilidad, es una solución perfecta aplicarlo para controlar diferentes
procesos en la industria, en dispositivos de control de máquinas, para medir variables de
procesos etc. Algunas de sus características principales se enumeran a continuación.
Entre las características básicas 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 mínimo número de pines requeridos. Un
teclado matricial 4x4 solamente ocupa 4 líneas de un puerto para las filas y otras 4
líneas para las columnas, de este modo se pueden leer 16 teclas utilizando solamente 8
líneas de un microcontrolador.
Si asumimos que todas las columnas y filas inicialmente están en alto (1 lógico), la
pulsación de un botón se puede detectar al poner cada fila a en bajo (0 lógico) 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 líquido o LCD (sigla del inglés liquid crystal display) es una
pantalla delgada y plana formada por un número de píxeles en color o monocromos
colocados delante de una fuente de luz o reflectora. A menudo se utiliza en dispositivos
electrónicos de pilas, ya que utiliza cantidades muy pequeñas de energía eléctrica. Cada
píxel de un LCD típicamente consiste de una capa de moléculas alineadas entre dos
electrodos transparentes, y dos filtros de polarización, los ejes de transmisión de cada
uno que están (en la mayoría 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 magnéticos dentro del motor hace
que gire. Los motores CD son el tipo más simple de motor y se utilizan en
electrodomésticos, como las máquinas de afeitar eléctricas, y en ventanas eléctricas de
automóviles.

58
Figura 24 Motor DC Fuente: dinastiatecnologica.com

Tipos de motores DC
Las bobinas y la armadura en un motor derivado están conectadas en paralelo,
conocidas como derivación, 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 sólo giran
cuando se aplica el voltaje. Un motor paso a paso giratorio es un dispositivo
electromecánico que puede dividir una rotación completa (360°) en un gran número de
pasos rotacionales. Los motores paso a paso se controlan electrónicamente y no
necesitan costosos dispositivos de retroalimentación.
Voltaje:
Los motores paso a paso tienen una tensión eléctrica de trabajo. Este valor viene
impreso en su carcasa o por lo menos se especifica en su hoja de datos.
Grados por paso:
Una operación de medio-paso o semi-paso (half step) del motor duplicará la cantidad de
pasos por revolución al reducir la cantidad de grados por paso. Las cantidades más
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 electrónico que permite a un motor eléctrico
DC girar en ambos sentidos, avance y retroceso. Son ampliamente usados en robótica y
como convertidores de potencia. Los puentes H están disponibles como circuitos
integrados, pero también pueden construirse a partir de componentes discretos

59
El puente H se usa para invertir el giro de un motor, pero también 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 S2 S3 S4 Resultado
1 0 0 1 El motor gira en avance
0 1 1 0 El motor gira en retroceso
0 0 0 0 El motor se detiene bajo su inercia
1 0 1 0 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: Simulación 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 según la programación
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 alimentación 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 conexión 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: Simulación 7mo A 2016
pueda aprovechar las resistencias pull up con las que cuenta este puerto que facilitan
una mejor conexión , 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 más
señales se puedan transmitir a la vez por un mismo medio es decir el canal de
comunicación .
 Las líneas de entrada permanecen en un nivel lógico alto, gracias a los elementos pull-
up exclusivos del puerto B.
 Para Tener una mejor eficiencia con los teclados se debe enviar por las líneas de salida
sólo 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 señales de control.
 En los casos en que sólo nos interesa escribir datos en la pantalla LCD, el pin de
selección de lectura/escritura (R/W) en el display, se conecta a tierra.
 Para el módulo LCD, se emplea un potenciómetro de 5KOhm, conectado entre +5V y
tierra, para controlar el contraste de la pantalla.
MOTOR DC

U2(VSS)

U1
1 15 16 8 U2
RE3/MCLR/VPP RC0/T1OSO/T1CKI
16
RC1/T1OSI/CCP2
2 17 2 3
0 3
RA0/AN0/ULPWU/C12IN0-
RA1/AN1/C12IN1-
RC2/P1A/CCP1
RC3/SCK/SCL
18 7
IN1
IN2
VSS VS OUT1
OUT2
6
4 23 1
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA EN1
5 24
1 6
RA3/AN3/VREF+/C1IN+
RA4/T0CKI/C1OUT
RC5/SDO
RC6/TX/CK
25 +88.8
7 26 9
RA5/AN4/SS/C2OUT RC7/RX/DT EN2 kRPM
14 10 11
RA6/OSC2/CLKOUT IN3 OUT3
13 19 15 14
RA7/OSC1/CLKIN RD0 IN4 GND GND OUT4
20
RD1
33 21
RB0/AN12/INT RD2
34 22 L293D
RB1/AN10/C12IN3- RD3
35 27
RB2/AN8 RD4
36 28
RB3/AN9/PGM/C12IN2- RD5/P1B
37 29
RB4/AN11 RD6/P1C
38 30
RB5/AN13/T1G RD7/P1D
39
RB6/ICSPCLK
40 8
RB7/ICSPDAT RE0/AN5
9
RE1/AN6
10
RE2/AN7
PIC16F887

Figura 29 Motor DC Fuente: Simulación 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
operación del microcontrolador a utilizar en este caso se utilizó un PIC 16F887,
debemos tener en cuenta la forma de conexión 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: Simulación 7mo A 2016


El circuito consta de un motor paso a paso el cual es controlado la velocidad mediante
un potenciómetro 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 tensión continua
del valor característico del motor (5 Voltios generalmente).
 Las entradas son TTL y se activan a nivel alto, también disponen de resistencias
de polarización internas
 Cuando trabajamos con motores paso a paso, muchas veces es necesario tener la
ficha técnica 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 básicas de DIO, reemplazar
Standard IO por fast IO y analizar su función.

1.3. Descripción :

El presente programa nos permite tener el manejo del control digital de entradas
y salidas en el cual realizamos la aplicación de las luces del auto fantástico, para
el cual realizamos nuestro código en lenguaje assembler en el software MPLAB
de Microchip lo simularemos en Proteus y que después lo implementaremos
físicamente, cargaremos nuestro código 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: Simulación 7mo A 2016

1.6. Código comentado:

64
#include <16f887.h> // incluimos la Libreria del Pic output_C(8);
a Utilizar delay_ms(tiempo);
#fuses XT, NOWDT, NOPROTECT //Activamos los output_C(16);
Fusibles necesarios delay_ms(tiempo);
#use delay(clock = 4M) // Declaramos el Delay de output_C(32);
4MHz para trabajar delay_ms(tiempo);
#use standard_io(B) // Declaramos e puerto B como output_C(64);
salidas o como Entradas delay_ms(tiempo);
output_C(128);
#use fast_io (C) //Uso rapido del puerto C delay_ms(tiempo);
#use fast_io (A)
int tiempo = 100; output_C(64);
void main() // Programa Principal delay_ms(tiempo);
{ output_C(32);
set_tris_c(0x00); //Declaramos el puerto c como delay_ms(tiempo);
salidas output_C(16);
set_tris_a(0xff); //Declaramos el puerto Acomo delay_ms(tiempo);
entradas output_C(8);
while (true) //Bucle infinito delay_ms(tiempo);
{ output_C(4);
if(input(pin_A0)== 0 ) // Consulta si en el Pin A0=0 delay_ms(tiempo);
entonces hace: output_C(2);
{ delay_ms(tiempo);
output_C(1); //Enciende el bit C0 del puerto C }
delay_ms(tiempo); // Retardo de 100 ms para if(input(pin_A0)== 1)
encender el Led siguiente {
output_C(2); //Enciende el pin C1 del puerto C output_C(0);
delay_ms(tiempo); }
output_C(4); }
delay_ms(tiempo); }
1.7. Resultado:
1.8.
1.9. Se demostró la configuración de básica en lenguaje ensamblador en MPLAB
para la secuencia de leds con programación el lenguaje en C y la utilización 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. Descripción :
El presente programa nos permite tener el manejo del encendido de un motor
DC, para lo cual realizamos elcódigo en PIC C Compiler, luego lo simularemos
en Proteus y posterior lo implementaremos físicamente, cargaremos nuestro
código 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: Simulación 7mo A 2016

Diagrama No.1: Esquema de Ejercicio propuesto #5


1.6. Código comentado:
#include <16f887.h> lcd_putc("\f");
#fuses lcd_gotoxy(1,1);
XT,PUT,NOPROTECT,BROWNOUT,NOLVP,NOW lcd_putc("MOTOR");
DT lcd_gotoxy(1,2);
#use delay(clock=4M) lcd_putc("APAGADO");
#define LCD_DB4 PIN_B4 //definimos el
LCD en el Port_B output_c(0);
#define LCD_DB5 PIN_B5 }
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B2 void main()
#define LCD_E PIN_B3 {

#include <lcd1.c> //incluimos la libreria del


LCD lcd_init();
#include <KBD4x4.c> kbd_init();
#use standard_io(C) //uso rapido del Puerto A y lcd_gotoxy(1,1);
C lcd_putc("Pulse A para: ON");
#use standard_io(B) lcd_gotoxy(1,2);
lcd_putc("Puls D para: OFF");
char teclado;
while (True)
void encendido() {
{ teclado = kbd_getc();
lcd_putc("\f"); if(teclado!=0)
lcd_gotoxy(1,1); {
lcd_putc("MOTOR"); if(teclado == '*')
lcd_gotoxy(1,2); {
lcd_putc("ENCENDIDO "); encendido();
}
delay_ms(200); else if(teclado == 'D')
output_c(1); {
} apagado();
}
void apagado() }
{ }
}
Resultado:
Se demostró la configuración de básica en lenguaje ensamblador en MPLAB para el
encendido de un motor dc con teclado matricial y su visualización en la pantalla lcd con
programación 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 común que cumpla las
siguientes condiciones:
1.3. Descripción :
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: Simulación 7mo A 2016

1.6. Código comentado:


#include <16f887.h> delay_ms(500); //retardo de medio
#fuses XT, NOWDT, NOPROTECT segundo
#use delay(clock = 4M)
#define LCD_DB4 PIN_B4 //definimos el if(cont>9) cont=0; //si el contador pasa de
LCD en el Port_B 9 regresa a 0
#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> //incluimos la libreria del if(tecla=='A') //Si la entrada en el pin A0=0
LCD {
#include <KBD4x4.c> lcd_gotoxy(1,1);
#use standard_io (C) lcd_putc("\fContador") ;
lcd_gotoxy(1,2);
signed int cont=0; //variavle cont con signo lcd_putc("Descendente") ;
char tecla; for(int i=0; i<=10; i++)
{
void main() output_C(cont); //saca en el puerto C el
{ valor del cont
cont--; //cont va decrementando de
kbd_init(); uno en uno
lcd_init(); delay_ms(500);
lcd_gotoxy(1,1);
lcd_putc("\f# para Ascendente") ; if(cont<=-1) cont=9;//si cont llega a 0 regresa
lcd_gotoxy(1,2); de inmediato a 9
lcd_putc("* para Descendente") ;
while (true)
{ }
tecla = kbd_getc(); }
if(tecla!=0) if((tecla!='C')&&(tecla!='A') )
{ {
if(tecla=='C') //Si la entrada en el pin A0=1 lcd_gotoxy(1,1);
{ lcd_putc("\fTecla No");
lcd_gotoxy(1,1); lcd_gotoxy(1,2);
lcd_putc("\fContador") ; lcd_putc("Asignada");
lcd_gotoxy(1,2);
lcd_putc("Ascendente") ; output_c(0b1111);
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
1.7. Resultado:
1.8.
1.9. Se demostró la configuración de básica en lenguaje C para obtener una
secuencia de leds con su manejo desde teclado matricial y su visualización en
la pantalla lcd el cual tendrá mensajes de encendido apagado y selección 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. Descripción :
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 código en PIC C Compiler, luego lo simularemos en Proteus y
posterior lo implementaremos físicamente, cargaremos nuestro código
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: Simulación 7mo A 2016


1.20.
1.6. Código comentado:
1.21.
1.22. #include <16f887.h> 1.71. lcd_init();
1.23. #fuses 1.72. kbd_init();
XT,PUT,NOPROTECT,BROWNOUT,NO 1.73. port_b_pullups(True);
LVP,NOWDT 1.74. lcd_gotoxy(1,1);
1.24. #use delay(clock=4M) 1.75. lcd_putc("Pulse A para: ON");
1.25. #define LCD_DB4 PIN_B4 1.76. lcd_gotoxy(1,2);
//definimos el LCD en el Port_B 1.77. lcd_putc("Puls D para: OFF");
1.26. #define LCD_DB5 PIN_B5 1.78.
1.27. #define LCD_DB6 PIN_B6 1.79. while (true)
1.28. #define LCD_DB7 PIN_B7 1.80. {
1.29. #define LCD_RS PIN_B2 1.81. tecla = kbd_getc();
1.30. #define LCD_E PIN_B3 1.82. if(tecla=='\0') {tecla=aux;} //si no
1.31. se pulsa nada.. tecla = 0
1.32. #include <lcd1.c> //incluimos la 1.83. if(tecla=='*') //si tecla=A
libreria del LCD enciende
1.33. #include <KBD4x4.c> 1.84. {
1.34. //#use standard_io(E) //uso rapido 1.85. encendido();
del Puerto A y C 1.86. tecla='0';
1.35. #use standard_io(C) 1.87. delay_ms(500);
1.36. //#use standard_io(B) 1.88. }
1.37. 1.89. if(tecla=='D')
1.38. char tecla, aux='0'; 1.90. {
1.39. char PWMH=0, PWML=0; 1.91. apagado();
1.40. //int i; 1.92. tecla = '0';
1.41. 1.93. delay_ms(500);
1.42. void encendido() 1.94. }
1.43. { 1.95. if((tecla=='A') || (tecla=='B') ||
1.44. lcd_putc("\f"); (tecla=='C') || (tecla=='#')
1.45. lcd_gotoxy(1,1); 1.96. || (tecla=='5') || (tecla=='6') ||
1.46. lcd_putc("SISTEMA"); (tecla=='7')
1.47. lcd_gotoxy(1,2); 1.97. || (tecla=='8') || (tecla=='9'))
1.48. lcd_putc("ENCENDIDO "); 1.98. {
1.49. 1.99. lcd_putc("\f");
1.50. } 1.100. lcd_gotoxy(1,1);
1.51. 1.101. lcd_putc("Tecla no Usada");
1.52. void apagado() 1.102. delay_ms(500);
1.53. { 1.103. tecla='0';
1.54. lcd_putc("\f"); 1.104. }
1.55. lcd_gotoxy(1,1); 1.105.
1.56. lcd_putc("APAGADO"); 1.106. aux=tecla;
1.57. 1.107. tecla = tecla-48;
1.58. output_c(0); 1.108. PWMH = tecla*63.75;
1.59. } 1.109. PWML = 255-PWMH;
1.60. 1.110.
1.61. void velocidad1() 1.111. for(PWMH;PWMH>0;PW
1.62. { MH--)
1.63. lcd_putc("\f"); 1.112. {
1.64. lcd_gotoxy(1,2); 1.113. output_high(pin_C0);
1.65. lcd_putc("Velocidad Uno"); 1.114.
1.66. delay_ms(500); 1.115. }
1.67. } 1.116.
1.68. 1.117. for
1.69. void main() (PWML;PWML>0;PWML--)
1.70. { 1.118. {
1.119. output_low(pin_C0); 1.122. }
1.120. 1.123. }
1.121. }
1.7. Resultado:
1.8.
1.9. Se demostró la configuración del encendido apagado y cambio de giro de un
motor DC con el manejo desde el teclado matricial y su respectiva visualización
en la pantalla lcd con programación 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. Añadir leds de señalización para cada condición del ejercicio anterior.
1.3. Descripción :
1.15.
1.16. El presente programa nos permite tener el manejo del encendido y
cambio de giro de un motor a pasos y además el control de velocidad mediante
el teclado matricial , para lo cual realizamos el código 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: Simulación 7mo A 2016

1.6. Código comentado:


1.22. #include <16f887.h> 1.25. #define LCD_DB4 PIN_B4
1.23. #fuses //definimos el LCD en el Port_B
XT,PUT,NOPROTECT,BROWNOUT,NO 1.26. #define LCD_DB5 PIN_B5
LVP,NOWDT 1.27. #define LCD_DB6 PIN_B6
1.24. #use delay(clock=4M) 1.28. #define LCD_DB7 PIN_B7
1.29. #define LCD_RS PIN_B2 1.85. delay_ms(tiempo);
1.30. #define LCD_E PIN_B3 1.86.
1.31. 1.87. output_A(8);
1.32. #include <lcd1.c> //incluimos la 1.88. }
libreria del LCD 1.89.
1.33. #include <KBD4x4.c> 1.90. void apagado()
1.34. #use standard_io(E) //uso rapido del 1.91. {
Puerto A y C 1.92. lcd_putc("\f");
1.35. #use standard_io(C) 1.93. lcd_gotoxy(1,1);
1.36. #use standard_io(B) 1.94. lcd_putc("APAGADO");
1.37. 1.95.
1.38. char teclado; 1.96. output_c(0);
1.39. int tiempo; 1.97. delay_ms(100);
1.40. int i; 1.98. output_A(1);
1.41. 1.99. }
1.42. void encendido() 1.100.
1.43. { 1.101. void velocidad1()
1.44. lcd_putc("\f"); 1.102. {
1.45. lcd_gotoxy(1,1); 1.103. lcd_putc("\f");
1.46. lcd_putc("SISTEMA"); 1.104. lcd_gotoxy(1,2);
1.47. lcd_gotoxy(1,2); 1.105. lcd_putc("Velocidad Uno");
1.48. lcd_putc("ENCENDIDO "); 1.106. tiempo=100;
1.49. 1.107. }
1.50. output_A(2); 1.108.
1.51. 1.109. void velocidad2()
1.52. } 1.110. {
1.53. void giro_derecha() 1.111. lcd_putc("\f");
1.54. { 1.112. lcd_gotoxy(1,2);
1.55. //lcd_putc("\f"); 1.113. lcd_putc("Velocidad Dos");
1.56. lcd_gotoxy(1,1); 1.114. tiempo=50;
1.57. lcd_putc("Girando Derecha"); 1.115. }
1.58. 1.116.
1.59. output_c(1); 1.117. void velocidad3()
1.60. delay_ms(tiempo); 1.118. {
1.61. output_c(2); 1.119. lcd_putc("\f");
1.62. delay_ms(tiempo); 1.120. lcd_gotoxy(1,2);
1.63. output_c(4); 1.121. lcd_putc("Velocidad Tres");
1.64. delay_ms(tiempo); 1.122. tiempo=10;
1.65. output_c(8); 1.123. }
1.66. delay_ms(tiempo); 1.124. /*
1.67. 1.125. char leert(char tecla1) //metodo
1.68. output_A(4); para leer teclado_Matricial (no necesario)
1.69. 1.126. {
1.70. } 1.127. //output_high(pin_e1);
1.71. 1.128. if(tecla1 != 0)
1.72. void giro_izquierda() 1.129. {
1.73. { 1.130. if(tecla1 == '1')
1.74. //lcd_putc("\f"); 1.131. {
1.75. lcd_gotoxy(1,1); 1.132. // output_low(pin_e1);
1.76. lcd_putc("Girando Izquierda"); 1.133. return(tecla1);
1.77. 1.134. }
1.78. output_c(8); 1.135. else if(tecla1 == '4')
1.79. delay_ms(tiempo); 1.136. {
1.80. output_c(4); 1.137. // output_low(pin_e1);
1.81. delay_ms(tiempo); 1.138. return(tecla1);
1.82. output_c(2); 1.139. }
1.83. delay_ms(tiempo); 1.140. else if(tecla1 == 'D')
1.84. output_c(1); 1.141. {
1.142. //output_low(pin_e1); 1.191. else if(teclado ==
1.143. return(tecla1); 'A') {velocidad1();}
1.144. } 1.192. else if(teclado ==
1.145. } 'B') {velocidad2();}
1.146. //output_low(pin_e1); 1.193. else if(teclado ==
1.147. return(0); 'C') {velocidad3();}
1.148. } */ 1.194. }
1.149. 1.195. }
1.150. void main() 1.196. }
1.151. { 1.197. }
1.152. 1.198.
1.153. lcd_init(); 1.199. if(teclado == '4')
1.154. kbd_init(); 1.200. {
1.155. lcd_gotoxy(1,1); 1.201. tiempo=100;
1.156. lcd_putc("Pulse A para: ON"); 1.202. velocidad1();
1.157. lcd_gotoxy(1,2); 1.203.
1.158. lcd_putc("Puls D para: OFF"); 1.204. while(true)
1.159. //while((leert(kbd_getc())!='D') &&
1.160. while (True) (leert(kbd_getc())!='1'))
1.161. { 1.205. {
1.162. teclado = kbd_getc(); 1.206. giroIzquierda:
1.163. if(teclado!=0) 1.207. giro_izquierda();
1.164. { 1.208.
1.165. if(teclado == '*') 1.209. teclado = 0;
1.166. { 1.210. for (i=0; i<=100; i++)
1.167. encendido(); 1.211. {
1.168. 1.212. teclado = kbd_getc();
1.169. while(teclado!='D') 1.213. if(teclado!=0)
1.170. { 1.214. {
1.171. teclado=kbd_getc(); 1.215. if(teclado == 'D')
1.172. {goto off;}
1.173. if(teclado=='1') 1.216. else if(teclado == '1')
1.174. { {goto giroDerecha;}
1.175. tiempo = 100; 1.217. else if(teclado == 'A')
1.176. velocidad1(); {velocidad1();}
1.177. 1.218. else if(teclado == 'B')
1.178. while(true)// {velocidad2();}
while((leert(kbd_getc())!='D') && 1.219. else if(teclado == 'C')
(leert(kbd_getc())!='4')) {velocidad3();}
1.179. { 1.220. }
1.180. giroDerecha: 1.221. }
1.181. giro_derecha(); 1.222. }
1.182. 1.223. }
1.183. teclado = 0; 1.224. } goto off;
1.184. for(i=0; i<=100; i++) 1.225.
1.185. { 1.226. }
1.186. teclado=kbd_getc(); 1.227. off:
1.187. if(teclado!=0) 1.228. apagado();
1.188. { 1.229. }
1.189. if(teclado == '4') 1.230. }
{goto giroIzquierda;} 1.231. }
1.190. else if(teclado == 1.232.
'D') {goto off;}
1.7. Resultado:
1.8. Se demostró la configuración 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 visualización en la pantalla lcd con programación 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 común 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.- Añadir leds de señalización para cada condición 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. Interacción Microcontrolador – PC (USART)


1.21. Uso de las Señales RS232.
1.22. Tierra de Chasis.- Se conecta internamente al chasis del dispositivo.
1.23. Recibe Datos (RXD).- Por esta pata entran los datos del dispositivo
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 señal.- Se ha dicho que los datos se envían como voltajes + o
-. Pues bien, esta pata es la referencia de señal 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 están 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 Telefónico (RI).- Esta patita se usa sólo cuando un PLC
(Programable Logical Controller) está conectado a un módem. [1]
1.31. Descripción 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 configuración. Los puertos serie se usan
frecuentemente en estas áreas porque son sencillos, baratos y permiten la
interoperabilidad entre dispositivos. La desventaja es que la configuración de las
conexiones serie requiere, en la mayoría de los casos, un conocimiento avanzado por
parte del usuario y el uso de comandos complejos si la implementación no es
adecuada [3]
1.35. Puerto RS-232
1.36. Reseña Histórica
1.37. Es una de las normas más populares empleadas en la comunicación serie
(su inserción en el PC incremento su popularidad). Fue desarrollada en la década de
los 60 para gobernar la interconexión de terminales y MODEM. Está patrocinada
por la EIA (Asociación de Industrias Eléctricas).
1.38. Durante los últimos 30 años que este estándar 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
interpretación propia de algunos fabricantes.
1.39. Los ordenadores se conectan con cualquier equipo periférico, a través de
sus puertos paralelo o serie, o los más 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 estándar impuesto en todos los
equipos informáticos. [1]
1.40. Consideraciones en la comunicación serie
1.41. La norma RS232 resuelve tres aspectos en la comunicación que se
establece entre el DTE, Equipo Terminal de Datos, por ejemplo un PC y el DCE,
Equipo para la comunicación de datos, por ejemplo un ratón:
1.42. Características eléctricas de la señal
1.43. Se establece que la longitud máxima del cable no debe ser superior a los
15 metros y la velocidad máxima de transmisión es, en principio, 128.000 bps. Los
niveles lógicos no son compatibles TTL, considerando:
1.44. 1 lógico entre -3V y -15V
1.45. 0 lógico entre +3V y +15V
1.46. Características mecánicas 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 comunicación 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 terminación del circuito de datos), aunque existen otras
situaciones en las que también se utiliza la interfaz RS-232.
1.52. La interfaz RS-232 está diseñada para distancias cortas, de unos 15
metros o menos, y para unas velocidades de comunicación bajas, de no más 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 comunicación asíncrona o síncrona y tipos
de canal simplex, half duplex o full duplex. En un canal simplex los datos
siempre viajarán en una dirección, por ejemplo desde DCE a DTE. En un canal
half dúplex, los datos pueden viajar en una u otra dirección, pero sólo durante
un determinado periodo de tiempo; luego la línea debe ser conmutada antes que
los datos puedan viajar en la otra dirección. En un canal full duplex, los datos
pueden viajar en ambos sentidos simultáneamente. Las líneas de handshaking
de la RS-232 se usan para resolver los problemas asociados con este modo de
operación, tal como en qué dirección los datos deben viajar en un instante
determinado.
1.54.
1.55. EJERCICIO 9
1.1. Tema:
1.56. Utilización del puerto USART
1.2. Objetivo :
1.57. Determinar la utilización del puerto USART, visualizar los estados en la
pantalla LCD.
1.3. Descripción :
1.58. Encender el motor DC desde el teclado matricial y apagar desde la PC
mediante la comunicación USART, visualizar los estados en la pantalla LCD.
1.4. Materiales y equipos:
1.59. Comunicación 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: Simulación 7moA 2016


1.62.
1.63.
1.64.
1.65.
1.6. Código comentado:
1.66. #include <16f887.h> 1.105. void control_teclado()
1.67. #fuses ////metodo para comunicacion entre PIC
XT,PUT,NOPROTECT,BROWNOUT,N y PC
OLVP,NOWDT 1.106. {
1.68. #use delay(clock=4M) 1.107. char tecla;
1.69. #define LCD_DB4 PIN_B4 1.108. kbd_init();
//definimos el LCD en el Port_B 1.109. lcd_gotoxy(1,1);
1.70. #define LCD_DB5 PIN_B5 1.110. lcd_putc("\f TX Teclado");
1.71. #define LCD_DB6 PIN_B6 1.111.
1.72. #define LCD_DB7 PIN_B7 1.112.
1.73. #define LCD_RS PIN_B2 1.113. while(true)
1.74. #define LCD_E PIN_B3 1.114. {
1.75. 1.115. tecla=kbd_getc();
1.76. #include <lcd1.c> //incluimos la 1.116. if(tecla!=0)
libreria del LCD 1.117. {
1.77. #include <KBD4x4.c> 1.118. if(tecla=='*') //si tecla
1.78. //#use standard_io(E) //uso rapido pulsado es 1(Proteus) entonces visualiza
del Puerto A y C 1(Teclado_Real)
1.79. #use standard_io(A) 1.119. {
1.80. //#use standard_io(B) 1.120. printf("\f\rMOTOR DC
1.81. ENCENDIDO");
1.82. #use rs232(baud=9600, xmit=pin_C6, 1.121. delay_ms(100);
rcv=pin_C7, bits=8, parity=N) 1.122. output_A(1);
1.83. // directiva usada para la comunicacion 1.123. }
serial RS232 1.124.
1.84. void menu() 1.125. if(tecla=='D')
1.85. { 1.126. {
1.86. lcd_gotoxy(1,1); 1.127. goto salida;
1.87. lcd_putc("\f MENU"); 1.128. }
1.88. lcd_gotoxy(1,2); 1.129.
1.89. lcd_putc("Comunicacion RS232"); 1.130. }
1.90. 1.131.
1.91. puts("\fMenu CONTROL DE MOTOR 1.132. }
DC\r\r"); 1.133. salida:
1.92. puts(" A ENCIENDE EL MOTOR DC 1.134. menu();
DESDE EL TECLADO\r\r"); 1.135.
1.93. puts(" D APAGA EL MOTOR DC 1.136. }
DESDE LA PC"); 1.137.
1.94. 1.138. void control_PC() //metodo
1.95. } para comunicacion entre PC y PIC
1.96. 1.139. {
1.97. int dato; 1.140. lcd_init();
1.98. 1.141. enable_interrupts(int_rda);
1.99. #int_rda //habilitacion de la 1.142. enable_interrupts(global);
interrupcion de RS232 en CCS 1.143. lcd_gotoxy(1,1);
1.100. void serial() 1.144. lcd_putc("\fTx PC");
1.101. { 1.145.
1.102. dato=getc(); //coge el caracter 1.146. while (true)
que se tx y guarda en dato 1.147. {
1.103. } 1.148. dato=getc();
1.104. 1.149. if(dato!=0)
1.150. {
1.151. if(dato=='d')
1.152. { 1.176.
1.153. printf("\f\rMOTOR DC 1.177. puts("\f Conexion
APAGADO"); Establecida\r");
1.154. delay_ms(100); 1.178. puts("Pulsa SPACE para ir al
1.155. output_A(0); Menu");
1.156. 1.179.
1.157. printf("\r\rPuse SPACE 1.180. while(true)
para menu"); 1.181. {
1.158. } 1.182. for(;;)
1.159. 1.183. {
1.160. if(dato==' ') { goto salida1;} 1.184. dato = getc();
1.161. 1.185. switch(dato)
1.162. } 1.186. {
1.163. } 1.187. case ' ': menu();
1.164. salida1: 1.188. break;
1.165. menu(); 1.189.
1.166. } 1.190. case 'a': control_teclado();
1.167. void main() 1.191. break;
1.168. { 1.192.
1.169. lcd_init(); 1.193. case 'x': control_PC();
1.170. enable_interrupts(int_rda); 1.194. break;
1.171. enable_interrupts(global); 1.195. }
1.172. lcd_gotoxy(1,1); 1.196. }
1.173. lcd_putc("Comunicacion"); 1.197. }
1.174. lcd_gotoxy(1,2); 1.198. }
1.175. lcd_putc("Serial");
1.7. Resultado:
1.8. Mediante la activación del teclado matricial el microcontrolador se encarga de
realizar el encendido - apagado del sistema para empezar a transmitir y recibir
información. Con la pulsación de una tecla del teclado matricial el
microcontrolador PIC (16F887) se encarga de enviar el carácter 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 comunicación USART, visualizar los estados en la pantalla LCD.
1.12.

89
1.13. SEGUNDO PARCIAL

1.14. MODULO CCP


1.15. INTRODUCCIÓN:
1.16. La mayoría de microcontroladores actuales disponen de un periférico
denominado Módulo de Captura Comparación y PWM o CCP
1.17. Este módulo consta de un registro de 16bits CCPx (x=1, 2) que puede
operar como registro de captura de datos, comparación de datos o como registro
para fijar el ciclo de trabajo de una señal.
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 comparación compara constantemente valores de dos


registros. Uno de ellos es el registro del temporizador Timer1. Este circuito
también le permite al usuario activar un evento externo después de que haya
expirado una cantidad de tiempo predeterminada.

1.20. PWM (Pulse Width Modulation - modulación por ancho de pulsos)


puede generar señales de frecuencia y de ciclo de trabajo variados por uno o
más pines de salida.

1.21. SÍNTESIS:
1.22.
1.23. Registros asociados a cada módulo (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 Comparación
 En modo PWM, CCPRx funciona determina el Duty Cycle
1.26.

1.27. CCPxCON: Registro de control


1.28. Los módulos CCP hacen uso de los timers

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

1.31. El PIC16F887 cuenta con dos Módulos CCP con las siguientes
características:
1.32.
 Modo Captura: Registro de 16 bits y resolución máxima de 12.5 ns.
 Modo Comparación: Registro de 16 bits y resolución máxima de 200 ns.
 Modo PWM: Registro de 10 bits y frecuencia máxima de 20 kHz.

1.33.
1.34. El PIC16F887 dispone de dos módulos denominados CCP1 y CCP2
asociados a los registros CCPR1 y CCPR2 pines RC2 (CCP1) y RC1(CCP2)
1.35. El PIC18F4550 cuenta con dos Módulo CCP y un módulo CCP mejorado
con las siguientes características:
1.36. Módulo CCP:
 Modo Captura: Registro de 16 bits y resolución máxima de 5.2 ns (TcY/16)
 Modo Comparación: Registro de 16 bits y resolución máxima de 83.3 ns (TcY)
 Modo PWM: Registro de 10 bits
1.37.

1.38. Módulo CCP mejorado:


 Múltiples modos de salida
 Polaridad seleccionable
 Tiempo muerto de programación
 Auto-Apagado y Auto-Reseteo

1.39.
1.40. El PIC18F4550 dispone de dos módulos 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 módulo
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 Interacción entre los dos Módulos CCP1 y CCP2

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

1.46. Módulo 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 números 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 Comparación. Además, el módulo
CCP1 puede generar señales PWM de frecuencia y de ciclo de trabajo variados.

 Los bits del registro CCP1CON están en control del módulo CCP1
92
 Consta de dos registros de 8 bits: CCPR1H y CCPR1L.
 Registro de control: CCP1CON.
 Acción especial: Generada mediante una comparación. Resetea Timer1.

1.51. Módulo CCP2:


1.52. Con exclusión de los nombres diferentes de los registros y de los bits,
este módulo es una muy buena copia del módulo CCP1 puesto en modo normal.
La única diferencia significativa entre ellos es el funcionamiento en modo de
comparación del módulo CCP2. La diferencia se refiere a la señal de reinicio
del temporizador T1. Concretamente, si el convertidor A/D está habilitado, al
igualarse los valores de los registros TMR1 y CCPR2, la señal de reinicio del
temporizador T1 iniciará automáticamente la conversión A/D. Similar al
módulo anterior, este circuito también 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.
 Acción especial: Generada mediante una comparación. Resetea Timer1; Lanza
una conversión 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 módulo 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 módulos CCP tiene asociados varios registros (x=1 o 2):
1.60.
 CCPxCON: con este registro definiremos el tipo de operación (Capture /
Compare / PWM) del módulo. 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 caída de la línea.
 01: capturar cada subida de la línea.
 10: capturar cada 4ª subida de línea.

 11: capturar cada 16º subida de línea


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 síncrono.
 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
síncrono. En modo contador asíncrono puede que la captura no funcione.
 Podría generarse una falsa interrupción de captura al cambiar el modo de
captura. Se aconseja deshabilitar CCPxIE al cambiar el modo de captura.
 También podría generarse una falsa interrupción al cambiar el prescaler.
Además, un cambio directo no resetea la cuenta de flancos. Se evitan estas
situaciones reseteando el módulo 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. ;MÓDULO CCP1 ESTÁ APAGADO
1.76. 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. ;MÓDULO CCP1 SE ENCIENDE
SIMULTÁNEAMENTE
1.79.
1.80. EJERCICIO 1
1.81. Tema: Modo Captura del Módulo CCP

95
1.82. Descripción: Realizamos el modo captura del
módulo CCP ,ejecutando una señal con una frecuencia variable implementando
una señal de reloj astable de 6hz a 5khz para su variación y poder capturar la
frecuencia mientras variamos.
1.83. Materiales:
 PIC 16F887
 555
 1 capacitor de 1µF
 2 resistencias de 220Ω
 1 potenciómetro de 50kΩ
 Pantalla LCD

1.84.

1.85. Fig1. Modo Captura


1.86. Simulación: Proteus
1.87.
1.88.
1.89. #i 1.92. #
nclude <16f887.h> define LCD_DB4 PIN_D4
1.90. #f 1.93. #
uses xt,nowdt,noprotect,nolvp define LCD_DB5 PIN_D5
1.91. # 1.94. #
use delay (clock=4000000) define LCD_DB6 PIN_D6
96
1.95. # 1.120.
define LCD_DB7 PIN_D7 1.121. v
1.96. # oid main(){
define LCD_RS PIN_D1 1.122. lc
1.97. # d_init(); //Inicializa la lcd
define LCD_E PIN_D0 1.123. se
1.98. #i tup_timer_1(T1_INTERNAL);
nclude <lcd1.c> //Configuracion del timer 1
1.99. 1.124. se
1.100. in tup_ccp1(CCP_CAPTURE_RE
t1 nuevopulso=0; ); //Inicia ccp como modo
1.101. in captura de flanco de subida
t16 1.125. c
TFB=0,TFS=0,TFTOTAL=0; ambio=0; // Setea el cambio
1.102. fl para el modo de aptura
oat APERIODO=0.0,frec=0.0; 1.126. e
1.103. in nable_interrupts(int_ccp1);
t1 cambio=0; //Habilita interrupcion de CCP1
1.104. 1.127. e
1.105. #i nable_interrupts(global);
nt_ccp1 //Habilita interrupcion global
1.106. v 1.128.
oid ccp1_int(){ 1.129. w
1.107. if hile(true){
(cambio==0){ // Funcion en 1.130. if
flanco de subida (nuevopulso==1){ // Detecta si
1.108. T se tienen los datos de un pulso
FS=CCP_1; //Guarda el valor nuevo
del registro en la variable 1.131. T
1.109. c FTOTAL=(TFB-TFS); //
ambio=1; // Control del Calcula el ancho del pulso
cambio de flanco 1.132. A
1.110. } PERIODO=(TFTOTAL*1.0); //
else Determina el ancho del pulso en
1.111. us,
1.112. { 1.133. fr
1.113. T ec=1000000/(APERIODO); // a
FB=CCP_1; //guarda el valor 4M==> 1M frecuencia de
del registro en la variable instrución (T=1us)
1.114. c 1.134. p
ambio=0; // Control del rintf (lcd_putc,"
cambio de flanco ***CAPTURA***");
1.115. if 1.135.
(nuevopulso==0){ //Fin del lcd_gotoxy(1,3);
pulso 1.136.
1.116. n 1.137. pr
uevopulso=1; //Pulso a medir intf(lcd_putc,"\nfrecue=
1.117. } %6.1fHz ",frec);
1.118. } 1.138. d
1.119. } elay_ms (2);
97
1.139. n 1.141. }
uevopulso=0; 1.142. }
1.140. }
1.143. EJERCICIO PROPUESTO
1.144. El siguiente programa trabaja con el módulo 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 COMPARACIÓN:


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 lógico 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 módulo 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 interrupción
 Lanza una acción especial
 Cada coincidencia da lugar a CCPxIF=1

1.153. Condiciones de funcionamiento en el modo comparación:


1.154.
 El pin CCPx debe configurarse como salida.

99
 TMR1 debe funcionar en modo temporizador o en modo contador síncrono. En
modo contador asíncrono puede que la comparación no funcione.
 Cuando se selecciona generar interrupción, el pin CCPx no se veafectado.
 Se puede generar una acción especial por hardware.

1.155. CCP1: Resetea TMR1.


 CCP2: Resetea TMR1 y lanza una conversión A/D (si está activado)

 En ningún caso se pone a o el flag TMR1IF

1.156.

1.157. EJERCICO 2

1.158. Tema: Modo Comparación del Módulo CCP


1.159. Descripción: Realizamos el modo comparación
del módulo CCP, para efectuar una relación de mayor que, menor que e igual
con un set point de 3v e ir comparando con el voltaje que genera nuestro
circuito variándolo con un potenciómetro.
1.160. Materiales:
 PIC 18F4550
 3 leds
 3 resistencia de 220Ω
 Pantalla LCD
 Potenciómetro de 1kΩ

100
1.161.

1.162. Fig1. Modo Comparación


1.163. Simulación: Proteus
1.164.
1.165. #i 1.173. #
nclude <18f4550.h> define LCD_DATA4
1.166. # PIN_D4 //
device adc=8 //
1.167. #f 1.174. #
uses XT, NOWDT define LCD_DATA5
1.168. # PIN_D5 //
use delay(clock=4M) //
1.169. #i 1.175. #
nclude <lcd.c> define LCD_DATA6
1.170. # PIN_D6 //
define LCD_ENABLE_PIN //
PIN_D0 // 1.176. #
// define LCD_DATA7
1.171. # PIN_D7
define LCD_RS_PIN 1.177. #
PIN_D1 // use standard_io(c)
// 1.178. #
1.172. # use standard_io(b)
define LCD_RW_PIN 1.179. in
PIN_D2 // t8 cont=0;
//
101
1.180. in 1.200.
t16 digital; ccp_2=i; //Carga del
1.181. fl ccp2 con valor semiperiodo
oat voltaje,resolucion; bajo
1.182. in 1.201.
t8 i; output_high(pin_c6);
1.183. in 1.202. }
t1 cambio=0; 1.203.
1.184. v set_timer1(0); //
oid main (void); Reinicio del temporizador para
//función principal comparación
1.185. v 1.204.
oid ccp2_int 1.205. }
(void); //función por 1.206.
interrupción 1.207. v
1.186. oid main() {
1.187. #i 1.208.
nt_ccp2 1.209. lc
1.188. v d_init();
oid ccp2_int(){ 1.210. se
1.189. tup_adc_ports(AN0|
1.190. VSS_VDD);
1.191. if 1.211. se
(++cambio==1){ tup_adc(ADC_CLOCK_INTE
//Conmutación estado salida RNAL);
CCP2 1.212. pr
1.192. intf(lcd_putc,"\tGrupo 1
setup_ccp2(CCP_COMPARE_i Compare");
nt); //Modo comparación, 1.213. d
conmutación salida a 0 elay_ms(600);
1.193. 1.214. se
ccp_2=i; //carga tup_timer_1(T1_external_sync|
del ccp2 con valor semiperiodo T1_DIV_BY_1);
alto //Configuración Timer para
1.194. comparación
output_low(pin_c0); 1.215. e
1.195. nable_interrupts(int_ccp2);
output_low(pin_c5); //habilitación interrupción por
1.196. comparación
output_high(pin_c4); 1.216. e
1.197. nable_interrupts(GLOBAL);
} //Habilitación de toda las
1.198. interrupciones
else{ 1.217.
1.199. 1.218. w
setup_ccp2(CCP_COMPARE_ hile(true){
SET_ON_MATCH); //Modo 1.219. d
comparación, conmutación elay_ms(5);
salida a 1 1.220. se
t_adc_channel(0);
102
1.221. re 1.244. o
solucion=read_adc(); utput_high(pin_c0);
1.222. di 1.245. o
gital=read_adc(); utput_low(pin_c5);
1.223. o 1.246. o
utput_b(digital); utput_low(pin_c4);
1.224. v 1.247. c
oltaje=(resolucion*5/255); ont=4;
1.225. i= 1.248. }
voltaje; 1.249. se
1.226. // t_timer1(cont);
printf(LCD_PUTC, "\f"); 1.250. c
1.227. pr ont=cont+1;
intf(lcd_putc,"\tVoltaje 1.251. }
%f",voltaje); 1.252.
1.228. pr 1.253. if
intf(lcd_putc,"\nSet Point 3 (get_timer1()==1)
V"); 1.254. {
1.229. d 1.255.
elay_ms(5); 1.256. d
1.230. lc elay_ms(10);
d_gotoxy(1,1); 1.257. se
1.231. // t_timer1(digital);
printf(lcd_putc,"\t 1.258. if
%f",resolucion); (get_timer1()>ccp_2)
1.232. d 1.259. {
elay_ms(100); 1.260. o
1.233. // utput_low(pin_c0);
printf(lcd_putc,"\contador= 1.261. o
%i",cont); utput_low(pin_c4);
1.234. d 1.262. o
elay_ms(5); utput_high(pin_c5);
1.235. se 1.263. c
t_timer1(cont); ont=4;
1.236. c 1.264. }
cp_2=0b10011001; // damos el 1.265. se
valor al modulo t_timer1(cont);
1.237. 1.266. c
1.238. if ont=cont+1;
(get_timer1()==0)// realizamos 1.267. }
las comparaciones 1.268. if
1.239. { (get_timer1()==2)
1.240. d 1.269. {
elay_ms(10); 1.270. se
1.241. se t_timer1(digital);
t_timer1(digital); 1.271. se
1.242. if tup_ccp2(CCP_COMPARE_SE
(get_timer1()<ccp_2) T_ON_MATCH); // la
1.243. { comparacion esta en 1

103
1.272. se 1.277. c
t_timer1(cont); ont=0;
1.273. c 1.278. d
ont=cont+1; elay_ms(100);
1.274. } 1.279. }
1.275. if 1.280. }
(get_timer1()>=3) 1.281. }
1.276. {
1.282.

1.283. EJERCICO PROPUESTO

1.284. El siguiente programa trabaja con el módulo CCP en modo comparación,


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 módulo en modo PWM utiliza el Timer2 para generar un tren de
pulsos de amplitud y ciclo de trabajo variable señal 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 señal o
(“duty_cicle”). Si aplicamos esta señal a una carga (lámpara) podemos
controlar la potencia entregada y, por lo tanto, el nivel de iluminación según la
figura.

104
1.289.
1.290. Figura 45 Diagrama de Bloques de Modo PWM Fuente: Datasheet 16F887 y 18F4550

1.291. En modo PWM, el pin CCPx puede generar una señal de salida PWM de
10bits de resolución. 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 período de pulso de salida (T) se determina por el registro PR2 del
temporizador Timer2. El período de PWM se puede calcular por la siguiente
ecuación
1.295.
1.296. �=(��2+1)∗4∗����∗������������2
1.297.
1.298. El ciclo de trabajo de PWM se especifica al utilizar en total 10 bits: los
ocho bits más significativos del registro CCPR1L y los dos bits menos
significativos adicionales del registro CCP1CON (DC1B1 y DC1B0). El
resultado es un número de 10 bits dado por la siguiente fórmula
1.299.
1.300. �=(�����:�������<5:4>)∗����∗������������2
1.301.

105
1.302. CCPRxH es de sólo 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 más largo que el período de PWM.
 En esta aplicación, no se puede utilizar el post-escalador del temporizador
Timer2 para generar períodos de PWM largos.
1.304.
1.305. Cuando TMR2 (+ 2 bits) se iguala a CCPxH (+ 2 bits), CCPx ← 0.
1.306.
 Existe una resolución (número de bits) máxima que se puede obtener con el
funcionamiento en modo PWM.
1.307.

1.308.
1.309.
1.310. Pasos para configurar e iniciar el módulo CCP1 para funcionar en
modo PWM:
1.311. Para configurar e iniciar el módulo CCP1 para funcionar en modo PWM,
siga los siguientes pasos:

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

 Seleccionar el período de señal PWM al introducir el valor en el registro PR2.

 Configurar el módulo CCP1 para funcionar en modo PWM al combinar los bits
del registro CCP1CON.

 Ajustar el ciclo de trabajo de señal 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 interrupción TMR2IF en el registro


PIR1

106
 Ajustar el valor de división 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 después 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 Módulo CCP


1.314. Descripción: Realizamos el modo PWM del
módulo CCP, donde efectuamos con nuestra programación el ciclo de trabajo
del PWM utilizando las diferentes ecuaciones y poder generar un código 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. Fig1. Modo PWM


1.318. Simulación: Proteus
1.319.
1.320. #i 1.330. #i
nclude <16f887.h> nclude <kbd_lib.c>
1.321. #f 1.331. #
uses use fast_io(C)
XT,NOWDT,nomclr,NOLVP 1.332.
1.322. # 1.333. v
use delay(clock=4000000) oid main ()
1.323. # 1.334. {
define LCD_DB4 PIN_D4 1.335. c
1.324. # omienzo:
define LCD_DB5 PIN_D5 1.336. c
1.325. # har k; //variable char para
define LCD_DB6 PIN_D6 guardar valor de tec
1.326. # 1.337. c
define LCD_DB7 PIN_D7 har dato[3]; //matriz de 3 datos
1.327. # para ingreso de valor pwm
define LCD_RS PIN_D2 centen decena unidad
1.328. # 1.338. in
define LCD_E PIN_D3 t i; //indice de la matriz de 3
1.329. #i valores para el ingreso del
nclude <lcd1.c> teclado
108
1.339. in 1.361.
t c, d, u; //valores para pwm 1.362.
1.340. in while(i<=2) //ciclo
t16 PWM; //entero de whilw para ingreso de los
longitud 16 paraalmacenar valores PWm uno por uno en la
valor de pwm matriz
1.341. se 1.363.
t_tris_c(0b00000000); //se {
debe establecer el puerto C 1.364.
donde esta CCP como salida k=kbd_getc(); //captura el
para que funcione bien valor del puerto en K
1.342. 1.365.
1.343. lc if(k!=0)
d_init(); //INICIAR LCD 1.366.
1.344. k {
bd_init(); //INICIAR 1.367.
TECLADO dato[i]=k; //almacena el valor
1.345. p obtenido en el indice i de la
ort_b_pullups(TRUE); matriz dato PWM
//activar pull ups del pueto b 1.368.
1.346. i++;
1.347. lc 1.369.
d_putc("\f Grupo 1 PWM \n"); printf(lcd_putc,"%u",k-
//\f borra el lcd \cambia 48); //pone el dato en
siguiente linea pantalla en valor numerico %u
1.348. d -48
elay_ms(1000); 1.370.
1.349. }
1.350. 1.371.
while (true) }
1.351. 1.372.
{ 1.373.
1.352. c=(dato[0]-48); //calculo
k=kbd_getc(); de los valores numericos de
1.353. i char a numero
f(k!=0){ 1.374.
1.354. i d=(dato[1]-48);
f(k=='A'){ 1.375.
1.355. u=dato[2]-48;
1.356. 1.376.
inicio: PWM=(100*c+10*d+u)*10.225
1.357. ; //valor del PWM por 10´24
//etqueta de retorno si se desea debido a la resolucion
ingresar otro valor con A 1.377.
1.358. 1.378.
i=0; if ((100*c+10*d+u)>100||c>1)
1.359. //si el valor es mayor a 100 o en
1.360. centena mayor de 1
printf(lcd_putc,"\f ON: 1.379.
INGRESE "); {
109
1.380. 1.396.
printf(lcd_putc,"\f Incorrecto"); 1.397.
1.381. k=kbd_getc();
delay_ms(500); 1.398.
1.382. if(k=='A')
} 1.399.
1.383. {
else // si el valor es 1.400.
correcto genera el PWM goto inicio;//obtengo el valor de
1.384. k si presiono A se regresa al
{ inicio
1.385. 1.401.
printf(lcd_putc,"\f PWM = %u }
%u%u ",c,d,u); 1.402.
1.386. 1.403.
printf(lcd_putc,"\n Press A new goto pwm; //si no presiono A
valor"); se queda en el mismo ciclo con
1.387. el mismo valor de duty
delay_ms(2000); 1.404.
1.388. }
1.389. 1.405.
pwm: }
1.390. 1.406.
1.391. k=kbd_getc();
// configuraciones para el PWM 1.407. i
en timer 2 y CCP1 f(k=='B'){
1.392. 1.408. l
1.393. cd_putc("\f Apagado");
setup_timer_2(T2_DIV_BY_16 1.409.
, 255, 1); //con 100 es 628 hz }
con 255 244 hz revisar formula 1.410.
1.394. goto comienzo;
setup_ccp1(CCP_PWM); 1.411.
1.395. }
set_pwm1_duty(PWM); 1.412.
//ciclo de trabajo segun valor de }}
PWM almacenado
1.413.

1.414. EJERCICO PROPUESTO

1.415. El siguiente código presenta el modo PWM del módulo CCP, lo que nos
permitirá variar el ciclo de trabajo de una señal cuadrática en 3 posiciones
diferentes y verificar la forma de onda y la variación 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 (sólo si se utiliza un ciclo de trabajo de 8 bits)
1.436. CCP_PWM_PLUS_2 (sólo si se utiliza un ciclo de trabajo de 8 bits)
1.437. CCP_PWM_PLUS_3 (sólo si se utiliza un ciclo de trabajo de 8 bits)
1.438. SETUP_COMPARATOR(mode)
1.439.
1.440. Sólo los PIC de la serie 16c62x pueden usar esta función (véase 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, ULTRASÓNICO Y


TCRT5000)
1.459.
1.460. Sensores y actuadores son ejemplos de transductores.
1.461. Un transductor es un dispositivo que convierte energía de tipo calórica,
lumínica, acústica, presión, movimiento, caudal, etc. a otra generalmente
eléctrica para poder medirla y eventualmente controlarla en forma relativamente
fácil.

1.462. Características de los sensores


1.463. Cuando se diseñan sistemas de adquisición de datos con computadora,
hay aspectos a cerca de los sensores que es necesario tener en cuenta:
- La naturaleza de la señal que el sensor – transductor genera: voltaje, rango de
amplitud, respuesta en frecuencia, precisión necesaria, determinan el tipo de
acondicionamiento de señal, convertidor A/D y cualquier otro hardware a
utilizar.
- La influencia de las señales de ruido así como los efectos de carga del hardware
de adquisición de datos sobre el sensor.
- La calibración del sensor con respecto a la variable física. Si la respuesta del
sensor a los cambios de la variable física es lineal o no. Una calibración mal
hecha va a producir mediciones erróneas.
- La interdependencia entre los distintos componentes del sistema de adquisición
de datos, por ejemplo un sensor muy bueno, con un pobre convertidor A/D no
sirve de casi nada.

112
- La precisión del sensor, esto es la capacidad de medir el mismo valor repetidas
veces en idénticas 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 histéresis de un sensor, la cual se define como la dependencia de la salida del
sensor de la respuesta anterior. Esta es muy común en sistemas magnéticos y
mecánicos. [1]
1.464.

1.465. Sensor LM35 (sensor de temperatura)


1.466. La serie LM35 es la precisión de circuitos integrados de temperatura,
cuya tensión de salida es linealmente proporcional a la Celsius (centígrados) 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 producción para obtener centígrados conveniente
escalado.
1.467. El LM35 no requiere ninguna calibración externa o recorte para
proporcionar una precisión típica 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 calibración al nivel de la oblea. El LM35 de baja
impedancia de salida, salida lineal y precisa calibración inherente hace una
interfaz para la lectura o los circuitos de control especialmente fácil.
1.468. Lo se puede utilizar con fuentes de alimentación individuales, o con más
y suministros de menos. Como se señala a sólo 60mA de su suministro, tiene
muy bajo calentamiento espontáneo, 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
precisión). La serie LM35 es envasado disponibles en paquetes herméticos de
transistores A-46, mientras que el LM35C, LM35CA y LM35D también están
disponibles en el plástico TO-92 Transistor paquete. El LM35D es también

113
disponible en una superficie 8-plomo montar esbozo paquete pequeño y un
plástico A-202 paquete.

1.469.
1.470. Figura 46 Sensor de temperatura LM35

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

1.472. Características
- Calibrada directamente en grados Celsius (centígrados)
- Lineal + 10,0 mV / ° C factor de escala 0,5 ° C exactitud regulable (a +25 ° C)
- Calificación 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 calefacción, 0,08 ° C en aire
- No linealidad sólo 1/4 ° C típico
- Impedancia de salida baja, de 0,1Ω para carga de 1 [2]

1.473. Aplicaciones Típicas

1.474.
1.475. Figura 47 Sensor de temperatura LM35

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

1.477.

114
1.478.
1.479. Figura 48 Sensor de temperatura LM35

1.480. 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. Descripción: 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. Fig1. Medidor de Temperatura


1.489. Simulación: Proteus
1.490. #
1.491. in 1.500. #
clude <18f4550.h> define LCD_E PIN_D0
1.492. #f 1.501. #i
uses INTRC, NOWDT, nclude <lcd1.c>
NOPUT, NOMCLR, 1.502.
NOBROWNOUT, NOLVP, 1.503. ///
NOCPD, NOPROTECT,HS /////////////////LECTURA DE
1.493. # DATOS///////////////////
device adc=10 1.504. v
1.494. # oid main (){
use delay (clock=20M) 1.505. fl
1.495. # oat temp1;
define LCD_DB4 PIN_D4 1.506. fl
1.496. # oat temp,tempf=0.0,tempt=0.0;
define LCD_DB5 PIN_D5 1.507. in
1.497. # t read,i;
define LCD_DB6 PIN_D6 1.508. lc
1.498. # d_init();
define LCD_DB7 PIN_D7 1.509. w
1.499. # hile (true){
define LCD_RS PIN_D1

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

117
multiplica por 100 para alcanzar //CONVIERTE EL VALOR
150 grados LEIDO DE HEXA AL REAL el
1.543. numero 0.01960784314
delay_ms(10); 1.554.
1.544. tempf=tempf+temp; //viene de
} dividir (5/255) y el resultado se
1.545. multiplica por 100 para alcanzar
if(temp1<=172&&temp1>131) 150 grados
1.546. 1.555.
{ delay_ms(10);
1.547. 1.556.
temp=(temp1*0.004999585*10 }
0)-1.99;//0.01960784314*100); 1.557.
//CONVIERTE EL VALOR }
LEIDO DE HEXA AL REAL el 1.558.
numero 0.01960784314 tempt=tempf/5.0;
1.548. 1.559.
tempf=tempf+temp; //viene de printf(lcd_putc,"
dividir (5/255) y el resultado se \fTEMPERATURA \nT= %2.2f
multiplica por 100 para alcanzar oC",tempt); //MUESTRA EN
150 grados EL LCD EL VALOR DE
1.549. TEMPERATURA
delay_ms(10); 1.560.
1.550. i=0;
} 1.561.
1.551. tempf=0.0;
if(temp1<=213&&temp1>172) 1.562.
1.552. tempt=0.0;
{ 1.563.
1.553. delay_us(20);
temp=(temp1*0.004999585*10 1.564.
0)-2.49;//0.01960784314*100); 1.565. }
1.566.
1.567. }
1.568.
1.569.

1.570. EJERCICIO PROPUESTO


1.571. El siguiente programa está configurado para captar la señal analógica de
un sensor lm35 y visualizarla en una pantalla lcd.
1.572.
1.573.

1.574. SENSOR ULTRASÓNICO


1.575. Un sensor ultrasónico transmite ondas ultrasónicas 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 intrusión, puertas automáticas
y sensores de copia de seguridad para automóviles.
1.576. Acompañado por el rápido desarrollo de la tecnología de procesamiento
de la información, nuevos campos de aplicación, tales como equipos de
automatización de fábricas de automóviles y la electrónica van en aumento. [3]
1.577. SENSOR ULTRASONIDOS HC-SR04
1.578. El sensor de ultrasonidos se enmarca dentro de los sensores para medir
distancias o superar obstáculos, entre otras posibles funciones.
1.579. En este caso vamos a utilizarlo para la medición de distancias. Esto lo
consigue enviando un ultrasonido (inaudible para el oído humano por su alta
frecuencia) a través 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 precisión de 3mm.

1.581.
1.582. Figura 49 Sensor ultrasónico

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

1.584. Funcionamiento
1.585. El sensor PING funciona mediante la transmisión de una ráfaga 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 duración de este pulso se
puede calcular fácilmente la distancia al objetivo.
1.586. Las características más importantes del sensor PING son las siguientes:
- Rango: 2 cm a 3 m
- LED indicador de ráfaga que muestra la actividad del sensor
- Interfaz bidireccional por pulso, en un único pin de E/S para comunicación con
microcontroladores TTL (5V) o CMOS (3.3V)
- Disparo de entrada: pulso TTL positivo, 2 μs mínimo, 5 μs típico
119
- Pulso eco de salida: pulso positivo TTL, 115 μs mínimo a 18.5 ms máximo. [4]

1.587. EJERCICIO 5

1.588. Tema: Sensor Ultrasónico


1.589. Descripción: Realizamos un programa que con la
sensorizacion de un ultrasónico 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 Ultrasónico
 Pantalla LCD

1.591.
1.592.

1.593. Fig1Sensor Ultrasónico


1.594. Simulación: Proteus

120
1.595. #i 1.620. pr
nclude <16F887.h> intf(LCD_PUTC, "\f
1.596. # Ultrasonico...");
FUSES 1.621. d
XT,NOWDT,NOPROTECT,PU elay_ms(500);
T,NOBROWNOUT,NOLVP 1.622.
1.597. # 1.623. se
use delay(clock=4000000) tup_timer_1(T1_INTERNAL|
1.598. # T1_DIV_BY_8);
define LCD_DB4 PIN_D4 1.624.
1.599. # 1.625. w
define LCD_DB5 PIN_D5 hile(1)
1.600. # 1.626. {
define LCD_DB6 PIN_D6 1.627. o
1.601. # utput_high(trig);
define LCD_DB7 PIN_D7 1.628. d
1.602. # elay_us(20);
define LCD_RS PIN_D1 1.629. o
1.603. # utput_low(trig);
define LCD_E PIN_D0 1.630. w
1.604. #i hile(!input(echo))
nclude <lcd1.c> 1.631. {
1.605. }
1.606. 1.632. se
1.607. in t_timer1(0);
t16 tiempo; 1.633. w
1.608. fl hile(input(echo))
oat distancia; 1.634. {
1.609. # }
define trig pin_B1 1.635. ti
1.610. # empo=get_timer1();
define echo pin_B0 1.636. if
1.611. # (tiempo<41)
USE standard_io(b) 1.637. {
1.612. 1.638. if
1.613. v (tiempo<41&&tiempo>34)
oid main() 1.639. {
1.614. { 1.640. di
1.615. lc stancia=(tiempo*7.45)/(58.0);
d_init(); 1.641. pr
1.616. pr intf(LCD_PUTC, "\fContador :
intf(LCD_PUTC, "\f %Lu \nDistancia = %0.2f
Ultrasonico."); cm",tiempo,distancia);
1.617. d 1.642. d
elay_ms(500); elay_ms(500);
1.618. pr 1.643. }
intf(LCD_PUTC, "\f 1.644. if
Ultrasonico.."); (tiempo<=34&&tiempo>31)
1.619. d 1.645. {
elay_ms(500);
121
1.646. di 1.658. di
stancia=(tiempo*7.1)/(58.0); stancia=(tiempo*5.3)/(58.0);
1.647. pr 1.659. pr
intf(LCD_PUTC, "\fContador : intf(LCD_PUTC, "\fContador :
%Lu \nDistancia = %0.2f %Lu \nDistancia = %0.2f
cm",tiempo,distancia); cm",tiempo,distancia);
1.648. d 1.660. d
elay_ms(500); elay_ms(500);
1.649. } 1.661. }
1.650. if 1.662. }
(tiempo<=31&&tiempo>28) 1.663. el
1.651. { se{
1.652. di 1.664. di
stancia=(tiempo*6)/(58.0); stancia=(tiempo*8.05)/(58.0);
1.653. pr 1.665. pr
intf(LCD_PUTC, "\fContador : intf(LCD_PUTC, "\fContador :
%Lu \nDistancia = %0.2f %Lu \nDistancia = %0.2f
cm",tiempo,distancia); cm",tiempo,distancia);
1.654. d 1.666. d
elay_ms(500); elay_ms(500);
1.655. } 1.667. }
1.656. if 1.668. }
(tiempo<=28&&tiempo>20) 1.669. }
1.657. {
1.670.
1.671.

1.672. EJERCICO PROPUESTO

1.673. El siguiente programa trabaja con una serie de bits de resolución que
permiten hacer u calculo a la señal analógica que es enviada por medio del
sensor e indicarnos la distancia qu este se encuentra. Sin embargo en proteus al
no contar con las librerías 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 más
importante en nuestras vidas, sensor de proximidad se convierte en un
compañero simple y de bajo costo que permite una amplia gama de las
aplicaciones para hacer nuestra vida diaria más fácil.
1.677. Sensor de proximidad basado en la detección de señales de infrarrojos
requiere de dos partes: LED infrarrojo y sensor de infrarrojos. El LED de
infrarrojos emite señal de infrarrojos al objeto de detección, una porción de
122
señal que rebota de la superficie de detección de objeto, esta señal infrarroja
reflejada entonces fue capturada por el sensor de infrarrojos.
1.678. La intensidad de los cambios de la señal de infrarrojos capturados en
consecuencia cuando un objeto de detección es cada vez más cerca o en
movimiento, la señal infrarroja capturada se procesa en tiempo real a través de
la luz para la conversión digital para revelar la distancia o incluso el
movimiento del objeto detectable.[5]

1.679.
1.680. Figura 50 No hay detección, no hay objeto.

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

1.682. Figura No 32.

1.683.
1.684. Figura 51 Objeto detectable dentro de 10 cm de detección de proximidad.

1.685. 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 construcción 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 película 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 reflexión.
1.690. Detecta materiales reflexivos tales como papel, tarjetas de IBM, cintas
magnéticas, 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 potenciómetro P1 se varía la
distancia a la que es detectado el objeto. Contra más baja sea la resistencia de
este potenciómetro, más 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 detección de obstáculos por reflexión y detección de
oponentes en combates de sumo.
1.696. Especificaciones:
 Detección de distancia: 12m m
 Longitud de onda del funcionamiento: 950 milímetros [6]

1.697. EJERCICIO 6

1.698. Tema: Sensor Infrarrojo


1.699. Descripción: Realizamos un control de detección
de objetos con un sensor infrarrojo el cual detecta la presencia de un objeto en
la distancia establecida en la programación.
1.700. Materiales:
 PIC 16F887
 Sensor Infrarrojo
 1 resistencia de 10kΩ
 1 resistencia de 150Ω
 Pantalla LCD

1.701.

124
1.702.

1.703. Fig1Sensor Infrarrojo


1.704. Simulación: Proteus
1.705. 1.718.
1.706. #i 1.719.
nclude <16f887.h> 1.720. in
1.707. #f t16 value;
uses XT, NOWDT, 1.721. fl
NOPROTECT, NOLVP, oat32 y;
NOCPD, NOWRT, NODEBUG 1.722. v
1.708. # oid main()
device *=16 1.723. {
1.709. # 1.724. se
device adc=10 tup_adc_ports(sAN0|
1.710. # VSS_VDD);// entrada del
use delay(clock=4M) sensor
1.711. # 1.725. se
define LCD_DB4 PIN_D4 tup_adc(ADC_CLOCK_INTE
1.712. # RNAL);
define LCD_DB5 PIN_D5 1.726. se
1.713. # t_adc_channel(0);
define LCD_DB6 PIN_D6 1.727.
1.714. # 1.728. lc
define LCD_DB7 PIN_D7 d_init();
1.715. # 1.729. lc
define LCD_RS PIN_D2 d_gotoxy(5,1);
1.716. # 1.730. pr
define LCD_E PIN_D3 intf(lcd_putc,"Grupo 1");
1.717. #i 1.731. pr
nclude <lcd.c> intf(lcd_putc,"\n Infrarrojo");

125
1.732. d 1.747. d
elay_ms(650); elay_ms(1000);
1.733. lc 1.748. if
d_init(); ((y<=3)&&(y>=1))// condicion
1.734. para detectar en un rango
1.735. especifico a un objeto
1.736. w 1.749. {
hile(true)// ciclo para generar el 1.750. pr
valor de la distancia que intf(lcd_putc,"\f Detecta
proporciona el sensor Objeto");
1.737. { 1.751. d
1.738. d elay_ms(1000);
elay_ms(50); 1.752. pr
1.739. v intf(lcd_putc,"\f");
alue=read_adc();//devuelve el 1.753. }
valor del adc 1.754. el
1.740. y se// caso contrario no detecta el
=value*0.005;// funcion para objeto ; fuera de rango
generar la distancia 1.755. {
1.741. y 1.756. pr
=y-1.183; intf(lcd_putc,"\f No Detecta
1.742. Objeto");
1.743. lc 1.757. d
d_gotoxy(5,2); elay_ms(1000);
1.744. pr 1.758. pr
intf(lcd_putc,"%2.2f cm",y);// intf(lcd_putc,"\f");
visualizacion de la distancia en 1.759. }
el lcd 1.760. }
1.745. lc 1.761.
d_gotoxy(5,1); 1.762. }
1.746. pr
intf(lcd_putc,"Distancia");
1.763.

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, Pág. 351) Menciona que:

126
1.772. “Los motores son máquinas utilizadas para convertir potencia eléctrica
en potencia mecánica. ” [ 1 ]

1.773. MOTOR DE CORRIENTE CONTINUA


1.774. Un motor eléctrico de Corriente Continua es esencialmente una máquina
que convierte energía eléctrica en movimiento o trabajo mecánico, a través de
medios electromagnéticos.
1.775. EJERCICO 7
1.776. Tema: PWM con motor DC
1.777. Descripción: Realizamos un control de velocidad
con un PWM el cual generamos desde una programación 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  8 resistencias de 10kΩ
 Motor DC  Pantalla LCD
 Teclado Matricial  Puente H L293D

127

 Fig1 PWM con motor DC


 Simulación: Proteus
 #include <16f887.h>
 #fuses  char dato[3]; //matriz de 3 datos
XT,NOWDT,nomclr,NOLVP para ingreso de valor pwm
 #use delay(clock=4000000) centen decena unidad
 #define LCD_DB4 PIN_D4  int i; //indice de la matriz de
 #define LCD_DB5 PIN_D5 3 valores para el ingreso del
 #define LCD_DB6 PIN_D6 teclado
 #define LCD_DB7 PIN_D7  int c, d, u; //valores para pwm
 #define LCD_RS PIN_D2  int16 PWM; //entero de
longitud 16 paraalmacenar valor
 #define LCD_E PIN_D3
de pwm
 #include <lcd1.c>
 set_tris_c(0b00000000); //se
 #include <kbd_lib.c> debe establecer el puerto C
 #use fast_io(C) donde esta CCP como salida
 para que funcione bien
 void main () 
 {  lcd_init(); //INICIAR LCD
 comienzo:  kbd_init(); //INICIAR
 char k; //variable char para TECLADO
guardar valor de tec  port_b_pullups(TRUE);
//activar pull ups del pueto b
128
  PWM=(100*c+10*d+u)*10.22
 lcd_putc("\f Grupo 1 PWM \n"); 5; //valor del PWM por 10´24
//\f borra el lcd \cambia debido a la resolucion
siguiente linea 
 delay_ms(1000);  if ((100*c+10*d+u)>100||c>1)
 //si el valor es mayor a 100 o en
 while (true) centena mayor de 1
 {  {
 k=kbd_getc();  printf(lcd_putc,"\f
 if(k!=0){ Incorrecto");
 if(k=='A'){  delay_ms(500);
  }
 inicio:  else // si el valor es
correcto genera el PWM
 //etqueta de retorno si se
 {
desea ingresar otro valor con A
 i=0;  printf(lcd_putc,"\f PWM = %u
%u%u ",c,d,u);

 printf(lcd_putc,"\n Press A
 printf(lcd_putc,"\f ON:
new valor");
INGRESE ");
 delay_ms(2000);


 while(i<=2) //ciclo
 pwm:
whilw para ingreso de los
valores PWm uno por uno en la 
matriz  // configuraciones para el
 { PWM en timer 2 y CCP1
 k=kbd_getc(); //captura el 
valor del puerto en K  setup_timer_2(T2_DIV_BY_1
 if(k!=0) 6, 255, 1); //con 100 es 628 hz
 { con 255 244 hz revisar formula
 dato[i]=k; //almacena el  setup_ccp1(CCP_PWM);
valor obtenido en el indice i de  set_pwm1_duty(PWM);
la matriz dato PWM //ciclo de trabajo segun valor de
 i++; PWM almacenado
 printf(lcd_putc,"%u",k- 
48); //pone el dato en pantalla  k=kbd_getc();
en valor numerico %u -48  if(k=='A')
 }  {
 }  goto inicio;//obtengo el valor
 de k si presiono A se regresa al
 c=(dato[0]-48); //calculo inicio
de los valores numericos de char  }
a numero 
 d=(dato[1]-48);  goto pwm; //si no presiono A
 u=dato[2]-48; se queda en el mismo ciclo con
el mismo valor de duty
 }
129
 }  }
 k=kbd_getc();  goto comienzo;
 if(k=='B'){  }
 lcd_putc("\f Apagado");  }}


 EJERCICIO PROPUESTO
 El siguiente programa tiene por objetivo diseñar un lenguaje de programación
que nos permita variar el ciclo de trabajo de una señal cuadrática y verificar su
funcionaiento en un motor de 5volts.

 FUNDAMENTOS DE OPERACIÓN DE LOS MOTORES


ELÉCTRICOS
 En magnetismo se conoce la existencia de dos polos: polo norte (N) y polo sur
(S), que son las regiones donde se concentran las líneas de fuerza de un imán.
Un motor para funcionar se vale de las fuerzas de atracción y repulsión 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 magnéticos
iguales se repelen, y polos magnéticos diferentes se atraen, produciendo así el
movimiento de rotación.
 Un motor eléctrico opera primordialmente en base a dos principios: El de
inducción, descubierto por Michael Faraday en 1831; que señala, que si un
conductor se mueve a través de un campo magnético o está situado en las
proximidades de otro conductor por el que circula una corriente de intensidad
variable, se induce una corriente eléctrica en el primer conductor. Y el principio
que André Ampére observo en 1820, en el que establece: que si una corriente
pasa a través de un conductor situado en el interior de un campo magnético, éste
ejerce una fuerza mecánica o f.e.m. (fuerza electromotriz), sobre el conductor.
 Antonio Nachez (2000, Pág. 5) Menciona que:
 “Los tiristores constituyen una familia de dispositivos que pueden tomar
diferentes nombres y características, 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 símbolo 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 = cátodo


 Funcionamiento básico del SCR


 Figura 53 Circuito de Corrientes Fuente: http://www2.uca.es/grup-
invest/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 más corriente en IC2, que es lo mismos que IB1 en la base de Q1
 Los parámetros del SCR son:
 - VRDM: Máximo voljaje inverso de cebado (VG = 0)
 - VFOM: Máximo voltaje directo sin cebado (VG = 0)
 - IF: Máxima corriente directa permitida.
131
 - PG: Máxima disipación de potencia entre compuerta y cátodo.
 - VGT-IGT: Máximo voltaje o corriente requerida en la compuerta (G) para el
cebado
 - IH: Mínima corriente de ánodo requerida para mantener cebado el SCR
 - dv/dt: Máxima variación de voltaje sin producir cebado.
 - di/dt: Máxima variación 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 conexión 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 sólo 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 señal 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 señal 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 señal de disparo se obtiene de la misma patilla (la
puerta o compuerta).
 EJERCICIO 8
 Tema: PWM con motor AC y TRIAC
 Descripción: 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 programación 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


 Simulación: Proteus
 #include <16F887.h>  while (true)
 #fuses intrc_io, nowdt, nomclr,  {
noput  delay_us(100);
 #use delay(clock=4M)  k=kbd_getc();
 #include <kbd_4x4.c>  if(k!=0)
 #BYTE WPUB =0X95  {
 #BYTE OPTION_REG = 0X81 
 #include <lcd3.c>  y=k-48;
 char k; 
 int y,z;  switch (y)
  {
 void main() 
 {  case(1):
 OPTION_REG = 0;  z=1;
 WPUB= 0B11111111;  lcd_putc("\f nivel de PWM\n
 //port_b_pullups(true); 15¡/o");
 kbd_init();  delay_us(20);
 lcd_init();  break;
 lcd_putc("\f !BIENVENIDO!\n 
Presione #");  case(2):
 delay_us(100);  z=2;

134
 lcd_putc("\f nivel de PWM \n  delay_us(7200);
30¡/o");  output_high(pin_c0);
 delay_us(20);  delay_us(1000);
 break;  }
  }
 case(3):  }else if((z==2))
 z=3; 
 printf(lcd_putc,"\f nivel de  {
PWM \n 50¡/o");  while(input(pin_a1))
 delay_us(20);  {
 break;  if(input(pin_a0))
  {
 case (4):  output_low(pin_c0);
 z=4;  delay_us(6000);
 printf(lcd_putc,"\f nivel de  output_high(pin_c0);
PWM \n 65¡/o");  delay_us(2200);
 delay_us(20);  }
 break;  }
  }else if((z==3))
 case (5): 
 z=5;  {
 printf(lcd_putc,"\f nivel de  while(input(pin_a1))
PWM \n 90¡/o");
 {
 delay_us(20);
 if(input(pin_a0))
 break;
 {

 output_low(pin_c0);
 case (6):
 delay_us(4800);
 lcd_putc("\f !BIENVENIDO!\n
 output_high(pin_c0);
Presione #");
 delay_us(3400);
 output_low(pin_c0);
 }
 delay_us(20);
 }
 K=0;
 }else if((z==4))
 z=0;


 {
 }
 while(input(pin_a1))
 }else output_low(pin_c0);
 {

 if(input(pin_a0))
 if((z==1))
 {
 {
 output_low(pin_c0);
 while(input(pin_a1))
 delay_us(3600);
 {
 output_high(pin_c0);
 if(input(pin_a0))
 delay_us(4600);
 {
 }
 output_low(pin_c0);
 }
135
 }else if((z==5))  output_low(pin_c0);
  delay_us(2400);
 {  output_high(pin_c0);
 while(input(pin_a1))  delay_us(5800);
 {  }
 if(input(pin_a0))  }
 {
 }

 }

 }


 EJERCICO PROPUETO
 El siguiente programa tiene por objetivo establecer un lenguaje de programación
que permita controlar el ciclo de trabajo de en señal PWM además de acoplarse
a un circuito de potencia que detectara el cruce pro cero y variaría la cantidad de
energía que legue a la carga.

 COMUNICACIÓN I2C Y SPI

 Introducción
 La comunicación entre microcontroladores se puede
realizar de dos formas ya sea síncrona o paralela: la primera envía los datos
simultáneamente mientras que la otra envía dato por dato. La familia PIC18
dispone de varias posibilidades de comunicaciones serie. Dispone de un puerto
dedicado a comunicaciones síncronas 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 periférico para SPI no podrá usarse para
I2C y viceversa. Si se precisan de forma conjunta comunicaciones I2C y SPI la
única solución es un microcontrolador con dos puertos SSP.

 Marco Teórico
 COMUNICACIÓN I2C (INTER-INTEGRATED
CIRCUIT)

136
 Eduardo J. Carletti (2008) Menciona que:

 “El bus I2C, un estándar que facilita la comunicación
entre microcontroladores, memorias y otros dispositivos con cierto nivel
de "inteligencia", sólo requiere de dos líneas de señal y un común y
permite el intercambio de información entre muchos dispositivos a una
velocidad aceptable, de unos 100 Kbits por segundo. La metodología de
comunicación de datos del bus I2C es en serie y sincrónica. Una de las
señales 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 Interconexión
de Circuitos Integrados es un interfaz serie de dos conductores que se
encuentra actualmente en la mayoría de microcontroladores PIC. La
especificación original, o modo Estándar, es para velocidades de
transmisión 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 señales de reloj para
permitir esa transferencia, mientras que los otros dispositivos se
comportan como esclavos”. [2]

 García Eduardo Breijo (2008, Pag 190) Menciona que:

 “la comunicación I2C es una interfaz derivada del
módulo MSSP para acceder a la comunicación con otros dispositivos
periféricos 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
síncrona es muy utilizado en la industria para la comunicación entre
microcontroladores y sus periféricos en sistemas integrados. Dentro de los
parámetros a considerar tenemos:
 Utiliza únicamente dos líneas para trasmitir los datos (SDA) y la
señal de reloj (SCL).
 Necesitan resistencias pull-up, ya que los dispositivos sólo pueden
forzar al bus a ponerse a “0”.
 La línea de tierra debe ser común a todos los dispositivos
 Es bidireccional Half-Duplex y sigue el modelo maestro-esclavo.
 Los dispositivos de un bus I2C tienen una dirección ú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 señal
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 más
de un maestro conectado y controlando el bus. Existen mecanismos
para evitar que dos maestros comiencen una trasferencia de
información al mismo tiempo.







Figura 55 Conexión 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 función de
desplazamiento del nivel de voltaje, en modo High-speed (Hs-mode) ofrece
una solución ideal para los sistemas de tecnología mixta, donde las altas
velocidades y la variedad de voltajes (5v, 3v o menor) son comúnmente
usados.

138

 Figura 56 Términos 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 códigos suficientes para
enviar o recibir información:
 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 comunicación 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

 Después de la condición Start, se envía la dirección del


esclavo con el que se quiere comunicar, esta dirección tiene 7 bits seguidos
por un octavo de bit que corresponde a R/W (0: Indica transmisión, 1: Indica
solicitud de datos). Una transferencia de datos siempre acaba con una
condición de stop generada por el master, sin embargo si un master todavía
desea comunicarse con el bus, puede generar repetidamente condiciones de
Start y direccionar a otro esclavo sin generar primero la condición 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 dirección


 Master lee a un esclavo inmediatamente después del primer byte
 En el momento del primer reconocimiento el master-
trasmisor ser conveniente en un master-receptor y el esclavo-receptor
en un esclavo-transmisor. El primer reconocimiento es aun generado
por el esclavo. La condición 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 dirección
para el bus I2C es tal que el primer byte después de la condición de Start
usualmente determina que esclavo ha sido seleccionado por el master
 La excepción se da en la “llamada general” (byte 0000
0000) con la que se direcciona a todos los dispositivos, cuando esta dirección
es usada, todos los dispositivos en teoría deben responder con un
reconocimiento, sin embargo algunos dispositivos pueden estar
condicionados a ignorar esta dirección. El segundo byte de la “llamada
general” define entonces la acción a tomar.
 Hay dos formatos de dirección. El más simple es el
formato de 7 bits con un bit R/W que permite direccionar hasta 128
dispositivos, que en la práctica se reduce a 112 debido a que las restantes
direcciones son de uso reservado. El más 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 dirección 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
 Descripción: 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 programación 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


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

143
  delay_us(20);
 y=k-48;  K=0;
  z=0;
 switch (y) 
 {  }
  }else output_low(pin_c0);
 case(1): 
 z=1;  if((z==1))
 lcd_putc("\f nivel de PWM\n  {
15¡/o");  while(input(pin_a1))
 delay_us(20);  {
 break;  if(input(pin_a0))
  {
 case(2):  output_low(pin_c0);
 z=2;  delay_us(7200);
 lcd_putc("\f nivel de PWM \n  output_high(pin_c0);
30¡/o");  delay_us(1000);
 delay_us(20);  }
 break;  }
  }else if((z==2))
 case(3): 
 z=3;  {
 printf(lcd_putc,"\f nivel de  while(input(pin_a1))
PWM \n 50¡/o");  {
 delay_us(20);  if(input(pin_a0))
 break;  {
  output_low(pin_c0);
 case (4):  delay_us(6000);
 z=4;  output_high(pin_c0);
 printf(lcd_putc,"\f nivel de  delay_us(2200);
PWM \n 65¡/o");
 }
 delay_us(20);
 }
 break;
 }else if((z==3))


 case (5):
 {
 z=5;
 while(input(pin_a1))
 printf(lcd_putc,"\f nivel de
 {
PWM \n 90¡/o");
 if(input(pin_a0))
 delay_us(20);
 {
 break;
 output_low(pin_c0);

 delay_us(4800);
 case (6):
 output_high(pin_c0);
 lcd_putc("\f !BIENVENIDO!\n
Presione #");  delay_us(3400);
 output_low(pin_c0);  }
144
 }  output_low(pin_c0);
 }else if((z==4))  delay_us(2400);
  output_high(pin_c0);
 {  delay_us(5800);
 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)) 
 { 



 EJERCICO PROPUESTO

 El siguiente programa permite la comunicación entre dos


microcontroladores pic uno denominado maestro y otro
llamado esclavo mediante el protocolo I2C, además cuenta
con un teclado conectado a ambos pics que envían datos al
presionar una tecla

COMUNICACIÓN SPI (SERIAL PERIPHERAL


INTERFACE)

Ingeniería en Microcontroladores (Cap. 1, Pág. 3) [ online ] Menciona que:

145
“SPI es un bus de tres líneas, sobre el cual se transmiten paquetes de
información de 8 bits. Cada una de estas tres líneas porta la información
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 comunicación serial es full dúplex. Dos de
estas líneas trasfieren los datos (una en cada dirección) y la tercer línea es
la del reloj.” [4]

Sistema de desarrollo para MC (Cap. 5, Pág.97) [ online ] Menciona que:

“SPI, es un estándar establecido por Motorola y adoptado posteriormente


por diferentes fabricantes, como Microchip y Atmel. que utiliza 4 líneas
para interconectar dispositivos periféricos de aja y media velocidad. La
comunicación se realiza siguiendo un modelo maestro/esclavo donde el
maestro selecciona al esclavo y comienza el proceso de
transmisión/recepción de información. SPI constituye un bus full dúplex,
es decir, que se puede enviar y recibir información de manera simultánea,
lo cual, eleva la tasa de transferencia de los datos. No existe ningún
medio de direccionamiento de los dispositivos esclavos y mucho menos
reconocimiento de la recepción de datos. ” [5]

Estándar SPI [ online ] Menciona que:

“El estándar SPI es utilizado para la comunicación serial entre


dispositivos. Se trata de un enlace de datos en serie, síncrono, y que
opera en modo full dúplex, es decir, las señales de datos viajan en ambas
direcciones en forma simultánea. El canal SPI fue diseñado para
aplicaciones de trasmisión 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 podrían ser un
microcontrolador y otro dispositivo. Las señales de trasmisión de datos y
control del canal SPI, usan niveles de voltaje TTL o bien 3.3 volts,
dependiendo de la tecnología de fabricación del dispositivo. Los

146
dispositivos SPI se comunican entre sí utilizando un bus de 4 señales
(MOSI, MISO, SCK, SS) y un esquema maestro/esclavo, en el cual el
maestro inicia el protocolo de trasmisión de los datos.”. [6]

Aspectos generales: En esta comunicación trabajan juntos dos dispositivos, los


2 registros de desplazamiento de 8 bits son conectados desde un registro de
rotación 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 Comunicación 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
cómo se interprete una transferencia SPI.
Características del Módulo SPI: El módulo SPI incluye las siguientes
características:
 Longitud de datos de transmisión programable a 8 o 16 bits.
 Operación en modo master o slave.
 Desplazamiento de datos primero MSB o primero LSB seleccionable
 Modo bidireccional en Full-duplex o simple línea
 Tasa de bit de transmisión programable
 Registro de datos de transmisión y recepción de Doble buffer
 Opciones de polaridad y fase del clock
 Salida de selección de slave
 Flag de modo de error por falla con posibilidad de interrupción de CPU
 Control de operación de SPI durante el modo wait
Funcionamiento SPI: El módulo 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 módulo 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 Módulo SPI opera en modo master cuando el l bit MSTR se
encuentra seteado. Solo en modo master se pueden iniciar transmisiones. Una
transmisión se inicia leyendo el registro SPIxS mientras el SPTEF = 1 y
escribiendo el registro de datos SPI. Si el registro de desplazamientos está vacío,
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 función de
salida de datos y el pin (MOSI) tiene la función 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 módulo SPI

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

Figura 65 Registro de control 1 - SPIxC1


SPIE: Habilitación de interrupción (para SPRF y MODF)
Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdF
SPE: Habilitación de sistema
SPTIE; Habilitación de interrupción por transmisión
MSTR: Selección de modo Master/Slave
CPOL: polaridad de Clock
CPHA: Fase de clock
SSOE: habilitación de salida de selección de slave
LSBFE: primer bit LSB (dirección de desplazamiento)

Figura 66 Bits de selección 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: Habilitación de interrupción por coincidencia


SPIMODE: Modo 8 o 16 bits
MODFEN: Habilita función 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 Operación

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

Registro de Baud rate (SPIxBR)

Figura 69 Selección 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 recepción coincide con el
valor en SPIMH:SPIML
SPTEF: Flag de buffer de transmisión vacio
MODF: Flag modo master por falla

EJERCICO 10
Tema:SPI
Descripción: Realizamos una comunicación 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
visualización de los datos enviados y recibidos.
Materiales:

 2 teclado matricial
 2 PIC’s
 2 pantallas LCD

Fig1 SPI
Simulación: Proteus
MASTER

151
#include <16F887.h> delay_ms(10);
#fuses XT,NOMCLR }
#use delay (clock=4000000) if(l=='3'){
#define LCD_DB4 PIN_B4 printf(lcd_putc,"\n Recibiendo... 7
#define LCD_DB5 PIN_B5 ");
#define LCD_DB6 PIN_B6 delay_ms(10);
#define LCD_DB7 PIN_B7 }
#define LCD_RS PIN_B2 if(l=='4'){
#define LCD_E PIN_B3 printf(lcd_putc,"\n Recibiendo... 2
#include <lcdPB.c> ");
#include <KBD4x4.c> delay_ms(10);
char l; }
int teclas; //Dato a if(l=='5'){
transmitir printf(lcd_putc,"\n Recibiendo... 5
void envio_SPI (){ ");
setup_spi(spi_master | spi_l_to_h | delay_ms(10);
spi_clk_div_16); }
spi_write(teclas); if(l=='6'){
printf(lcd_putc,"\n Recibiendo... 8
} ");
void esclavo1(){ delay_ms(10);
teclas=kbd_getc(); }
if(teclas!=0){ if(l=='7'){
envio_SPI(); printf(lcd_putc,"\n Recibiendo... 3
");
} delay_ms(10);
} }
if(l=='8'){
void main(){ printf(lcd_putc,"\n Recibiendo... 6
lcd_init(); ");
kbd_init(); delay_ms(10);
while (true){ }
if(input(pin_a0)){ if(l=='9'){
setup_spi(spi_slave | spi_l_to_h | printf(lcd_putc,"\n Recibiendo... 9
spi_clk_div_16); ");
lcd_gotoxy(1,1); delay_ms(10);
printf (lcd_putc," Maestro "); }
if(l=='A'){
if(spi_data_is_in()) printf(lcd_putc,"\n Recibiendo... *
{ ");
l=spi_read(); delay_ms(10);
if(l=='1'){ }
printf(lcd_putc,"\n Recibiendo... 1 if(l=='B'){
"); printf(lcd_putc,"\n Recibiendo... 0
delay_ms(10); ");
} delay_ms(10);
if(l=='2'){ }
printf(lcd_putc,"\n Recibiendo... 4 if(l=='C'){
");
152
printf(lcd_putc,"\n Recibiendo... # #include <lcdPB.c>
"); #include <KBD4x4.c>
delay_ms(10); char l;
} int teclas; //Dato a
if(l=='D'){ transmitir
printf(lcd_putc,"\n Recibiendo... D void envio_SPI (){
"); setup_spi(spi_master | spi_l_to_h |
delay_ms(10); spi_clk_div_16);
} spi_write(teclas);
if(l=='*'){
printf(lcd_putc,"\n Recibiendo... A }
"); void esclavo1(){
delay_ms(10); teclas=kbd_getc();
} if(teclas!=0){
if(l=='0'){ envio_SPI();
printf(lcd_putc,"\n Recibiendo... B
"); }
delay_ms(10); }
}
if(l=='#'){ void main(){
printf(lcd_putc,"\n Recibiendo... C lcd_init();
"); kbd_init();
delay_ms(10); while (true){
} if(input(pin_a0)){
} setup_spi(spi_slave | spi_l_to_h |
esclavo1(); spi_clk_div_16);
} lcd_gotoxy(1,1);
printf (lcd_putc," Esclavo ");
else{
if(spi_data_is_in())
lcd_gotoxy(1,1); {
printf (lcd_putc,"\f SIN CONEXION l=spi_read();
"); if(l=='1'){
delay_ms (10); printf(lcd_putc,"\n Recibiendo... 1
} ");
} delay_ms(10);
} }
if(l=='2'){
printf(lcd_putc,"\n Recibiendo... 4
ESCLAVO ");
delay_ms(10);
#include <16F887.h> }
#fuses XT,NOMCLR if(l=='3'){
#use delay (clock=4000000) printf(lcd_putc,"\n Recibiendo... 7
#define LCD_DB4 PIN_B4 ");
#define LCD_DB5 PIN_B5 delay_ms(10);
#define LCD_DB6 PIN_B6 }
#define LCD_DB7 PIN_B7 if(l=='4'){
#define LCD_RS PIN_B2 printf(lcd_putc,"\n Recibiendo... 2
#define LCD_E PIN_B3 ");
153
delay_ms(10); printf(lcd_putc,"\n Recibiendo... #
} ");
if(l=='5'){ delay_ms(10);
printf(lcd_putc,"\n Recibiendo... 5 }
"); if(l=='D'){
delay_ms(10); printf(lcd_putc,"\n Recibiendo... D
} ");
if(l=='6'){ delay_ms(10);
printf(lcd_putc,"\n Recibiendo... 8 }
"); if(l=='*'){
delay_ms(10); printf(lcd_putc,"\n Recibiendo... A
} ");
if(l=='7'){ delay_ms(10);
printf(lcd_putc,"\n Recibiendo... 3 }
"); if(l=='0'){
delay_ms(10); printf(lcd_putc,"\n Recibiendo... B
} ");
if(l=='8'){ delay_ms(10);
printf(lcd_putc,"\n Recibiendo... 6 }
"); if(l=='#'){
delay_ms(10); printf(lcd_putc,"\n Recibiendo... C
} ");
if(l=='9'){ delay_ms(10);
printf(lcd_putc,"\n Recibiendo... 9 }
"); }
delay_ms(10); esclavo1();
} }
if(l=='A'){
printf(lcd_putc,"\n Recibiendo... * else{
");
delay_ms(10); lcd_gotoxy(1,1);
} printf (lcd_putc,"\f SIN CONEXION
if(l=='B'){ ");
printf(lcd_putc,"\n Recibiendo... 0 delay_ms (10);
"); }
delay_ms(10); }
} }
if(l=='C'){

EJERCICIO PROPUESTO
El siguiente programa permite la comunicación entre dos microcontroladores pic
uno denominado maestro y otro llamado esclavo mediante el protocolo SPI,
además cuenta con un teclado conectado a ambos pics que envían 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 transmisión.
Estructura de la trama: Las tramas de comunicación son de variada
presentación y algunas sólo involucran la carga útil, sin adicionar bits que
permitan el handshaking (coordinación) entre esclavos y maestro. Para estos
protocolos deberá existir una línea tanto para el dato saliente (TxD) como para el
dato entrante (RxD), así como la posibilidad de hacer comunicación simultánea
y bidireccional (Full Duplex).

Figura 74 Diferentes Configuraciones en el envío de datos durante el primer


flanco de clock

Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf
Se muestra la configuración del módulo en donde el dato a enviar se mantiene
estable durante el primer flanco de clock y el siguiente bit se envía en el segundo
flanco de clock, tenga este cualquiera de las 2 polaridades posibles (línea
normalmente en alto o en bajo).
Se muestra la configuración del módulo 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 envío 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): relación reloj/datos: Aunque se tenga establecida la


frecuencia del reloj, todavía hay varias opciones para el master, referidas a la
polaridad de la señal de reloj, y la fase entre dicha señal y los datos de
entrada/salida.

Figura 77 Fases entre señal y reloj

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

EJERCICIO 11
156
Tema: I2C con LM35
Descripción: Realizamos una comunicación 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 PIC´s

Fig1 I2C con LM35


Simulación: Proteus
MASTER

#include <18f4550.h> #use standard_io(e)


#fuses
XT,PUT,NOPROTECT,BROWNOUT, float t1;
NOLVP,NOWDT,NOMCLR float t11;
#device adc=8 float t2;
#use delay (clock=4M) int8 read;
#use i2c(MASTER,SDA=PIN_B0,
SLOW, SCL=PIN_B1, void envio_I2C (){
NOFORCE_SW)
#include <lcd3.c> i2c_start(); //Comienzo de la
#include <kbd3.c> //Uso del comunicación I2C ...
puerto d i2c_write(0xa0); //...con la
#use standard_io(a) dirección del PIC esclavo...
#use standard_io(b) i2c_write(read); // Envia dato
#use standard_io(d) i2c_stop(); //Finalización de la
#use standard_io(c) transmisión
157
}

}
/ }
********************************
********************************
**************/ ESCLAVO
/***************************
FUNCIÓN PRINCIPAL #include <18F4550.h>
******************************** #fuses XT,NOMCLR
/ #use delay (clock=8M)
#use I2C(SLAVE, SDA=PIN_B0
void main(){ ,SLOW, SCL=PIN_B1,
kbd_init(); //Inicializa ADDRESS=0xa0, NOFORCE_SW)
función de teclado #include <lcd3.c>
lcd_init(); #include <kbd3.c> //Uso del
port_d_pullups(TRUE); puerto d
while (true){ #use fast_io(b)
#use standard_io(d)
setup_adc(ADC_CLOCK_INTERN #use standard_io(c)
AL); #use standard_io(e)
Setup_adc_ports(AN0);
//PONE PUERTO RA0 ANALOGO ///////////////
setup_counters(rtcc_internal,rtcc_di
v_1); int state; // I2C var
set_adc_channel(0); // int8 x;
INDICA EL PIN A LEER RA0
//delay_us(20);. int8 buffer[0x03];
read=read_adc(); float t1;
float t11;
t1=(float)read; //LEE float tem;
EL VALOR DEL PIN
t2=t1*2; #INT_SSP
void ssp_interrupt()
t11=(t1*5)/255; { output_high(PIN_A2);
//CONVIERTE EL VALOR LEIDO DE state=i2c_isr_state();
HEXA AL REAL el numero
0.01960784314 viene de dividir (5/255) if(state < 0x80) //Master esta
y el resultado se multiplica por 100 para enviando datos
alcanzar 150 grados {
printf(lcd_putc,"\fVin = %2.2f x = i2c_read();
",t11); //MUESTRA EN EL LCD EL }
VALOR DE TEMPERATURA
printf(lcd_putc,"\nADC= %2.2f if(state==0x80){
",t2); //MUESTRA EN EL LCD EL i2c_write(buffer[0x02]);
VALOR DE TEMPERATURA output_high(PIN_A1);
}
envio_I2C(); }
delay_ms(500);
void main() {
158
//printf(lcd_putc,"\nADC= %2.2f
set_tris_b(0b00000011); ",t1); //MUESTRA EN EL LCD EL
lcd_init(); VALOR DE TEMPERATURA
kbd_init();
port_d_pullups(TRUE); if (t1<24)
enable_interrupts(INT_SSP); {
//Activamos las interrupciones de I2C output_high(pin_d0);
enable_interrupts(GLOBAL); output_low(pin_d1);
output_low(pin_d2);
while (true) {
//delay_ms(10);
if(state<0x80) //Se }
recibe dato if (t1>27)
{ {
//state=0x80; output_high(pin_d2);
output_low(pin_d1);
t1=(float)x; //LEE EL output_low(pin_d0);
VALOR DEL PIN //delay_ms(10);
t11=(t1*5*100)/255; }
//CONVIERTE EL VALOR LEIDO DE if (t1>=24 && t1<=27)
HEXA AL REAL el numero {
0.01960784314 viene de dividir (5/255) output_high(pin_d1);
y el resultado se multiplica por 100 para output_low(pin_d0);
alcanzar 150 grados output_low(pin_d2);
//delay_ms(1); //delay_ms(10);
tem=((t11)/2); }
printf(lcd_putc,"\fT= %2.2f delay_ms(500);
C",tem); //MUESTRA EN EL LCD EL }
VALOR DE TEMPERATURA
}
}

EJERCICIO PROPUESTO
El siguiente programa tiene por objetivo diseñar un lenguaje de programación que
cumpla con los parámetros 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 comunicación directa con la pc mediante RS232 y varíe 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
Descripción: Realizamos una comunicación 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 PIC´s

Fig1 I2C con LM35


Simulación: Proteus

MASTER #use standard_io(d)


#include <18f4550.h> #use standard_io(c)
#fuses #use standard_io(e)
XT,PUT,NOPROTECT,BROWNOUT,
NOLVP,NOWDT,NOMCLR
#device adc=8 float t1,t2;
#use delay (clock=8M) float t11;
#use i2c(MASTER,SDA=PIN_B0,
SLOW, SCL=PIN_B1, int8 read;
NOFORCE_SW)
#include <lcd3.c> void envio_I2C (){
#include <kbd3.c> //Uso del
puerto d i2c_start(); //Comienzo de la
#use standard_io(a) comunicación I2C ...
#use standard_io(b)
160
i2c_write(0xa0); //...con la printf(lcd_putc,"\nADC= %2.2f
dirección del PIC esclavo... ",t2); //MUESTRA EN EL LCD EL
i2c_write(read); // Envia dato VALOR DE TEMPERATURA
i2c_stop(); //Finalización de la
transmisión envio_I2C();
} delay_ms(500);

/
******************************** }
******************************** }
**************/
/*************************** ESCLAVO
FUNCIÓN PRINCIPAL
******************************** #include <18F4550.h>
/ #fuses XT,NOMCLR
#use delay (clock=8M)
void main(){ #use I2C(SLAVE, SDA=PIN_B0
kbd_init(); //Inicializa ,SLOW, SCL=PIN_B1,
función de teclado ADDRESS=0xa0, NOFORCE_SW)
lcd_init(); #include <lcd3.c>
port_d_pullups(TRUE); #include <kbd3.c> //Uso del
while (true){ puerto d
#use fast_io(b)
setup_adc(ADC_CLOCK_INTERN #use standard_io(d)
AL); #use standard_io(c)
Setup_adc_ports(AN0); #use standard_io(e)
//PONE PUERTO RA0 ANALOGO
setup_counters(rtcc_internal,rtcc_di ///////////////
v_1);
set_adc_channel(0); // int state; // I2C var
INDICA EL PIN A LEER RA0 int8 x;
//delay_us(20);.
read=read_adc(); int8 buffer[0x03];
float t1;
t1=(float)read*2; //LEE float t11;
EL VALOR DEL PIN float tem;
t2=(t1*255)/150;
t11=(t1*5)/255; #INT_SSP
//CONVIERTE EL VALOR LEIDO DE void ssp_interrupt()
HEXA AL REAL el numero { output_high(PIN_A2);
0.01960784314 viene de dividir (5/255) state=i2c_isr_state();
y el resultado se multiplica por 100 para
alcanzar 150 grados if(state < 0x80) //Master esta
printf(lcd_putc,"\fMASTER- enviando datos
TEMPERATURA"); //MUESTRA EN {
EL LCD EL VALOR DE x = i2c_read();
TEMPERATURA }

if(state==0x80){
161
i2c_write(buffer[0x02]); //delay_ms(1);
output_high(PIN_A1); tem=((t11));
} printf(lcd_putc,"\fTemp= %2.2f
} oC",tem); //MUESTRA EN EL LCD
EL VALOR DE TEMPERATURA
void main() { //printf(lcd_putc,"\nADC= %2.2f
",t1); //MUESTRA EN EL LCD EL
set_tris_b(0b00000011); VALOR DE TEMPERATURA
lcd_init();
kbd_init(); if (tem<24)
setup_ccp1(ccp_PWM); {
setup_timer_2(T2_DIV_BY_16,255,1); printf(lcd_putc,"\nVel1 Duty=> 15
set_pwm1_duty(0); ");
port_d_pullups(TRUE); set_pwm1_duty(150L);
enable_interrupts(INT_SSP); }
//Activamos las interrupciones de I2C if (tem>27)
enable_interrupts(GLOBAL); {
printf(lcd_putc,"\nVel3 Duty=> 90
while (true) { ");
set_pwm1_duty(900L);
if(state<0x80) //Se }
recibe dato if (tem>=24 && tem<=27)
{ {
//state=0x80; printf(lcd_putc,"\nVel2 Duty=> 50
");
t1=(float)x; //LEE EL set_pwm1_duty(500L);
VALOR DEL PIN }
t11=(t1*5*100)/255; delay_ms(500);
//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

EJERCICIO PROPUESTO

162
El siguiente programa tiene por objetivo diseñar un lenguaje de
programación que cumpla con los parámetros 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 comunicación directa con la
pc mediante RS232 y varíe la velocidad del motor y el encendido
de luces logrando un sistema completo con los dos sensores
mencionados inicialmente.

COMUNICACIÓN BLUETOOTH – ZBEEE - RF


BLUETOOTH
Arduino: curso práctico de formación Escrito por Óscar Torrente Mencionan
que:
Bluetooth es el nombre de una especificación industrial (estandarizada oficialmente con
el nombre de IEEE 802.15.2) que define las características de un tipo de redes
inalámbricas de corto alcance, su principal uso es proporcionar un protocolo de
comunicación entre distintos dispositivos electrónicos de consumo. el estándar
bluetooth utiliza para la transmisión 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 especificación industrial para Redes Inalámbricas de Área Personal
(WPAN) que posibilita la transmisión 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 móviles.


-Eliminar los cables y conectores entre éstos.
-Ofrecer la posibilidad de crear pequeñas redes inalámbricas y facilitar la
sincronización de datos entre equipos personales.

Electrónica y Servicio: Autoestéreos con bluetooth y USB Escrito por Staff


Menciona que:

163
Bluetooth es una especificación tecnológica para redes inalámbricas que permite la
transmisión de voz y datos entre distintos dispositivos mediante una radiofrecuencia
segura (2,4 GHz). Esta tecnología, por lo tanto, permite las comunicaciones sin cables
ni conectores y la posibilidad de crear redes inalámbricas domésticas para sincronizar y
compartir la información que se encuentra almacenada en diversos equipos.

Definición grupal:
“Bluetooth es un protocolo normalizado por el estándar IEEE 802.15.1 para
Redes Inalámbricas de Área Personal (WPAN), el cual consiste en una
comunicación inalámbrica que posibilita la transmisión 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 clasificación de redes inalámbricas WPAN el cual es un protocolo normalizado por el están
Wifi
Radio
Frecuencia

Clase Potencia máxima Potencia máxima Alcance


permitida permitida (aproximad
(mW) (dBm) o)

Clase 100 mW 20 dBm ~100


1 metros

Clase 2.5 mW 4 dBm ~5-10


2 metros

Clase 1 mW 0 dBm ~1 metro


3

¿Qué es Bluetooth?
El Bluetooth Special Interest Group (SIG), una asociación comercial formada por
líderes en telecomunicación, informática e industrias de red, está conduciendo el
desarrollo de la tecnología inalámbrica Bluetooth y llevándola al mercado.
La tecnología inalámbrica Bluetooth es una tecnología de ondas de radio de corto
alcance (2.4 gigahertzios de frecuencia) cuyo objetivo es el simplificar las
comunicaciones entre dispositivos informáticos, como ordenadores móviles,
teléfonos móviles, otros dispositivos de mano y entre estos dispositivos e Internet.
También pretende simplificar la sincronización de datos entre los dispositivos y
otros ordenadores.

165
Permite comunicaciones, incluso a través de obstáculos, a distancias de hasta unos
10 metros. Esto significa que, por ejemplo, puedes oír tus mp3 desde tu comedor,
cocina, cuarto de baño, etc. También sirve para crear una conexión a Internet
inalámbrica desde tu portátil usando tu teléfono móvil. Un caso aún más práctico es
el poder sincronizar libretas de direcciones, calendarios etc en tu PDA, teléfono
móvil, ordenador de sobremesa y portátil automáticamente y al mismo tiempo.
Los promotores de Bluetooth incluyen Agere, Ericsson, IBM, Intel, Microsoft,
Motorola, Nokia y Toshiba, y centenares de compañías asociadas.

Figura 78 Dispositivos Bluetooth

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

¿De dónde viene el nombre Bluetooth?


El nombre viene de Harald Bluetooth, un Vikingo y rey de Dinamarca a de los años
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 tecnología Bluetooth.


1. Permitir la comunicación sencilla entre dispositivos fijos y móviles.
2. Evitar la dependencia de cables que permitan la comunicación.
3. Permitir la creación de pequeñas redes de forma inalámbrica.

166
Funcionamiento.
Trabaja en dos capas del modelo OSI que son la de enlace y aplicación, 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 máximo de 10 metros, si se deseara
implementar la distancia se tendría que utilizar repetidores los cuales nos
ayudarían a abarcar una distancia de 100 metros.
Bluetooth por cuestiones de seguridad cuanta con mecanismos de encriptación de
64 bits y autentificación para controlar la conexión y evitar que dispositivos
puedan acceder a los datos o realizar su modificación.

Durante la transferencia de datos el canal de comunicaciones permanece abierto y


no requiere la intervención directa del usuario cada vez que se desea transferir voz
o datos de un dispositivo a otro. La velocidad máxima que se alcanza durante la
transferencia es de 700 Kb/s y consume un 97% menos que un teléfono móvil. [1]

ZIGBEE
Gallego C. Fogaldo [ online ] Menciona:
“ZigBee, también conocido como IEEE 802.15.4, por el estándar basado, se
utiliza para la comunicación inalámbrica mediante radio digital. Se caracteriza
por una comunicación segura, su sencillez de integración, su topología de red
(en malla, aunque pueden encontrarse otras topologías), y sobre todo, por su bajo
consumo.” [ 1 ]
Soria López, José [ online ] Menciona:
“ZigBee es el nombre de la especificación de un conjunto de protocolos de alto
nivel de comunicación inalámbrica para su utilización con radiodifusión digital
de bajo consumo, basada en el estándar IEEE 802.15.4 de redes inalámbricas de
área personal (wireless personal area network, WPAN). Su objetivo son las
aplicaciones que requieren comunicaciones seguras con baja tasa de envío de
datos y maximización de la vida útil de sus baterías..” [ 2 ]
Ortega H. Carlos [ online ] Menciona:
“ZigBee es un estándar de comunicaciones inalámbricas diseñado por la ZigBee
Alliance. Es un conjunto estandarizado de soluciones que pueden ser
implementadas por cualquier fabricante. ZigBee está basado en el estándar IEEE

167
802.15.4 de redes inalámbricas de área personal (wireless personal área Newark,
WPAN) y tiene como objetivo las aplicaciones que requieren comunicaciones
seguras con baja tasa de envío de datos y maximización de la vida útil de sus
baterías.” [ 3 ]
Definición Grupal:
“ZigBee es una nueva tecnología de móvil de corto alcance y bajo consumo y
que se definió como una solución inalámbrica de baja capacidad para
aplicaciones en el hogar como la seguridad y la sistematización, que está
basado en el estándar 802.15.4.”
ZigBee es un estándar de comunicaciones inalámbricas diseñado por la ZigBee
Alliance. Es un conjunto estandarizado de soluciones que pueden ser implementadas por
cualquier fabricante. ZigBee está basado en el estándar IEEE 802.15.4 de redes
inalámbricas de área personal (wireless personal área Newark, WPAN) y tiene como
objetivo las aplicaciones que requieren comunicaciones seguras con baja tasa de envío
de datos y maximización de la vida útil de sus baterías.
1998. - Las redes de la familia de ZigBee se conciben, al tiempo que se hizo claro que
Wi-Fi y Bluetooth no serían soluciones válidas para todos los contextos. En concreto, se
observó una necesidad de redes ad hoc inalámbricas.2003. - El estándar IEEE 802.15.4
se aprueba en mayo.
2003. - En el verano, Philips Semiconductors puso fin a su inversión en redes de mallas.
Philips Lighting ha perpetuado la participación de Philips, que sigue siendo un miembro
prominente de la ZigBee Alliance.
2004. - ZigBee Alliance anunció en octubre una duplicación en su número de miembros
en el último año a más de 100 compañías en 22 países. En abril de 2005 había más de
150 miembros corporativos, y más de 200 en diciembre del mismo año.
2004. - Se aprueba la especificación Zigbee el 14 de diciembre.
2005. - ZigBee 2004 se puso a disposición del público sin fines comerciales el 13 de
junio en San Ramón, California.
2006. - “El precio de mercado de un transceptor compatible con ZigBee se acerca al
dólar y el precio de un conjunto de radio, procesador y memoriaronda los tres dólares”
(5).2006. - En diciembre se publicó la actual revisión de la especificación.
2007. - En Noviembre se publicó el perfil HOME AUTOMATION de la especificación.
[1]

168
ESTRUCTURA

Figura 79 Estructura del Zigbee Fuente. http://www.informatica-


hoy.com.ar/telefonos-celulares/Que-es- Zigbee..php

Siguiendo el estándar del modelo de referencia OSI (8) (Open Systems


Interconnection), en el gráfico, aparece la estructura de la arquitectura en capas. Las
primeras dos capas, la física y la de acceso al medio MAC (9), son definidas por el
estándar IEEE 802.15.4. Las capas superiores son definidas por la Alianza ZigBee y
corresponden a las capas de red y de aplicación las cuales contienen los perfiles del uso,
ajustes de la seguridad y la mensajería.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 típicas de un nivel de red clásico.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 aplicación y
realiza el ruteo en base a la topología de la red en la que el dispositivo se encuentra. Por
otra, las funciones de control del nivel controlan la configuración 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
comunicación directa y la sincronización 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 descripción de dispositivos,
como el tipo de dispositivo, potencia, modos de dormir y coordinadores de cada uno.[2]

Características
 ZigBee, también conocido como "HomeRF Lite", es una tecnología inalámbrica
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 tecnologías inalámbricas.
 Un sensor equipado con un transceiver ZigBee pueda ser alimentado con dos
pilas AA durante al menos 6 meses y hasta 2 años.
 La fabricación de un transmisor ZigBee consta de menos circuitos analógicos de
los que se necesitan habitualmente.
 Diferentes tipos de topologías como estrella, punto a punto, malla, árbol.·
 Acceso de canal mediante CSMA/CA(7) (acceso múltiple por detección de
portadora con evasión de colisiones).
 Escalabilidad de red -- Un mejor soporte para las redes más grandes, ofreciendo
más opciones de gestión, flexibilidad y desempeño.
 Fragmentación -- Nueva capacidad para dividir mensajes más largos y permitir
la interacción con otros protocolos y sistemas.
 Agilidad de frecuencia -- Redes cambian los canales en forma dinámica en caso
que ocurran interferencias.
 Gestión automatizada de direcciones de dispositivos - El conjunto fue
optimizado para grandes redes con gestión de red agregada y herramientas de
configuración.
 Localización grupal -- Ofrece una optimización adicional de tráfico necesaria
para las grandes redes.
 Puesta de servicio inalámbrico -- El conjunto fue mejorado con capacidades
seguras para poner en marcha el servicio inalámbrico.·
 Recolección centralizada de datos -- El conjunto fue sintonizado
específicamente para optimizar el flujo de información en las grandes redes.[3]

170
Ventajas
 Ideal para conexiones punto a punto y punto a multipunto·
 Diseñado para el direccionamiento de información y el refrescamiento de la red.
 Opera en la banda libre de ISM 2.4 Ghz para conexiones inalámbricas.
 Óptimo para redes de baja tasa de transferencia de datos.
 Alojamiento de 16 bits a 64 bits de dirección extendida.
 Reduce tiempos de espera en el envío y recepción de paquetes.
 Detección de Energía (ED).
 Baja ciclo de trabajo - Proporciona larga duración de la batería.
 Soporte para múltiples topologías de red: Estática, dinámica, estrella y malla.
 Hasta 65.000 nodos en una red.
 128-bit AES de cifrado - Provee conexiones seguras entre dispositivos.
 Son más baratos y de construcción más sencilla.Desventajas·
 La tasa de transferencia es muy baja.
 Solo manipula textos pequeños comparados con otras tecnologías.
 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 inalámbricas de tipo WPAN.

Tipos de Dispositivos
Se definen tres tipos distintos de dispositivo ZigBee según su papel en la red
Coordinador ZigBee (ZigBee Coordinator, ZC): El tipo de dispositivo más 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 computación.
Router ZigBee (ZigBee Router, ZR):Interconecta dispositivos separados en la
topología de la red, además de ofrecer un nivel de aplicación para la ejecución de
código 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
información 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 baterías. Un ZED
tiene requerimientos mínimos de memoria y es por tanto significativamente más barato.
Funcionalidad
Basándose en su funcionalidad, puede plantearse una segunda clasificación:Dispositivo
de funcionalidad completa (FFD):También 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 actúen de interfaces con los usuarios.Dispositivo de
funcionalidad reducida (RFD):También conocido como nodo pasivo. Tiene capacidad y
funcionalidad limitadas con el objetivo de conseguir un bajo coste y una gran
simplicidad. Básicamente, 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 días seguidos). [4]

Topología
La capa de red soporta múltiples configuraciones de red incluyendo estrella, árbol,
punto a punto y rejilla (malla).
Topología en estrella
En la configuración 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 demás dispositivos zigbee, conocidos con el nombre de dispositivos finales,
hablan directamente con el coordinador.En la configuración de rejilla, el coordinador
ZigBee es responsable de inicializar la red y de elegir los parámetros de la red, pero la
red puede ser ampliada a través del uso de routers ZigBee.

Figura 80 Topología Malla

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

El algoritmo de encaminamiento utiliza un protocolo de pregunta-respuesta (request-


response) 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 más de
65000 nodos (216).
Topología punto a punto
Para la topología punto a punto, existe un solo FFD Coordinador. A diferencia con la
topología estrella, cualquier dispositivo puede comunicarse con otro siempre y cuando
estén en el mismo rango de alcance circundante. Las aplicaciones orientadas para el
172
monitoreo y control de procesos industriales, redes de sensores inalámbricos, entre
otros, son ampliamente usados por estas redes. Proveen confiabilidad en el enrutamiento
de datos (multipath routing).

Figura 81 Topología punto a punto

Fuente: http://rua.ua.es/dspace/bitstream/10045/1109/7/Informe_ZigBee.pdf
Topología de árbol
La topología de árbol es un caso especial de topología de conexión 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 sincronización hacia otros dispositivos o coordinadores.

Figura 82 Topología punto a punto protocolo ZigBee

Fuente: http://rua.ua.es/dspace/bitstream/10045/1109/7/Informe_ZigBee.pdf
Tipos de Tráfico de Datos
ZigBee/IEEE 802.15.4 dirige tres tipos de tráfico típicos:
1. Cuando el dato es periódico: La aplicación dicta la proporción, el sensor se activa,
chequea los datos y luego desactiva.
2. Cuando el dato es intermitente: La aplicación, u otro estímulo, determina la
proporción, como en el caso de los detectores de humo. El dispositivo necesita sólo
conectarse a la red cuando la comunicación se hace necesaria. Este tipo habilita el
ahorro óptimo en la energía.
3. Cuando el dato es repetitivo: La proporción 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 tecnología
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 encriptación con un código de 128 bits. Integración 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 básico de seguridad. Las claves son la
base de la arquitectura de seguridad y, como tal, su protección es fundamental para la
integridad del sistema. Las claves nunca deben transportarse utilizando un canal
inseguro, si bien existe una excepción momentánea que se da en la fase inicial de la
unión de un dispositivo desconfigurado a una red. La red ZigBee debe tener particular
cuidado, pues una red ad hoc (12) puede ser accesible físicamente a cualquier
dispositivo externo y el entorno de trabajo no se puede conocer de antemano.
Aplicaciones
Los protocolos ZigBee están definidos para su uso en aplicaciones embebidas con
requerimientos muy bajos de transmisión de datos y consumo energético. Se pretende su
uso en aplicaciones de propósito general con características auto organizativas y bajo
coste (redes en malla, en concreto). Puede utilizarse para realizar control industrial,
albergar sensores empotrados, recolectar datos médicos, ejercer labores de detección de
humo o intrusos o domótica. La red en su conjunto utilizará una cantidad muy pequeña
de energía de forma que cada dispositivo individual pueda tener una autonomía de hasta
5 años antes de necesitar un recambio en su sistema de alimentación.

174

Figura 83 Aplicaciones Fuente:


http://rua.ua.es/dspace/bitstream/10045/1109/7/Informe_ZigBee
.pdf
Futuro del Zigbee
Se espera que los módulos ZigBee sean los transmisores inalámbricos más baratos de la
historia, y además producidos de forma masiva. Tendrán un coste aproximado de
alrededor de los 6 euros, y dispondrán de una antena integrada, control de frecuencia y
una pequeña batería. Ofrecerán una solución tan económica porque la radio se puede
fabricar con muchos menos circuitos analógicos de los que se necesitan habitualmente.
[6]
Organizadores Gráficos

Diagrama 2 ZIGBEE FUENTE: SEPTIMO A 2016

175
EJERCICIOS RESUELTOS

176
EJERCICIOS PROPUESTOS SOLUCIONARIO A LOS EJERCICIOS

Código ejercicio 1.
TEMA:
CCP modo Captura de Timer1
DESCRIPCION
El siguiente programa trabaja con el módulo 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 alimentación (5v)
 1 Protoboard
 Capacitores 10uF
 Diodo Led
 Potenciómetro

CAPTURAS PROTEUS

CODIGO COMENTADO
#include <16f887.h>
#fuses xt, NOWDT, NOPROTECT, Estado=0;
NOLVP, NOMCLR // CONFIGURACION if(Senal==0){
DE FUSIBLES Senal=1;
#use delay(clock=4M) }
#define LCD_ENABLE_PIN }
PIN_D0 // INCLUSION DE LA LIBRERÍA }
PARA LA LCD
#define LCD_RS_PIN PIN_D1
void main(){
#define LCD_RW_PIN PIN_D2
lcd_init();
#define LCD_DATA4 PIN_D4
setup_timer_1(T1_INTERNAL |
#define LCD_DATA5 PIN_D5
T1_DIV_BY_1); // DECLARACION PARA
#define LCD_DATA6 PIN_D6 MODO CAPTURA
#define LCD_DATA7 PIN_D7 ext_int_edge(0,L_TO_H);
#include <lcd.c> Estado=0;
enable_interrupts(int_ccp1); //
DECLARACION DE INTERRUPCIONES
Int16 TiempoF; // DECLARACION DE LAS enable_interrupts(global);
VARIABLES EN MODO CAPTURA setup_ccp1(CCP_CAPTURE_FE);
float Periodo; do {
float Calculo; if(Senal==1){
float Frecuencia; Calculo=TiempoF*1;
int1 Senal=0; Periodo=Calculo*0.25;
int1 Estado=0; Frecuencia=(1/
(Periodo*2.0))*1000000;
#int_ccp1 // INCLUSION DE LA SENTENCIA printf (lcd_putc,"Captura de
CCP
Datos");
void Captura(){
delay_ms(100);
if(Estado==0){
lcd_gotoxy(1,2);
set_timer1(0);
printf(lcd_putc,"\nfrecue=
ext_int_edge(0,H_TO_L);
%9.5fHz ",Frecuencia);
Estado=1;
}
} else{
Senal=0;
TiempoF=get_timer1();
} while (TRUE);
ext_int_edge(0,L_TO_H);
}

Código ejercicio 2.
TEMA:
CCP modo Comparación voltaje externo
DESCRIPCION
El siguiente programa trabaja con el módulo CCP en modo comparación, 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 alimentación (5v)
 1 Protoboard
 Diodos Led
 Potenciómetro

CAPTURAS PROTEUS

CODIGO COMENTADO
#include <16f887.h>
#device adc=10 // DECLARACION DEL
VALOR ADC PARA LA CONVERSION void main()
#use delay (clock = 4000000) {
#fuses NOMCLR,XT int v;
CONFIGURACION DE PINES DE int16 q;
LCD// DECLARACION DE LOS PINES PARA int16 z;
LCD
float p;
#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_D5
setup_adc_ports(PIN_A0|VSS_VDD);
#define LCD_DB6 PIN_D6
//DECLARACION DE LA SENTECNIA CCP
#define LCD_DB7 PIN_D7 COM.
#define LCD_RS PIN_D2
#define LCD_E PIN_D3 setup_adc(ADC_CLOCK_INTERNAL)
#include <lcd.c> ;
lcd_init(); {
for (;;) output_high(pin_b2);
{ output_low(pin_b0);
set_adc_channel(0); output_low(pin_b1);
delay_us(20); }
if (p>v)
q = read_adc(); {
z = 5 * q; output_high(pin_b0);
p = z/1024.0; output_low(pin_b1);
v=3; output_low(pin_b2);
}
printf(lcd_putc, "\f SetPoint= 3 if ((q>600)&&(q<650))
V"); // DECLARACION DE UN VALOR SET {
POINT A COMP. output_high(pin_b1);
printf(lcd_putc, "\n V Actual= output_low(pin_b0);
%01.1fV", p); output_low(pin_b2);
delay_ms(100); }
if (p<v) // DECLARACION DE LOS }
PINES DE SALIDA LOS LEDS PARA
VISULIZAR LA COM. }

Código ejercicio 3.

TEMA:
CCP modo PWM para señal cuadrática.
DESCRIPCION
El siguiente código presenta el modo PWM del módulo CCP, lo que nos permitirá variar
el ciclo de trabajo de una señal cuadrática en 3 posiciones diferentes y verificar la
forma de onda y la variación de la misma en diodo led.
MATERIALES
 1 Pantalla LCD
 1 PIC 16F887
 1 Fuente de alimentación (5v)
 1 Protoboard
 Diodos Led
 Potenciómetro

CAPTURAS PROTEUS
CODIGO COMENTADO
#include <16f887.h> int z=0;
#fuses xt //
#use delay (clock=4M) lcd_init();
#define LCD_ENABLE_PIN PIN_D0 printf(lcd_putc,"\fSistema
//// Encendido");
#define LCD_RS_PIN PIN_D1 delay_ms(100);
//// kbd_init();
#define LCD_RW_PIN PIN_D2 setup_adc_ports(NO_ANALOGS);
//// port_b_pullups(TRUE);
#define LCD_DATA4 PIN_D4 set_tris_c(0x00);
//// while (true){
#define LCD_DATA5 PIN_D5 e=kbd_getc();
//// if(e!=0){
#define LCD_DATA6 PIN_D6 if(e=='A') {
//// printf(lcd_putc,"\f Encendido ");
#define LCD_DATA7 PIN_D7 delay_ms(100);
#include <lcd.c> Z=3;
#include <kbd_lib.c> output_c(0);
#use fast_io(c) pwm_set_duty_percent(0);
#use pwm(ccp1,frequency=2k, delay_ms(100);
duty=50) }
void main(){ if(e=='B') {
char e; printf(lcd_putc,"\f Apagado ");
output_c(0); if(e=='3') {
delay_ms(100); output_c(0);
output_c(0); delay_ms(30);
Z=1;
pwm_set_duty_percent(0); if(z==1){
delay_ms(100); printf(lcd_putc,"\f Debe Encender ");
} delay_ms(100);
output_c(0);
if(e=='1') { }
delay_ms(30); if(z==3){
output_c(0);
if(z==1){ printf(lcd_putc,"\f Duty 75
printf(lcd_putc,"\f Debe Encender "); ");//velocidad 2
delay_ms(100); pwm_set_duty_percent(750);
output_c(0);
} delay_ms(100);
if(z==3){ }
printf(lcd_putc,"\f Duty }
25");//velocidad 1 if(e=='C') {
pwm_set_duty_percent(250); output_c(0);
delay_ms(100); delay_ms(30);
}
} if(z==1){
printf(lcd_putc,"\f Debe Encender ");
if(e=='2') { delay_ms(100);
output_c(0); output_c(0);
delay_ms(30); }
if(z==1){ if(z==3){
printf(lcd_putc,"\f Debe Encender ");
delay_ms(100); printf(lcd_putc,"\f Duty 85
output_c(0); ");//velocidad 2
} pwm_set_duty_percent(850);
if(z==3){
printf(lcd_putc,"\f Duty 50 delay_ms(100);
");//velocidad 2 }
pwm_set_duty_percent(500); }
}
delay_ms(100); }
} }
}

Código ejercicio 4.
TEMA:
CCP modo captura con sensor de temperatura.
DESCRIPCION
El siguiente programa está configurado para captar la señal analógica de un sensor lm35
y visualizarla en una pantalla lcd.
MATERIALES
 1 Pantalla LCD
 1 PIC 16F887
 1 Fuente de alimentación (5v)
 1 Protoboard
 Diodos Led
 Potenciómetro
 Sensor lm35

CAPTURAS PROTEUS

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

float temperatura;

void main()
CODIGO COMENTADO {
#include <16f887.h>
#fuses XT, NOWDT, NOPROTECT, setup_adc_ports(sAN0);//entrada del
NOLVP, NOCPD, NOWRT, LM35
NODEBUG setup_adc(ADC_CLOCK_INTERNAL)
#device *=16 ;
#device adc=10
set_adc_channel(0); while(true)
{
lcd_init(); temperatura=(float)read_adc()/2;
lcd_gotoxy(5,1);
printf(lcd_putc,"Temperatura"); lcd_gotoxy(5,1);
delay_ms(350); printf(lcd_putc,"%02.1f",temperatura);
lcd_init(); lcd_gotoxy(14,1);
printf(lcd_putc,"Grados");
delay_ms(200);
}

Código ejercicio 5.

TEMA:
CCP modo comparación con Sensor Ultrasónico
DESCRIPCION
El siguiente programa trabaja con una serie de bits de resolución que permiten hacer u
calculo a la señal analógica que es enviada por medio del sensor e indicarnos la
distancia qu este se encuentra. Sin embargo en proteus al no contar con las librerías
necesarias del sensor no se puede correr el programa.
MATERIALES
 1 Pantalla LCD
 1 PIC 16F887
 1 Fuente de alimentación (5v)
 1 Protoboard
 Diodos Led
 Potenciómetro

CAPTURAS PROTEUS
CODIGO COMENTADO
#include <16f887.h> setup_timer_1(T1_INTERNAL|
#fuses XT,NOWDT,NOMCLR T1_DIV_BY_8); // initiating timer
#use delay (clock=4000000)
#define LCD_DB4 PIN_D4 while(true)
#define LCD_DB5 PIN_D5 {
#define LCD_DB6 PIN_D6 output_high(trig); //
#define LCD_DB7 PIN_D7 ping the sonar
#define LCD_RS PIN_D2 delay_us(20); //
#define LCD_E PIN_D3 sending 20us pulse
#include <lcd.c> output_low(trig);
#use standard_io(b)
#define trig pin_B1 while(!input(ECHO)) //
#define echo pin_B0 wait for high state of echo pin
{}
int16 time; // Defining variables
float distance; set_timer1(0); // setting
timer zero
void main()
{ while(input(ECHO)) //
lcd_init(); // Wait for high state of echo pin
initiating the LCD {}
printf(LCD_PUTC, "\f
ULTRASONIC");// for LCD & MCU time=get_timer1(); //
restart troubleshooting Getting the time
delay_ms(1000); // distance=time*10 ; // Calculating
Boot-up delay, for troubleshooting the distance
distance=distance/75;
printf(LCD_PUTC, "\nDistance =
%F",distance); // Putting the time and }
delay_ms(1000); }

Código ejercicio 6.

TEMA:
CCP modo comparación 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 alimentación (5v)
 1 Protoboard
 Diodos Led
 Potenciómetro
 Sensor infrarrojo

CAPTURAS PROTEUS
CODIGO COMENTADO
#include <16f887.h> lcd_init();
#fuses XT, NOWDT, NOPROTECT,
NOLVP, NOCPD, NOWRT,
NODEBUG while(true)
#device *=16 {
#device adc=10 delay_ms(50);
#use delay(clock=4M) value=read_adc();
#define LCD_DB4 PIN_D4 y=value*0.005;
#define LCD_DB5 PIN_D5 y=y-1.183;
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7 lcd_gotoxy(5,2);
#define LCD_RS PIN_D2 printf(lcd_putc,"%2.3f cm",y);
#define LCD_E PIN_D3 lcd_gotoxy(5,1);
#include <lcd.c> printf(lcd_putc,"Distancia");
delay_ms(1000);
if((y<=3)&&(y>0))
int16 value; {
float32 y; printf(lcd_putc,"\f Detecta");
void main() delay_ms(1000);
{ printf(lcd_putc,"\f");
setup_adc_ports(sAN0| }
VSS_VDD);//entrada del LM35 else
setup_adc(ADC_CLOCK_INTERNAL) {
; printf(lcd_putc,"\f NO Detecta");
set_adc_channel(0); delay_ms(1000);
printf(lcd_putc,"\f");
lcd_init(); }
lcd_gotoxy(5,1); }
printf(lcd_putc,"Luminosidad");
delay_ms(350); }

Código ejercicio 7.

TEMA:
Motor DC PWM
DESCRIPCION
El siguiente programa tiene por objetivo diseñar un lenguaje de programación que nos
permita variar el ciclo de trabajo de una señal cuadrática y verificar su funcionaiento en
un motor de 5volts.
MATERIALES
 1 Pantalla LCD
 1 PIC 16F887
 1 Fuente de alimentación (5v)
 1 Protoboard
 Diodos Led
 Potenciómetro
 Motor dc

CAPTURAS PROTEUS

CODIGO COMENTADO
#include <18f4550.h> #define LCD_DATA4 PIN_D4
#fuses xt, nowdt, nowrt, nomclr ////
#use delay (clock=4M) #define LCD_DATA5 PIN_D5
#define LCD_ENABLE_PIN PIN_D0 ////
//// #define LCD_DATA6 PIN_D6
#define LCD_RS_PIN PIN_D1 ////
//// #define LCD_DATA7 PIN_D7
#define LCD_RW_PIN PIN_D2 #include <lcd.c>
//// #include <kbd_lib.c>
#use pwm(ccp1,frequency=2k, set_tris_b(0xf0);
duty=50) output_low(pin_b0);
#use pwm(ccp2,frequency=2k, output_low(pin_b1);
duty=50) output_low(pin_b2);
output_low(pin_b3);
char a=10; d=0;
short int d=1; }
int z;
int i; switch(a)
int de; {
#INT_RB case 'A':
void teclado(){ lcd_gotoxy(1,1);
char b; printf(lcd_putc,"\fSistema ON ");
output_toggle(pin_c1); delay_ms(100);
kbd_init(); z=3;
do{ break;
b=kbd_getc(); case 'B' :
if(b!=0){
a=b; printf(lcd_putc,"\fSistema OFF ");
lcd_putc("\f"+b); SET_PWM1_DUTY(0);
} SET_PWM2_DUTY(0);
}while(b==0); delay_ms(100);
d=1; z=0;
clear_interrupt(int_rb); break;
} case 'C' :

printf(lcd_putc,"\fIzquierda
");//encendido
SET_PWM1_DUTY(0);
void main(){ SET_PWM2_DUTY(0);
delay_ms(100);
lcd_init(); de=0;
lcd_putc("\fControl PWM"); i=1;
delay_ms(100); break;
set_tris_c(0x00);
set_tris_E(0x00); case 'D' :
port_b_pullups(true);
enable_interrupts(int_rb); printf(lcd_putc,"\fDerrecha
enable_interrupts(global); ");//encendido
SET_PWM1_DUTY(0);
SET_PWM2_DUTY(0);
delay_ms(100);
de=1;
while (true){ i=0;
if(d==1){ break;
SET_PWM1_DUTY(400);
case '1': SET_PWM2_DUTY(0);
if(z>1){ delay_ms(100);
if(i==1){ }
printf(lcd_putc,"\f DC 25");//velocidad }
1 break;
SET_PWM1_DUTY(0); case '3':
SET_PWM2_DUTY(300); if(z>1){
delay_ms(100); if(i==1){
} printf(lcd_putc,"\f DC 90");//velocidad
if(de==1){ 1
printf(lcd_putc,"\f DC 25");//velocidad SET_PWM1_DUTY(0);
1 SET_PWM2_DUTY(500);
SET_PWM1_DUTY(300); delay_ms(100);
SET_PWM2_DUTY(0); }
delay_ms(100); if(de==1){
} printf(lcd_putc,"\f DC 90");//velocidad
} 1
break; SET_PWM1_DUTY(500);
case '2': SET_PWM2_DUTY(0);
if(z>1){ delay_ms(100);
if(i==1){ }
printf(lcd_putc,"\f DC 75");//velocidad }
1 break;
SET_PWM1_DUTY(0); default:
SET_PWM2_DUTY(400); printf(lcd_putc,"\fNo Corresponde");
delay_ms(100); delay_ms(100);
} }
if(de==1){ }
printf(lcd_putc,"\f DC 75");//velocidad }
1

Código ejercicio 8.

TEMA:
Motor AC con TRIAC
DESCRIPCION
El siguiente programa tiene por objetivo establecer un lenguaje de programación que
permita controlar el ciclo de trabajo de en señal PWM además de acoplarse a un circuito
de potencia que detectara el cruce pro cero y variaría la cantidad de energía que legue a
la carga.
Nota: La simulación no puede ejecutarse debido a un error en el diseño del circuito en la
parte de potencia.
MATERIALES
 1 Pantalla LCD
 1 PIC 16F887
 1 Fuente de alimentación (5v)
 1 Protoboard
 Diodos Led
 Potenciómetro
 Motor dc

CAPTURAS PROTEUS

CODIGO COMENTADO
#INCLUDE <16F887.H> char k;
#fuses intrc_io, nowdt, nomclr, noput int y,z;
#fuses intrc_io, nowdt, nomclr, noput
#use delay(clock=4M) void main()
#include <kbd_lib.c> {
#BYTE WPUB =0X95 OPTION_REG = 0;
#BYTE OPTION_REG = 0X81 WPUB= 0B11111111;
#include <lcd.c> //port_b_pullups(true);
kbd_init(); break;
lcd_init();
lcd_putc("\f SISTEMA Funcionando"); case (6):
delay_us(100); lcd_putc("\f SISTEMA AC");
output_low(pin_c0);
while (true) delay_us(20);
{ K=0;
delay_us(100); z=0;
k=kbd_getc();
if(k!=0) }
{ }else output_low(pin_c0);

y=k-48; if((z==1))
{
switch (y) while(input(pin_a1))
{ {
if(input(pin_a0))
case(1): {
z=1; output_low(pin_c0);
lcd_putc("\f Duty en:\n duty 12 "); delay_us(7200);
delay_us(20); output_high(pin_c0);
break; delay_us(1000);
}
case(2): }
z=2; }else if((z==2))
lcd_putc("\f Duty en: \n 25");
delay_us(20); {
break; while(input(pin_a1))
{
case(3): if(input(pin_a0))
z=3; {
printf(lcd_putc,"\f Duty en: \n 45"); output_low(pin_c0);
delay_us(20); delay_us(6000);
break; output_high(pin_c0);
delay_us(2200);
case (4): }
z=4; }
printf(lcd_putc,"\f Duty en: \n 60"); }else if((z==3))
delay_us(20);
break; {
while(input(pin_a1))
case (5): {
z=5; if(input(pin_a0))
printf(lcd_putc,"\f Duty en: \n 85"); {
delay_us(20); output_low(pin_c0);
delay_us(4800); }else if((z==5))
output_high(pin_c0);
delay_us(3400); {
} while(input(pin_a1))
} {
}else if((z==4)) if(input(pin_a0))
{
{ output_low(pin_c0);
while(input(pin_a1)) delay_us(2400);
{ output_high(pin_c0);
if(input(pin_a0)) delay_us(5800);
{ }
output_low(pin_c0); }
delay_us(3600); }
output_high(pin_c0);
delay_us(4600); }
}
} }

Código ejercicio 9.

TEMA:
COMUNICACIÓN SPI
DESCRIPCION
El siguiente programa permite la comunicación entre dos microcontroladores pic uno
denominado maestro y otro llamado esclavo mediante el protocolo SPI, además cuenta
con un teclado conectado a ambos pics que envían datos al presionar una tecla.
MATERIALES
 1 Pantalla LCD
 1 PIC 16F887
 1 Fuente de alimentación (5v)
 1 Protoboard
 Diodos Led
 Potenciómetro
 Motor dc

CAPTURAS PROTEUS
CODIGO COMENTADO MAESTRO
#include <18F4550.h> // rx=spi_read();
DECLARAMOS EL TIPO DE PIC A //k=dat;
UTILIZAR lcd_gotoxy(8,1);
#fuses XT,NOMCLR printf(lcd_putc,"\f %u",rx);
#use delay (clock=4M) if(rx!=0){

#define LCD_DB4 PIN_B4 if(rx==67){


#define LCD_DB5 PIN_B5 printf(lcd_putc,"\f C ");
#define LCD_DB6 PIN_B6 delay_ms(100);
#define LCD_DB7 PIN_B7 }
#define LCD_RS PIN_B2 if(rx==68){
#define LCD_E PIN_B3 printf(lcd_putc,"\f D ");
#include <lcd1.c> delay_ms(100);
#include <vinueza.c> }
if(rx==35){
char rx=0; printf(lcd_putc,"\f # ");
Char tecla; delay_ms(100);
Char dat; }
int z; }
}
#INT_SSP // define }}
interrupcion SSP
void ssp_interrupt(){
if(z==0){ void main(){
if(spi_data_is_in()){
//verifica si hay dato en SPI kbd_init();
lcd_init(); if(tecla=='4'){
printf(lcd_putc,"\f Maestro "); spi_write(dat);
delay_ms(100); printf(lcd_putc,"\f 4 ");

while (true){ }
tecla=kbd_getc(); if(tecla=='5'){
dat=tecla-48; spi_write(dat);
if(tecla!=0){ printf(lcd_putc,"\f 5 ");
if(tecla=='A'){ delay_ms(500);
setup_spi(spi_master | spi_l_to_h | }
spi_clk_div_16); if(tecla=='6'){
printf(lcd_putc,"\f Modo TX "); spi_write(6);
delay_ms(100); printf(lcd_putc,"\f 6 ");
disable_interrupts(INT_SSP); delay_ms(500);
z=1; }
} if(tecla=='7'){
if(tecla=='B'){ spi_write(dat);
z=0; printf(lcd_putc,"\f 7 ");
setup_spi(spi_slave | spi_l_to_h | delay_ms(500);
spi_clk_div_16| SPI_XMIT_L_TO_H); }
printf(lcd_putc,"\f Modo RX "); if(tecla=='8'){
delay_ms(100); spi_write(dat);
enable_interrupts(GLOBAL); // habilita printf(lcd_putc,"\f 8 ");
interrupcion global
enable_interrupts(INT_SSP); }
ssp_interrupt(); if(tecla=='9'){
spi_write(dat);
} printf(lcd_putc,"\f 9 ");

}
if(tecla=='1'){ if(tecla=='C'){
spi_write(tecla); spi_write(dat);
printf(lcd_putc,"\f 1 "); printf(lcd_putc,"\f C");

} }
if(tecla=='2'){ if(tecla=='D'){
spi_write(tecla); spi_write(dat);
printf(lcd_putc,"\f 2 "); printf(lcd_putc,"\f D ");

}
if(tecla=='3'){ }
spi_write(dat); if(tecla=='#'){
printf(lcd_putc,"\f 3 "); spi_write(dat);
printf(lcd_putc,"\f # ");
}
if(rx==68){
} printf(lcd_putc,"\f D ");
} delay_ms(100);
}
} if(rx==35){
} printf(lcd_putc,"\f # ");
delay_ms(100);
}
CODIGO COMENTADO ESCLAVO }
#include <18F4550.h> // }
DECLARAMOS EL TIPO DE PIC A }}
UTILIZAR
#fuses XT,NOMCLR
#use delay (clock=4M) void main(){

#define LCD_DB4 PIN_B4 kbd_init();


#define LCD_DB5 PIN_B5 lcd_init();
#define LCD_DB6 PIN_B6 printf(lcd_putc,"\f Maestro ");
#define LCD_DB7 PIN_B7 delay_ms(100);
#define LCD_RS PIN_B2
#define LCD_E PIN_B3 while (true){
#include <lcd1.c> tecla=kbd_getc();
#include <vinueza.c> dat=tecla-48;
if(tecla!=0){
char rx=0; if(tecla=='A'){
Char tecla; setup_spi(spi_master | spi_l_to_h |
Char dat; spi_clk_div_16);
int z; printf(lcd_putc,"\f Modo TX ");
delay_ms(100);
#INT_SSP // define disable_interrupts(INT_SSP);
interrupcion SSP z=1;
void ssp_interrupt(){ }
if(z==0){ if(tecla=='B'){
if(spi_data_is_in()){ z=0;
//verifica si hay dato en SPI setup_spi(spi_slave | spi_l_to_h |
rx=spi_read(); spi_clk_div_16| SPI_XMIT_L_TO_H);
//k=dat; printf(lcd_putc,"\f Modo RX ");
lcd_gotoxy(8,1); delay_ms(100);
printf(lcd_putc,"\f %u",rx); enable_interrupts(GLOBAL); //habilita
if(rx!=0){ interrupcion global
enable_interrupts(INT_SSP);
if(rx==67){ ssp_interrupt();
printf(lcd_putc,"\f C ");
delay_ms(100); }
}
delay_ms(500);
if(tecla=='1'){ }
spi_write(tecla); if(tecla=='8'){
printf(lcd_putc,"\f 1 "); spi_write(dat);
printf(lcd_putc,"\f 8 ");
}
if(tecla=='2'){ }
spi_write(tecla); if(tecla=='9'){
printf(lcd_putc,"\f 2 "); spi_write(dat);
printf(lcd_putc,"\f 9 ");
}
if(tecla=='3'){ }
spi_write(dat); if(tecla=='C'){
printf(lcd_putc,"\f 3 "); spi_write(dat);
printf(lcd_putc,"\f C");
}
if(tecla=='4'){ }
spi_write(dat); if(tecla=='D'){
printf(lcd_putc,"\f 4 "); spi_write(dat);
printf(lcd_putc,"\f D ");
}
if(tecla=='5'){
spi_write(dat); }
printf(lcd_putc,"\f 5 "); if(tecla=='#'){
delay_ms(500); spi_write(dat);
} printf(lcd_putc,"\f # ");
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 ");

Código ejercicio 10.


TEMA:
COMUNICACIÓN I2C
DESCRIPCION
El siguiente programa permite la comunicación entre dos microcontroladores pic uno
denominado maestro y otro llamado esclavo mediante el protocolo I2C, además cuenta
con un teclado conectado a ambos pics que envían datos al presionar una tecla.
MATERIALES
 1 Pantalla LCD
 1 PIC 16F887
 1 Fuente de alimentación (5v)
 1 Protoboard
 Diodos Led
 Potenciómetro

CAPTURAS PROTEUS

CODIGO COMENTADO MAESTRO


#include <18f4550.h>
#fuses #define LCD_DATA6 PIN_B4
XT,PUT,NOPROTECT,BROWNOUT, #define LCD_DATA7 PIN_B5
NOLVP,NOWDT,NOMCLR #include <lcd.c>
#use delay (clock=4000000)
#use i2c(MASTER,SDA=PIN_B0, #include <vinueza.c>
SLOW, SCL=PIN_B1, #use standard_io(a)
NOFORCE_SW) #use standard_io(b)
#use standard_io(c)
#define LCD_ENABLE_PIN PIN_A0 #use standard_io(d)
#define LCD_RS_PIN PIN_A1 int8 tecla;
#define LCD_RW_PIN PIN_A2
#define LCD_DATA4 PIN_B2 int8 dato1 = 0;
#define LCD_DATA5 PIN_B3 void envio_I2C (){
if (dato1=='7'){
i2c_start(); printf(lcd_putc,"\nRecibio 7");
i2c_write(0xa0); delay_ms(1000);
i2c_write(tecla); }
i2c_stop(); if (dato1=='8'){
} printf(lcd_putc,"\nRecibio 8");
void recibo_datos() delay_ms(1000);
{ }
i2c_start (); if (dato1=='9'){
i2c_write (0xa0); printf(lcd_putc,"\nRecibio 9");
i2c_write (0x02+1); delay_ms(1000);
}
i2c_stop(); if (dato1=='A'){
i2c_start (); printf(lcd_putc,"\nRecibio A");
i2c_write (0xa1); delay_ms(1000);
dato1 = i2c_read(0); }
//lcd_putc(dato1); if (dato1=='B'){
if (dato1=='0'){ printf(lcd_putc,"\nRecibio B");
printf(lcd_putc,"\nRecibio 0"); delay_ms(1000);
delay_ms(1000); }
} if (dato1=='C'){
if (dato1=='1'){ printf(lcd_putc,"\nRecibio C");
printf(lcd_putc,"\nRecibio 1"); delay_ms(1000);
delay_ms(1000); }
} if (dato1=='D'){
if (dato1=='2'){ printf(lcd_putc,"\nRecibio D");
printf(lcd_putc,"\nRecibio 2"); delay_ms(1000);
delay_ms(1000); }
} if (dato1=='*'){
if (dato1=='3'){ printf(lcd_putc,"\nRecibio *");
printf(lcd_putc,"\nRecibio 3"); delay_ms(1000);
delay_ms(1000); }
} if (dato1=='#'){
if (dato1=='4'){ printf(lcd_putc,"\nRecibio #");
printf(lcd_putc,"\nRecibio 4"); delay_ms(1000);
delay_ms(1000); }
} i2c_stop ();
if (dato1=='5'){ }
printf(lcd_putc,"\nRecibio 5"); void main(){
delay_ms(1000); kbd_init();
} lcd_init();
if (dato1=='6'){ printf(lcd_putc,"\n MAESTRO ");
printf(lcd_putc,"\nRecibio 6"); delay_ms(100);
delay_ms(1000); while (true){
} tecla=kbd_getc();
if(tecla!=0){
if (tecla=='0'){ }
if (tecla=='7'){
recibo_datos(); envio_I2C ();
delay_ms(100); printf(lcd_putc,"\fEnvio 7");
delay_ms(100);
}
if(tecla!='0'){ }
if (tecla=='1'){ if (tecla=='8'){
envio_I2C (); envio_I2C ();
printf(lcd_putc,"\fEnvio 1"); printf(lcd_putc,"\fEnvio 8");
delay_ms(100); delay_ms(100);

} }
if (tecla=='9'){
if (tecla=='2'){ envio_I2C ();
envio_I2C (); printf(lcd_putc,"\fEnvio 9");
delay_ms(100);
printf(lcd_putc,"\fEnvio 2");
delay_ms(100); }
if (tecla=='A'){
} envio_I2C ();
if (tecla=='3'){ printf(lcd_putc,"\fEnvio A");
envio_I2C (); delay_ms(100);
envio_I2C ();
printf(lcd_putc,"\fEnvio 3"); }
delay_ms(100);
if (tecla=='B'){
} envio_I2C ();
if (tecla=='4'){ printf(lcd_putc,"\fEnvio B");
envio_I2C (); delay_ms(100);
printf(lcd_putc,"\fEnvio 4");
delay_ms(100); }
if (tecla=='C'){
} envio_I2C ();
if (tecla=='5'){ printf(lcd_putc,"\fEnvio C");
envio_I2C (); delay_ms(100);
printf(lcd_putc,"\fEnvio 5");
delay_ms(100); }
if (tecla=='D'){
} envio_I2C ();
if (tecla=='6'){ printf(lcd_putc,"\fEnvio D");
envio_I2C (); delay_ms(100);
printf(lcd_putc,"\fEnvio 6");
delay_ms(100); }
if (tecla=='*'){ {
envio_I2C (); x = i2c_read();
printf(lcd_putc,"\fEnvio *"); }
delay_ms(100);
if(state < 0x80)
} {
if (tecla=='#'){
envio_I2C (); x = i2c_read();
printf(lcd_putc,"\fEnvio #");
}

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

CODIGO COMENTADO DEL void main() {


ESCLAVO
#include <16f887.h> set_tris_b(0b00000011);
#fuses XT,NOMCLR lcd_init();
#use delay (clock=4000000) kbd_init();
#use I2C(Slave, SDA=PIN_C4 , SLOW, enable_interrupts(INT_SSP);
SCL=PIN_C3, ADDRESS=0xa0, enable_interrupts(GLOBAL);
NOFORCE_SW)
#include <LCD.c> while (true) {
#include <kbd_lib.c>
tecla2=kbd_getc();
#use standard_io(c) if(tecla2!=0){
#use standard_io(e)
buffer[0x02]=tecla2;
///////////////
int8 tecla2; if (buffer[0x02]=='0'){
int state; // I2C var printf(lcd_putc,"\fEnvio 0");}
Int8 x=0; if (buffer[0x02]=='1'){
int8 buffer[0x03]; printf(lcd_putc,"\fEnvio 1"); }
//int8 address; if (buffer[0x02]=='2'){
printf(lcd_putc,"\fEnvio 2");}
#INT_SSP if (buffer[0x02]=='3'){
void ssp_interrupt() printf(lcd_putc,"\fEnvio 3");}
{ output_high(PIN_A2); if (buffer[0x02]=='4'){
state=i2c_isr_state(); printf(lcd_putc,"\fEnvio 4");}
if(state <0x80) if (buffer[0x02]=='5'){
printf(lcd_putc,"\fEnvio 5");} printf(lcd_putc,"\nRecibio 3");}
if (buffer[0x02]=='6'){ if (x=='4'){
printf(lcd_putc,"\fEnvio 6");} printf(lcd_putc,"\nRecibio 4");}
if (buffer[0x02]=='7'){ if (x=='5'){
printf(lcd_putc,"\fEnvio 7");} printf(lcd_putc,"\nRecibio 5");}
if (buffer[0x02]=='8'){ if (x=='6'){
printf(lcd_putc,"\fEnvio 8");} printf(lcd_putc,"\nRecibio 6");}
if (buffer[0x02]=='9'){ if (x=='7'){
printf(lcd_putc,"\fEnvio 9");} printf(lcd_putc,"\nRecibio 7");}
if (buffer[0x02]=='A'){ if (x=='8'){
printf(lcd_putc,"\fEnvio A");} printf(lcd_putc,"\nRecibio 8");}
if (buffer[0x02]=='B'){ if (x=='9'){
printf(lcd_putc,"\fEnvio B");} printf(lcd_putc,"\nRecibio 9");}
if (buffer[0x02]=='C'){ if (x=='A'){
printf(lcd_putc,"\fEnvio C");} printf(lcd_putc,"\nRecibio A");}
if (buffer[0x02]=='D'){ if (x=='B'){
printf(lcd_putc,"\fEnvio D");} printf(lcd_putc,"\nRecibio B");}
if (buffer[0x02]=='*'){ if (x=='C'){
printf(lcd_putc,"\fEnvio *");} printf(lcd_putc,"\nRecibio C");}
if (buffer[0x02]=='#'){ if (x=='D'){
printf(lcd_putc,"\fEnvio #");} printf(lcd_putc,"\nRecibio D");}
if (x=='*'){
} printf(lcd_putc,"\nRecibio *");}
if(state<0x80) if (x=='#'){
{ printf(lcd_putc,"\nRecibio #");}
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'){

Código ejercicio 11.

TEMA:
COMUNICACIÓN I2C MEDIANTE COMUNICACION RS232 DESDE EL
ESCLAVO
DESCRIPCION
El siguiente programa tiene por objetivo diseñar un lenguaje de programación que
cumpla con los parámetros 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 comunicación directa con la pc mediante RS232 y varíe 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 alimentación (5v)
 1 Protoboard
 Diodos Led
 Potenciómetro
 Motor dc

CAPTURAS PROTEUS

CODIGO COMENTADO MAESTRO


#include <18F4550.h> #define LCD_RW_PIN PIN_A2
#fuses XT,NOMCLR #define LCD_DATA4 PIN_B2
#use delay (clock=4M) #define LCD_DATA5 PIN_B3
#define LCD_DATA6 PIN_B4
#use I2C(MASTER, SDA=PIN_B0, #define LCD_DATA7 PIN_B5
SLOW, SCL=PIN_B1,
NOFORCE_SW,address=0x60) #include <lcd.c>
#include <vinueza.c>
#define LCD_ENABLE_PIN PIN_A0
#define LCD_RS_PIN PIN_A1 char tecla = 0;
int z; z=0;
char rx; printf(lcd_putc,"\f Modo RX ");
delay_ms(100);
void envio_I2C (){ enable_interrupts(GLOBAL); //habilita
interrupcion global
i2c_start(); //inicio de la enable_interrupts(INT_SSP);
comunicación Recepcion_I2C();
i2c_write(0xa0); // dirección del }
PIC esclavo
i2c_write(tecla); // Envia dato if(tecla=='1'){
i2c_stop(); //Finalización de la if(z==1){
transmisión printf(lcd_putc,"\f Enviado: 1 ");
} envio_I2C();
}
#INT_SSP }
void Recepcion_I2C (){ if(tecla=='2'){
if(z==1){
if(i2c_poll()) { printf(lcd_putc,"\f Enviado: 2 ");
rx=i2c_read(); envio_I2C();
printf (lcd_putc,"=%c ",rx); }
} }
} if(tecla=='3'){
if(z==1){
void main(){ printf(lcd_putc,"\f Enviado: 3 ");
envio_I2C();;
lcd_init(); }
kbd_init(); }
lcd_putc("\f I2C"); if(tecla=='4'){
delay_ms(2000); if(z==1){
lcd_putc("\f Maestro"); printf(lcd_putc,"\f Enviado: 4 ");
delay_ms(100); envio_I2C();
}
while(true){ }
if(tecla=='5'){
if(z==1){
printf(lcd_putc,"\f Enviado: 5 ");
tecla = kbd_getc(); envio_I2C();
if(tecla != 0){ }
}
if(tecla=='A'){ if(tecla=='6'){
printf(lcd_putc,"\f Modo TX "); if(z==1){
delay_ms(100); printf(lcd_putc,"\f Enviado: 6 ");
z=1; envio_I2C();
} }
if(tecla=='B'){ }
if(tecla=='7'){ }
if(z==1){
printf(lcd_putc,"\f Enviado: 7 "); CODIGO COMENTADO ESCLAVO
envio_I2C(); #fuses XT, NOWDT, NOPROTECT //
} fusibles de configuracion
} #use delay (clock=4000000) // define
if(tecla=='8'){ frecuencia de oscilador
if(z==1){ #use rs232(baud=9600, xmit=pin_C6,
printf(lcd_putc,"\f Enviado: 8 "); rcv=pin_C7, bits=8, parity=N)
envio_I2C(); #use I2C(Slave, SDA=PIN_C4 , SLOW,
} SCL=PIN_C3, ADDRESS=0xa0,
} NOFORCE_SW)
if(tecla=='9'){ #use pwm(ccp1,frequency=2K,
if(z==1){ duty=50)
printf(lcd_putc,"\f Enviado: 9 "); #define use_portd_lcd TRUE
envio_I2C(); #define LCD_DB4 PIN_B4
} #define LCD_DB5 PIN_B5
} #define LCD_DB6 PIN_B6
if(tecla=='0'){ #define LCD_DB7 PIN_B7
if(z==1){ #define LCD_RS PIN_B2
printf(lcd_putc,"\f Enviado: 0 "); #define LCD_E PIN_B3
envio_I2C(); #include <lcd1.c>
} #use standard_io(d)
}
if(tecla=='C'){ void main() {
if(z==1){
printf(lcd_putc,"\f Enviado: C "); int DATO;
envio_I2C(); int t;
} int u;
}
if(tecla=='D'){ lcd_init();
if(z==1){ lcd_gotoxy(1,1);
printf(lcd_putc,"\f Enviado: D "); printf (lcd_putc,"Esclavo ");
envio_I2C(); PUTS ("UTA - FISEI");
} while (1) {
}
if(tecla=='#'){ // Recepción por comunicación I2C
if(z==1){ if(i2c_poll()) {
printf(lcd_putc,"\f Enviado: # "); DATO=i2c_read();
envio_I2C(); if(DATO!=0){
} if(DATO==1){
} lcd_gotoxy(1,1);
} printf(lcd_putc,"\f Apagado
");
} u=0;
t=0; PUTS (" Aplicacion de
PUTS (""); temperatura");
PUTS ("Sistema Apagado "); PUTS (" Actualizar datos");
PUTS ("Aplicacion Finalizada "); PUTS ("");
PUTS (""); }
}
if(DATO==2){ else{
lcd_gotoxy(1,1); lcd_gotoxy(1,2);
printf(lcd_putc,"\f Encendido printf(lcd_putc,"%i ",DATO);
");
t=0; }
u=0;
PUTS (""); if (dato<20) {
PUTS ("Sistema Iniciado"); if(t==1){
PUTS (""); pwm_set_duty_percent(150);
} lcd_gotoxy(1,1);
printf(lcd_putc,"\f Duty 15 ");
if(DATO==3){ lcd_gotoxy(1,2);
lcd_gotoxy(1,1); printf(lcd_putc,"%i ",DATO);
printf(lcd_putc,"\f Aplicacion 1 PUTS ("Medicion De
"); Temperatura");
t=1; PUTS ("Velocidad uno");
u=0; PUTS ("Duty 15 ");
PUTS (""); }
PUTS (" Aplicacion de }
temperatura"); if (dato>20){
PUTS (" Actualizar datos"); if(dato<25) {
PUTS (""); if(t==1){
output_low(pin_d0); pwm_set_duty_percent(500);
output_low(pin_d1); lcd_gotoxy(1,1);
output_low(pin_d2); printf(lcd_putc,"\f Duty 50 ");
output_low(pin_d3); lcd_gotoxy(1,2);
output_low(pin_d4); printf(lcd_putc,"%i ",DATO);
output_low(pin_d5); PUTS ("Medicion De
output_low(pin_d6); Temperatura");
output_low(pin_d7); PUTS ("Velocidad dos");
} PUTS ("Duty 50 ");
if(DATO==4){ }
lcd_gotoxy(1,1); }
printf(lcd_putc,"\f Aplicacion 2 }
"); if (dato>26) {
t=0; if(t==1){
u=1; pwm_set_duty_percent(900);
PUTS (""); lcd_gotoxy(1,1);
printf(lcd_putc,"\f Duty 90 ");
lcd_gotoxy(1,2); if (dato >= 11){
printf(lcd_putc,"%i ",DATO); if(u==1){
PUTS ("Medicion De lcd_gotoxy(1,1);
Temperatura"); printf(lcd_putc,"\f Ultrasonico
PUTS ("Velocidad tres"); ");
PUTS ("Duty 90 "); lcd_gotoxy(1,2);
} printf(lcd_putc,"%i ",DATO);
} PUTS ("Medicion de distancia");
if (dato <= 4){ output_high(pin_d0);
if(u==1){ output_high(pin_d1);
lcd_gotoxy(1,1); output_high(pin_d2);
printf(lcd_putc,"\f Ultrasonico output_low(pin_d3);
"); output_low(pin_d4);
lcd_gotoxy(1,2); output_low(pin_d5);
printf(lcd_putc,"%i ",DATO); output_low(pin_d6);
PUTS ("Medicion de distancia"); output_low(pin_d7);
output_high(pin_d0); }
output_low(pin_d1); }
output_low(pin_d2); if (dato >= 15){
output_low(pin_d3); if(u==1){
output_low(pin_d4); lcd_gotoxy(1,1);
output_low(pin_d5); printf(lcd_putc,"\f Ultrasonico
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);
if (dato >= 8){ output_high(pin_d1);
if(u==1){ output_high(pin_d2);
lcd_gotoxy(1,1); output_high(pin_d3);
printf(lcd_putc,"\f Ultrasonico output_low(pin_d4);
"); output_low(pin_d5);
lcd_gotoxy(1,2); output_low(pin_d6);
printf(lcd_putc,"%i ",DATO); output_low(pin_d7);
PUTS ("Medicion de distancia"); }
output_high(pin_d0); }
output_high(pin_d1); if (dato >= 19){
output_low(pin_d2); if(u==1){
output_low(pin_d3); lcd_gotoxy(1,1);
output_low(pin_d4); printf(lcd_putc,"\f Ultrasonico
output_low(pin_d5); ");
output_low(pin_d6); lcd_gotoxy(1,2);
output_low(pin_d7); printf(lcd_putc,"%i ",DATO);
} PUTS ("Medicion de distancia");
} output_high(pin_d0);
output_high(pin_d1); output_high(pin_d1);
output_high(pin_d2); output_high(pin_d2);
output_high(pin_d3); output_high(pin_d3);
output_high(pin_d4); output_high(pin_d4);
output_low(pin_d5); output_high(pin_d5);
output_low(pin_d6); output_high(pin_d6);
output_low(pin_d7); output_low(pin_d7);
} }
} }
if (dato >= 23){ if (dato >= 29){
if(u==1){ if(u==1){
lcd_gotoxy(1,1); lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico printf(lcd_putc,"\f Ultrasonico
"); ");
lcd_gotoxy(1,2); lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO); printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia"); PUTS ("Medicion de distancia");
output_high(pin_d0); output_high(pin_d0);
output_high(pin_d1); output_high(pin_d1);
output_high(pin_d2); output_high(pin_d2);
output_high(pin_d3); output_high(pin_d3);
output_high(pin_d4); output_high(pin_d4);
output_high(pin_d5); output_high(pin_d5);
output_low(pin_d6); output_high(pin_d6);
output_low(pin_d7); output_high(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);

Código ejercicio 12.


TEMA:
COMUNICACIÓN I2C MEDIANTE COMUNICACION RS232 DESDE EL SCLAVO
CON UNA ETAPA DE SENSORIZACION

DESCRIPCION
El siguiente programa tiene por objetivo diseñar un lenguaje de programación que
cumpla con los parámetros 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 comunicación directa con la pc mediante RS232 y varíe 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 alimentación (5v)
 1 Protoboard
 Diodos Led
 Potenciómetro
 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 comunicación


i2c_write(0xa0); // dirección del PIC esclavo
i2c_write(tecla); // Envia dato
i2c_stop(); //Finalización de la transmisión
}

#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) {

// Recepción por comunicación 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 propósito de propósito:
A. General

B. Específico

C. General y Específico

D. Ninguna de las Anteriores

Respuesta: A

Justificación: El microprocesador es un dispositivo de propósito de propósito General.


Referencia: Curso de Ingeniería Técnica en Informática de Sistemas.
Dificultad: Media
2. El microcontrolador es un dispositivo de propósito:

A. General

B. Específico

C. General y específico

D. Ninguna de las anteriores

Respuesta: B

Justificación: El microcontrolador es un dispositivo de propósito Específico.


Referencia: Curso de Ingeniería Técnica en Informática de Sistemas.
Dificultad: Media

3. Al microcontrolador está limitado por la _____________ que posee.

1. Comunicación
2. Capacidad
3. Aplicaciones
4. Arquitectura

Respuesta: D

Justificación: Al microcontrolador está delimitado por la arquitectura que posee.


Referencia: Módulo de Microcontroladores.
Dificultad: Media

4.- Ordene:

1. Ejecuta aplicaciones por sí mismo


2. No tiene la capacidad
3. De ejecutar aplicaciones y el Microcontrolador
4. El microcontrolador

A. 4,2,3,1

B. 4,3,2,1

C. 4,1,3,2

D. 4,1,2,3

Respuesta: A

Justificación: El microcontrolador no tiene la capacidad de ejecutar aplicaciones y el Microcontrolador


ejecuta aplicaciones por sí mismo
Referencia: Módulo de Microcontroladores.
Dificultad: Media
5.- El microprocesador se utiliza para la parte informática, y el microcontrolador para la parte:

A. Digital
B. Electrónica
C. Robótica
D. Todas las anteriores

Respuesta: C

Justificación: El microprocesador se utiliza para la parte informática, y el microcontrolador para la parte


electrónica
Referencia: Módulo 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 instrucción 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

Justificación: Es la arquitectura que utilizan la mayoría de computadoras moderadas para administrar o


gestionar las interrupciones de dispositivos externos como ratón, 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 físicamente 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 instrucción para todo tipo de datos.

Respuesta: B

Justificación: Es la arquitectura que almacena en cachés separados para mejorar el rendimiento.


Referencia: http://comping.galeon.com/productos2326864.html.
Dificultad: Media

8.-De las siguientes características de microprocesadores basados en la arquitectura CISC (Complex


Instruction Set Computer), una no pertenece a este tipo. Indique cuál es ésta:
A. Reduce la dificultad de crear compiladores.
B. La CPU trabaja más rápido al utilizar menos ciclos de reloj para ejecutar instrucciones

C. Reduce los costos de creación de software.

D. Mejora la compactación de código.

Respuesta: B
Justificación: En una arquitectura CISC, al ser un conjunto de instrucciones complejas, cada instrucción
toma de 4 a 10 ciclos de reloj para su ejecución. La opción marcada corresponde a un microprocesador de
arquitectura RISC, que sólo toma un ciclo de reloj para realizar una instrucción.
Referencia: Gualdrón Gamarra, A., & Pinilla, J. P. (2015). Plataforma para la emulación y
reconfiguración de arquitecturas CISC Y RISC..
Dificultad: Media

9.- La siguiente descripción: “Este conjunto de señales se usa para sincronizar las actividades y
transacciones con los periféricos del sistema. Algunas de estas señales, como R/W, son señales que la
CPU envía para indicar qué tipo de operación se espera en ese momento”; a cuál de las de las opciones a
continuación corresponde::

A. Bus de direcciones.

B. Bus de estado.

C. Bus de datos.

D. Bus de control

Respuesta: D

Justificación: El bus de control transporta datos respecto de las operaciones que se encuentra realizando el
CPU. Los periféricos también pueden remitir señales de control a la CPU, como son INT, RESET, BUS
RQ.
Referencia Rossano, V. (2013). Electrónica & microcontroladores PIC. USERSHOP.
Dificultad: Media

10.- El microprocesador es un producto de la tecnología de integración

A. SSI (Short Scale Integration / Integración a Pequeña Escala)

B. MSI (Médium Scale Integration / Integración a Media Escala )

C. LSI (Large Scale Integration / Integración a Gran Escala )

D. VLSI: (Very Large Scale Integration / Integración a Muy Grande Escala)

Respuesta: C
Justificación: El microprocesador es producto de la tecnología de integración a gran escala (LSI), la cual
utiliza técnicas digitales para sus estructuras de entrada, salida e interna la cual conlleva
aproximadamente unos 1000 componentes integrados individualmente.
Referencia: Edward v. Ramírez. Melvyn Veiss, Introducción a los Microprocesadores: equipo y
sistemas,
Cap. 1. Evolución de los microprocesadores. Pag.13.
Dificultad: Media
Tema 3.- Registros de propósito General y Especiales
11.- Seleccione la definición más 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

Justificación: La definición más 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 propósito general y especifico cada una cumpliendo su
función en el micro.
Referencia: Microcontroladores:https://prezi.com/r___paiv3bp2/memorias-y-registros-en-un-
microcontrolador/.
Dificultad: Media

12.- Seleccione la respuesta correcta. La arquitectura de los microcontroladores según su evolución está
dada por:

A. Primero la arquitectura Harvard, después se creó la arquitectura Segmentada y finalmente la


arquitectura Von Neumann.

B. Primero la arquitectura Segmentada, después se creó la arquitectura Von Neumann y finalmente


la arquitectura Harvard.

C. Primero la arquitectura Von Neumann, después se creó la arquitectura Segmentada y finalmente


la arquitectura Harvard.

D. Ninguna de las anteriores

Respuesta: C
Justificación: La evolución de la arquitectura de los microcontroladores inicia con el Von Neumann (su
utilización era muy compleja), después de un tiempo se crea la arquitectura segmentada (hacia más fácil
su utilización) 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 más eficiente. El balanceo
de carga permite que el router reenvíe paquetes a la misma red de destino a través 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

Justificación: 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

Justificación: 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 Valdés. Ramon Pallás. “Microcontroladores: Fundamentos y aplicaciones con PIC”,
pp. 14-15, Primera Edición. 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

Justificación: 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 instrucción,
dirección y control.
Referencia: Fernando Valdés. Ramon Pallás. “Microcontroladores: Fundamentos y aplicaciones con PIC”,
pp. 23, Primera Edición. 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

Justificación: 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

Justificación: 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

Justificación: 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 módulo del temporizador Timer0 es un temporizador/contador de _______.

A. 16 bits
B. 32 bits
C. 8 bits
D. Ninguna de las anteriores

Respuesta: C

Justificación: El módulo 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 módulo del temporizador Timer1 es un temporizador/contador de ________.

A. 16 bits
B. 32 bits
C. 8 bits
D. Ninguna de las anteriores

Respuesta: A

Justificación: El módulo 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.- Características Eléctricas


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

Justificación: El pic 16f887 trabaja con voltaje TTL desde 2.0V- 5V.

Referencia: Datasheet 16f887.


Dificultad: Media
22.- Cuales son los pines de alimentación 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

Justificación: los pines de alimentación 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
Justificación: 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(transmisión) y Rx(Recepción) en comunicación 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

Justificación: Los pines que se usa para la Tx(transmisión) y Rx(Recepción) en comunicación serial en el
pic 16f887 son el 25 y 26.
Referencia: http://www.utp.edu.co/~eduque/arquitec/PIC16F877.pdf.
Dificultad: Media

25.- La máxima 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
Justificación: La máxima 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

Justificación: el rango en CCS del tipo de dato float es 32 bits.

Referencia: http://www.puntoflotante.net/VARIABLES%20ARREGLOS.htm.
Dificultad: Media

27.- Cuál es el rango en CCS del tipo de dato char?.


A.- 8 bits
B.- 16 bits
C.- 32 bits
D.- 64 bits

Respuesta: A

Justificación: el rango en CCS del tipo de dato char es 8 bits.


Referencia: http://www.puntoflotante.net/VARIABLES%20ARREGLOS.htm.
Dificultad: Media

28.- Cuál 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

Justificación: el rango en CCS del tipo de dato unsigned char es 8 bits.


Referencia: http://www.puntoflotante.net/VARIABLES%20ARREGLOS.htm.
Dificultad: Media

29.- Cuál 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
Justificación: el rango en CCS del tipo de dato signed int es 8 bits.
Referencia: http://www.puntoflotante.net/VARIABLES%20ARREGLOS.htm.
Dificultad: Media

30.- Cuál 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

Justificación: 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

Justificación: el juego de instrucciones que permite sumar W y f es ADDWF.

Referencia: http://web.udl.es/usuaris/p7806757/ensamblador.html.
Dificultad: Media

32.- Cuál es el juego de instrucciones que permite multiplicar W con f?.


A.- ANDWF
B.- MULWF
C.- INWF
D.- Todas las anteriores

Respuesta: A

Justificación: el juego de instrucciones que permite multiplicar W con f es ANDWF.


Referencia: http://web.udl.es/usuaris/p7806757/ensamblador.html.
Dificultad: Media

33.- Cuál es el juego de instrucciones que permite borrar F?:


A.- LIMWF
B.- BLANWF
C.- CLRF
D.- Ninguna de las anteriores

Respuesta: C

Justificación: el juego de instrucciones que permite borrar F es CLRF.


Referencia: http://web.udl.es/usuaris/p7806757/ensamblador.html.
Dificultad: Media

34.- Cuál es el juego de instrucciones que permite mover F es?

A.- MOVWF
B.- MOVF
C.- CHAF
D.- Ninguna de las anteriores

Respuesta: B

Justificación: el juego de instrucciones que permite mover f es MOVF.


Referencia: http://web.udl.es/usuaris/p7806757/ensamblador.html.
Dificultad: Media
35.- Cuál es el juego de instrucciones que permite no operar?

A.- NOP
B.- NOPE
C.- OPN
D.- Ninguna de las anteriores

Respuesta: A

Justificación: 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 opción de funcionamiento.
B.- Los fusibles (fuses) sirven para establecer ciertos aspectos del microcontrolador. Cada FUSE
activa o desactiva una instrucción 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 opción de funcionamiento.

Respuesta: A

Justificación: Los fusibles (fuses) sirven para configurar ciertos aspectos del microcontrolador. Cada
FUSE activa o desactiva una opción 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.- Librería Fast_IO, afecta al código que el compilador generará para las instrucciones de entrada y
salida. Este método rápido de hacer I/O ocasiona que el compilador realice I/O sin programar el registro
de dirección. 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

Justificación: Librería Fast_IO: Esta directiva afecta al código que el compilador generará para las
instrucciones de entrada y salida. Este método rápido de hacer I/O ocasiona que el compilador realice
I/O sin programar el registro de dirección. El puerto puede ser A-G.
Sintaxis: #use fast_io (puerto)
Referencia: Librería 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=D5JYVYD8O-
G9ygPrz4H4Bg&usg=AFQjCNGkGhzQbhyjLimJo1CNdfScmKHX-
g&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

Justificación: Es un acrónimo 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
también 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 serán cerámicos 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é función cumple la librería FAST_I/O al ser declarado como directiva?
A.- La directiva FAST_I/O afecta al código que el compilador generará para las instrucciones de entrada,
es el método rápido de hacer que I/O ocasiona que el compilador realice I/O sin programar el registro de
dirección.
B.- La directiva FAST_I/O afecta al código que el compilador generará para las instrucciones de salida,
es el método rápido de hacer que I/O ocasiona que el compilador realice I/O sin programar el registro de
dirección.
C.- c. La directiva FAST_I/O afecta al código que el compilador generará para las instrucciones de
entrada y salida, es el método rápido de hacer que I/O ocasiona que el compilador realice I/O sin
programar el registro de dirección.
D.- Ninguna de las anteriores.

Respuesta: C

Justificación: La función que cumple es de declarar entradas y salidas de manera rápida sin programar el
registro de dirección, generando las instrucciones de entrada y salida..
Referencia: Cánovas López Andrés, C Compiler for Microchip PICmicro MCUs-Manual de usuario del
compilador PCW de CCs,-FAST_I/O.
Dificultad: Media

40.- Qué permite hacer la función SET_TRIS_X (value)?


A.- Estas funciones permiten escribir directamente los registros tri-estado para la configuración 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 configuración 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 configuración 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 configuración 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

Justificación: Estas funciones permiten escribir directamente los registros tri-estado para la configuración
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: Cánovas López Andrés, 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

Justificación: La directiva que define qué fusibles deben activarse en el dispositivo cuando se

Programe es # FUSES. Esta directiva no afecta a la compilación; sin embargo, esta información 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 cuántos 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

Justificación: El comando SET TRIS X () permite cargar un valor al registro tris de un puerto del PIC. El
valor es un número de 8 bits que permite configurar a cada pin de un puerto, esta configuración 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 ejecución, manejar
direccionamiento de memoria y proporcionar capacidad aritmética, dentro de los registros de propósito
general cual es el registro que se utiliza para guardar la dirección base de listas de datos en la memoria:
A.- Registro AX
B.- Registro BX
C.- Registro CX
D.- Ninguna de las anteriores

Respuesta: B

Justificación: Los registros de propósito 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 dirección 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, programación 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, Módulo de E/S,
Periféricos y Buses de interconexión), la gran ventaja que presenta un microcontrolador frente a un
microprocesador es la inclusión de diversos:
A.- Memorias y Datos
B.- Buses y Registros
C.- Interrupciones y Fusibles
D.- Módulos y Periféricos
Respuesta: D

Justificación: Microcontrolador es un circuito integrado que contiene todos los componentes de un


sistema micro-programable (CPU, memoria ROM y RAM, Módulo de E/S, Periféricos y Buses de
interconexión). La gran ventaja que presenta un microcontrolador frente a un microprocesador es la
inclusión de diversos módulos y periféricos que permiten que el microcontrolador realice funciones
completas sin necesidad de elementos externos más allá de cristal y un oscilador.
Referencia: José Miguel Pay Abad. Microcontroladores y Desarrollo de proyectos de productos
electrónicos, Desarrollo de productos electrónicos.
Dificultad: Media

45.- Una interrupción es un ______que hace que el microcontrolador deje de ejecutar la ________que
está realizando para atender dicho acontecimiento y luego regrese y continúe la tarea que estaba
realizando antes de que se presentara la interrupción.

A.- diagrama- programación


B.- flujo - disponibildad
C.- evento – tarea
D.- timer – función

Respuesta: C

Justificación: Una interrupción es un evento que hace que el microcontrolador deje de ejecutar la tarea
que está realizando para atender dicho acontecimiento y luego regrese y continúe la tarea que estaba
realizando antes de que se presentara la interrupción.
Referencia: http://www.circuitoselectronicos.org/2011/03/manejo-de-interrupciones-en-los.html.
Dificultad: Media
Tema 10.- Interacción 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

Justificación: las siglas USART Universal Synchronous Asynchronous Receiver-Transmiter.

Referencia: Módulo 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

Justificación: OERR Indica el error en la Tx y Rx del Pic.


Referencia: Módulo de Microcontroladores.
Dificultad: Media

48.- Comando de configuración 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

Justificación: Comando de configuración necesaria para encender el bit cero del puerto A.
output_high(pin_a0);
Referencia: Módulo Microcontroladores.
Dificultad: Media

49.- Comando de configuración 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

Justificación: Comando de configuración necesaria para encender el bit cero del puerto A.
output_low(pin_a0);
Referencia: Módulo Microcontroladores
Dificultad: Media
50.- Comando de configuración 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
Justificación: Comando de configuración necesaria para encender el nible alto y apagar el nible bajo del
puerto D es: set_tris_d(0xF0);
Referencia: Módulo de Microcontroladores.
Dificultad: Media

Tema 11.- SENSORIZACION (LM35, ULTRASÓNICO Y TCR 5000)


51. Que sensor nos permite obtener datos mediante un haz de luz invisible para el ojo humano?
a) Sensor Ultrasónico

b) Sensor infrarrojo

c) Sensor de temperatura

d) Sensor de fuerza

Respuesta: b
Justificación: 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
película 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 reflexión.
Fuente: http://www.x-robotics.com/sensores.htm
Nivel de dificultad: Fácil
52. Las siguientes aplicaciones: sistemas de alarma de intrusión, puertas automáticas y sensores
de copia de seguridad para automóviles pueden ser realizadas con un sensor ultrasónico
verdadero o falso justifique.
a) verdadero

b) Falso

c) Ninguna de las Anteriores

d) Sin Justificación

Respuesta: a
Justificación: Un sensor ultrasónico transmite ondas ultrasónicas 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 intrusión, puertas automáticas y sensores de copia de seguridad para
automóviles.
Fuente: http://stevenengineering.com/Tech_Support/PDFs/32USONIC .pdf.
Nivel de dificultad: Fácil
53. ¿Qué enunciado es correcto?

a) Funciona mediante la recepción de una ráfaga de ultrasonido en una frecuencia muy por
encima del rango auditivo humano y provee un pulso de salida.

a) Funciona mediante la recepción de una ráfaga de ultrasonido en una frecuencia muy por
debajo del rango auditivo humano y provee un pulso de salida.

b) Funciona mediante la transmisión de una ráfaga de ultrasonido en una frecuencia en el


rango auditivo humano y provee un pulso de entrada

c) Funciona mediante la transmisión de una ráfaga de ultrasonido en una frecuencia muy por
encima del rango auditivo humano y provee un pulso de salida.

Respuesta: d
Justificación.- Funciona mediante la transmisión de una ráfaga 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: Fácil
54. ¿Defina las 4 características principales para un trabajo óptimo de sensores?
a) La naturaleza de la señal que el sensor – transductor genera: voltaje, rango de amplitud,
respuesta en frecuencia, precisión necesaria, determinan el tipo de acondicionamiento de
señal, convertidor A/D y cualquier otro hardware a utilizar.

b) La influencia de las señales de ruido así como los efectos de carga del hardware de
adquisición de datos sobre el sensor.

c) La calibración del sensor con respecto a la variable física. Si la respuesta del sensor a los
cambios de la variable física es lineal o no. Una calibración mal hecha va a producir
mediciones erróneas.

d) La interdependencia entre los distintos componentes del sistema de adquisición de datos,


por ejemplo un sensor muy bueno, con un pobre convertidor A/D no sirve de casi nada.

Justificación.- Cuando se diseñan sistemas de adquisición 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: Fácil
55. Elija el comando completo para usar DELAY que se utilizó en la práctica.

a) #include delay (clock=4000000)

b) delay_ms(500);

c) #use delay (clock=4000000)

d) delay_cycles( 3 );

Respuesta: c
Justificación.- 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 Página. N° 23
Nivel de Dificultad: Medio
56. ¿Que rango nos permite trabajar un sensor ultrasónico?

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
Justificación.-Las características más importantes del sensor ultrasónico son las siguientes:
- Rango: 2 cm a 3 m
- LED indicador de ráfaga que muestra la actividad del sensor
- Interfaz bidireccional por pulso, en un único pin de E/S para comunicación 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 precisión de circuitos integrados de


temperatura, cuya tensión de salida es linealmente proporcional a
Celsius

b) La serie LM35 es la precisión de temperatura, cuya tensión de


salida es linealmente proporcional a Kelvin

c) La serie LM35 es la precisión de circuitos integrados de


temperatura, cuya tensión de salida es linealmente proporcional en
voltios

Respuesta: a
Justificación.-La serie LM35 es la precisión de circuitos integrados de temperatura, cuya tensión
de salida es linealmente proporcional a la Celsius (centígrados) 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 producción para obtener centígrados
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) Energía lumínica, acústica, presión, eléctrica, caudal

b) Energía calórica, , acústica, , movimiento, caudal

c) Energía calórica, lumínica, acústica, presión, movimiento, caudal

d) Energía calórica, temperatura , presión, movimiento, caudal

Respuesta: c
Justificación.- Un transductor es un dispositivo que convierte energía de tipo calórica, lumínica,
acústica, presión, movimiento, caudal, etc. a otra generalmente eléctrica para poder medirla y
eventualmente controlarla en forma relativamente fácil.
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 señal de infrarrojos al objeto de detección,
una porción de señal que rebota de la superficie de detección de objeto, éstos señal infrarroja
reflejada entonces fue capturada por ________________..
a) En la detección de señales de infrarrojos--infrarrojo y sensor
de infrarrojos--por el sensor de infrarrojos.

b) En la detección de señales de ultrasónicas--ultrasónico y


sensor de infrarrojos--por el sensor de ultrasónico.

c) En la detección de señales eléctricas--infrarrojo y sensor de


infrarrojos--por el sensor de infrarrojos.

d) En la detección de señales de infrarrojos--infrarrojo y sensor


de infrarrojos--por el sensor de temperatura.

Respuesta a
Justificación: Sensor de proximidad basado en la detección de señales de infrarrojos requiere de
dos partes: LED infrarrojo y sensor de infrarrojos. El LED de infrarrojos emite señal de
infrarrojos al objeto de detección, una porción de señal que rebota de la superficie de detección
de objeto, esta señal 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 máximo de 12mm
a) Ultrasónico

b) temperatura

c) infrarrojo

d) fuerza

Respuesta c
Justificación: Los sensores infrarrojos se usan para detección de obstáculos por reflexión y
detección de oponentes en combates de sumo.
Especificaciones:
• Detección de distancia: 12m m
• Longitud de onda del funcionamiento: 950 milímetros
Fuente: http://www.x-robotics.com/sensores.htm
Dificultad: Moderado
Tema 12.- Control PWM para Motores DC y AC
61. Un motor eléctrico de Corriente Continua es una máquina que convierte energía eléctrica en
?.

a) Movimiento o trabajo mecánico

b) Energía Magnética

c) Energía Electromagnética

d) Ninguna de las anteriores

Respuesta: a

Justificación Un motor eléctrico de Corriente Continua es esencialmente una máquina que


convierte energía eléctrica en movimiento o trabajo mecánico, a través de medios
electromagnéticos.
Fuente: Maquinas Eléctricas - Chapman
Nivel de dificultad: Fácil
62. Un motor para funcionar se vale de las fuerzas de atracción y repulsión que existen…..
a) Entre los polos

b) En la Red eléctrica

c) En los bobinados

d) Ninguna de las anteriores

e) Respuesta: a

f) Justificación: Un motor para funcionar se vale de las fuerzas de atracción y repulsión que
existen entre los polos.
g) Fuente: Maquinas Eléctricas - Chapman
h) Nivel de dificultad: Fácil
63. El principio que André Ampére establece: que si una corriente pasa a través de un conductor
situado en el interior de un campo magnético, éste ejerce una fuerza…. sobre el conductor.
a) Eléctrica.

b) Mecánica.

c) Magnética.

d) Electromagnética.

i) Respuesta: b
j) Justificación.- Y el principio que André Ampére observo en 1820, en el que establece: que si
una corriente pasa a través de un conductor situado en el interior de un campo magnético,
éste ejerce una fuerza mecánica o f.e.m. (fuerza electromotriz), sobre el conductor.
k) Fuente: Maquinas Eléctricas - Chapman
l) Nivel de Dificultad: Fácil
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) Justificación.- Los dispositivos mas conocidos de la familia de los tiristores para
aplicaciones de potencia son: SCR, TRIAC, GTO.
o) Fuente: Antonio Sanchez - Características y principios de funcionamiento
p) Nivel de Dificultad: Fácil
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) Justificación.- 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 - Características 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) Justificación.- El Triac es un dispositivo semiconductor que pertenece a la familia de los
dispositivos de control: los tiristores
g) Fuente: Antonio Nachez - Características y principios de funcionamiento
h) Nivel de dificultad: Medio
67. El triac es en esencia la conexión 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) Justificación.- El triac es en esencia la conexión de dos SCR (tiristores) en paralelo pero
conectados en sentido opuesto y compartiendo la misma compuerta.
k) Fuente: Antonio Nachez - Características 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) Justificación.- Los tiristores constituyen una familia de dispositivos que pueden tomar
diferentes nombres y características, pero donde todos los elementos que la componen se
basan en el mismo principio de funcionamiento
o) Fuente: Antonio Nachez - Características 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) Señal Positiva.

b) Señal Negativa.

c) Señal de disparo en la compuerta.

d) Señal Positiva y negativa.

q) Respuesta c
r) Justificación: La parte positiva de la onda (semiciclo positivo) pasará por el triac siempre y
cuando haya habido una señal 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 - Características y principios de funcionamiento
t) Dificultad: Medio
70. En que patilla del TRIAC se puede obtener la señal 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) Justificación: Para los semiciclos la señal de disparo se obtiene de la misma patilla (la
puerta o compuerta).
w) Fuente: Antonio Nachez - Características y principios de funcionamiento
x) Dificultad: Moderado
y)
z) Tema 13.- COMUNICACIÓN I2C Y SPI
71. Complete

aa) SPI es un ……………...... de …………… líneas, el cual ……………. paquetes de


………… de 8 bits.
a) Protocolo, 2, envía, datos

b) Bus, 3, envía, datos

c) Bus, 3, transmite, información

d) Protocolo, 2, transmite, información

ab) Respuesta: c
ac) SPI es un bus de 3 líneas, por el cual se transmiten paquetes de información de 8 bits. Cada
una de estas tres líneas porta la información entre los diferentes dispositivos conectados al
bus.
ad) Nivel de dificultad: Medio
ae) Fuente: Ingeniería en Microcontroladores, “Curso de Redes de Microcontroladores PIC
(Protocolo SPI)”, capitulo 1, página 1, México Distrito Federal. Disponible en:
http://www.i-micro.com/pdf/articulos/spi.pdf
af)
72. Elija la respuesta correcta:

ag) Las líneas de transmisión 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 líneas del bus de SPI transmiten la información sobre una sola dirección entre los
dispositivos que se encuentren conectados al protocolo SPI.
aj) Nivel de dificultad: Fácil
ak) Fuente: Ingeniería en Microcontroladores, “Curso de Redes de Microcontroladores PIC
(Protocolo SPI)”, capitulo 1, página 2, México Distrito Federal.
73. Elija la respuesta correcta

al) Qué tipo de comunicación utiliza el protocolo SPI?

a) Paralelo

b) USB

c) Serie y Paralelo
d) Serie

am)Respuesta: d
an) El estándar SPI es utilizado para la comunicación serial entre dispositivos. Se trata de un
enlace de datos en serie, síncrono, y que opera en modo full dúplex, es decir, las señales de
datos viajan en ambas direcciones en forma simultánea.
ao) Nivel de dificultad: Medio
ap) Fuente: Estándar SPI, “Comunicación 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 módulo 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 módulo 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: Difícil
av) Fuente: Estándar SPI, “Comunicación SPI” [Online] Disponible en:
http://www.puntoflotante.net/COMUNICACION-SPI-TUTORIAL.htm
75. Elija la respuesta correcta

aw) Cuál es el modo bidireccional de SPI?

a) Duplex

b) Half Duplex

c) Full Duplex

d) Full Full Duplex

ax) Respuesta: c
ay) El módulo SPI incluye las siguientes características:
 Longitud de datos de transmisión programable a 8 o 16 bits.
 Operación en modo master o slave.
 Desplazamiento de datos primero MSB o primero LSB seleccionable
 Modo bidireccional en Full-duplex o simple línea
 Tasa de bit de transmisión programable
 Registro de datos de transmisión y recepción de Doble buffer
 Opciones de polaridad y fase del clock
 Salida de selección de slave
 Flag de modo de error por falla con posibilidad de interrupción de CPU
 Control de operación de SPI durante el modo wait
az) Nivel de dificultad: Difícil
ba) Fuente: Ingeniería en Microcontroladores, “Protocolo SPI – Teoría y Aplicaciones” Cap. 1,
Pág. 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) Justificación: Una dirección de 7 bits implica que se pueden poner hasta 128 dispositivos
sobre un bus I2C, ya que un número de 7 bits puede ir desde 0 a 127.
be) Nivel de dificultad: Fácil
bf)
bg) Fuente: Eduardo J. Carletti, “Descripción y funcionamiento de la
Comunicación I2C”, 2007, Robots Argentina, [Online]: Disponible en:
http://robots-argentina.com.ar/Comunicacion_busI2C.htm
77. Describa que tipos de señales utiliza la comunicación I2C.

a) SCL-SDA-GND

b) MSB-SCL-GND

c) MOSI-SDA-GND

d) GND-MISO-MOSI

bh) Respuesta: a
bi) Justificación: Las señales que utiliza son:
bj) SCL (System Clock) es la línea de los pulsos de reloj que sincronizan el sistema.
bk) SDA (System Data) es la línea por la que se mueven los datos entre los dispositivos.
bl) GND (Masa) común de la interconección entre todos los dispositivos "enganchados" al bus.
bm)Nivel de dificultad: Media
bn) Fuente: Eduardo J. Carletti, “Descripción y funcionamiento de la Comunicación I2C”,
2007, Robots Argentina, [Online]: Disponible en:
http://robotsargentina.com.ar/Comunicacion_busI2C.htm
78. ¿Cuál es la función que desempeñan las señales en la comunicación I2C?
a) Las líneas SDA (serial Data) y SCL (serial Clock) son bidireccionales,
conectadas al positivo de la alimentación a través de las resistencias
de pull-up. Cuando el bus está libre, ambas líneas están en nivel alto.

b) Las líneas SDA (serial Data) y SCL (serial Clock) son unidireccionales,
conectadas al positivo de la alimentación a través de las resistencias.

c) Las líneas SDA (serial Data) y SCL (serial Clock) son bidireccionales,
conectadas a la alimentación a través de las resistencias de pull-
down.

d) las resistencias de pull-up están conectadas a SDA y SCL, cuando el


bus está libre, ambas líneas están en nivel bajo.

bo) Respuesta: a
bp) Justificación.- Las líneas SDA (serial Data) y SCL (serial Clock) son bidireccionales,
conectadas al positivo de la alimentación a través de las resistencias de pull-up. Cuando el
bus está libre, ambas líneas están en nivel alto.
bq) Nivel de Dificultad: Media
br) Fuente: Eduardo Coquet “Comunicación del Bus I2C”, Comunidad de Electrónicos,
[Online]: Disponible en: http://www.comunidadelectronicos.com/articulos/i2c.htm
79. ¿Cuál es la función del maestro y esclavo?

a) El Maestro sincroniza las señales de reloj y el Esclavo recibe


datos desde el bus.

b) Maestro genera las señales de reloj y termina un envió de


datos y el Esclavo, es direccionado por el multi-maestro.

c) Maestro controla la corrupción de mensajes y el Esclavo


genera las señales de reloj.

d) Maestro genera las señales de reloj y termina un envió de


datos y el Esclavo, es direccionado por el maestro.

bs) Respuesta: d
bt) Justificación.- Maestro genera las señales de reloj y termina un envió de datos y el Esclavo,
es direccionado por el maestro.
bu) Nivel de Dificultad: Difícil
bv) Fuente: Eduardo J. Carletti, “Comunicación – Bus I2C”, Robots. Pasión por la robótica 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) Justificación.- El bus serie I2C ha sido extendido para soportar velocidades de hasta 3,4
MHZ/s, combinado con una función de desplazamiento del nivel de voltaje, en modo High-
speed (Hs-mode) ofrece una solución ideal para los sistemas de tecnología mixta, donde las
altas velocidades y la variedad de voltajes (5v, 3v o menor) son comúnmente usados.
by) Nivel de Dificultad: Difícil
bz) Fuente: MikroElektronica “El mundo de los microcontroladores I2C”, MikroElektronica,
Capitulo 1(1.3 Detalles Importantes), 1998, [Online]: Disponible en:
http://www.comunidadelectronicos.com/articulos/i2c.htm
ca)
cb)Tema 14.- ZIGBEE
81. En que estándar IEEE se basa la tecnología Zigbee?.
E. 802.11ª

F. 802.11n

G. 802.15.4

H. 802.4.15

cc)
cd) Respuesta: C
ce)
cf) Justificación: La tecnología ZigBee (basada en el IEEE 802.15.4) se está consolidando como un
estándar 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 cuántos nodos como máximo puede contar una red Zigbee?

E. 192

F. 8

G. 255

H. 512

ci)
cj) Respuesta: C
ck)
cl) Justificación: Una red ZigBee puede constar de un máximo de 255 nodos, frente a los 8 máximos 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 eléctrico 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) Justificación: Menor consumo eléctrico 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 comunicación
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: Fácil
84. ¿Cuál 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) Justificación: El estándar 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. ¿Cuál es el rango de operación 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)Justificación: ZigBee tiene un rango de operación 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: Fácil
dl)
dm)
dn)
86. ¿Seleccione los 4 tipos de tramas del nivel físico (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) Justificación: Trama nivel físico (tramas del IEEE 802.15.4), es el estándar que define 4 tipos de
tramas, que se analizan de acuerdo a la función que desempeñe. 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: Fácil
87. ¿A que hace referencia la Trama de datos en Zegbee?
dx)
A. Sirve para confirmar el éxito en la recepción 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 número de secuencia para permitir el reensamblado y la retransmisión.
b)
C. Esta es una trama que permite el control y la configuración de los nodos así como la formación
de la red.
c)
D. Son el direccionar a varios dispositivos para que envíen información, permitir mantener a los
nodos sincronizados sin tener que escuchar permanentemente el canal
dy)
dz) Respuesta: B
ea)
eb) Justificación: Se permiten hasta 102 bytes como máximo 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 número de secuencia para permitir el reensamblado y la retransmisión.
ec)
ed) Fuente: Zigbee: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
ee) Nivel de Dificultad: Moderado
88. ¿Cuáles son las principales funciones que garantiza Zegbee de la trama de comando MAC a nivel
fisico?
ef)
A. Recepción, tramas de datos y los comandos MAC, indicación de calidad del enlace, detección
de actividad del canal, RX y TX de datos.
d)
B. Datos, FCS (Frame Check Sequence), reensamblado y la retransmisión, desactivación de nodos,
detección de energía.
e)
C. Control y la configuración de los nodos, detección de energía, indicación de calidad del enlace.
D. Activación y desactivación de nodos, detección de energía, indicación de calidad del enlace,
detección de actividad del canal, RX y TX de datos.
eg)
eh) Respuesta: D
ei)
ej) Justificación: Esta es una trama que permite el control y la configuración de los nodos así como la
formación de la red. Para ello, el estándar contempla 26 directivas para garantizar principalmente las
siguientes funciones a nivel físico:
ek)
el) •Activación y desactivación de nodos
em) • Detección de energía
en) •Indicación de calidad del enlace
eo) •Detección 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. 868Mhz para Europa y 916Mhz para Estados Unidos
B. 885Mhz para Europa y 915Mhz para Inglaterra.
C. 858Mhz para Europa y 915Mhz para Estados Unidos.
D. 858Mhz para Italia y 916Mhz para Estados Unidos.
ex)
ey) Respuesta: C
ez)
fa) Justificación: 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, según 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) Justificación: los equipos o los dispositivos con los que Zigbee trabaja, según 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 fácil para la
comunicación entre dispositivos a altas ………………………, sin el uso……....Posibilita la
transmisión de voz y datos entre diferentes dispositivos mediante un enlace por radiofrecuencia en la
banda ISM de los ……..
fp)
E. Aplicación, frecuencias, banda ancha, 16Ghz
F. Tecnología, velocidades, cables, 2.4Ghz
G. Tecnologia, capacidades, subredes, 2.4Ghz
f)
H. Tecnologia, capacidades, subredes, 2.6Ghz
fq)
fr) Respuesta: C
fs)
ft) Justificación: La Bluetooth es una tecnología que provee un camino fácil para la comunicación entre
dispositivos a altas velocidades, sin el uso de cables. Ésta pertenece a la especificación industrial para
Redes Inalámbricas de Área Personal (WPAN). Posibilita la transmisión 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, Reseña de las Comunicaciones Personales Inalámbricas Perspectivas de
Microondas, IEEE Communications Magazín, Volumen 9, Páginas 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 comunicación.
3. Permite conectar hasta 255 nodos.
4. Tecnología a pequeña escala y bajo costo.
5. Ofrecer la posibilidad de crear pequeñas redes inalámbricas.
fz)
A. 1, 2, 3
B. 3, 4, 5
C. 1,4, 5
D. 2, 4, 5
ga)
gb) Respuesta: D
gc) A continuación, podemos resumir los principales objetivos que se desean conseguir con esta norma:
gd)
ge) • Facilitar las comunicaciones entre equipos móviles y fijos.
gf) • Proveer alta velocidad en la comunicación.
gg) • Eliminar cables y conectores entre los dispositivos.
gh) • Ser lo suficientemente adaptables para el todo tipo de usuarios.
gi) • Orecer la posibilidad de crear pequeñas redes inalámbricas.
gj) • Proporcionar la sincronización de datos entre equipos personales.
gk) • Tecnología a pequeña escala y bajo costo.
gl) FUENTE: S.A., E. (s.f.). Electro componentes S.A. Obtenido de http://www.elec-
trocomponentes.com/
gm) Nivel de Dificultad: Moderado
93. ¿Cuál el Composición del paquete de Bluetooth?
gn)
A. Código de acceso-cabecera- carga útil.
B. Campo de datos o carga útil- flujo-Tipo de acceso
C. Cabecera-Direccion-Flujo
D. Código-Hec-Flujo
go)
gp) Respuesta: A
gq) Composición del paquete:
gr) Código de acceso (72 bits): Es usado para sincronización, identificación y compensación.
gs) Cabecera (54 bits): Contiene información del control de enlace con 6 campos:
gt) Campo de datos o carga útil (hasta 2746 bits): Contiene el conjunto de datos que supone la
información a transmitir
gu) FUENTE: S.A., E. (s.f.). Electro componentes S.A. Obtenido de http://www.elec-
trocomponentes.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. número de host.
gy) 3. ARQN
gz) 4. Carga útil
ha) 5. Dirección.
A. 1, 2, 3
B. 3, 4, 5
C. 2, 4, 5
D. 1, 3, 5
hb)
hc) Respuesta: D
hd) Argumentación:
he) Cabecera (54 bits): Contiene información de con 6 campos:
hf) • Dirección o AM_ADDR: dirección temporal de 3 bits que se utiliza para distinguir los
dispositivos activos en una piconet, siendo la dirección 000 la dirección broadcast.
hg) • Tipo: Define qué tipo de paquete es enviado y cuántos slots va a ocupar.
hh) • Flujo o Flow: El bit de control de flujo es usado para notificar al emisor cuándo 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: Código de redundancia para comprobar errores en la transmisión.
hl) Bibliografía:
hm) S.A., E. (s.f.). Electrocomponentes S.A. Obtenido de http://www.elec- trocomponentes.com/D
hn) Composición del paquete:
ho) Código de acceso (72 bits): Es usado para sincronización, identificación y compensación.
hp) Cabecera (54 bits): Contiene información 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
información a transmitir
hr) Nivel de Dificultad: Moderado
hs)
95. ¿Cómo es la comunicación de Bluetooth?
A. El equipo que mejor funcione actúa como maestro y es el quien define por que canal envía
mientras los esclavos esperan la información.
g)
B. El dispositivo maestro se encarga de definir cómo se establece la comunicación físicamente, los
dispositivos esclavos coordinan sus transmisiones según 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 comunicación
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 cómo se establece la comunicación físicamente
(frecuencia de salto, fase, etc.).
hx) • Los dispositivos esclavos coordinan sus transmisiones según las especificaciones del maestro.
Normalmente, el primero que solicita el servicio actúa como maestro, excepto cuando la red ya ha
sido establecida.
hy) Bibliografía:
hz) Prasad R., 1997, Reseña de las Comunicaciones Personales Inalámbricas Perspectivas de
Microondas, IEEE Communications Magazín, Volumen 9, Páginas 104-108.
96. ¿ Cuántos aparatos pueden conectase simultáneamente a Bluetooth y cuál es su velocidad máxima de
transferencia de datos:

A. 15 equipos _ 750 Kbps


B. 8 equipos _ 720 Kbps
C. 7 equipos _ 720 Kbps
D. 10 equipos _ 780 Kbps
ia)
ib) Respuesta: C
ic) Los aparatos Bluetooth pueden conectarse simultáneamente hasta a siete aparatos más. La velocidad
máxima de transferencia de datos es de aproximadamente 720 Kbps por cana
id) Bibliografía: Prasad R., 1997, Reseña de las Comunicaciones Personales Inalámbricas Perspectivas
de Microondas, IEEE Communications Magazín, Volumen 9, Páginas 110-11
97. ¿ Cuál es la frecuencia en la cual opera la tecnología Bluetooth

A. 2.6 GHz
B. 2.8 GHz
C. 2,48 GHZ
D. 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 administración de los enlaces y flujo de
datos.
ih) Bibliografia: S.A., E. (s.f.). Electrocomponentes S.A. Obtenido de http://www.elec-
trocomponentes.com/
98. Complete los campos de del paquete Cabecera de la trama Bluetooth
ii) Código de Acceso Cabecera Carga Útil
ij) 1 2 3 4 5
6
ik) Dirección Flujo HEC
il)
h)
A. 1.SEQN, 2.TIPO, 3.ARQN
B. 1.Tipo, 2.ARQN, 3.SEQN
C. 1.Tipo, 2.SEQN, 3.ARQN
D. 1.ARQN, 2.SEQN, 3.Tipo
im)
in) Respuesta: B
io) Argumentación:
ip) Cabecera (54 bits): Contiene información del control de enlace con 6 campos:
iq) 1. Dirección o AM_ADDR:
ir) 2. Tipo
is) 3. Flujo
it) 4. ARQN
iu) 5. SEQN
iv) 6. HEC.
iw) Bibliografía:
ix) S.A., E. (s.f.). Electrocomponentes S.A. Obtenido de http://www.elec- trocomponentes.com/
99. Cuál es la principal diferencia entre los módulos HC-05 vs HC-06

A. Hardware es diferente
B. Los modos de comando AT
C. Módulo Maestro-Esclavo
D. EL firmware
iy)
iz) Respuesta: D
ja) Esto se debe a que esencialmente el hardware es el mismo para ambos módulos. La única diferencia
real es el firmware que viene cargado de fábrica.
jb) Bibliografía:
jc) Prasad R., 1997, Reseña de las Comunicaciones Personales Inalámbricas Perspectivas de
Microondas, IEEE Communications Magazín, Volumen 9, Páginas 120-124.
100.Cuál es el radio efectivo que permite Bluetooth conectar todo tipo de dispositivos incorporando un
transmisor

A. 10 m
B. 25 m
C. 15 m
D. 20 m
jd)
je) Respuesta: A
jf) Argumentación:
jg) Integrado en un pequeño transmisor de radiofrecuencia que permite conectar entre sí todo tipo de
dispositivos electrónicos (teléfonos, ordenadores, impresoras, faxes, etc) situados dentro de un radio
limitado de 10 metros (ampliable a 100, aunque con mayor distorsión) sin necesidad de utilizar
cables.
jh) Bibliografía:
ji) Bluetooth: comunicación inalámbrica: http://html.rincondelvago.com/bluetooth_comunicacion-
inalambrica.html
jj)
jk) Tema 16.- RF
101.En que estándar IEEE se basa la tecnología RF?.
I. 802.11ª

J. 802.11n

K. 802.15.4

L. Ninguno

jl)
jm) Respuesta: D
jn) Justificación: La tecnología RF no tiene un estándar o norma en la que trabaje.
jo) Fuente: Sistema Interactivo de Docencia [Online] Disponible en:
http://eprints.ucm.es/8922/1/memoria.pdf
jp) Nivel de Dificultad: Moderado
102.¿De cuántos canales como máximo puede contar una red Zigbee?

I. 2

J. 1

K. 255

L. 512

jq)
jr) Respuesta: B
js)
jt) Justificación: Una red RF dependiendo de la configuración 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 eléctrico 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) Justificación: Mayor consumo eléctrico 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 comunicación 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: Fácil
104.¿Cuál es el tamaño de la trama con el que trabaja RF?
kf)
I. 256bits

J. 128bits
K. 512bits

L. 1024bits

kg)
kh) Respuesta: A
ki)
kj) Justificación: El estándar RF tiene una trama de 256bps.
kk)
kl) Fuente: Sistema Interactivo de Docencia [Online] Disponible en:
http://eprints.ucm.es/8922/1/memoria.pdf
km) Nivel de Dificultado: Moderada
105.¿Cuál es el rango de operación que tiene RF”?
kn)
E. 1 a 100m
F. 10 a 75m
G. 1 a 5KM
H. 30 a 50m
ko)
kp) Respuesta: C
kq)
kr) Justificación: RF tiene un rango de operación de 1 a 5Km, respecto al de 1 a 100 m de Bluetooth
ks)
kt) Fuente: Sistema Interactivo de Docencia [Online] Disponible en:
http://eprints.ucm.es/8922/1/memoria.pdf
ku) Nivel de Dificultad: Fácil
106.¿Seleccione los 4 tipos de tramas del nivel físico (tramas del IEEE 802.15.4) que tiene Zegbee?
kv)
E. Datos, reconocimiento, comandos MAC, piloto.
F. Sinc. Datos, Inicio Comunicación, Longitud, Comandos, Datos, Control de Redundancia,
Finalización de la comunicacion.
G. Direcciones, datos, piloto, comando MAC.
H. Memoria, reconocimiento, comandos MAC, piloto.
kw)
kx) Respuesta: B
ky)
kz) Justificación: Trama de RF
la) Sinc. Datos, 1 byte
lb) Inicio Comunicación, 1 byte
lc) Longitud, 1 byte
ld) Comandos, 1 byte
le) Datos, 250 bytes
lf) Control de Redundancia, 2 byte
lg) Finalización de la comunicación1 byte
lh)
li) Fuente: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
lj) Nivel de Dificultad: Fácil
107.¿A que hace referencia la Trama de datos en RF?
lk)
E. Sirve para confirmar el éxito en la recepción 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 número de secuencia para permitir el reensamblado y la retransmisión.
j)
G. Esta es una trama que permite el control y la configuración de los nodos así como la formación
de la red.
k)
H. Son el direccionar a varios dispositivos para que envíen información, permitir mantener a los
nodos sincronizados sin tener que escuchar permanentemente el canal
ll)
lm) Respuesta: B
ln)
lo) Justificación: Se permiten hasta 102 bytes como máximo 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 número de secuencia para permitir el reensamblado y la retransmisión.
lp)
lq) Fuente: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
lr) Nivel de Dificultad: Moderado
108.¿Cuáles son las principales funciones que garantiza la comunicación de RF?
ls)
E. Recepción, tramas de datos y los comandos MAC, indicación de calidad del enlace, detección
de actividad del canal, RX y TX de datos.
l)
F. Datos, FCS (Frame Check Sequence), reensamblado y la retransmisión, desactivación de nodos,
detección de energía.
m)
G. Control y la configuración de los nodos, detección de energía, indicación de calidad del enlace.
H. Activación y desactivación de nodos, detección de energía, indicación de calidad del enlace,
detección de actividad del canal, RX y TX de datos.
lt)
lu) Respuesta: D
lv)
lw)Justificación: Esta es una trama que permite el control y la configuración de los nodos así como la
formación de la red. Para ello, el estándar contempla 26 directivas para garantizar principalmente las
siguientes funciones a nivel físico:
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 más 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, según 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) Justificación: 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) BIBLIOGRAFÍA
[1] Online: http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf
[2] Online:http://www.mikroe.com/chapters/view/81/capitulo-3-microcontrolador-
pic16f887/#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 línea - Pdf]
[6] TecMikro, Bits de configuracion de los microcontroladores PIC, Disponible en:
http://www.programarpicenc.com/libro/bits-de-configuracion-microcontroladores-
pic.html
[7] Raúl Alvarez Torrico, Entendiendo los bits de configuración 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-para-
microcontroladores-en-c.
nb) [8] Eduardo Santamaría (2000-Pag. 35) “Electrónica digital y microprocesadores”
cuarta edición, 2000, Pag. 35
nc) [9] Edward V. Ramírez, Melvyn Weiss ”Introducción a los microprocesadores
“segunda edición 2006-Pag. 45
nd) [10] Eduardo Santamaría (2000-Pag. 35) “Electrónica digital y microprocesadores”
cuarta edición, 2000, Pag. 40
ne) [11] Enrique Mandado Pérez “Sistema integrado para el auto aprendizaje” Tercera
Edición 2002-Pag. 2
nf) [12] J. M. Orduña Huertas, Vicente Arnau Llompart “Arquitectura y programación
de microcontroladores” Cuarta Edición 2001-Pag. 3
ng) [13] Users Staff “Microcontroladores” Quinta Edición 2003-Pag. 40
nh) [14] Enrique Mandado Pérez “Sistema integrado para el auto aprendizaje” Tercera
Edición 2002-Pag. 5
ni) [15] Hwang Briggs “Arquitectura de computadoras” Editorial Mc Graw Hill.
nj) [16] Fernando E. Valdez, Ramón Pallas “Microcontroladores: Fundamentos y
Aplicaciones con PIC” Quinta edición, 2007, Marcombo, Capitulo 3, Pag. 69.
nk) [17] P. de Miguel “Fundamentos de los computadores” Séptima edición, 1999,
Paraninfo, Capitulo 5, Pag. 135.
nl) [18] [19] W. Stirling “Organización y Arquitectura de Computadores” Quinta
edición, 2000, Prentice-Hall, Capitulo 5, Pag. 120.
nm) [20] [21] Gordon Mosquera Christian Roberto, Modulo didáctico para el
microcontrolador ATMega, Quieto, 2006
nn)
no) [21] Mikel Etxebarria Isuskiza “Microcontroladores PIC: teoría y práctica” Tercera
Edición, 2003, Capitulo 4, Pag. 67.
np) [22] [23] V. García, 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, Ramón Borroso.
[Online] Disponible en: http://www.aeromodelismofacil.com/Motores
%20brushless.htm
nr) [25] Master Ingenieros, “Motor Brushless características fundamentales, Cartagena,
Universidad Politécnica 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). Máquinas eléctricas y transformadores.
Pearson Educación. pp. 429–. ISBN 9789688802939. Consultado el 26 de enero de
2011.
nu) [27] Robótica 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
Ultrasónico”. 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-hc-
sr04/
oa) [30] Jorge González Coneo, “Sistema de monitoreo en tiempo real para la medición
de temperatura”, 2012. [Online]
ob) Disponible en: http://dialnet.unirioja.es/descarga/articulo/4316534.pdf
oc)
od)

oe)
of)
og)

También podría gustarte