Documente Academic
Documente Profesional
Documente Cultură
Contenido
INDICE..............................................................................................................................1
INTRODUCCION.............................................................................................................5
ARQUITECTURA DE MICROCONTROLADORES.....................................................6
Diferencias entre Microprocesador y Microcontrolador...............................................6
MICROPROCESADOR............................................................................................6
MICROCONTROLADOR........................................................................................6
Arquitectura Interna del microcontrolador PIC y el microcontrolador ATmega...........7
Arquitecturas segn el Hardware...............................................................................7
Arquitecturas segn el Software................................................................................9
Registros de Propsito General y Especiales...............................................................10
Registros de propsito especfico:.........................................................................10
Registros de propsito general:.............................................................................10
Distribucin de Pines...................................................................................................11
Recursos comunes a todos los microcontroladores..................................................11
Recursos especiales de los microcontroladores.......................................................12
PROGRAMACIN DE MICROCONTROLADORES PIC..........................................19
Tipos de Datos.............................................................................................................20
Tipo entero (int).......................................................................................................22
Tipo punto flotante (float)........................................................................................22
Tipo carcter (char)..................................................................................................22
Juego de Instrucciones.................................................................................................23
Fusibles e Interrupciones.............................................................................................24
Fusibles....................................................................................................................24
Interrupciones...........................................................................................................29
Funciones para control DIO.........................................................................................41
Interaccin Microcontrolador PC (USART).............................................................82
EJERCICIO 9...........................................................................................................85
EJERCICIO PROPUESTO......................................................................................87
SEGUNDO PARCIAL....................................................................................................88
MODULO CCP...............................................................................................................88
2
INTRODUCCIN:......................................................................................................88
SNTESIS:...................................................................................................................88
Mdulo CCP1..............................................................................................................90
Mdulo CCP2:.............................................................................................................90
MODO CAPTURA:....................................................................................................91
MODO COMPARACIN:..........................................................................................93
Modo PWM:................................................................................................................95
Funciones CCP en compilador CCS............................................................................97
SENSORES (LM35, ULTRASNICO Y TCRT5000)...................................................98
Caractersticas de los sensores.....................................................................................99
Sensor LM35 (sensor de temperatura).........................................................................99
SENSOR ULTRASNICO.......................................................................................101
SENSOR INFRARROJO..........................................................................................102
Control PWM para Motores DC y AC..........................................................................104
MOTOR DE CORRIENTE CONTINUA.................................................................104
FUNDAMENTOS DE OPERACIN DE LOS MOTORES ELCTRICOS...........104
COMUNICACIN I2C Y SPI......................................................................................107
Introduccin...............................................................................................................107
Marco Terico............................................................................................................107
COMUNICACIN SPI (SERIAL PERIPHERAL INTERFACE)................................112
SPI Data Registers (SPIxDH:SPIxDL)......................................................................118
COMUNICACIN BLUETOOTH ZBEEE - RF......................................................120
BLUETOOTH............................................................................................................120
Qu es Bluetooth?....................................................................................................122
De dnde viene el nombre Bluetooth?.....................................................................123
Objetivos principales de la tecnologa Bluetooth......................................................123
Funcionamiento.........................................................................................................123
ZIGBEE.....................................................................................................................124
ESTRUCTURA......................................................................................................126
Caractersticas........................................................................................................127
Ventajas..................................................................................................................128
Tipos de Dispositivos.............................................................................................128
Topologa................................................................................................................129
3
Seguridad................................................................................................................131
Futuro del Zigbee...................................................................................................132
EJERCICIOS RESUELTOS..........................................................................................133
Cdigo ejercicio 1......................................................................................................133
Cdigo ejercicio 2......................................................................................................136
Cdigo ejercicio 3......................................................................................................139
Cdigo ejercicio 4......................................................................................................141
Cdigo ejercicio 6......................................................................................................144
Cdigo ejercicio 7......................................................................................................146
Cdigo ejercicio 8......................................................................................................148
Cdigo Ejercicio 9.....................................................................................................151
CUESTIONARIO..........................................................................................................154
TEMA 1.- Diferencias entre el Microprocesador y Microcontrolador..................154
Tema 2.- Arquitectura Interna del Uc PIC..............................................................156
Tema 3.- Registros de propsito General y Especiales..........................................159
Tema 4.- Distribuciones de pines...........................................................................162
Tema 5.- Caractersticas Elctricas........................................................................163
Tema 6.- Tipo de datos...........................................................................................165
Tema 7.- Juego de Instrucciones............................................................................167
Tema 8.- Fusibles e Interrupciones........................................................................168
Tema 9.- Funciones para control............................................................................171
Tema 10.- Interaccin Uc PC (USART)..............................................................173
Tema 11.- SENSORIZACION (LM35, ULTRASNICO Y TCR 5000)..............174
Tema 12.- Control PWM para Motores DC y AC..................................................180
Tema 13.- COMUNICACIN I2C Y SPI..............................................................185
Tema 14.- ZIGBEE................................................................................................191
Tema 15.- Bluetooth...............................................................................................196
Tema 16.- RF..........................................................................................................201
BIBLIOGRAFA...........................................................................................................205
INTRODUCCION
El presente trabajo es una introduccin primaria a la programacin de
microcontroladores, se referencia las caractersticas importantes de dos
microprocesadores de gama media y alta como son el pic16f887 y el pic18f4550.
Un microcontrolador es un dispositivo electrnico capaz de llevar a cabo procesos
lgicos. Estos procesos o acciones son programados en lenguaje ensamblador o lenguaje
c por el usuario, y son introducidos en este a travs de un programador.
Este resumen est orientado con informacin bsica de los microcontroladores para la
mejor compresin de las bases tericas. As pues adems de aprender todo sobre el
mundo del PIC, es necesario saber algo de electrnica y electrnica digital, de lo
contrario todo lo que escriba aqu sobre microcontroladores no ser entendible.
ARQUITECTURA DE MICROCONTROLADORES
Diferencias entre Microprocesador y Microcontrolador
MICROPROCESADOR
Es un dispositivo electrnico que necesita de todos los perifricos para poder funcionar
correctamente, es decir, tener una motherboard como soporte (con todos los buses que
necesite el microprocesador: bus de direccin, datos, control, etc), tener tambin el
banco de memoria tanto RAM como ROM y ms.
Este microprocesador puede hacer cualquier funcin que se le ordene dependiendo del
software que lo gobierne.
Figura 1 Microprocesador Fuente: Ral lvarez Torrico, Entendiendo los bits de configuracin en
elPIC16 de Microchip, Disponible Fuente:
MICROCONTROLADOR
Internamente ya estn implementados todos los buses, el banco de memoria, clock,
temporizadores, etc y tambin est el software que lo gobierna, pero este software es
nico y tiene una sola funcin la cual es para el cual fue diseado. Es un sistema cerrado
mientras que un microprocesador es un sistema abierto desde este punto de vista, puede
realizar muchsima ms funciones ahora.
Figura 2 Microcontrolador Fuente: Ral lvarez Torrico, Entendiendo los bits de configuracin en elPIC16 de
Microchip, Disponible
Caractersticas
Mquina secuencial
Ejecuta solo una operacin a la vez
Bus de datos y direcciones compartidos
Lenta
Generalmente se combina con software tipo CISC
Arquitectura Harvard
Este modelo, que utilizan los microcontroladores PIC, tiene la unidad central de proceso
(CPU) conectada a dos memorias (una con las instrucciones y otra con los datos) por
medio de dos buses diferentes.
Una de las memorias contiene solamente las instrucciones del programa (Memoria de
Programa), y los otros slo almacenos datos (Memoria de Datos). Ambos buses son
totalmente independientes lo que permite que la CPU pueda acceder de forma
independiente y simultnea a la memoria de datos y a la de instrucciones. Como los
buses son independientes stos pueden tener distintos contenidos en la misma direccin
y tambin distinta lngitud. Tambien la longitud de los datos y las instrucciones puede
ser distinta, lo que optimiza el uso de la memoria en general. Para un procesador de Set
de Instrucciones Reducido, o RISC (Reduced Instruccin Set Computer), el set de
instrucciones y el bus de memoria de programa pueden disearse de tal manera que
todas las instrucciones tengan una sola posicin de memoria de programa de longitud.
Adems, al ser los buses independientes, la CPU puede acceder a los datos para
completar la ejecucin de una instruccin, y al mismo tiempo leer la siguiente
instruccin a ejecutar. Ventajas de esta arquitectura: El tamao de las instrucciones no
esta relacionado con el de los datos, y por lo tanto puede ser optimizado para que
cualquier instruccin ocupe una sola posicin de memoria de programa, logrando as
mayor velocidad y menor longitud de programa.
Caracteristicas
Separa los buses de datos, direcciones y control, y los hace totalmente
independientes.
Lo anterior permite leer instrucciones con mayor velocidad
Pueden direccionar altas cantidades de memoria
Se combinan con software RISC
10
Distribucin de Pines
Los PIC son integrados capaces de ser programados desde un computador y seguir una
secuencia.
PIC (MicroChip). Familia de microcontroladores que gana popularidad da a da.
Fueron los primeros microcontroladores RISC. Sern los empleados en este mdulo.
Es preciso resaltar en este punto que existen innumerables familias de
microcontroladores, cada una de las cuales posee un gran nmero de variantes.
11
La RAM en estos dispositivos es de poca capacidad pues slo debe contener las
variables y los cambios de informacin que se produzcan en el transcurso del programa.
Los usuarios de ordenadores estn habituados a manejar Megabytes de memoria, pero
los diseadores de aplicaciones con microcontroladores trabajan con capacidades de
ROM comprendidas entre 512 bytes y 8 k bytes y de RAM comprendidas entre 20 y
512 bytes (en la gama media de microcontroladores, en la alta se superan estas cifras).
Segn el tipo de memoria ROM que dispongan los microcontroladores, la aplicacin y
utilizacin de los mismos es diferente. Se describen las cinco versiones de memoria no
voltil que se pueden encontrar en los microcontroladores del mercado.
Puertos de Entrada/Salida.
Los puertos de entrada/salida de un microcontrolador permiten la comunicacin con los
perifricos externos. Adems, muchas de las patas que configuran el puerto suelen tener
varias funciones multiplexadas, como por ejemplo ser puerto de E/S y entrada analgica
al convertidor A/D.
El reloj del microcontrolador.
Todos los microcontroladores disponen de un circuito oscilador que genera una onda
cuadrada de alta frecuencia, que proporciona los impulsos de reloj usados en la
sincronizacin de todas las operaciones del sistema.
Generalmente, el circuito de reloj est incorporado en el microcontrolador y slo se
necesitan unos pocos componentes exteriores para seleccionar y estabilizar la frecuencia
de trabajo. Dichos componentes suelen consistir en un cristal de cuarzo junto a
elementos pasivos (dos condensadores del orden de los picofaradios), un resonador
cermico (no hacen falta condensadores) o una red R-C.
Aumentar la frecuencia de reloj supone disminuir el tiempo en que se ejecutan las
instrucciones, pero ello va acompaado de un incremento del consumo de energa.
Conversor D/A
Transforma datos digitales en su correspondiente seal analgica, que saca al exterior
por una de las patas del micro. La inclusin de un conversor D/A en un micro es mucho
ms rara (y cara) que la de un conversor A/D. La salida analgica tiene una limitacin
de corriente y de amplitud, por lo que en muchas ocasiones ser necesaria una etapa de
salida (amplificador + potencia).
Comparador analgico
Algunos modelos de microcontroladores disponen internamente de un Amplificador
Operacional que acta como comparador entre una seal fija de referencia y otra
variable que se aplica por una de las patas del micro. La salida del comparador
proporciona un nivel lgico 1 0 segn la seal de entrada sea mayor o menor que la de
referencia. Tambin hay modelos de microcontroladores con un mdulo de tensin de
referencia que proporciona diversas tensiones de referencia que se pueden aplicar en los
comparadores.
Modulador de anchura de pulsos o PWM
Son circuitos que proporcionan en su salida pulsos de tensin de ancho variable
(modificable por software), muy usados en la regulacin de velocidad de motores y
aplicaciones de electrnica de potencia.
Puertos de E/S digitales
Todos los microcontroladores destinan algunas de sus patas a proporcionar lneas de E/S
digitales. Por lo general, estas lneas se agrupan de ocho en ocho formando Puertos.
Las lneas digitales de los Puertos pueden configurarse como Entrada o como Salida
cargando un 1 un 0 en el bit correspondiente de un registro destinado a su
configuracin. Muchos micros tienen la capacidad de generar interrupciones cuando
cambia la entrada de alguna de las lneas. Eso es especialmente til cuando el micro est
en estado de bajo consumo, que as puede ser despertado por un evento externo en una
de sus patas.
Puertos de comunicacin
Los puertos de comunicacin dotan al microcontrolador de la posibilidad de
comunicarse con dispositivos externos, buses de microprocesadores, buses de sistemas,
buses de redes y otros elementos bajo distintas normas y protocolos. Algunos modelos
de micros disponen de recursos que permiten directamente esta tarea, entre los que
destacan:
Puerto paralela esclavo para poder conectarse con los buses de otros
microprocesadores.
Bus I2C, que es un interfaz serie de dos hilos desarrollado por Philips.
DIAGRAMA DE BLOQUES
El siguiente es su diagrama circuital por bloques, que se debe entender desde la
electrnica, que es la base del trabajo de programacin de los PIC:
La distribucin de pines es la siguiente, as es como se ve por fuera y cada pin tiene una
o ms funciones asignadas, cada vez que se utiliza una funcin hay que tener en cuenta
que no se deben usar las otras asignadas en el mismo pin, es decir, un terminal solo
puede realizar una funcin al tiempo, as en la etapa de planeacin del proyecto se debe
definir que funcin utilizar para cada pin, de las que este est en habilidad de
desempear.
Eficiencia del cdigo: permiten una gran compactacin de los programas.
Rapidez de ejecucin: a frecuencia de 20MHz->5 millones de instr./seg.
Seguridad en acceso por la separacin de memoria de datos y de programa.
Juego reducido de instrucciones y de fcil aprendizaje.
Compatibilidad de pines y cdigo entre dispositivos de la misma familia o sin reduccin
de las prestaciones internas (muy verstiles).
15
16
17
18
destino, origen
AX, 1234
Tipos de Datos
Para conocer los tipos de datos vamos a comenzar analizando primero:
Qu son las variables?
Pues sencillamente el poder identificar con un nombre una o varias posiciones de
memoria de la RAM de nuestro PIC y de esta manera el poder almacenar all los datos
(informacin) que va a utilizar nuestro programa.
En C para poder utilizar una variable primeramente hay que declararla siguiendo la
siguiente sintaxis:
Tipo nombre variable =valor;
Ejemplo de variable declarada:
int i;
Ejemplo de variable declarada e inicializada:
int i=5;
En una misma lnea se puede declarar ms de una variable siguiendo el siguiente
formato:
Tipo nombre_variable1, nombre_variable2,....;
Hay que tener en cuenta que la lnea tiene que acabar en punto y coma.
El tipo de datos es obligatorio ponerlo y le dice al compilador cuantas celdillas de
memoria tiene que reservar para almacenar el valor de la variable. Los tipos de datos
pueden variar de un compilador a otro, vamos a ver los tipos de datos que podemos usar
con nuestro compilador CCS.
Los tipos de datos bsicos que utiliza nuestro compilador son los siguientes:
Sin embargo el compilador CCS tambin admite los siguientes tipos de datos definidos
en el estndar C y que son los que normalmente se utilizan a la hora de programar:
Todos los tipos excepto float son por defecto sin signo, aunque pueden llevar el
especificador unsigned signed y su rango de valores ser el que corresponda a su tipo
bsico.
20
Estos son los tipos bsicos, tambin estn los tipos de datos compuestos como
Enumeraciones, Estructuras y Uniones que estn formados por una combinacin de los
bsicos y que los veremos ms adelante.
El nombre de la variable no puede ser una palabra clave (reservada por el compilador
para realizar unas funciones determinadas y los caracteres que podemos utilizar son las
letras: a-z y A-Z ( ojo! la o no est permitida), los nmeros: 0-9 y el smbolo de
subrayado. Adems hay que tener en cuenta que el primer carcter no puede ser un
nmero.
En el lenguaje C, los datos tienen un tipo, o sea, cada dato utilizado en el programa debe
tener su tipo especificado. Esto permite al compilador conocer el tamao de dato
(nmero de bytes requerido en la memoria) y su representacin. Hay varios tipos de
datos que se pueden utilizar en el lenguaje de programacin miPiC dependiendo del
tamao de dato y del rango de valores. La tabla muestra el rango de valores que los
datos pueden tener cuando se utilizan en su forma bsica.
TIPO DE DESCRIPCIN
D ATO
char
Texto (caracteres)
TAM A O
(NMERO
BITS)
8
RANGO
D E VAL O R E S
DE
int
Valores enteros
16
de -32768 a 32767
float
32
double
de
1.1754943508210-38
a
6.805647744071038
de
1.1754943508210-38
a
6.805647744071038
de 0 a 255
T I P O D E D ATO TAM A O
CON PREFIJO
(NMERO
BITS)
RANGO
D E VAL O R E S
DE
21
char
int
signed char
unsigned int
short int
signed short int
long int
signed long int
8
16
8
8
32
32
de -128 a 128
de 0 a 65535
de 0 a 255
de -128 a 127
de 0 a 4294967295
de -2147483648 a
2147483647
Juego de Instrucciones
El juego de instrucciones para los microcontroladores 16F8XX incluye 35 instrucciones
en total. La razn para un nmero tan reducido de instrucciones yace en la arquitectura
RISC. Esto quiere decir que las instrucciones son bien optimizadas desde el aspecto de
la velocidad operativa, la sencillez de la arquitectura y la compacidad del cdigo. Lo
malo de la arquitectura RISC es que se espera del programador que haga frente a estas
instrucciones. Por supuesto, esto es relevante slo si se utiliza el lenguaje ensamblador
para la programacin.
23
Fusibles e Interrupciones
Fusibles
Armando A. Cullar, Aizol Z. Izaguierreen (2008-Pag. 182)
Los bit's de configuracin o ms comnmente llamados "fusibles" permiten
configurar ciertas funciones en los microcontroladores PIC, como el tipo de
cristal para el oscilador, permiten proteger el cdigo en el micro, entre muchas
funciones.
Fernando E. Valdez, Ramn P. Areny (2007-Pag. 189)
Son configuraciones de la forma de funcionamiento del microcontrolador, se
transfieren al PIC cada vez que se graba un programa.
Jos M. Angulos, Usategui, Susana R. Yesa (2006-Pag. 113)
Los fusibles se utilizan para configurar parmetros importantes del sistema, a
diferencia de los registros de configuracin, estos fusibles estn relacionados con
aspectos ms bsicos e importantes en el funcionamiento del sistema. Adems,
su configuracin queda grabada en memoria Flash, de forma tal que no se pierda
al cortar la alimentacin al microcontrolador.
Definicin Grupal:
Los fusibles permiten configurar ciertas funciones en los microcontroladores
PIC, como por ejemplo el tipo de cristal para el oscilador y principalmente
permite proteger el cdigo en el micro, estos fusibles se encuentran relacionados
con funcionamiento del sistema.
Fusibles de configuracin
Los bits de configuracin o ms comnmente llamados "fusibles" permiten configurar
ciertas funciones en los microcontroladores PIC, como el tipo de cristal para el
oscilador, permiten proteger el cdigo en el micro, entre muchas funciones. La cantidad
de funciones que se pueden configurar con los fusibles dependen del microcontrolador,
si tenemos en el 16F84A 4 funciones, en el 16F88 son alrededor de 13 funciones.
Sirven para configurar algunas funciones del micro, como el tipo de oscilador, la
proteccin de cdigo, habilitar el perro guardin, habilitar el reset maestro, habilitar un
reset inicial, habilitar reset por bajo voltage en la fuente, y otros dependiendo del PIC
usado.
Para el microcontrolador PIC 16F887, la descripcin de los fusibles se encuentra en
tabla 3.
24
DEBUG
LVP
FCMEN
IESO
BOREN
CPD
CD
MCLRE
PWRTE
WDTE
DESCRIPCION
DEBUG :Debug in Circuit Debugger Mode bit
1: In Circuit Debugger Disabled RB6/ICSPCLK and RB6/ICSPDAT are
general purpose I/O Pins
0: In Circuit Debugger Disabled RB6/ICSPCLK and RB6/ICSPDAT are
dedicate to the debugger
LVP :Low Voltage Programming Enabled Bit
1: RB3/PGM Pin has PGM function, low voltage programming enabled
0: RB3 pin is digital I/O, HV on MCLR must be for programming.
FCMEN :Fail Safe Clock Monitor Enabled Bit
1: Fail Safe Clock Monitor is Enabled
0: Fail Safe Clock Monitor is disabled
IESO :Internal- External Switchover bit
1: Fail Internal- External Switchover bit is enabled
0: Fail Internal- External Switchover bit is deseabled
BOREN: 1 :0 : BrownOut Reset Selectionbits
11: BOR enabled
10: BOR enabled during operation and disabled in Sleep
01: BOR controlled by SBOREN bit of the PCON Register
00: BOR disabled
: Data Code Protection bit (2 )
CPD
1: Data memory code protection is disabled
0: Data memory code protection is enabled
:Code Protectionbit ( 3)
CD
1: Program memory code protection is disabled
0: Program memory code protection is enabled
pin function selected bit (4 )
MCLRE:RE3/ MCLR
pin function is MC LR
1: RE3/ MCLR
pin function is
0:RE3/ MCLR
digital
input,
MCLRinternally
tried VDD
25
FOSC
Ejemplos
# FUSES LP
# FUSES XT
# FUSES HS
# FUSES RC
# FUSES WDT
# FUSES NOWDT
# FUSES PROTECT
# FUSES NOPROTECT
# FUSES PUT
Low Power
Cristal Oscilator 4Mhz.
High Speed Oscilator >4Mhz.
Montaje Resistencia Condensador.
Watch Dog Timer Activo
No Watch Dog Timer.
Proteccion de Lectura.
No Proteccion de Lectura.
Power Up Timer.
Fusibles PIC16F887
FUSIBLE
DESCRIPCION
CP (Code Protection Codigo de Este fusible si est habilitado en ON evita
Proteccion de Programa)
que otras personas puedan leer el
programa contenido en el PIC
Config
1 = Program memory code protection is
disabled
0 = Program memory code protection is
enabled
FOSC<2:0> (Bits de Seleccin del Define la funcin de los terminales A6 y
Oscilador.)
A7. Ya sea como puertos I/O, como pines
26
Fusibles PIC18F4550
FFUSIBLE
CCP2 MUX bit
DESCRIPCION
El bit de configuracin CCP2 MUX
determina qu pin CCP2 es multiplexado.
Por defecto, se le asigna a RC1 (CCP2MX
= 1) y si el bit de configuracin se borra,
27
DESCRIPCION
INSTRUCCIONES PARA
ACTIVAR/DESACTIVAR
28
MCLRE
Clear)
#FUSES MCLR
FCMEN
(Fail-Safe Visualiza los fallos ocurridos #FUSES FCMEN
Clock Monitor Enable en el pic
Bit)
IESO
(Internal/External
Conmutacin interno externo
Oscillator Switchover
Bit)
FOSC
HS
LP
XT
EC
#FUSES IESO
#FUSES NOIESO
#FUSES NODEBUG
#FUSES DEBUG
#FUSES HS_OSC
#FUSES XT_OSC
#FUSES LP_OSC
#FUSES EC_OSC
LVP
(Low-Voltage Establece la programacin en #FUSES NOLVP
Icsp Programming)
baja tensin de programacin #FUSES LVP
en b3 (pic16) o b5 (pic18)
WDT
(Watchdog Timer)
#FUSES NOWDT
#FUSES WDT
29
Interrupciones
Armando A. Cullar, Aizol Z. Izaguierreen (2008-Pag. 201)
Las interrupciones permiten a cualquier suceso interior o exterior interrumpir la
ejecucin del programa principal en cualquier momento. En el momento de
producirse, el PIC ejecuta un salto a la rutina de atencin a la interrupcin
previamente definida por el programador, donde se atender a la demanda de la
interrupcin.
Fernando E. Valds Prez, Ramn P. Areny (2007-Pag. 217)
Una solicitud de interrupcin o simplemente una interrupcin es un evento de
origen interno o externo que, si es atendido, hace que el microcontrolador
interrumpa la ejecucin del programa en curso y en su lugar ejecute las
interrupciones de otro programa. Normalmente, cuando el programa que atiende
la solicitud de interrupciones ha completado su ejecucin, el microcontrolador
continua con las instrucciones del programa interrumpido, justo con la
instruccin que sigue a la que se estaba ejecutando cuando se produjo la
solicitud de interrupcin.
Jos M. Angulos, Usategui, Susana R. Yesa (2006-Pag. 150)
Las interrupciones son un mecanismo por el que un dispositivo, ante la
ocurrencia de un evento, pide al procesador que interrumpa el programa que se
est ejecutando y pase a ejecutar temporalmente una subrutina especifica. Esta
subrutina recibe el nombre de rutina de atencin a interrupcin. Cuando el
microcontrolador recibe una seal de interrupcin, el contador de programa
apunta a la direccin 04H de la memoria de programa, por eso, all se debe
escribir toda la programacin necesaria para atender dicha interrupcin.#
Definicin Grupal:
Permiten interrumpir la ejecucin del
Descripcin
Conversin AD completa.
Conversin AD fuera de rango de tiempo
Colisin de bus
Por botn (14000)
Erro en el mdulo CAN
31
#INT_CANIRX
#INT_CANRX0
#INT_CANRX1
Interrupciones
#INT_AD
#INT_ADOF
#INT_BUSCOL
#INT_BUTTON
#INT_CAERR
#INT_CANIRX
#INT_CANRX0
#INT_CANRX1
DESCRIPCIN
Bit de habilitacin de interrupciones
globales
Controla simultneamente todas las fuentes
de interrupciones posibles.
1= Habilita las interrupciones no
enmascaradas.
0= Deshabilita las interrupciones no
enmascaradas.
Bit de habilitacin de interrupciones
perifricas
Es similar al bit GIE, sin embargo controla
interrupciones habilitadas por los
perifricos. Eso significa que no influye en
interrupciones causadas por el
33
Registro PIE1
El registro PIE1 contiene los bits de habilitacin de interrupciones perifricas.
R/W(
0)
ADIE
PIE 1
Bi Bit 6
t
7
R/W(
0)
RCIE
R/W(
0)
TXIE
Bit 5
Bit 4
R/W(
0)
SSPI
E
Bit 3
R/W(
0)
CCP1
IE
Bit 2
R/W(0
)
TMR2
IE
Bit 1
R/W(0
)
TMR1
IE
Bit 0
Caractersti
cas
Nombre de
bit
Tabla 11 Registro
Bit no implementado
R/W Bit de lectura/escritura
35
DESCRIPCIN
- CCP1
Permite generar una peticin de
interrupcin en el mdulo CCP1 utilizado
para procesamiento de la seal PWM.
1 - Habilita la interrupcin CCP1.
0 - Deshabilita la interrupcin CCP1.
Bit de habilitacin de la interrupcin del
puerto serie sncrono maestro (MSSP)
Habilita generar una peticin de
interrupcin despus de cada transmisin
de datos por el mdulo de comunicacin
serie sncrona (modo SPI o I2C).
1 - Habilita la interrupcin del MSSP.
0 - Deshabilita la interrupcin del MSSP.
Registro PIE2:
El registro PIE2 tambin contiene varios bits de habilitacin de interrupciones.
PI
E2
R/W(
0)
OSFI
E
Bit7
R/W(
0)
C2IE
R/W(
0)
C1IE
R/W(
0)
EEIE
Bit6
Bit5
Bit4
R/W(
0)
BCLI
E
Bit3
R/W(0)
ULPW
UIE
Bit2
Bit
1
CCP2
IE
Bit0
Caracterst
icas
Nombre de
Bit
Tabla 13 Registro
16f887
INTCON
18F4550
INTCON, INTCON2,
INTCON3
Interrupcin externa
1 - Interrupciones
habilitadas a nivel
FUNCION
El registro INTCON
contiene varios bits de
habilitacin y de bandera
para el desbordamiento en
el registro TMR0, e
interrupciones por el cambio
del estado en el puerto
PORTB y las interrupciones
externas en el pin INT
Controla simultneamente
todas las fuentes de
interrupciones posibles.
37
interrupciones globales)
GIEH(Interrupciones de alta
prioridad)
PEIE
Peripheral Interrupt Enable
bit (bit de habilitacin de
interrupciones perifricas)
GIEL (Interrupciones de
baja prioridad)
global
0 - Interrupciones
deshabilitadas a nivel
global.
Interrupcin externa
1 - Interrupciones de
perifricos
deshabilitadas a nivel
global
0 - Interrupciones de
perifricos habilitadas a
nivel global.
T0IE - TMR0IE
TMR0 Overflow Interrupt
Enable bit (bit de
habilitacin de
interrupciones por el
desbordamiento del
temporizador Timer0)
Interrupcin externa
1 - Habilita
interrupciones por
Timer0.
0 - Deshabilita
interrupciones por
Timer0.
INTE
External Interrupt Enable
bit (bit de habilitacin de la
interrupcin externa)
Interrupcin externa
1 - Habilita
interrupciones externas
INT.
0 - Deshabilita
interrupciones externas
INT.
Controla interrupciones
causadas por el cambio del
estado lgico en el pin de
entrada RB0/INT en el caso
del 16F887, en el caso del
18F4550 los pines de
entrada con BR0, RB1, RB2
RBIE
RB Port Change Interrupt
Enable bit (bit de
habilitacin de
interrupciones por cambios
en el puerto PORTB)
Interrupcin externa
1 - Habilita
interrupciones por
cambio en el puerto
PORTB.
0 - Deshabilita
interrupciones por
cambio en el puerto
PORTB.
1 - En el registro del
Timer0 ha ocurrido
desbordamiento (esta
bandera debe volverse
Detecta el desbordamiento
en el registro del
temporizador Timer0, es
decir el contador se pone a
38
a 0 por software).
0 - En el registro del
Timer0 no ha ocurrido
desbordamiento.
cero.
INTF- INT0IF
External Interrupt Flag
bit (bit de bandera de
interrupcin externa en INT)
Interrupcin externa
1 - Ha ocurrido una
interrupcin externa
por INT (esta bandera
debe volverse a 0 por
software)
0 - No ha ocurrido una
interrupcin externa
por INT.
Detecta el cambio en el
estado lgico en el o los
pines INT
RBIF
RB Port Change Interrupt
Flag bit (Flag de la
interrupcin por cambio en
el Puerto B)
ADIE
A/D Converter Interrupt
Enable bit (bit de
habilitacin de
interrupciones del
convertidor A/D)
RCIE
EUSART Receive Interrupt
Enable bit (bit de
habilitacin de
interrupciones de recepcin
del EUSART)
1 - Habilita la
interrupcin ADC.
0 - Deshabilita la
interrupcin ADC.
1 - Habilita la
interrupcin de
recepcin del
EUSART.
0 - Deshabilita la
interrupcin de
recepcin del
EUSART.
39
TXIE
EUSART Transmit Interrupt
Enable bit (bit de
habilitacin de
interrupciones de
transmisin del EUSART)
1 - Habilita la
interrupcin de
transmisin del
EUSART.
0 - Deshabilita la
interrupcin de
transmisin del
EUSART.
SSPIE
Master Synchronous Serial
Port (MSSP) Interrupt
Enable bit (bit de
habilitacin de la
interrupcin del puerto serie
sncrono maestro (MSSP)
CCP1IE
CCP1 Interrupt Enable
bit (bit de habilitacin de la
interrupcin del mdulo 1 de
Comparacin/Captura/PW
M - CCP1)
TMR2IE
TMR2 to PR2 Match
Interrupt Enable bit (bit de
habilitacin de la
interrupcin de igualdad
entre TMR2 y PR2)
1 - Habilita la
interrupcin del MSSP.
0 - Deshabilita la
interrupcin del MSSP.
1 - Habilita la
interrupcin CCP1.
0 - Deshabilita la
interrupcin CCP1.
1 - Habilita la
interrupcin de
igualdad entre TMR2 y
PR2.
0 - Deshabilita la
interrupcin de
igualdad entre TMR2 y
PR2.
TMR1IE
TMR1 Overflow Interrupt
Enable bit (bit de
habilitacin de la
interrupcin de
desbordamiento del
temporizador Timer1)
1 - Habilita la
interrupcin de
desbordamiento del
temporizador Timer1.
0 - Deshabilita la
interrupcin de
desbordamiento del
temporizador Timer1.
1 - Habilita la
interrupcin de fallo en
el oscilador.
0 - Deshabilita la
Habilita la interrupcin si se
produce algn tipo de fallo
en el oscilador
40
oscilador)
interrupcin de fallo en
el oscilador.
EEIE
EEPROM Write Operation
Interrupt Enable bit (bit de
habilitacin de la
interrupcin de escritura en
la memoria EEPROM)
1 - Habilita la
interrupcin de
escritura en la memoria
EEPROM.
0 - Deshabilita la
interrupcin de
escritura en la memoria
EEPROM.
BCLIE
Bus Collision Interrupt
Enable bit (bit de
habilitacin de la
interrupcin de colisin de
bus)
1 - Habilita la
Habilita la interrupcin si se
interrupcin de colisin produce una colisin en el
de bus.
bus
0 - Deshabilita la
interrupcin de colisin
de bus.
CCP2IE
CCP2 Interrupt Enable bit
(bit de habilitacin de la
interrupcin del mdulo 2 de
Comparacin/Captura/PW
M (CCP2)
INTEDG
Interrupt Edge Select bit (bit
selector de flanco activo de la
interrupcin externa)
1 - Habilita la
interrupcin del CCP2.
0 - Deshabilita la
interrupcin del CCP2.
Interrupcin externa
1 - Interrupcin por
flanco ascendente
0 - Interrupcin por
flanco descendente
16f887
Una sola interrupcin
INTEDG
18F4550
Tres interrupciones:
INTEDG0, INTEDG1,
INTEDG2
Ejecuta interrupciones
externas en dependencia del
flanco activo que se
configure (subida o bajada)
41
donde se encuentra la
42
43
EJERCICIO 1
1.1. Tema:
SECUENCIA DE LEDS_MODIFICADO
1.2. Objetivo :
Realizar una el desplazamiento de leds mediante la programacin en MPLAB
utilizando la programacin en lenguaje C.
1.3. Descripcin :
Modificar el ejercicio 1 utilizando en este caso todos los pines del puerto C y
realizar la secuenciad de leds 00 (apagado), 01(Secuencia derecha), 10(secuencia
Izquierda), y con 11 a diferencia del ejercicio anterior realizar el (barrido de leds
Derecha-Izquierda) utilizando el software MPLAB IDE X.
1.4. Materiales y equipos:
DESPLAZAMIENTO DE LEDS
Microcontrolador PIC16F887.
8 diodos Leds.
8 resistencias de 220 ohmios.
Cables.
Fuente de 5V DC.
Quemador de PIC
Software MPLAB IDE X
Software PICkit 2
1.5. Diagramas y esquemas:
; CONFIG1
; __config 0xE0D2
44
__CONFIG
_CONFIG1,
_FOSC_HS
_WDTE_ON & _PWRTE_OFF & _MCLRE_OFF
_CP_OFF & _CPD_OFF & _BOREN_OFF
_IESO_OFF & _FCMEN_OFF & _LVP_OFF
; CONFIG2
; __config 0xFFFF
__CONFIG _CONFIG2, _BOR4V_BOR40V
_WRT_OFF
&
&
&
&
CONFIGURACION
BSF STATUS, RP0
MOVLW B'00000000'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISC
MOVLW B'00000000'
MOVWF TRISD
MOVLW B'11111111'
MOVWF TRISE
MOVLW B'110'
MOVWF OSCCON
BSF STATUS, RP1
CLRF ANSEL
CLRF ANSELH
BCF STATUS, RP0
BCF STATUS, RP1
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
CLRF AUX1
CLRF AUX2
MOVLW 0X00
INICIO BTFSC PORTE,0
CALL REV1
BTFSC PORTE,1
CALL ARRIBA
CALL APAGADO
GOTO INICIO
REV1
BTFSC PORTE,1
CALL CENTRO
CALL ABAJO
GOTO INICIO
ARRIBA
MOVLW B'00000001'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000010'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000100'
MOVWF TRISC
CALL DELAY1
MOVLW B'00001000'
MOVWF TRISC
CALL DELAY1
MOVLW B'00010000'
MOVWF TRISC
CALL DELAY1
MOVLW B'00100000'
MOVWF TRISC
CALL DELAY1
MOVLW B'01000000'
MOVWF TRISC
CALL DELAY1
MOVLW B'10000000'
MOVWF TRISC
CALL DELAY1
GOTO INICIO
ABAJO
MOVLW B'10000000'
MOVWF TRISC
CALL DELAY1
MOVLW B'01000000'
MOVWF TRISC
CALL DELAY1
MOVLW B'00100000'
MOVWF TRISC
CALL DELAY1
MOVLW B'00010000'
MOVWF TRISC
45
CALL DELAY1
MOVLW B'00001000'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000100'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000010'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000001'
MOVWF TRISC
CALL DELAY1
GOTO INICIO
CENTRO
MOVLW B'00000001'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000011'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00001111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00011111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00111111'
MOVWF TRISC
CALL DELAY1
MOVLW B'01111111'
MOVWF TRISC
CALL DELAY1
CALL DELAY1
MOVLW B'11111111' ; fin de encendido todos
los leds
MOVWF TRISC
CALL DELAY1
MOVLW B'01111111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00111111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00011111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00001111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000111'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000011'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000001'
MOVWF TRISC
CALL DELAY1
MOVLW B'00000000'
MOVWF TRISC
CALL DELAY1
GOTO INICIO
APAGADO
MOVLW B'00000000'
MOVWF TRISC
GOTO INICIO
END
1.7. Resultado:
Se demostr la configuracin de bsica en lenguaje ensamblador para la secuencia de
leds con programacin el lenguaje en C y la utilizacin de los bloque de Trisc.
46
EJERCICIO 2
1.1. Tema:
Mod16 NBCD_ Modificado
1.2. Objetivo :
Realizar el ejercicio 2 con las mismas condiciones anteriores pero usar el Projet
Wizard de PIC C Compiler (CCS).
1.3. Descripcin :
El presente programa nos permite tener el manejo del control digital de entradas y
salidas en el cual realizamos la aplicacin de un Mod16 NBCD, para el cual
realizamos nuestro cdigo en lenguaje C y despus lo implementaremos
fsicamente, cargaremos nuestro cdigo hexadecimal al microcontrolador PIC
16F887 mediante el PICkit 2 y lo implementaremos de acuerdo al diagrama de
Proteus.
1.4. Materiales y equipos:
Mod16 NBCD
Microcontrolador PIC16F887.
Display 7 segmentos.
Dip_switch
4 resistencias de 220 ohmios.
Cables.
Fuente de 5V DC.
Quemador de PIC
Software MPLAB IDE X
Software PICkit 2
1.5. Diagramas y esquemas:
47
48
1.7. Resultado:
La programacin de una Mod16 NBCD se la realizo sin niguna dificultad aplicando
cdigos ya conocidos y se demostr la configuracin de bsica en MPLAB para la su
control con programacin el lenguaje en C y la utilizacin de los retardos y bloque
trisc.
EJERCICIO PROPUESTO
1.- Modificar el ejercicio 1 utilizando en este caso todos los pines del puerto C y realizar
la secuenciad de leds 00 (apagado), 01(Secuencia derecha), 10(secuencia Izquierda), y
con 11 a diferencia del ejercicio anterior realizar el (barrido de leds Derecha-Izquierda)
utilizando el software MPLAB IDE X.
2.- Realizar el ejercicio 2 con las mismas condiciones anteriores pero usar el Project
Wizard de PIC C Compiler (CCS).
49
fichero y crea una nueva ventana en blanco donde podemos empezar a escribir. [ 2 ]
Para la creacin de un programa usando SOURCE FILE debemos seguir los siguientes
pasos:
1.
2.
3.
4.
#use fast_io(A) [ 3 ]
output_low(pin_A0);
else
output_float(pin_A0);
output_high(PIN_A0);
Ejemplo:
output_low(PIN_A0);
FUNCIONES DE RETARDO
Cnovas Lpez Andrs (2003, Pg. 33) Menciona que:
Dentro de la funcin de retardo tenemos:
DELAY_CYCLES(count):Esta funcin realiza retardos segn el nmero de
ciclos de instruccin especificado en count; los valores posibles van desde 1 a
255. Un ciclo de instruccin es igual a cuatro periodos de reloj.
Ejemplo:
utilizar la directiva #use delay antes de la llamada a esta funcin para que el
compilador sepa la frecuencia de reloj.
Ejemplo:
#use delay(clock=20000000) [ 5 ]
53
EJERCICIO 3
1.1. Tema:
Mod16 BCD
1.2. Objetivo :
Realizar el ejercicio 3 con las mismas condiciones anteriores utilizando el
Source File de PIC C Compiler (CCS) y analizar las diferencias entre MPLAB
IDE X vs CCS
1.3. Descripcin :
El presente programa nos permite tener el manejo del control digital de entradas y
salidas en el cual realizamos la aplicacin de un Mod16 BCD, para el cual
realizamos nuestro cdigo en lenguaje assembler en el software MPLAB de
Microchip lo simularemos en Proteus y que despus lo implementaremos
fsicamente, cargaremos nuestro cdigo hexadecimal al microcontrolador PIC
16F887 mediante el PICkit 2 y lo implementaremos de acuerdo al diagrama de
Proteus.
1.4. Materiales y equipos:
Mod16 BCD
Microcontrolador PIC16F887.
Display 7 segmentos.
Dip_switch
4 resistencias de 220 ohmios.
Decoder 74ls47
Cables.
Fuente de 5V DC.
Quemador de PIC
Software MPLAB IDE X
Software PICkit 2
1.5. Diagramas y esquemas:
1.7. Resultado:
La programacin de una Mod16 BCD se la realizo sin ninguna dificultad aplicando
cdigos ya conocidos y se demostr la configuracin de bsica en MPLAB para la su
control con programacin el lenguaje en C con la ayuda de la visualizacin de un
decoder, la utilizacin de los retardos y bloque trisc..
EJERCICIO PROPUESTO
3.- Realizar el ejercicio 3 con las mismas condiciones anteriores utilizando el Source
File de PIC C Compiler (CCS) y analizar las diferencias entre MPLAB IDE X vs CCS
55
56
57
Una pantalla de cristal lquido o LCD (sigla del ingls liquid crystal display) es una
pantalla delgada y plana formada por un nmero de pxeles en color o monocromos
colocados delante de una fuente de luz o reflectora. A menudo se utiliza en dispositivos
electrnicos de pilas, ya que utiliza cantidades muy pequeas de energa elctrica. Cada
pxel de un LCD tpicamente consiste de una capa de molculas alineadas entre dos
electrodos transparentes, y dos filtros de polarizacin, los ejes de transmisin de cada
uno que estn (en la mayora de los casos) perpendiculares entre s.
MOTOR DC
Un motor CD consiste en un estator, una armadura, un rotor y un colector con
escobillas. La polaridad opuesta entre dos campos magnticos dentro del motor hace
que gire. Los motores CD son el tipo ms simple de motor y se utilizan en
electrodomsticos, como las mquinas de afeitar elctricas, y en ventanas elctricas de
automviles.
58
Tipos de motores DC
Las bobinas y la armadura en un motor derivado estn conectadas en paralelo,
conocidas como derivacin, causando que la corriente de campo sea proporcional a la
carga del motor
MOTOR A PASOS
Los motores paso a paso operan de manera diferente a otros motores DC, que slo giran
cuando se aplica el voltaje. Un motor paso a paso giratorio es un dispositivo
electromecnico que puede dividir una rotacin completa (360) en un gran nmero de
pasos rotacionales. Los motores paso a paso se controlan electrnicamente y no
necesitan costosos dispositivos de retroalimentacin.
Voltaje:
Los motores paso a paso tienen una tensin elctrica de trabajo. Este valor viene
impreso en su carcasa o por lo menos se especifica en su hoja de datos.
Grados por paso:
Una operacin de medio-paso o semi-paso (half step) del motor duplicar la cantidad de
pasos por revolucin al reducir la cantidad de grados por paso. Las cantidades ms
comunes de grados por paso son: 0,72, 1,8, 3,6, 7,5, 15 y hasta 90. [2]
PUENTE H
Un Puente H o Puente en H es un circuito electrnico que permite a un motor elctrico
DC girar en ambos sentidos, avance y retroceso. Son ampliamente usados en robtica y
como convertidores de potencia. Los puentes H estn disponibles como circuitos
integrados, pero tambin pueden construirse a partir de componentes discretos
59
El puente H se usa para invertir el giro de un motor, pero tambin puede usarse para
frenarlo (de manera brusca), al hacer un corto entre las bornas del motor, o incluso
puede usarse para permitir que el motor frene bajo su propia inercia, cuando
desconectamos el motor de la fuente que lo alimenta. [4]
Acciones del puente H:
S1
1
0
0
1
S2
0
1
0
0
S3
0
1
0
1
S4
1
0
0
0
Resultado
El motor gira en avance
El motor gira en retroceso
El motor se detiene bajo su inercia
El motor frena (fast-stop)
Figura 27 Digital Input - Output Esquema de Ejercicio proteus Fuente: Simulacin 7mo A 2016
60
En el digrama tenemos 4 pines del puerto B y 4 del C que se han pogramado como
salidas para mostrar el resultado del proceso ademas de un switch activa las salidas del
puerto B prendiendo los diodos led y al mismo tiempo activa las salidas del puerto C del
decodificador del display de 7 segmentos que realizara una tarea segn la programacin
predeterminada.
Consideraciones:
Los dipswitch se conectan como entradas del microcontrolador y los LED como salidas
de un proceso.
Los resistencias conectadas a la fuente de alimentacin sirven para fijar un nivel en alto
cuando el dipswitch no est cerrando el circuito.
Se recomienda usar los puertos A (RA0 a RA7) para la conexin de dip switch.
Para encender los LED es recomendable utiliza un buffer, el cual tiene un conjunto de
transistores que invierten el pulso y amplifican la corriente.
Para manejar el display utilizamos un decodificador que se lo puede hacer internamente
con programacion en el pic o externamente usando un C.I. que variara dependiendo si
trabajremos con anodo o catodo comun.
TECLADO MATRICIAL Y PANTALLA LCD
Diagrama No.2: Teclado Matricial Pantalla LCD
pueda aprovechar las resistencias pull up con las que cuenta este puerto que facilitan
una mejor conexin , mientras que las pantallas lcd se programan de tal manera que
puedan conectarse al puerto A y al puerto C respectivamente.
Consideraciones:
61
comunicacin .
Las lneas de entrada permanecen en un nivel lgico alto, gracias a los elementos pull-
U1
1
0
1
RE3/MCLR/VPP
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RA0/AN0/ULPWU/C12IN0RC2/P1A/CCP1
RA1/AN1/C12IN1RC3/SCK/SCL
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
RA3/AN3/VREF+/C1IN+
RC5/SDO
RA4/T0CKI/C1OUT
RC6/TX/CK
RA5/AN4/SS/C2OUT
RC7/RX/DT
RA6/OSC2/CLKOUT
RA7/OSC1/CLKIN
RD0
RD1
RB0/AN12/INT
RD2
RB1/AN10/C12IN3RD3
RB2/AN8
RD4
RB3/AN9/PGM/C12IN2RD5/P1B
RB4/AN11
RD6/P1C
RB5/AN13/T1G
RD7/P1D
RB6/ICSPCLK
RB7/ICSPDAT
RE0/AN5
RE1/AN6
RE2/AN7
2
3
4
5
6
7
14
13
33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
16
2
7
1
9
10
15
IN1
IN2
EN1
VSS
8
VS OUT1
OUT2
U2
3
6
+88.8
EN2
IN3
IN4
GND
OUT3
GND OUT4
11
14
kRPM
L293D
8
9
10
PIC16F887
[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
de polarizacin internas
Cuando trabajamos con motores paso a paso, muchas veces es necesario tener la
63
EJERCICIO 4
1.1. Tema:
Desplazamiento Leds con Pulsador_ Modificado
1.2. Objetivo :
Realizar el ejemplo 4 modificando las funciones bsicas de DIO, reemplazar
Standard IO por fast IO y analizar su funcin.
1.3. Descripcin :
El presente programa nos permite tener el manejo del control digital de entradas
y salidas en el cual realizamos la aplicacin de las luces del auto fantstico, para
el cual realizamos nuestro cdigo en lenguaje assembler en el software MPLAB
de Microchip lo simularemos en Proteus y que despus lo implementaremos
fsicamente, cargaremos nuestro cdigo hexadecimal al microcontrolador PIC
16F887 mediante el PICkit 2 y lo implementaremos de acuerdo al diagrama de
Proteus.
1.4. Materiales y equipos:
DESPLAZAMIENTO DE LEDS
Microcontrolador PIC16F887.
8 diodos Leds.
8 resistencias de 220 ohmios.
Cables.
Pulsador
Fuente de 5V DC.
Quemador de PIC
Software MPLAB IDE X
Software PICkit 2
1.5. Diagramas y esquemas:
output_C(8);
delay_ms(tiempo);
output_C(16);
delay_ms(tiempo);
output_C(32);
delay_ms(tiempo);
output_C(64);
delay_ms(tiempo);
output_C(128);
delay_ms(tiempo);
output_C(64);
delay_ms(tiempo);
output_C(32);
delay_ms(tiempo);
output_C(16);
delay_ms(tiempo);
output_C(8);
delay_ms(tiempo);
output_C(4);
delay_ms(tiempo);
output_C(2);
delay_ms(tiempo);
}
if(input(pin_A0)== 1)
{
output_C(0);
}
}
}
1.7. Resultado:
1.8.
1.9. Se demostr la configuracin de bsica en lenguaje ensamblador en MPLAB
para la secuencia de leds con programacin el lenguaje en C y la utilizacin de
un pulsador para dar inicio a la secuencia.
65
1.10.
EJERCICIO 5
1.1. Tema:
Encendido y apagado de un motor DC_Modificado
1.2. Objetivo :
Repetir el ejercicio 5 reemplazando un Transistor por el Driver L293D (Puente
H) para encender y apagar un motor DC
1.3. Descripcin :
El presente programa nos permite tener el manejo del encendido de un motor
DC, para lo cual realizamos elcdigo en PIC C Compiler, luego lo simularemos
en Proteus y posterior lo implementaremos fsicamente, cargaremos nuestro
cdigo hexadecimal al microcontrolador PIC 16F887 mediante el PICkit 2 y lo
implementaremos de acuerdo al diagrama de Proteus.
1.4. Materiales y equipos:
Encendido y apagado de un motor DC
Microcontrolador PIC16F887.
Motor DC.
Transistor
Cables.
Fuente de 5V DC.
Quemador de PIC.
Software PICkit 2
Teclado matricial
Pantalla LCD
Resistencia 10k
1.5. Diagramas y esquemas:
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("MOTOR");
lcd_gotoxy(1,2);
lcd_putc("APAGADO");
output_c(0);
}
void main()
{
lcd_init();
kbd_init();
lcd_gotoxy(1,1);
lcd_putc("Pulse A para: ON");
lcd_gotoxy(1,2);
lcd_putc("Puls D para: OFF");
char teclado;
while (True)
{
teclado = kbd_getc();
if(teclado!=0)
{
if(teclado == '*')
{
encendido();
}
else if(teclado == 'D')
{
apagado();
}
}
}
void encendido()
{
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("MOTOR");
lcd_gotoxy(1,2);
lcd_putc("ENCENDIDO ");
delay_ms(200);
output_c(1);
}
void apagado()
{
Resultado:
Se demostr la configuracin de bsica en lenguaje ensamblador en MPLAB para el
encendido de un motor dc con teclado matricial y su visualizacin en la pantalla lcd con
programacin el lenguaje en C.
EJERCICIO 6
1.1. Tema:
Secuencia de Leds con LCD y Teclado Matricial
1.2. Objetivo :
Realizar un MOD10 utilizando Decoder y Display anodo comn que cumpla las
siguientes condiciones:
1.3. Descripcin :
Si la tecla pulsada es # realice un conteo de forma ascendente y si es * realice
un el conteo descendente (visulizar en la LCD los estados respectivamente) y si
pulsa cualquier otra tecla visualizar en la LCD (Tecla no asignada) y el Display
se apaga.
1.4. Materiales y equipos:
CONTADOR MOD10
Microcontrolador PIC16F887.
Display
Cables.
Fuente de 5V DC.
Quemador de PIC.
Software PICkit 2
Teclado matricial
Pantalla LCD
Resistencia 10k
1.5. Diagramas y esquemas:
#include <16f887.h>
#fuses XT, NOWDT, NOPROTECT
#use delay(clock = 4M)
#define LCD_DB4 PIN_B4
LCD en el Port_B
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B2
#define LCD_E PIN_B3
#include <lcd1.c>
LCD
#include <KBD4x4.c>
#use standard_io (C)
delay_ms(500);
//retardo de medio
segundo
//definimos el
if(cont>9) cont=0;
9 regresa a 0
}
}
if(tecla=='A')
//Si la entrada en el pin A0=0
{
lcd_gotoxy(1,1);
lcd_putc("\fContador") ;
lcd_gotoxy(1,2);
lcd_putc("Descendente") ;
for(int i=0; i<=10; i++)
{
output_C(cont);
//saca en el puerto C el
valor del cont
cont--;
//cont va decrementando de
uno en uno
delay_ms(500);
if(cont<=-1) cont=9;//si cont llega a 0 regresa
de inmediato a 9
}
}
if((tecla!='C')&&(tecla!='A') )
{
lcd_gotoxy(1,1);
lcd_putc("\fTecla No");
lcd_gotoxy(1,2);
lcd_putc("Asignada");
output_c(0b1111);
}
}
}
}
1.7. Resultado:
1.8.
1.9. Se demostr la configuracin de bsica en lenguaje C para obtener una
secuencia de leds con su manejo desde teclado matricial y su visualizacin en
la pantalla lcd el cual tendr mensajes de encendido apagado y seleccin de las
secuencias de desplazamiento.
1.10.
1.11.
1.12.
EJERCICIO 7
1.1. Tema:
1.13. ON-OFF cambio de Giro de un Motor Dc con LCD y Teclado
1.2. Objetivo :
1.14. Variar la velocidad de un motor DC usando las 3 primeras teclas.
1.3. Descripcin :
1.15. El presente programa nos permite tener el manejo del encendido y
cambio de giro de un motor DC mediante el teclado matricial , para lo cual
realizamos el cdigo en PIC C Compiler, luego lo simularemos en Proteus y
posterior lo implementaremos fsicamente, cargaremos nuestro cdigo
hexadecimal al microcontrolador PIC 16F887 mediante el PICkit 2 y lo
implementaremos de acuerdo al diagrama de Proteus.
1.4. Materiales y equipos:
1.16. Encendido_ apagado y cambio giro de un motor DC
Microcontrolador PIC16F887.
Motor DC.
Driver l293
Cables.
Fuente de 5V DC.
Quemador de PIC.
Software PICkit 2
Teclado matricial
Pantalla LCD
Resistencia 10k
1.5. Diagramas y esquemas:
1.17.
1.18.
1.20.
1.6. Cdigo comentado:
1.21.
1.22. #include <16f887.h>
1.23. #fuses
XT,PUT,NOPROTECT,BROWNOUT,NO
LVP,NOWDT
1.24. #use delay(clock=4M)
1.25. #define
LCD_DB4
PIN_B4
//definimos el LCD en el Port_B
1.26. #define LCD_DB5 PIN_B5
1.27. #define LCD_DB6 PIN_B6
1.28. #define LCD_DB7 PIN_B7
1.29. #define LCD_RS PIN_B2
1.30. #define LCD_E PIN_B3
1.31.
1.32. #include <lcd1.c>
//incluimos la
libreria del LCD
1.33. #include <KBD4x4.c>
1.34. //#use standard_io(E)
//uso rapido
del Puerto A y C
1.35. #use standard_io(C)
1.36. //#use standard_io(B)
1.37.
1.38. char tecla, aux='0';
1.39. char PWMH=0, PWML=0;
1.40. //int i;
1.41.
1.42. void encendido()
1.43. {
1.44. lcd_putc("\f");
1.45. lcd_gotoxy(1,1);
1.46. lcd_putc("SISTEMA");
1.47. lcd_gotoxy(1,2);
1.48. lcd_putc("ENCENDIDO ");
1.49.
1.50. }
1.51.
1.52. void apagado()
1.53. {
1.54.
lcd_putc("\f");
1.55.
lcd_gotoxy(1,1);
1.56.
lcd_putc("APAGADO");
1.57.
1.58.
output_c(0);
1.59. }
1.60.
1.61. void velocidad1()
1.62. {
1.63.
lcd_putc("\f");
1.64.
lcd_gotoxy(1,2);
1.65.
lcd_putc("Velocidad Uno");
1.66.
delay_ms(500);
1.67. }
1.68.
1.69. void main()
1.70. {
1.71.
1.72.
1.73.
1.74.
1.75.
1.76.
1.77.
1.78.
1.79.
1.80.
1.81.
1.82.
lcd_init();
kbd_init();
port_b_pullups(True);
lcd_gotoxy(1,1);
lcd_putc("Pulse A para: ON");
lcd_gotoxy(1,2);
lcd_putc("Puls D para: OFF");
while (true)
{
tecla = kbd_getc();
if(tecla=='\0') {tecla=aux;}
//si no
se pulsa nada.. tecla = 0
1.83.
if(tecla=='*')
//si tecla=A
enciende
1.84.
{
1.85.
encendido();
1.86.
tecla='0';
1.87.
delay_ms(500);
1.88.
}
1.89.
if(tecla=='D')
1.90.
{
1.91.
apagado();
1.92.
tecla = '0';
1.93.
delay_ms(500);
1.94.
}
1.95.
if((tecla=='A') || (tecla=='B') ||
(tecla=='C') || (tecla=='#')
1.96.
|| (tecla=='5') || (tecla=='6') ||
(tecla=='7')
1.97.
|| (tecla=='8') || (tecla=='9'))
1.98.
{
1.99.
lcd_putc("\f");
1.100.
lcd_gotoxy(1,1);
1.101.
lcd_putc("Tecla no Usada");
1.102.
delay_ms(500);
1.103.
tecla='0';
1.104.
}
1.105.
1.106.
aux=tecla;
1.107.
tecla = tecla-48;
1.108.
PWMH = tecla*63.75;
1.109.
PWML = 255-PWMH;
1.110.
1.111.
for(PWMH;PWMH>0;PW
MH--)
1.112.
{
1.113.
output_high(pin_C0);
1.114.
1.115.
}
1.116.
1.117.
for
(PWML;PWML>0;PWML--)
1.118.
{
1.119.
1.120.
1.121.
output_low(pin_C0);
1.122.
1.123.
}
}
1.7. Resultado:
1.8.
1.9. Se demostr la configuracin del encendido apagado y cambio de giro de un
motor DC con el manejo desde el teclado matricial y su respectiva visualizacin
en la pantalla lcd con programacin el lenguaje en C con la ayuda de un driver
para motor.
1.10.
1.11.
1.12.
EJERCICIO 8
1.1. Tema:
1.13. ON-OFF_Giro_Velocidades_Motor_Pasos_LCD_Teclado
1.2. Objetivo :
1.14. Aadir leds de sealizacin para cada condicin del ejercicio anterior.
1.3. Descripcin :
1.15.
1.16. El presente programa nos permite tener el manejo del encendido y
cambio de giro de un motor a pasos y adems el control de velocidad mediante
el teclado matricial , para lo cual realizamos el cdigo en PIC C Compiler, l
Sistema encendido (VERDE), Sistema apagado (ROJO), Giro Derecha
(AMARILLO), Giro Izquierda ( AZUL).
1.17.
1.4. Materiales y equipos:
1.18.
1.19. ON-OFF_Giro_Velocidades_Motor_Pasos_LCD_Teclado
Microcontrolador PIC16F887.
Motor a pasos
Driver l293
Cables.
Fuente de 5V DC.
Quemador de PIC.
Software PICkit 2
Teclado matricial
Pantalla LCD
Resistencia 10k
1.5. Diagramas y esquemas:
1.20.
1.21. Figura 35 Esquema de Ejercicio propuesto #8 Fuente: Simulacin 7mo A 2016
1.25. #define
LCD_DB4
PIN_B4
//definimos el LCD en el Port_B
1.26. #define LCD_DB5 PIN_B5
1.27. #define LCD_DB6 PIN_B6
1.28. #define LCD_DB7 PIN_B7
1.85.
delay_ms(tiempo);
1.86.
1.87.
output_A(8);
1.88. }
1.89.
1.90. void apagado()
1.91. {
1.92.
lcd_putc("\f");
1.93.
lcd_gotoxy(1,1);
1.94.
lcd_putc("APAGADO");
1.95.
1.96.
output_c(0);
1.97.
delay_ms(100);
1.98.
output_A(1);
1.99. }
1.100.
1.101.
void velocidad1()
1.102.
{
1.103.
lcd_putc("\f");
1.104.
lcd_gotoxy(1,2);
1.105.
lcd_putc("Velocidad Uno");
1.106.
tiempo=100;
1.107.
}
1.108.
1.109.
void velocidad2()
1.110.
{
1.111.
lcd_putc("\f");
1.112.
lcd_gotoxy(1,2);
1.113.
lcd_putc("Velocidad Dos");
1.114.
tiempo=50;
1.115.
}
1.116.
1.117.
void velocidad3()
1.118.
{
1.119.
lcd_putc("\f");
1.120.
lcd_gotoxy(1,2);
1.121.
lcd_putc("Velocidad Tres");
1.122.
tiempo=10;
1.123.
}
1.124.
/*
1.125.
char leert(char tecla1) //metodo
para leer teclado_Matricial (no necesario)
1.126.
{
1.127.
//output_high(pin_e1);
1.128.
if(tecla1 != 0)
1.129.
{
1.130.
if(tecla1 == '1')
1.131.
{
1.132.
// output_low(pin_e1);
1.133.
return(tecla1);
1.134.
}
1.135.
else if(tecla1 == '4')
1.136.
{
1.137.
// output_low(pin_e1);
1.138.
return(tecla1);
1.139.
}
1.140.
else if(tecla1 == 'D')
1.141.
{
1.142.
//output_low(pin_e1);
1.143.
return(tecla1);
1.144.
}
1.145.
}
1.146.
//output_low(pin_e1);
1.147.
return(0);
1.148.
} */
1.149.
1.150.
void main()
1.151.
{
1.152.
1.153.
lcd_init();
1.154.
kbd_init();
1.155.
lcd_gotoxy(1,1);
1.156.
lcd_putc("Pulse A para: ON");
1.157.
lcd_gotoxy(1,2);
1.158.
lcd_putc("Puls D para: OFF");
1.159.
1.160.
while (True)
1.161.
{
1.162.
teclado = kbd_getc();
1.163.
if(teclado!=0)
1.164.
{
1.165.
if(teclado == '*')
1.166.
{
1.167.
encendido();
1.168.
1.169.
while(teclado!='D')
1.170.
{
1.171.
teclado=kbd_getc();
1.172.
1.173.
if(teclado=='1')
1.174.
{
1.175.
tiempo = 100;
1.176.
velocidad1();
1.177.
1.178.
while(true)//
while((leert(kbd_getc())!='D')
&&
(leert(kbd_getc())!='4'))
1.179.
{
1.180.
giroDerecha:
1.181.
giro_derecha();
1.182.
1.183.
teclado = 0;
1.184.
for(i=0; i<=100; i++)
1.185.
{
1.186.
teclado=kbd_getc();
1.187.
if(teclado!=0)
1.188.
{
1.189.
if(teclado == '4')
{goto giroIzquierda;}
1.190.
else if(teclado ==
'D') {goto off;}
1.191.
else if(teclado ==
'A') {velocidad1();}
1.192.
else if(teclado ==
'B') {velocidad2();}
1.193.
else if(teclado ==
'C') {velocidad3();}
1.194.
}
1.195.
}
1.196.
}
1.197.
}
1.198.
1.199.
if(teclado == '4')
1.200.
{
1.201.
tiempo=100;
1.202.
velocidad1();
1.203.
1.204.
while(true)
//while((leert(kbd_getc())!='D')
&&
(leert(kbd_getc())!='1'))
1.205.
{
1.206.
giroIzquierda:
1.207.
giro_izquierda();
1.208.
1.209.
teclado = 0;
1.210.
for (i=0; i<=100; i++)
1.211.
{
1.212.
teclado = kbd_getc();
1.213.
if(teclado!=0)
1.214.
{
1.215.
if(teclado == 'D')
{goto off;}
1.216.
else if(teclado == '1')
{goto giroDerecha;}
1.217.
else if(teclado == 'A')
{velocidad1();}
1.218.
else if(teclado == 'B')
{velocidad2();}
1.219.
else if(teclado == 'C')
{velocidad3();}
1.220.
}
1.221.
}
1.222.
}
1.223.
}
1.224.
} goto off;
1.225.
1.226.
}
1.227.
off:
1.228.
apagado();
1.229.
}
1.230.
}
1.231.
}
1.232.
1.7. Resultado:
1.8. Se demostr la configuracin del (on_off) cambio de giro y control de
velocidad de un motor a pasos con el manejo desde el teclado matricial y su
1.10.
EJERCICIO PROPUESTO
1.11.
5.- Reemplazar un Transistor por el Driver L293D (Puente H) para
encender y apagar un
1.12.
6.- Realizar un MOD10 utilizando Decoder y Display anodo comn que
cumpla las siguientes condiciones:
1.13.
1.15.
8.- Aadir leds de sealizacin para cada condicin del ejercicio anterior.
1.16.
1.17.
1.18.
1.19.
1.20.
1.21.
Uso de las Seales RS232.
Tierra de Chasis.- Se conecta internamente al chasis del dispositivo.
Recibe Datos (RXD).- Por esta pata entran los datos del dispositivo
1.22.
1.23.
externo.
1.24.
Transmite Datos (TXD).- Por esta pata salen los datos para ir al
dispositivo externo.
1.25.
Terminal de Datos Listo (DTR).- Esta pata realiza el control maestro
del dispositivo externo. Cuando este pin esta en 1, el dispositivo externo no
transmite ni recibe datos.
1.26.
Tierra de seal.- Se ha dicho que los datos se envan como voltajes + o
-. Pues bien, esta pata es la referencia de seal para esos voltajes.
1.27.
Conjunto de Datos Listo (DSR).- Por lo general, los dispositivos
externos tienen esta patita con un valor permanente de 0.
1.28.
Solicita Permiso para Enviar Datos (RTS).- Esta parte del hardware se
usa para estrecharse la mano entre los dispositivos que se estn comunicando. Si
el dispositivo externo est de acuerdo, pone un 0 en la patita que se llama Pista
Libre para Enviar Datos (CTS).
1.29.
Pista Libre para Enviar Datos (CTS).- sta es la otra mitad del
hardware usado para estrecharse la mano. El dispositivo externo pone esta pata en
0 cuando est lista para recibir datos.
1.30.
Timbre Telefnico (RI).- Esta patita se usa slo cuando un PLC
(Programable Logical Controller) est conectado a un mdem. [1]
1.31.
Descripcin de pines
1.32.
1.33.
Aplicaciones
1.34.
Los dispositivos de redes, como los enrutadores y switches, a menudo
tienen puertos serie para modificar su configuracin. Los puertos serie se usan
frecuentemente en estas reas porque son sencillos, baratos y permiten la
interoperabilidad entre dispositivos. La desventaja es que la configuracin de las
1.48.
RS 232
1.49.
1.50. Figura 37 COMUNICACION PIC PC Fuente: www.db9-pinout.com
1.51.
La denominada RS-232 es una interfaz que designa una norma para el
intercambio serie de datos binarios entre un DTE (o Equipo terminal de datos) y
un DCE (o Equipo de terminacin del circuito de datos), aunque existen otras
situaciones en las que tambin se utiliza la interfaz RS-232.
1.52.
La interfaz RS-232 est diseada para distancias cortas, de unos 15
metros o menos, y para unas velocidades de comunicacin bajas, de no ms de
20 KBytes. A pesar de ello, muchas veces se utiliza a mayores velocidades con
un resultado aceptable.
1.53.
La interfaz puede trabajar en comunicacin asncrona o sncrona y tipos
de canal simplex, half duplex o full duplex. En un canal simplex los datos
siempre viajarn en una direccin, por ejemplo desde DCE a DTE. En un canal
half dplex, los datos pueden viajar en una u otra direccin, pero slo durante
un determinado periodo de tiempo; luego la lnea debe ser conmutada antes que
los datos puedan viajar en la otra direccin. En un canal full duplex, los datos
pueden viajar en ambos sentidos simultneamente. Las lneas de handshaking
de la RS-232 se usan para resolver los problemas asociados con este modo de
operacin, tal como en qu direccin los datos deben viajar en un instante
determinado.
1.54.
1.55.
EJERCICIO 9
1.1. Tema:
1.56. Utilizacin del puerto USART
1.2. Objetivo :
1.57.
Determinar la utilizacin del puerto USART, visualizar los estados en la
pantalla LCD.
1.3. Descripcin :
1.58. Encender el motor DC desde el teclado matricial y apagar desde la PC
mediante la comunicacin USART, visualizar los estados en la pantalla LCD.
1.4. Materiales y equipos:
1.59. Comunicacin pic_pc
Microcontrolador PIC16F887.
Cables.
Fuente de 5V DC.
Quemador de PIC.
Software PICkit 2
LCD 2x16
Teclado matricial (4x4)
Max RS232
Protoboard
1.5. Diagramas y esquemas:
1.60.
1.62.
1.63.
1.64.
1.65.
1.105.
void
control_teclado()
////metodo para comunicacion entre PIC
y PC
1.106.
{
1.107.
char tecla;
1.108.
kbd_init();
1.109.
lcd_gotoxy(1,1);
1.110.
lcd_putc("\f TX Teclado");
1.111.
1.112.
1.113.
while(true)
1.114.
{
1.115.
tecla=kbd_getc();
1.116.
if(tecla!=0)
1.117.
{
1.118.
if(tecla=='*') //si tecla
pulsado es 1(Proteus) entonces visualiza
1(Teclado_Real)
1.119.
{
1.120.
printf("\f\rMOTOR DC
ENCENDIDO");
1.121.
delay_ms(100);
1.122.
output_A(1);
1.123.
}
1.124.
1.125.
if(tecla=='D')
1.126.
{
1.127.
goto salida;
1.128.
}
1.129.
1.130.
}
1.131.
1.132.
}
1.133.
salida:
1.134.
menu();
1.135.
1.136.
}
1.137.
1.138.
void control_PC()
//metodo
para comunicacion entre PC y PIC
1.139.
{
1.140.
lcd_init();
1.141.
enable_interrupts(int_rda);
1.142.
enable_interrupts(global);
1.143.
lcd_gotoxy(1,1);
1.144.
lcd_putc("\fTx PC");
1.145.
1.146.
while (true)
1.147.
{
1.148.
dato=getc();
1.149.
if(dato!=0)
1.150.
{
1.151.
if(dato=='d')
1.152.
{
1.153.
printf("\f\rMOTOR DC
APAGADO");
1.154.
delay_ms(100);
1.155.
output_A(0);
1.156.
1.157.
printf("\r\rPuse SPACE
para menu");
1.158.
}
1.159.
1.160.
if(dato==' ') { goto salida1;}
1.161.
1.162.
}
1.163.
}
1.164.
salida1:
1.165.
menu();
1.166.
}
1.167.
void main()
1.168.
{
1.169.
lcd_init();
1.170.
enable_interrupts(int_rda);
1.171.
enable_interrupts(global);
1.172.
lcd_gotoxy(1,1);
1.173.
lcd_putc("Comunicacion");
1.174.
lcd_gotoxy(1,2);
1.175.
lcd_putc("Serial");
1.176.
1.177.
puts("\f
Conexion
Establecida\r");
1.178.
puts("Pulsa SPACE para ir al
Menu");
1.179.
1.180.
while(true)
1.181.
{
1.182.
for(;;)
1.183.
{
1.184.
dato = getc();
1.185.
switch(dato)
1.186.
{
1.187.
case ' ': menu();
1.188.
break;
1.189.
1.190.
case 'a': control_teclado();
1.191.
break;
1.192.
1.193.
case 'x': control_PC();
1.194.
break;
1.195.
}
1.196.
}
1.197.
}
1.198.
}
1.7. Resultado:
1.8. Mediante la activacin del teclado matricial el microcontrolador se encarga de
realizar el encendido - apagado del sistema para empezar a transmitir y recibir
informacin. Con la pulsacin de una tecla del teclado matricial el
microcontrolador PIC (16F887) se encarga de enviar el carcter a la pantalla
LCD para poder ser visualizado.
1.9.
1.10.
EJERCICIO PROPUESTO
1.11.
89
1.13.
SEGUNDO PARCIAL
1.14.
MODULO CCP
1.15.
INTRODUCCIN:
1.16.
1.21.
SNTESIS:
1.22.
1.23.
1.24.
1.25.
1.27.
1.28.
90
1.29.
1.30. Figura 39 Figura No.21 Asociacin de los modos CCP con los Timer Fuente:
https://es.wikiversity.org/wiki/Estructura_del_microcontrolador
1.31.
caractersticas:
1.32.
1.33.
1.34.
1.38.
Mdulo CCP:
1.39.
1.40.
1.42.
91
1.43.
1.46.
Mdulo CCP1
1.47.
1.50.
Los bits del registro CCP1CON estn en control del mdulo CCP1
92
1.51.
Mdulo CCP2:
1.52.
este mdulo es una muy buena copia del mdulo CCP1 puesto en modo normal.
La nica diferencia significativa entre ellos es el funcionamiento en modo de
comparacin del mdulo CCP2. La diferencia se refiere a la seal de reinicio
del temporizador T1. Concretamente, si el convertidor A/D est habilitado, al
igualarse los valores de los registros TMR1 y CCPR2, la seal de reinicio del
temporizador T1 iniciar automticamente la conversin A/D. Similar al
mdulo anterior, este circuito tambin est bajo el control de los bits del registro
de control. Esta vez es el registro CCP2CON.
93
1.55.
MODO CAPTURA:
1.56.
1.57.
Cada uno de los mdulos CCP tiene asociados varios registros (x=1 o 2):
1.60.
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.
1.64.
1.65.
1.66.
94
1.68.
1.69. Figura 43 Fuente Diagrama de Bloques de Modo Captura Datasheet 16F887 y 18F4550
1.70.
BANKESEL CCP1CON
1.73.
1.74.
CLRF
1.75.
1.76.
SELECCIONADO
1.77.
MOVWF
SIMULTNEAMENTE
1.79.
1.80.
1.81.
EJERCICIO 1
Tema: Modo Captura del Mdulo CCP
95
1.82.
mdulo CCP ,ejecutando una seal con una frecuencia variable implementando
una seal de reloj astable de 6hz a 5khz para su variacin y poder capturar la
frecuencia mientras variamos.
1.83.
Materiales:
PIC 16F887
555
1 capacitor de 1F
2 resistencias de 220
1 potencimetro de 50k
Pantalla LCD
1.84.
1.88.
1.89.
#i
nclude <16f887.h>
1.90.
#f
uses xt,nowdt,noprotect,nolvp
1.91.
#
use delay (clock=4000000)
1.92.
#
define LCD_DB4 PIN_D4
1.93.
#
define LCD_DB5 PIN_D5
1.94.
#
define LCD_DB6 PIN_D6
96
1.95.
#
define LCD_DB7 PIN_D7
1.96.
#
define LCD_RS PIN_D1
1.97.
#
define LCD_E PIN_D0
1.98.
#i
nclude <lcd1.c>
1.99.
1.100.
in
t1 nuevopulso=0;
1.101.
in
t16
TFB=0,TFS=0,TFTOTAL=0;
1.102.
fl
oat APERIODO=0.0,frec=0.0;
1.103.
in
t1 cambio=0;
1.104.
1.105.
#i
nt_ccp1
1.106.
v
oid ccp1_int(){
1.107.
if
(cambio==0){ // Funcion en
flanco de subida
1.108.
T
FS=CCP_1; //Guarda el valor
del registro en la variable
1.109.
c
ambio=1;
// Control del
cambio de flanco
1.110.
}
else
1.111.
1.112.
{
1.113.
T
FB=CCP_1; //guarda el valor
del registro en la variable
1.114.
c
ambio=0;
// Control del
cambio de flanco
1.115.
if
(nuevopulso==0){
//Fin del
pulso
1.116.
n
uevopulso=1; //Pulso a medir
1.117.
}
1.118.
}
1.119.
}
1.120.
1.121.
v
oid main(){
1.122.
lc
d_init(); //Inicializa la lcd
1.123.
se
tup_timer_1(T1_INTERNAL);
//Configuracion del timer 1
1.124.
se
tup_ccp1(CCP_CAPTURE_RE
);
//Inicia ccp como modo
captura de flanco de subida
1.125.
c
ambio=0; // Setea el cambio
para el modo de aptura
1.126.
e
nable_interrupts(int_ccp1);
//Habilita interrupcion de CCP1
1.127.
e
nable_interrupts(global);
//Habilita interrupcion global
1.128.
1.129.
w
hile(true){
1.130.
if
(nuevopulso==1){ // Detecta si
se tienen los datos de un pulso
nuevo
1.131.
T
FTOTAL=(TFB-TFS);
//
Calcula el ancho del pulso
1.132.
A
PERIODO=(TFTOTAL*1.0); //
Determina el ancho del pulso en
us,
1.133.
fr
ec=1000000/(APERIODO); // a
4M==> 1M frecuencia de
instrucin (T=1us)
1.134.
p
rintf
(lcd_putc,"
***CAPTURA***");
1.135.
lcd_gotoxy(1,3);
1.136.
1.137.
pr
intf(lcd_putc,"\nfrecue=
%6.1fHz ",frec);
1.138.
d
elay_ms (2);
97
1.139.
n
uevopulso=0;
1.140.
}
1.143.
EJERCICIO PROPUESTO
1.144.
1.141.
1.142.
}
}
es decir capta un valor que llega al timer en este caso Timer1 que es un
generador de pulsos, entonces al variar la frecuencia tomo el ultimo valor y lo
visualiza en una pantalla LCD
1.145.
MODO COMPARACIN:
1.146.
98
1.148.
1.149.
1.150.
1.151.
1.152.
1.153.
1.154.
1.155.
CCP2: Resetea TMR1 y lanza una conversin A/D (si est activado)
1.156.
1.157.
EJERCICO 2
1.158.
1.159.
del mdulo CCP, para efectuar una relacin de mayor que, menor que e igual
con un set point de 3v e ir comparando con el voltaje que genera nuestro
circuito varindolo con un potencimetro.
1.160.
Materiales:
PIC 18F4550
3 leds
3 resistencia de 220
Pantalla LCD
Potencimetro de 1k
100
1.161.
1.162.
1.163.
1.165.
#i
nclude <18f4550.h>
1.166.
#
device adc=8
1.167.
#f
uses XT, NOWDT
1.168.
#
use delay(clock=4M)
1.169.
#i
nclude <lcd.c>
1.170.
#
define
LCD_ENABLE_PIN
PIN_D0
//
//
1.171.
#
define
LCD_RS_PIN
PIN_D1
//
//
1.172.
#
define
LCD_RW_PIN
PIN_D2
//
//
1.173.
#
define
LCD_DATA4
PIN_D4
//
//
1.174.
#
define
LCD_DATA5
PIN_D5
//
//
1.175.
#
define
LCD_DATA6
PIN_D6
//
//
1.176.
#
define
LCD_DATA7
PIN_D7
1.177.
#
use standard_io(c)
1.178.
#
use standard_io(b)
1.179.
in
t8 cont=0;
101
1.180.
in
t16 digital;
1.181.
fl
oat voltaje,resolucion;
1.182.
in
t8 i;
1.183.
in
t1 cambio=0;
1.184.
v
oid
main
(void);
//funcin principal
1.185.
v
oid
ccp2_int
(void);
//funcin por
interrupcin
1.186.
1.187.
#i
nt_ccp2
1.188.
v
oid ccp2_int(){
1.189.
1.190.
1.191.
if
(++cambio==1){
//Conmutacin estado salida
CCP2
1.192.
setup_ccp2(CCP_COMPARE_i
nt);
//Modo comparacin,
conmutacin salida a 0
1.193.
ccp_2=i;
//carga
del ccp2 con valor semiperiodo
alto
1.194.
output_low(pin_c0);
1.195.
output_low(pin_c5);
1.196.
output_high(pin_c4);
1.197.
}
1.198.
else{
1.199.
setup_ccp2(CCP_COMPARE_
SET_ON_MATCH);
//Modo
comparacin,
conmutacin
salida a 1
1.200.
ccp_2=i;
//Carga del
ccp2 con valor semiperiodo
bajo
1.201.
output_high(pin_c6);
1.202.
}
1.203.
set_timer1(0);
//
Reinicio del temporizador para
comparacin
1.204.
1.205.
}
1.206.
1.207.
v
oid main() {
1.208.
1.209.
lc
d_init();
1.210.
se
tup_adc_ports(AN0|
VSS_VDD);
1.211.
se
tup_adc(ADC_CLOCK_INTE
RNAL);
1.212.
pr
intf(lcd_putc,"\tGrupo
1
Compare");
1.213.
d
elay_ms(600);
1.214.
se
tup_timer_1(T1_external_sync|
T1_DIV_BY_1);
//Configuracin Timer para
comparacin
1.215.
e
nable_interrupts(int_ccp2);
//habilitacin interrupcin por
comparacin
1.216.
e
nable_interrupts(GLOBAL);
//Habilitacin de toda las
interrupciones
1.217.
1.218.
w
hile(true){
1.219.
d
elay_ms(5);
1.220.
se
t_adc_channel(0);
102
1.221.
re
solucion=read_adc();
1.222.
di
gital=read_adc();
1.223.
o
utput_b(digital);
1.224.
v
oltaje=(resolucion*5/255);
1.225.
i=
voltaje;
1.226.
//
printf(LCD_PUTC, "\f");
1.227.
pr
intf(lcd_putc,"\tVoltaje
%f",voltaje);
1.228.
pr
intf(lcd_putc,"\nSet Point
3
V");
1.229.
d
elay_ms(5);
1.230.
lc
d_gotoxy(1,1);
1.231.
//
printf(lcd_putc,"\t
%f",resolucion);
1.232.
d
elay_ms(100);
1.233.
//
printf(lcd_putc,"\contador=
%i",cont);
1.234.
d
elay_ms(5);
1.235.
se
t_timer1(cont);
1.236.
c
cp_2=0b10011001; // damos el
valor al modulo
1.237.
1.238.
if
(get_timer1()==0)// realizamos
las comparaciones
1.239.
{
1.240.
d
elay_ms(10);
1.241.
se
t_timer1(digital);
1.242.
if
(get_timer1()<ccp_2)
1.243.
{
1.244.
o
utput_high(pin_c0);
1.245.
o
utput_low(pin_c5);
1.246.
o
utput_low(pin_c4);
1.247.
c
ont=4;
1.248.
}
1.249.
se
t_timer1(cont);
1.250.
c
ont=cont+1;
1.251.
}
1.252.
1.253.
if
(get_timer1()==1)
1.254.
{
1.255.
1.256.
d
elay_ms(10);
1.257.
se
t_timer1(digital);
1.258.
if
(get_timer1()>ccp_2)
1.259.
{
1.260.
o
utput_low(pin_c0);
1.261.
o
utput_low(pin_c4);
1.262.
o
utput_high(pin_c5);
1.263.
c
ont=4;
1.264.
}
1.265.
se
t_timer1(cont);
1.266.
c
ont=cont+1;
1.267.
}
1.268.
if
(get_timer1()==2)
1.269.
{
1.270.
se
t_timer1(digital);
1.271.
se
tup_ccp2(CCP_COMPARE_SE
T_ON_MATCH);
//
la
comparacion esta en 1
103
1.272.
t_timer1(cont);
1.273.
ont=cont+1;
1.274.
1.275.
(get_timer1()>=3)
1.276.
se
1.277.
ont=0;
1.278.
elay_ms(100);
1.279.
1.280.
1.281.
c
}
if
c
d
}
}
}
{
1.282.
1.283.
EJERCICO PROPUESTO
1.284.
El siguiente programa trabaja con el mdulo CCP en modo comparacin,
para esto tomo como referencia un voltaje externo de 5 volts como referencia
para compararlo con el timer 1 o 2 y de esta manera encender tres posiciones
diferentes haciendo referencia a un set point.
1.285.
Modo PWM:
1.286.
1.287.
104
1.289.
1.290.
1.291.
En modo PWM, el pin CCPx puede generar una seal de salida PWM de
10bits de resolucin. Los pines CCPx deben estar configurados como salidas
para funcionar en modo PWM
1.292.
1.294.
ocho bits ms significativos del registro CCPR1L y los dos bits menos
significativos adicionales del registro CCP1CON (DC1B1 y DC1B0). El
resultado es un nmero de 10 bits dado por la siguiente frmula
1.299.
1.300.
=(:<5:4>)2
1.301.
105
1.302.
1.303.
1.304.
1.305.
1.306.
Existe una resolucin (nmero de bits) mxima que se puede obtener con el
funcionamiento en modo PWM.
1.307.
1.308.
1.309.
1.310.
modo PWM:
1.311.
Deshabilitar el pin de salida del CCP1. Deber estar configurado como entrada.
Configurar el mdulo CCP1 para funcionar en modo PWM al combinar los bits
del registro CCP1CON.
Habilitar los pines de salida de PWM despus de que haya sido acabado un ciclo
de PWM:
EJERCICO 3
1.313.
1.314.
Materiales:
PIC 16F887
Teclado matricial
8 resistencia de 10k
Pantalla LCD
Osciloscopio
107
1.316.
1.317.
1.318.
1.320.
nclude <16f887.h>
1.321.
uses
XT,NOWDT,nomclr,NOLVP
1.322.
use delay(clock=4000000)
1.323.
define LCD_DB4 PIN_D4
1.324.
define LCD_DB5 PIN_D5
1.325.
define LCD_DB6 PIN_D6
1.326.
define LCD_DB7 PIN_D7
1.327.
define LCD_RS PIN_D2
1.328.
define LCD_E PIN_D3
1.329.
nclude <lcd1.c>
#i
#f
#
#
#
#
#
#
#
#i
1.330.
#i
nclude <kbd_lib.c>
1.331.
#
use fast_io(C)
1.332.
1.333.
v
oid main ()
1.334.
{
1.335.
c
omienzo:
1.336.
c
har k;
//variable char para
guardar valor de tec
1.337.
c
har dato[3]; //matriz de 3 datos
para ingreso de valor pwm
centen decena unidad
1.338.
in
t i;
//indice de la matriz de 3
valores para el ingreso del
teclado
108
1.339.
in
t c, d, u;
//valores para pwm
1.340.
in
t16 PWM;
//entero de
longitud 16 paraalmacenar
valor de pwm
1.341.
se
t_tris_c(0b00000000);
//se
debe establecer el puerto C
donde esta CCP como salida
para que funcione bien
1.342.
1.343.
lc
d_init();
//INICIAR LCD
1.344.
k
bd_init();
//INICIAR
TECLADO
1.345.
p
ort_b_pullups(TRUE);
//activar pull ups del pueto b
1.346.
1.347.
lc
d_putc("\f Grupo 1 PWM \n");
//\f borra el lcd \cambia
siguiente linea
1.348.
d
elay_ms(1000);
1.349.
1.350.
while (true)
1.351.
{
1.352.
k=kbd_getc();
1.353.
i
f(k!=0){
1.354.
i
f(k=='A'){
1.355.
1.356.
inicio:
1.357.
//etqueta de retorno si se desea
ingresar otro valor con A
1.358.
i=0;
1.359.
1.360.
printf(lcd_putc,"\f
ON:
INGRESE ");
1.361.
1.362.
while(i<=2)
//ciclo
whilw para ingreso de los
valores PWm uno por uno en la
matriz
1.363.
{
1.364.
k=kbd_getc();
//captura el
valor del puerto en K
1.365.
if(k!=0)
1.366.
{
1.367.
dato[i]=k; //almacena el valor
obtenido en el indice i de la
matriz dato PWM
1.368.
i++;
1.369.
printf(lcd_putc,"%u",k48);
//pone el dato en
pantalla en valor numerico %u
-48
1.370.
}
1.371.
}
1.372.
1.373.
c=(dato[0]-48);
//calculo
de los valores numericos de
char a numero
1.374.
d=(dato[1]-48);
1.375.
u=dato[2]-48;
1.376.
PWM=(100*c+10*d+u)*10.225
; //valor del PWM por 1024
debido a la resolucion
1.377.
1.378.
if ((100*c+10*d+u)>100||c>1)
//si el valor es mayor a 100 o en
centena mayor de 1
1.379.
{
109
1.380.
printf(lcd_putc,"\f Incorrecto");
1.381.
delay_ms(500);
1.382.
}
1.383.
else
// si el valor es
correcto genera el PWM
1.384.
{
1.385.
printf(lcd_putc,"\f PWM = %u
%u%u ",c,d,u);
1.386.
printf(lcd_putc,"\n Press A new
valor");
1.387.
delay_ms(2000);
1.388.
1.389.
pwm:
1.390.
1.391.
// configuraciones para el PWM
en timer 2 y CCP1
1.392.
1.393.
setup_timer_2(T2_DIV_BY_16
, 255, 1); //con 100 es 628 hz
con 255 244 hz revisar formula
1.394.
setup_ccp1(CCP_PWM);
1.395.
set_pwm1_duty(PWM);
//ciclo de trabajo segun valor de
PWM almacenado
1.413.
1.414.
1.396.
1.397.
k=kbd_getc();
1.398.
if(k=='A')
1.399.
{
1.400.
goto inicio;//obtengo el valor de
k si presiono A se regresa al
inicio
1.401.
}
1.402.
1.403.
goto pwm; //si no presiono A
se queda en el mismo ciclo con
el mismo valor de duty
1.404.
}
1.405.
}
1.406.
k=kbd_getc();
1.407.
i
f(k=='B'){
1.408.
l
cd_putc("\f Apagado");
1.409.
}
1.410.
goto comienzo;
1.411.
}
1.412.
}}
EJERCICO PROPUESTO
1.415.
El siguiente cdigo presenta el modo PWM del mdulo CCP, lo que nos
permitir variar el ciclo de trabajo de una seal cuadrtica en 3 posiciones
diferentes y verificar la forma de onda y la variacin de la misma en diodo led.
1.416.
1.417.
1.418.
1.419.
110
1.420.
1.422.
SETUP_CCP1(mode)
1.423.
SETUP_CCP2(mode)
1.424.
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.
1.436.
1.437.
1.438.
SETUP_COMPARATOR(mode)
1.439.
1.440.
Slo los PIC de la serie 16c62x pueden usar esta funcin (vase el
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.
independientes
1.453.
1.454.
SET_PWM1_DUTY(value)
1.455.
SET_PWM2_DUTY(value)
1.456.
1.457.
1.462.
1.463.
utilizar.
La influencia de las seales de ruido as como los efectos de carga del hardware
mecnicos. [1]
1.464.
1.465.
1.466.
113
1.469.
1.470.
1.471.
1.472.
-
Fuente: http://blog.utp.edu.co/jnsanchez/files/2011/03/LM351.pdf
Caractersticas
1.473.
Aplicaciones Tpicas
1.474.
1.475.
1.476.
Fuente. http://blog.utp.edu.co/jnsanchez/files/2011/03/LM351.pdf
1.477.
114
1.478.
1.479.
1.480.
Fuente. http://blog.utp.edu.co/jnsanchez/files/2011/03/LM351.pdf
1.481.
1.482.
EJERCICO 4
1.483.
1.484.
Descripcin:
Realizamos
un
control
de
Materiales:
PIC 18F4550
Sensor LM35
Pantalla LCD
1.486.
115
1.487.
1.488.
1.489.
1.490.
#
1.491.
in
clude <18f4550.h>
1.492.
#f
uses
INTRC,
NOWDT,
NOPUT,
NOMCLR,
NOBROWNOUT,
NOLVP,
NOCPD, NOPROTECT,HS
1.493.
#
device adc=10
1.494.
#
use delay (clock=20M)
1.495.
#
define LCD_DB4 PIN_D4
1.496.
#
define LCD_DB5 PIN_D5
1.497.
#
define LCD_DB6 PIN_D6
1.498.
#
define LCD_DB7 PIN_D7
1.499.
#
define LCD_RS PIN_D1
1.500.
#
define LCD_E PIN_D0
1.501.
#i
nclude <lcd1.c>
1.502.
1.503.
///
/////////////////LECTURA
DE
DATOS///////////////////
1.504.
v
oid main (){
1.505.
fl
oat temp1;
1.506.
fl
oat temp,tempf=0.0,tempt=0.0;
1.507.
in
t read,i;
1.508.
lc
d_init();
1.509.
w
hile (true){
116
1.510.
se
tup_adc(ADC_CLOCK_INTE
RNAL);
1.511.
Setup_adc_ports(AN0);
/
/PONE
PUERTO
RA0
ANALOGO
1.512.
setup_counters(rtcc_internal,rtc
c_div_1);
1.513.
set_adc_channel(0);
//
INDICA EL PIN A LEER RA0
1.514.
delay_us(20);
1.515.
for(i=0;i<5;i=i+1)
1.516.
{
1.517.
read=read_adc();
1.518.
temp1=(float)read;
//LEE EL VALOR DEL PIN
1.519.
delay_us(10);
1.520.
1.521.
if(temp1<=10)
1.522.
{
1.523.
temp=(temp1*0.004999585*10
0)+0.001;//0.01960784314*100
);
//CONVIERTE EL
VALOR LEIDO DE HEXA AL
REAL
el
numero
0.01960784314
1.524.
tempf=tempf+temp; //viene de
dividir (5/255) y el resultado se
multiplica por 100 para alcanzar
150 grados
1.525.
delay_ms(10);
1.526.
}
1.527.
if(temp1<=49&&temp1>10)
1.528.
{
1.529.
temp=(temp1*0.004999585*10
0)-0.49;//0.01960784314*100);
//CONVIERTE EL VALOR
LEIDO DE HEXA AL REAL el
numero 0.01960784314
1.530.
tempf=tempf+temp; //viene de
dividir (5/255) y el resultado se
multiplica por 100 para alcanzar
150 grados
1.531.
delay_ms(10);
1.532.
}
1.533.
if(temp1<=90&&temp1>49)
1.534.
{
1.535.
temp=(temp1*0.004999585*10
0)-0.99;//0.01960784314*100);
//CONVIERTE EL VALOR
LEIDO DE HEXA AL REAL el
numero 0.01960784314
1.536.
tempf=tempf+temp; //viene de
dividir (5/255) y el resultado se
multiplica por 100 para alcanzar
150 grados
1.537.
delay_ms(10);
1.538.
}
1.539.
if(temp1<=131&&temp1>90)
1.540.
{
1.541.
temp=(temp1*0.004999585*10
0)-1.49;//0.01960784314*100);
//CONVIERTE EL VALOR
LEIDO DE HEXA AL REAL el
numero 0.01960784314
1.542.
tempf=tempf+temp; //viene de
dividir (5/255) y el resultado se
117
1.570.
//CONVIERTE EL VALOR
LEIDO DE HEXA AL REAL el
numero 0.01960784314
1.554.
tempf=tempf+temp; //viene de
dividir (5/255) y el resultado se
multiplica por 100 para alcanzar
150 grados
1.555.
delay_ms(10);
1.556.
}
1.557.
}
1.558.
tempt=tempf/5.0;
1.559.
printf(lcd_putc,"
\fTEMPERATURA \nT= %2.2f
oC",tempt); //MUESTRA EN
EL LCD EL VALOR DE
TEMPERATURA
1.560.
i=0;
1.561.
tempf=0.0;
1.562.
tempt=0.0;
1.563.
delay_us(20);
1.564.
1.565.
}
EJERCICIO PROPUESTO
1.571.
El siguiente programa est configurado para captar la seal analgica de
un sensor lm35 y visualizarla en una pantalla lcd.
1.572.
1.573.
1.574.
SENSOR ULTRASNICO
1.575.
118
1.581.
1.582.
1.583.
Fuente: http://www.parsicitalia.it/files/HC-SR04-Datasheet.pdf
1.584.
Funcionamiento
1.585.
ultrasonido en una frecuencia muy por encima del rango auditivo humano y
provee un pulso de salida, el cual corresponde con el tiempo requerido por el
eco (rebote) para retornar hasta el sensor. Al medir la duracin de este pulso se
puede calcular fcilmente la distancia al objetivo.
1.586.
Rango: 2 cm a 3 m
LED indicador de rfaga que muestra la actividad del sensor
Interfaz bidireccional por pulso, en un nico pin de E/S para comunicacin con
Pulso eco de salida: pulso positivo TTL, 115 s mnimo a 18.5 ms mximo. [4]
1.587.
EJERCICIO 5
1.588.
1.589.
Materiales:
PIC 16F887
Sensor Ultrasnico
Pantalla LCD
1.591.
1.592.
1.593.
1.594.
Fig1Sensor Ultrasnico
Simulacin: Proteus
120
1.595.
#i
nclude <16F887.h>
1.596.
#
FUSES
XT,NOWDT,NOPROTECT,PU
T,NOBROWNOUT,NOLVP
1.597.
#
use delay(clock=4000000)
1.598.
#
define LCD_DB4 PIN_D4
1.599.
#
define LCD_DB5 PIN_D5
1.600.
#
define LCD_DB6 PIN_D6
1.601.
#
define LCD_DB7 PIN_D7
1.602.
#
define LCD_RS PIN_D1
1.603.
#
define LCD_E PIN_D0
1.604.
#i
nclude <lcd1.c>
1.605.
1.606.
1.607.
in
t16 tiempo;
1.608.
fl
oat distancia;
1.609.
#
define trig pin_B1
1.610.
#
define echo pin_B0
1.611.
#
USE standard_io(b)
1.612.
1.613.
v
oid main()
1.614.
{
1.615.
lc
d_init();
1.616.
pr
intf(LCD_PUTC,
"\f
Ultrasonico.");
1.617.
d
elay_ms(500);
1.618.
pr
intf(LCD_PUTC,
"\f
Ultrasonico..");
1.619.
d
elay_ms(500);
1.620.
pr
intf(LCD_PUTC,
"\f
Ultrasonico...");
1.621.
d
elay_ms(500);
1.622.
1.623.
se
tup_timer_1(T1_INTERNAL|
T1_DIV_BY_8);
1.624.
1.625.
w
hile(1)
1.626.
{
1.627.
o
utput_high(trig);
1.628.
d
elay_us(20);
1.629.
o
utput_low(trig);
1.630.
w
hile(!input(echo))
1.631.
{
}
1.632.
se
t_timer1(0);
1.633.
w
hile(input(echo))
1.634.
{
}
1.635.
ti
empo=get_timer1();
1.636.
if
(tiempo<41)
1.637.
{
1.638.
if
(tiempo<41&&tiempo>34)
1.639.
{
1.640.
di
stancia=(tiempo*7.45)/(58.0);
1.641.
pr
intf(LCD_PUTC, "\fContador :
%Lu \nDistancia = %0.2f
cm",tiempo,distancia);
1.642.
d
elay_ms(500);
1.643.
}
1.644.
if
(tiempo<=34&&tiempo>31)
1.645.
{
121
1.646.
di
stancia=(tiempo*7.1)/(58.0);
1.647.
pr
intf(LCD_PUTC, "\fContador :
%Lu \nDistancia = %0.2f
cm",tiempo,distancia);
1.648.
d
elay_ms(500);
1.649.
}
1.650.
if
(tiempo<=31&&tiempo>28)
1.651.
{
1.652.
di
stancia=(tiempo*6)/(58.0);
1.653.
pr
intf(LCD_PUTC, "\fContador :
%Lu \nDistancia = %0.2f
cm",tiempo,distancia);
1.654.
d
elay_ms(500);
1.655.
}
1.656.
if
(tiempo<=28&&tiempo>20)
1.657.
{
1.670.
1.671.
1.658.
di
stancia=(tiempo*5.3)/(58.0);
1.659.
pr
intf(LCD_PUTC, "\fContador :
%Lu \nDistancia = %0.2f
cm",tiempo,distancia);
1.660.
d
elay_ms(500);
1.661.
}
1.662.
}
1.663.
el
se{
1.664.
di
stancia=(tiempo*8.05)/(58.0);
1.665.
pr
intf(LCD_PUTC, "\fContador :
%Lu \nDistancia = %0.2f
cm",tiempo,distancia);
1.666.
d
elay_ms(500);
1.667.
}
1.668.
}
1.669.
}
1.672.
EJERCICO PROPUESTO
1.673.
permiten hacer u calculo a la seal analgica que es enviada por medio del
sensor e indicarnos la distancia qu este se encuentra. Sin embargo en proteus al
no contar con las libreras necesarias del sensor no se puede correr el programa.
1.674.
1.675.
SENSOR INFRARROJO
1.676.
1.679.
1.680.
1.681.
Fuente. http://www.intersil.com/content/dam/Intersil/documents/an14/an1436.pdf
1.682.
Figura No 32.
1.683.
1.684.
1.685.
1.686.
1.687.
1.688.
El LED emite un haz de luz invisible para el ojo humano, que se refleja
magnticas, etc.
1.691.
Funcionamiento
123
1.692.
funcionar al sensor.
1.694.
Usos
1.695.
Especificaciones:
EJERCICIO 6
1.698.
1.699.
Materiales:
PIC 16F887
Sensor Infrarrojo
1 resistencia de 10k
1 resistencia de 150
Pantalla LCD
1.701.
124
1.702.
1.703.
1.704.
1.705.
1.706.
#i
nclude <16f887.h>
1.707.
#f
uses
XT,
NOWDT,
NOPROTECT,
NOLVP,
NOCPD, NOWRT, NODEBUG
1.708.
#
device *=16
1.709.
#
device adc=10
1.710.
#
use delay(clock=4M)
1.711.
#
define LCD_DB4 PIN_D4
1.712.
#
define LCD_DB5 PIN_D5
1.713.
#
define LCD_DB6 PIN_D6
1.714.
#
define LCD_DB7 PIN_D7
1.715.
#
define LCD_RS PIN_D2
1.716.
#
define LCD_E PIN_D3
1.717.
#i
nclude <lcd.c>
Fig1Sensor Infrarrojo
Simulacin: Proteus
1.718.
1.719.
1.720.
in
t16 value;
1.721.
fl
oat32 y;
1.722.
v
oid main()
1.723.
{
1.724.
se
tup_adc_ports(sAN0|
VSS_VDD);//
entrada
del
sensor
1.725.
se
tup_adc(ADC_CLOCK_INTE
RNAL);
1.726.
se
t_adc_channel(0);
1.727.
1.728.
lc
d_init();
1.729.
lc
d_gotoxy(5,1);
1.730.
pr
intf(lcd_putc,"Grupo 1");
1.731.
pr
intf(lcd_putc,"\n Infrarrojo");
125
1.732.
d
elay_ms(650);
1.733.
lc
d_init();
1.734.
1.735.
1.736.
w
hile(true)// ciclo para generar el
valor de la distancia que
proporciona el sensor
1.737.
{
1.738.
d
elay_ms(50);
1.739.
v
alue=read_adc();//devuelve el
valor del adc
1.740.
y
=value*0.005;// funcion para
generar la distancia
1.741.
y
=y-1.183;
1.742.
1.743.
lc
d_gotoxy(5,2);
1.744.
pr
intf(lcd_putc,"%2.2f cm",y);//
visualizacion de la distancia en
el lcd
1.745.
lc
d_gotoxy(5,1);
1.746.
pr
intf(lcd_putc,"Distancia");
1.763.
1.747.
d
elay_ms(1000);
1.748.
if
((y<=3)&&(y>=1))// condicion
para detectar en un rango
especifico a un objeto
1.749.
{
1.750.
pr
intf(lcd_putc,"\f
Detecta
Objeto");
1.751.
d
elay_ms(1000);
1.752.
pr
intf(lcd_putc,"\f");
1.753.
}
1.754.
el
se// caso contrario no detecta el
objeto ; fuera de rango
1.755.
{
1.756.
pr
intf(lcd_putc,"\f No Detecta
Objeto");
1.757.
d
elay_ms(1000);
1.758.
pr
intf(lcd_putc,"\f");
1.759.
}
1.760.
}
1.761.
1.762.
}
1.764.
1.765.
EJERCICIO PROPUESTO
1.766.
El siguiente programa detecta la presencia de un sensor infrarrojo en el
rango permisible del mismo lo que indicara n mensaje de detectado y no
detectado en un pantalla LCD
1.767.
1.768.
1.769. Control PWM para Motores DC y AC
1.770.
1.771.
1.772. Los motores son mquinas utilizadas para convertir potencia elctrica
en potencia mecnica. [ 1 ]
1.773.
1.774.
EJERCICO 7
1.776.
1.777.
Materiales:
PIC 16F887
Motor DC
Teclado Matricial
8 resistencias de 10k
Pantalla LCD
Puente H L293D
127
#include <16f887.h>
#fuses
XT,NOWDT,nomclr,NOLVP
#use delay(clock=4000000)
#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_D5
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7
#define LCD_RS PIN_D2
#define LCD_E PIN_D3
#include <lcd1.c>
#include <kbd_lib.c>
#use fast_io(C)
void main ()
{
comienzo:
char k;
//variable char para
guardar valor de tec
inicio:
//etqueta de retorno si se
desea ingresar otro valor con A
i=0;
printf(lcd_putc,"\f
INGRESE ");
ON:
while(i<=2)
//ciclo
whilw para ingreso de los
valores PWm uno por uno en la
matriz
{
k=kbd_getc(); //captura el
valor del puerto en K
if(k!=0)
{
dato[i]=k; //almacena el
valor obtenido en el indice i de
la matriz dato PWM
i++;
printf(lcd_putc,"%u",k48);
//pone el dato en pantalla
en valor numerico %u -48
}
}
c=(dato[0]-48);
//calculo
de los valores numericos de char
a numero
d=(dato[1]-48);
u=dato[2]-48;
PWM=(100*c+10*d+u)*10.22
5; //valor del PWM por 1024
debido a la resolucion
if ((100*c+10*d+u)>100||c>1)
//si el valor es mayor a 100 o en
centena mayor de 1
{
printf(lcd_putc,"\f
Incorrecto");
delay_ms(500);
}
else
// si el valor es
correcto genera el PWM
{
printf(lcd_putc,"\f PWM = %u
%u%u ",c,d,u);
printf(lcd_putc,"\n Press A
new valor");
delay_ms(2000);
pwm:
// configuraciones para el
PWM en timer 2 y CCP1
setup_timer_2(T2_DIV_BY_1
6, 255, 1); //con 100 es 628 hz
con 255 244 hz revisar formula
setup_ccp1(CCP_PWM);
set_pwm1_duty(PWM);
//ciclo de trabajo segun valor de
PWM almacenado
k=kbd_getc();
if(k=='A')
{
goto inicio;//obtengo el valor
de k si presiono A se regresa al
inicio
}
goto pwm; //si no presiono A
se queda en el mismo ciclo con
el mismo valor de duty
}
129
}
k=kbd_getc();
if(k=='B'){
lcd_putc("\f Apagado");
}
goto comienzo;
}
}}
EJERCICIO PROPUESTO
En magnetismo se conoce la existencia de dos polos: polo norte (N) y polo sur
(S), que son las regiones donde se concentran las lneas de fuerza de un imn.
Un motor para funcionar se vale de las fuerzas de atraccin y repulsin que
existen entre los polos. De acuerdo con esto, todo motor tiene que estar formado
con polos alternados entre el estator y el rotor, ya que los polos magnticos
iguales se repelen, y polos magnticos diferentes se atraen, produciendo as el
movimiento de rotacin.
SCR (Silicon controled Rectifiers)
TRIAC
GTO (Gate Turn Off)
SCR
El SCR (Silicon Controled Rectifier / Rectificador controlado de silicio) es un
dispositivo semiconductor de 4 capas que funciona como un conmutador casi
ideal.
Estructura y smbolo de un SCR
Fuente: http://www2.uca.es/grup-invest/instrument_electro/Ramiro/docencia_archivos/Tiristores.PDF
IB1 es la corriente base del transistor Q1 y causa que exista una corriente de
colector de Q1 (IC1) que a su vez alimenta la base del transistor Q2 (IB2), este a
su vez causa ms corriente en IC2, que es lo mismos que IB1 en la base de Q1
Triac
El Triac es un dispositivo semiconductor que pertenece a la familia de los
dispositivos de control: los tiristores. El triac es en esencia la conexin de dos
tiristores en paralelo pero conectados en sentido opuesto y compartiendo la
misma compuerta.
Fuente: http://www2.uca.es/grup-invest/instrument_electro/Ramiro/docencia_archivos/Tiristores.PDF
El triac slo se utiliza en corriente alterna y al igual que el tiristor, se dispara por
la compuerta. Como el triac funciona en corriente alterna, habr una parte de la
onda que ser positiva y otra negativa.
132
corriente circular de abajo hacia arriba (pasar por el tiristor que apunta hacia
arriba)
EJERCICIO 8
Materiales:
Pantalla LCD
Teclado matricial
Motor AC
Pic 16F887
Transformador
Puente de Diodos
Resistencias
MOC
TRIAC
133
#include <16F887.h>
#fuses intrc_io, nowdt, nomclr,
noput
#use delay(clock=4M)
#include <kbd_4x4.c>
#BYTE WPUB =0X95
#BYTE OPTION_REG = 0X81
#include <lcd3.c>
char k;
int y,z;
void main()
{
OPTION_REG = 0;
WPUB= 0B11111111;
//port_b_pullups(true);
kbd_init();
lcd_init();
lcd_putc("\f !BIENVENIDO!\n
Presione #");
delay_us(100);
while (true)
{
delay_us(100);
k=kbd_getc();
if(k!=0)
{
y=k-48;
switch (y)
{
case(1):
z=1;
lcd_putc("\f nivel de PWM\n
15/o");
delay_us(20);
break;
case(2):
z=2;
134
delay_us(7200);
output_high(pin_c0);
delay_us(1000);
}
}
}else if((z==2))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(6000);
output_high(pin_c0);
delay_us(2200);
}
}
}else if((z==3))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(4800);
output_high(pin_c0);
delay_us(3400);
}
}
}else if((z==4))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(3600);
output_high(pin_c0);
delay_us(4600);
}
}
135
}else if((z==5))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
}
output_low(pin_c0);
delay_us(2400);
output_high(pin_c0);
delay_us(5800);
}
}
}
}
EJERCICO PROPUETO
realizar de dos formas ya sea sncrona o paralela: la primera enva los datos
simultneamente mientras que la otra enva dato por dato. La familia PIC18
dispone de varias posibilidades de comunicaciones serie. Dispone de un puerto
dedicado a comunicaciones sncronas serie, el SSP (Serial Synchronous Port).
Dicho puerto puede dedicarse a varios protocolos, tales como SPI o I2C. Ambos
son precisos, esto es, si se configura el perifrico para SPI no podr usarse para
I2C y viceversa. Si se precisan de forma conjunta comunicaciones I2C y SPI la
nica solucin es un microcontrolador con dos puertos SSP.
Marco Terico
136
de reloj.
El esclavo espera a que un maestro se comunique con l para generar
la trasferencia.
El bus I2C es multimaestro, lo que quiere decir que puede haber ms
de un maestro conectado y controlando el bus. Existen mecanismos
para evitar que dos maestros comiencen una trasferencia de
Fuente: http://www.nxp.com/documents/application_note/AN10216.pdf
sobre el bus I2C solo son necesarios seis simples cdigos suficientes para
enviar o recibir informacin:
Bit de start
7 bits o 10 bits de direccionamiento
Un R/W bit que define si el esclavo es transmitir o receptar
Un bit ACK de reconocimiento
Mensajes dividido en bytes
Un bit de stop
Formato de las tramas en la comunicacin I2C: Los
139
Fuente: http://www.nxp.com/documents/application_note/AN10216.pdf
esclavo con el que se quiere comunicar, esta direccin tiene 7 bits seguidos
por un octavo de bit que corresponde a R/W (0: Indica transmisin, 1: Indica
solicitud de datos). Una transferencia de datos siempre acaba con una
condicin de stop generada por el master, sin embargo si un master todava
desea comunicarse con el bus, puede generar repetidamente condiciones de
Start y direccionar a otro esclavo sin generar primero la condicin de stop.
para el bus I2C es tal que el primer byte despus de la condicin de Start
usualmente determina que esclavo ha sido seleccionado por el master
0000) con la que se direcciona a todos los dispositivos, cuando esta direccin
es usada, todos los dispositivos en teora deben responder con un
reconocimiento,
sin
embargo
algunos
dispositivos
pueden
estar
formato de 7 bits
141
Fuente: http://www.nxp.com/documents/application_note/AN10216.pdf
Fuente: http://www.nxp.com/documents/application_note/AN10216.pdf
Fuente: http://www.nxp.com/documents/application_note/AN10216.pdf
EJERCICO 9
Tema: PWM con motor AC y TRIAC
Materiales:
Pantalla LCD
Teclado matricial
Motor AC
Pic 16F887
142
Transformador
Puente de Diodos
Resistencias
MOC
TRIAC
#include <16F887.h>
#fuses intrc_io, nowdt, nomclr,
noput
#use delay(clock=4M)
#include <kbd_4x4.c>
#BYTE WPUB =0X95
#BYTE OPTION_REG = 0X81
#include <lcd3.c>
char k;
int y,z;
void main()
{
OPTION_REG = 0;
WPUB= 0B11111111;
//port_b_pullups(true);
kbd_init();
lcd_init();
lcd_putc("\f !BIENVENIDO!\n
Presione #");
delay_us(100);
while (true)
{
delay_us(100);
k=kbd_getc();
if(k!=0)
{
143
y=k-48;
switch (y)
{
case(1):
z=1;
lcd_putc("\f nivel de PWM\n
15/o");
delay_us(20);
break;
case(2):
z=2;
lcd_putc("\f nivel de PWM \n
30/o");
delay_us(20);
break;
case(3):
z=3;
printf(lcd_putc,"\f nivel de
PWM \n 50/o");
delay_us(20);
break;
case (4):
z=4;
printf(lcd_putc,"\f nivel de
PWM \n 65/o");
delay_us(20);
break;
case (5):
z=5;
printf(lcd_putc,"\f nivel de
PWM \n 90/o");
delay_us(20);
break;
case (6):
lcd_putc("\f !BIENVENIDO!\n
Presione #");
output_low(pin_c0);
delay_us(20);
K=0;
z=0;
}
}else output_low(pin_c0);
if((z==1))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(7200);
output_high(pin_c0);
delay_us(1000);
}
}
}else if((z==2))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(6000);
output_high(pin_c0);
delay_us(2200);
}
}
}else if((z==3))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(4800);
output_high(pin_c0);
delay_us(3400);
}
144
}
}else if((z==4))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(3600);
output_high(pin_c0);
delay_us(4600);
}
}
}else if((z==5))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(2400);
output_high(pin_c0);
delay_us(5800);
}
}
}
}
}
EJERCICO PROPUESTO
145
selecciona
al
esclavo
comienza
el
proceso
de
debe habilitar el SPI-1. Mientras el bit SPE est seteado, los cuatro pines
asociados al mdulo SPI deben cumplir las funciones de:
Modo Master: El Mdulo SPI opera en modo master cuando el l bit MSTR se
encuentra seteado. Solo en modo master se pueden iniciar transmisiones. Una
transmisin se inicia leyendo el registro SPIxS mientras el SPTEF = 1 y
escribiendo el registro de datos SPI. Si el registro de desplazamientos est vaco,
el byte se transfiere inmediatamente al a este registro para ser enviado. El dato
comienza a desplazarse hacia el pin de salida MOSI bajo la referencia del clock
de control serial.
Modo Slave: El SPI funciona en modo slave cuando el bits MSTR en el registro
de control 1 est borrado.
SPSCK: En modo slave, SPSCK es el clock entrada que llega desde el
master.
Pines MISO, MOSI: En modo slave, el pin (MISO) tiene la funcin de
salida de datos y el pin (MOSI) tiene la funcin de entrada de datos, esto
se determina por los bits SPC0 y BIDIROE en el registro de control.
148
Fuente: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf
149
150
2 teclado matricial
2 PICs
2 pantallas LCD
Fig1 SPI
Simulacin: Proteus
MASTER
151
#include <16F887.h>
#fuses XT,NOMCLR
#use delay (clock=4000000)
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B2
#define LCD_E PIN_B3
#include <lcdPB.c>
#include <KBD4x4.c>
char l;
int teclas;
//Dato a
transmitir
void envio_SPI (){
setup_spi(spi_master | spi_l_to_h |
spi_clk_div_16);
spi_write(teclas);
}
void esclavo1(){
teclas=kbd_getc();
if(teclas!=0){
envio_SPI();
}
}
void main(){
lcd_init();
kbd_init();
while (true){
if(input(pin_a0)){
setup_spi(spi_slave | spi_l_to_h
spi_clk_div_16);
lcd_gotoxy(1,1);
printf (lcd_putc," Maestro ");
if(spi_data_is_in())
{
l=spi_read();
if(l=='1'){
printf(lcd_putc,"\n Recibiendo... 1
");
delay_ms(10);
}
if(l=='2'){
printf(lcd_putc,"\n Recibiendo... 4
");
delay_ms(10);
}
if(l=='3'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='4'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='5'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='6'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='7'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='8'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='9'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='A'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='B'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='C'){
Recibiendo... 7
Recibiendo... 2
Recibiendo... 5
Recibiendo... 8
Recibiendo... 3
Recibiendo... 6
Recibiendo... 9
Recibiendo... *
Recibiendo... 0
152
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='D'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='*'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='0'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='#'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
}
esclavo1();
}
Recibiendo... #
Recibiendo... D
Recibiendo... A
#include <lcdPB.c>
#include <KBD4x4.c>
char l;
int teclas;
//Dato a
transmitir
void envio_SPI (){
setup_spi(spi_master | spi_l_to_h |
spi_clk_div_16);
spi_write(teclas);
}
void esclavo1(){
teclas=kbd_getc();
if(teclas!=0){
envio_SPI();
Recibiendo... B
}
}
Recibiendo... C
void main(){
lcd_init();
kbd_init();
while (true){
if(input(pin_a0)){
setup_spi(spi_slave | spi_l_to_h
spi_clk_div_16);
lcd_gotoxy(1,1);
printf (lcd_putc," Esclavo ");
else{
lcd_gotoxy(1,1);
printf (lcd_putc,"\f SIN CONEXION
");
delay_ms (10);
}
}
}
ESCLAVO
#include <16F887.h>
#fuses XT,NOMCLR
#use delay (clock=4000000)
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B2
#define LCD_E PIN_B3
if(spi_data_is_in())
{
l=spi_read();
if(l=='1'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='2'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='3'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='4'){
printf(lcd_putc,"\n
");
Recibiendo... 1
Recibiendo... 4
Recibiendo... 7
Recibiendo... 2
153
delay_ms(10);
}
if(l=='5'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='6'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='7'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='8'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='9'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='A'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='B'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='C'){
Recibiendo... 5
Recibiendo... 8
Recibiendo... 3
Recibiendo... 6
Recibiendo... 9
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='D'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='*'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='0'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
if(l=='#'){
printf(lcd_putc,"\n
");
delay_ms(10);
}
}
esclavo1();
}
Recibiendo... #
Recibiendo... D
Recibiendo... A
Recibiendo... B
Recibiendo... C
Recibiendo... *
else{
Recibiendo... 0
lcd_gotoxy(1,1);
printf (lcd_putc,"\f SIN CONEXION
");
delay_ms (10);
}
}
}
EJERCICIO PROPUESTO
El siguiente programa permite la comunicacin entre dos microcontroladores pic
uno denominado maestro y otro llamado esclavo mediante el protocolo SPI,
adems cuenta con un teclado conectado a ambos pics que envan datos al
presionar una tecla.
154
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).
EJERCICIO 11
156
2 pantallas LCD
LM35
3 leds
2 PICs
MASTER
#include <18f4550.h>
#fuses
XT,PUT,NOPROTECT,BROWNOUT,
NOLVP,NOWDT,NOMCLR
#device adc=8
#use delay (clock=4M)
#use
i2c(MASTER,SDA=PIN_B0,
SLOW,
SCL=PIN_B1,
NOFORCE_SW)
#include <lcd3.c>
#include <kbd3.c>
//Uso del
puerto d
#use standard_io(a)
#use standard_io(b)
#use standard_io(d)
#use standard_io(c)
#use standard_io(e)
float t1;
float t11;
float t2;
int8 read;
void envio_I2C (){
i2c_start();
//Comienzo de la
comunicacin I2C ...
i2c_write(0xa0);
//...con la
direccin del PIC esclavo...
i2c_write(read); // Envia dato
i2c_stop();
//Finalizacin de la
transmisin
157
}
}
/
********************************
********************************
**************/
/***************************
FUNCIN
PRINCIPAL
********************************
/
void main(){
kbd_init();
funcin de teclado
lcd_init();
port_d_pullups(TRUE);
while (true){
//Inicializa
setup_adc(ADC_CLOCK_INTERN
AL);
Setup_adc_ports(AN0);
//PONE PUERTO RA0 ANALOGO
setup_counters(rtcc_internal,rtcc_di
v_1);
set_adc_channel(0);
//
INDICA EL PIN A LEER RA0
//delay_us(20);.
read=read_adc();
t1=(float)read;
EL VALOR DEL PIN
t2=t1*2;
//LEE
t11=(t1*5)/255;
//CONVIERTE EL VALOR LEIDO DE
HEXA AL REAL el numero
0.01960784314 viene de dividir (5/255)
y el resultado se multiplica por 100 para
alcanzar 150 grados
printf(lcd_putc,"\fVin = %2.2f
",t11); //MUESTRA EN EL LCD EL
VALOR DE TEMPERATURA
printf(lcd_putc,"\nADC= %2.2f
",t2); //MUESTRA EN EL LCD EL
VALOR DE TEMPERATURA
envio_I2C();
delay_ms(500);
}
ESCLAVO
#include <18F4550.h>
#fuses XT,NOMCLR
#use delay (clock=8M)
#use
I2C(SLAVE,
SDA=PIN_B0
,SLOW,
SCL=PIN_B1,
ADDRESS=0xa0, NOFORCE_SW)
#include <lcd3.c>
#include <kbd3.c>
//Uso del
puerto d
#use fast_io(b)
#use standard_io(d)
#use standard_io(c)
#use standard_io(e)
///////////////
int state;
int8 x;
// I2C var
int8 buffer[0x03];
float t1;
float t11;
float tem;
#INT_SSP
void ssp_interrupt()
{ output_high(PIN_A2);
state=i2c_isr_state();
if(state < 0x80)
enviando datos
{
x = i2c_read();
}
//Master esta
if(state==0x80){
i2c_write(buffer[0x02]);
output_high(PIN_A1);
}
}
void main() {
158
set_tris_b(0b00000011);
lcd_init();
kbd_init();
port_d_pullups(TRUE);
enable_interrupts(INT_SSP);
//Activamos las interrupciones de I2C
enable_interrupts(GLOBAL);
//printf(lcd_putc,"\nADC= %2.2f
",t1); //MUESTRA EN EL LCD EL
VALOR DE TEMPERATURA
if (t1<24)
{
output_high(pin_d0);
output_low(pin_d1);
output_low(pin_d2);
while (true) {
if(state<0x80)
recibe dato
{
//state=0x80;
t1=(float)x;
VALOR DEL PIN
//Se
//LEE EL
t11=(t1*5*100)/255;
//CONVIERTE EL VALOR LEIDO DE
HEXA AL REAL el numero
0.01960784314 viene de dividir (5/255)
y el resultado se multiplica por 100 para
alcanzar 150 grados
//delay_ms(1);
tem=((t11)/2);
printf(lcd_putc,"\fT= %2.2f
C",tem); //MUESTRA EN EL LCD EL
VALOR DE TEMPERATURA
}
}
//delay_ms(10);
}
if (t1>27)
{
output_high(pin_d2);
output_low(pin_d1);
output_low(pin_d0);
//delay_ms(10);
}
if (t1>=24 && t1<=27)
{
output_high(pin_d1);
output_low(pin_d0);
output_low(pin_d2);
//delay_ms(10);
}
delay_ms(500);
}
EJERCICIO PROPUESTO
El siguiente programa tiene por objetivo disear un lenguaje de programacin que
cumpla con los parmetros siguientes: utilizar un microcontrolador pic como maestro al
cual est conectado un teclado matricial y una pantalla lcd que indique las aplicaciones
de sensor lm35 o sensor de proximidad comunicado mediante el protocolo I2C a un
esclavo que tenga comunicacin directa con la pc mediante RS232 y vare la velocidad
del motor y el encendido de luces logrando un sistema completo con los dos sensores
mencionados inicialmente.
EJERCICIO 12
Tema: I2C con LM35 y Motor DC
Descripcin: Realizamos una comunicacin I2C entre 2 pics para poder enviar la
temperatura de un lm35 y visualizar el ADC en el otro pic, pudiendo variar la
159
temperatura con la ayuda de algo frio y algo caliente; haciendo el control de un motor
DC.
Materiales:
2 pantallas LCD
LM35
Motor DC
2 resistencias 1k
2 PICs
MASTER
#include <18f4550.h>
#fuses
XT,PUT,NOPROTECT,BROWNOUT,
NOLVP,NOWDT,NOMCLR
#device adc=8
#use delay (clock=8M)
#use
i2c(MASTER,SDA=PIN_B0,
SLOW,
SCL=PIN_B1,
NOFORCE_SW)
#include <lcd3.c>
#include <kbd3.c>
//Uso del
puerto d
#use standard_io(a)
#use standard_io(b)
#use standard_io(d)
#use standard_io(c)
#use standard_io(e)
float t1,t2;
float t11;
int8 read;
void envio_I2C (){
i2c_start();
//Comienzo de la
comunicacin I2C ...
160
i2c_write(0xa0);
//...con la
direccin del PIC esclavo...
i2c_write(read); // Envia dato
i2c_stop();
//Finalizacin de la
transmisin
}
/
********************************
********************************
**************/
/***************************
FUNCIN
PRINCIPAL
********************************
/
void main(){
kbd_init();
funcin de teclado
lcd_init();
port_d_pullups(TRUE);
while (true){
//Inicializa
setup_adc(ADC_CLOCK_INTERN
AL);
Setup_adc_ports(AN0);
//PONE PUERTO RA0 ANALOGO
setup_counters(rtcc_internal,rtcc_di
v_1);
set_adc_channel(0);
//
INDICA EL PIN A LEER RA0
//delay_us(20);.
read=read_adc();
t1=(float)read*2;
EL VALOR DEL PIN
t2=(t1*255)/150;
//LEE
t11=(t1*5)/255;
//CONVIERTE EL VALOR LEIDO DE
HEXA AL REAL el numero
0.01960784314 viene de dividir (5/255)
y el resultado se multiplica por 100 para
alcanzar 150 grados
printf(lcd_putc,"\fMASTERTEMPERATURA"); //MUESTRA EN
EL
LCD
EL
VALOR
DE
TEMPERATURA
printf(lcd_putc,"\nADC= %2.2f
",t2); //MUESTRA EN EL LCD EL
VALOR DE TEMPERATURA
envio_I2C();
delay_ms(500);
}
}
ESCLAVO
#include <18F4550.h>
#fuses XT,NOMCLR
#use delay (clock=8M)
#use
I2C(SLAVE,
SDA=PIN_B0
,SLOW,
SCL=PIN_B1,
ADDRESS=0xa0, NOFORCE_SW)
#include <lcd3.c>
#include <kbd3.c>
//Uso del
puerto d
#use fast_io(b)
#use standard_io(d)
#use standard_io(c)
#use standard_io(e)
///////////////
int state;
int8 x;
// I2C var
int8 buffer[0x03];
float t1;
float t11;
float tem;
#INT_SSP
void ssp_interrupt()
{ output_high(PIN_A2);
state=i2c_isr_state();
if(state < 0x80)
enviando datos
{
x = i2c_read();
}
//Master esta
if(state==0x80){
161
i2c_write(buffer[0x02]);
output_high(PIN_A1);
}
}
void main() {
set_tris_b(0b00000011);
lcd_init();
kbd_init();
setup_ccp1(ccp_PWM);
setup_timer_2(T2_DIV_BY_16,255,1);
set_pwm1_duty(0);
port_d_pullups(TRUE);
enable_interrupts(INT_SSP);
//Activamos las interrupciones de I2C
enable_interrupts(GLOBAL);
while (true) {
if(state<0x80)
recibe dato
{
//state=0x80;
//delay_ms(1);
tem=((t11));
printf(lcd_putc,"\fTemp= %2.2f
oC",tem); //MUESTRA EN EL LCD
EL VALOR DE TEMPERATURA
//printf(lcd_putc,"\nADC= %2.2f
",t1); //MUESTRA EN EL LCD EL
VALOR DE TEMPERATURA
if (tem<24)
{
printf(lcd_putc,"\nVel1 Duty=> 15
");
set_pwm1_duty(150L);
}
if (tem>27)
{
printf(lcd_putc,"\nVel3 Duty=> 90
");
set_pwm1_duty(900L);
}
if (tem>=24 && tem<=27)
{
printf(lcd_putc,"\nVel2 Duty=> 50
//Se
");
t1=(float)x;
VALOR DEL PIN
//LEE EL
t11=(t1*5*100)/255;
//CONVIERTE EL VALOR LEIDO DE
HEXA AL REAL el numero
0.01960784314 viene de dividir (5/255)
y el resultado se multiplica por 100 para
alcanzar 150 grados
set_pwm1_duty(500L);
}
delay_ms(500);
}
}
}
EJERCICIO PROPUESTO
162
164
Bluetooth se encuentra en la clasificacin de redes inalmbricas WPAN el cual es un protocolo normalizado por el estn
Wifi
Radio
Frecuencia
Clase
Potencia mxima
permitida
(mW)
Potencia mxima
permitida
(dBm)
Alcance
(aproximad
o)
Clase
1
100 mW
20 dBm
~100
metros
Clase
2
2.5 mW
4 dBm
~5-10
metros
Clase
3
1 mW
0 dBm
~1 metro
Qu es Bluetooth?
El Bluetooth Special Interest Group (SIG), una asociacin comercial formada por
lderes en telecomunicacin, informtica e industrias de red, est conduciendo el
desarrollo de la tecnologa inalmbrica Bluetooth y llevndola al mercado.
La tecnologa inalmbrica Bluetooth es una tecnologa de ondas de radio de corto
alcance (2.4 gigahertzios de frecuencia) cuyo objetivo es el simplificar las
comunicaciones entre dispositivos informticos, como ordenadores mviles,
telfonos mviles, otros dispositivos de mano y entre estos dispositivos e Internet.
Tambin pretende simplificar la sincronizacin de datos entre los dispositivos y
otros ordenadores.
165
166
Funcionamiento.
Trabaja en dos capas del modelo OSI que son la de enlace y aplicacin, incluye un
transeiver que trasmite y recibe a una frecuencia de 2.4 GHz Las conexiones que
se realizan son de uno a uno con un rango mximo de 10 metros, si se deseara
implementar la distancia se tendra que utilizar repetidores los cuales nos
ayudaran a abarcar una distancia de 100 metros.
Bluetooth por cuestiones de seguridad cuanta con mecanismos de encriptacin de
64 bits y autentificacin para controlar la conexin y evitar que dispositivos
puedan acceder a los datos o realizar su modificacin.
Durante la transferencia de datos el canal de comunicaciones permanece abierto y
no requiere la intervencin directa del usuario cada vez que se desea transferir voz
o datos de un dispositivo a otro. La velocidad mxima que se alcanza durante la
transferencia es de 700 Kb/s y consume un 97% menos que un telfono mvil. [1]
ZIGBEE
Gallego C. Fogaldo [ online ] Menciona:
ZigBee, tambin conocido como IEEE 802.15.4, por el estndar basado, se
utiliza para la comunicacin inalmbrica mediante radio digital. Se caracteriza
por una comunicacin segura, su sencillez de integracin, su topologa de red
(en malla, aunque pueden encontrarse otras topologas), y sobre todo, por su bajo
consumo. [ 1 ]
Soria Lpez, Jos [ online ] Menciona:
ZigBee es el nombre de la especificacin de un conjunto de protocolos de alto
nivel de comunicacin inalmbrica para su utilizacin con radiodifusin digital
de bajo consumo, basada en el estndar IEEE 802.15.4 de redes inalmbricas de
rea personal (wireless personal area network, WPAN). Su objetivo son las
aplicaciones que requieren comunicaciones seguras con baja tasa de envo de
datos y maximizacin de la vida til de sus bateras.. [ 2 ]
Ortega H. Carlos [ online ] Menciona:
ZigBee es un estndar de comunicaciones inalmbricas diseado por la ZigBee
Alliance. Es un conjunto estandarizado de soluciones que pueden ser
implementadas por cualquier fabricante. ZigBee est basado en el estndar IEEE
167
ESTRUCTURA
cubrir varios elementos que son comunes a todos los dispositivos, como el
subdireccionamiento, los modos de direccionamientos y la descripcin de dispositivos,
como el tipo de dispositivo, potencia, modos de dormir y coordinadores de cada uno.[2]
Caractersticas
configuracin.
Localizacin grupal -- Ofrece una optimizacin adicional de trfico necesaria
170
Ventajas
Tipos de Dispositivos
Se definen tres tipos distintos de dispositivo ZigBee segn su papel en la red
Coordinador ZigBee (ZigBee Coordinator, ZC): El tipo de dispositivo ms completo.
Debe existir uno por red. Sus funciones son las de encargarse de controlar la red y los
caminos que deben seguir los dispositivos para conectarse entre ellos, requiere memoria
y capacidad de computacin.
Router ZigBee (ZigBee Router, ZR):Interconecta dispositivos separados en la
topologa de la red, adems de ofrecer un nivel de aplicacin para la ejecucin de
cdigo de usuario.
Dispositivo final (ZigBee End Device, ZED):Posee la funcionalidad necesaria para
comunicarse con su nodo padre (el coordinador o un router), pero no puede transmitir
informacin destinada a otros dispositivos. De esta forma, este tipo de nodo puede estar
dormido la mayor parte del tiempo, aumentando la vida media de sus bateras. Un ZED
tiene requerimientos mnimos de memoria y es por tanto significativamente ms barato.
Funcionalidad
Basndose en su funcionalidad, puede plantearse una segunda clasificacin:Dispositivo
de funcionalidad completa (FFD):Tambin conocidos como nodo activo. Es capaz de
recibir mensajes en formato 802.15.4. Gracias a la memoria adicional y a la capacidad
171
de computar, puede funcionar como Coordinador o Router ZigBee, o puede ser usado en
dispositivos de red que acten de interfaces con los usuarios.Dispositivo de
funcionalidad reducida (RFD):Tambin conocido como nodo pasivo. Tiene capacidad y
funcionalidad limitadas con el objetivo de conseguir un bajo coste y una gran
simplicidad. Bsicamente, son los sensores/actuadores de la red.Un nodo ZigBee (tanto
activo como pasivo) reduce su consumo gracias a que puede permanecer dormido la
mayor parte del tiempo (incluso muchos das seguidos). [4]
Topologa
La capa de red soporta mltiples configuraciones de red incluyendo estrella, rbol,
punto a punto y rejilla (malla).
Topologa en estrella
En la configuracin en estrella, uno de los dispositivos tipo FFD asume el rol de
coordinador de red y es responsable de inicializar y mantener los dispositivos en la red.
Todos los dems dispositivos zigbee, conocidos con el nombre de dispositivos finales,
hablan directamente con el coordinador.En la configuracin de rejilla, el coordinador
ZigBee es responsable de inicializar la red y de elegir los parmetros de la red, pero la
red puede ser ampliada a travs del uso de routers ZigBee.
El algoritmo de encaminamiento utiliza un protocolo de pregunta-respuesta (requestresponse) para eliminar las rutas que no sean ptimas, La red final puede tener hasta 254
nodos. Utilizando el direccionamiento local, se puede configurar una red de ms de
65000 nodos (216).
Topologa punto a punto
Para la topologa punto a punto, existe un solo FFD Coordinador. A diferencia con la
topologa estrella, cualquier dispositivo puede comunicarse con otro siempre y cuando
estn en el mismo rango de alcance circundante. Las aplicaciones orientadas para el
172
Topologa de rbol
La topologa de rbol es un caso especial de topologa de conexin punto a punto, en la
cual muchos dispositivos son FFDs y los RFD pueden conectarse como un nodo nico
al final de la red. Cualquiera de los FFDs restantes pueden actuar como coordinadores y
proveer servicios de sincronizacin hacia otros dispositivos o coordinadores.
173
Seguridad
La seguridad de las transmisiones y de los datos son puntos clave en la tecnologa
ZigBee. ZigBee utiliza el modelo de seguridad de la subcapa MAC IEEE 802.15.4, la
cual especifica 4 servicios de seguridad. Control de accesos: El dispositivo mantiene
una lista de los dispositivos comprobados en la red. Datos Encriptados: Los cuales usan
una encriptacin con un cdigo de 128 bits. Integracin de tramas: Protegen los datos de
ser modificados por otros. Secuencias de refresco: Comprueban que las tramas no han
sido reemplazadas por otras. El controlador de red comprueba estas tramas de refresco y
su valor, para ver si son las esperadas. Modelo bsico de seguridad. Las claves son la
base de la arquitectura de seguridad y, como tal, su proteccin es fundamental para la
integridad del sistema. Las claves nunca deben transportarse utilizando un canal
inseguro, si bien existe una excepcin momentnea que se da en la fase inicial de la
unin de un dispositivo desconfigurado a una red. La red ZigBee debe tener particular
cuidado, pues una red ad hoc (12) puede ser accesible fsicamente a cualquier
dispositivo externo y el entorno de trabajo no se puede conocer de antemano.
Aplicaciones
Los protocolos ZigBee estn definidos para su uso en aplicaciones embebidas con
requerimientos muy bajos de transmisin de datos y consumo energtico. Se pretende su
uso en aplicaciones de propsito general con caractersticas auto organizativas y bajo
coste (redes en malla, en concreto). Puede utilizarse para realizar control industrial,
albergar sensores empotrados, recolectar datos mdicos, ejercer labores de deteccin de
humo o intrusos o domtica. La red en su conjunto utilizar una cantidad muy pequea
de energa de forma que cada dispositivo individual pueda tener una autonoma de hasta
5 aos antes de necesitar un recambio en su sistema de alimentacin.
174
175
EJERCICIOS RESUELTOS
176
Cdigo ejercicio 1.
TEMA:
CCP modo Captura de Timer1
DESCRIPCION
El siguiente programa trabaja con el mdulo CCP en modo Captura es decir capta un
valor que llega al timer en este caso Timer1 que es un generador de pulsos, entonces al
variar la frecuencia tomo el ultimo valor y lo visualiza en una pantalla LCD.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 CI 555
Resistencia de 1K
Resistencia de 220
1 Fuente de alimentacin (5v)
1 Protoboard
Capacitores 10uF
Diodo Led
Potencimetro
CAPTURAS PROTEUS
CODIGO COMENTADO
#include <16f887.h>
Estado=0;
if(Senal==0){
Senal=1;
}
DE FUSIBLES
#use delay(clock=4M)
#define LCD_ENABLE_PIN
PIN_D0 // INCLUSION DE LA LIBRERA
PARA LA LCD
#define LCD_RS_PIN
#define LCD_RW_PIN
#define LCD_DATA4
#define LCD_DATA5
#define LCD_DATA6
#define LCD_DATA7
#include <lcd.c>
PIN_D1
PIN_D2
PIN_D4
PIN_D5
PIN_D6
PIN_D7
}
}
void main(){
lcd_init();
setup_timer_1(T1_INTERNAL |
T1_DIV_BY_1); // DECLARACION PARA
MODO CAPTURA
ext_int_edge(0,L_TO_H);
Estado=0;
enable_interrupts(int_ccp1); //
DECLARACION DE INTERRUPCIONES
float Periodo;
float Calculo;
float Frecuencia;
int1 Senal=0;
int1 Estado=0;
#int_ccp1 // INCLUSION DE LA SENTENCIA
CCP
void Captura(){
if(Estado==0){
set_timer1(0);
ext_int_edge(0,H_TO_L);
Estado=1;
} else{
TiempoF=get_timer1();
ext_int_edge(0,L_TO_H);
enable_interrupts(global);
setup_ccp1(CCP_CAPTURE_FE);
do {
if(Senal==1){
Calculo=TiempoF*1;
Periodo=Calculo*0.25;
Frecuencia=(1/
(Periodo*2.0))*1000000;
printf (lcd_putc,"Captura de
Datos");
delay_ms(100);
lcd_gotoxy(1,2);
printf(lcd_putc,"\nfrecue=
%9.5fHz ",Frecuencia);
}
Senal=0;
} while (TRUE);
}
Cdigo ejercicio 2.
TEMA:
CCP modo Comparacin voltaje externo
DESCRIPCION
El siguiente programa trabaja con el mdulo CCP en modo comparacin, para esto tomo
como referencia un voltaje externo de 5 volts como referencia para compararlo con el
timer 1 o 2 y de esta manera encender tres posiciones diferentes haciendo referencia a
un set point.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
CAPTURAS PROTEUS
CODIGO COMENTADO
#include <16f887.h>
#device adc=10 // DECLARACION DEL
VALOR ADC PARA LA CONVERSION
void main()
{
int v;
int16 q;
int16 z;
float p;
setup_adc_ports(PIN_A0|VSS_VDD);
//
setup_adc(ADC_CLOCK_INTERNAL)
;
lcd_init();
for (;;)
{
set_adc_channel(0);
delay_us(20);
{
output_high(pin_b2);
output_low(pin_b0);
output_low(pin_b1);
}
if (p>v)
{
output_high(pin_b0);
output_low(pin_b1);
output_low(pin_b2);
}
if ((q>600)&&(q<650))
{
output_high(pin_b1);
output_low(pin_b0);
output_low(pin_b2);
}
}
q = read_adc();
z = 5 * q;
p = z/1024.0;
v=3;
printf(lcd_putc, "\f SetPoint= 3
V"); // DECLARACION DE UN VALOR SET
POINT A COMP.
Cdigo ejercicio 3.
TEMA:
CCP modo PWM para seal cuadrtica.
DESCRIPCION
El siguiente cdigo presenta el modo PWM del mdulo CCP, lo que nos permitir variar
el ciclo de trabajo de una seal cuadrtica en 3 posiciones diferentes y verificar la
forma de onda y la variacin de la misma en diodo led.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
CAPTURAS PROTEUS
CODIGO COMENTADO
#include <16f887.h>
#fuses xt
#use delay (clock=4M)
#define LCD_ENABLE_PIN PIN_D0
////
#define LCD_RS_PIN
PIN_D1
////
#define LCD_RW_PIN
PIN_D2
////
#define LCD_DATA4
PIN_D4
////
#define LCD_DATA5
PIN_D5
////
#define LCD_DATA6
PIN_D6
////
#define LCD_DATA7
PIN_D7
#include <lcd.c>
#include <kbd_lib.c>
#use fast_io(c)
#use pwm(ccp1,frequency=2k,
duty=50)
void main(){
char e;
int z=0;
//
lcd_init();
printf(lcd_putc,"\fSistema
Encendido");
delay_ms(100);
kbd_init();
setup_adc_ports(NO_ANALOGS);
port_b_pullups(TRUE);
set_tris_c(0x00);
while (true){
e=kbd_getc();
if(e!=0){
if(e=='A') {
printf(lcd_putc,"\f Encendido ");
delay_ms(100);
Z=3;
output_c(0);
pwm_set_duty_percent(0);
delay_ms(100);
}
if(e=='B') {
printf(lcd_putc,"\f Apagado ");
output_c(0);
delay_ms(100);
output_c(0);
Z=1;
pwm_set_duty_percent(0);
delay_ms(100);
}
if(e=='1') {
delay_ms(30);
output_c(0);
if(z==1){
printf(lcd_putc,"\f Debe Encender ");
delay_ms(100);
output_c(0);
}
if(z==3){
printf(lcd_putc,"\f Duty
25");//velocidad 1
pwm_set_duty_percent(250);
delay_ms(100);
}
}
if(e=='2') {
output_c(0);
delay_ms(30);
if(z==1){
printf(lcd_putc,"\f Debe Encender ");
delay_ms(100);
output_c(0);
}
if(z==3){
printf(lcd_putc,"\f Duty 50
");//velocidad 2
pwm_set_duty_percent(500);
delay_ms(100);
}
}
Cdigo ejercicio 4.
if(e=='3') {
output_c(0);
delay_ms(30);
if(z==1){
printf(lcd_putc,"\f Debe Encender ");
delay_ms(100);
output_c(0);
}
if(z==3){
printf(lcd_putc,"\f Duty 75
");//velocidad 2
pwm_set_duty_percent(750);
delay_ms(100);
}
}
if(e=='C') {
output_c(0);
delay_ms(30);
if(z==1){
printf(lcd_putc,"\f Debe Encender ");
delay_ms(100);
output_c(0);
}
if(z==3){
printf(lcd_putc,"\f Duty 85
");//velocidad 2
pwm_set_duty_percent(850);
delay_ms(100);
}
}
}
}
}
TEMA:
CCP modo captura con sensor de temperatura.
DESCRIPCION
El siguiente programa est configurado para captar la seal analgica de un sensor lm35
y visualizarla en una pantalla lcd.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
Sensor lm35
CAPTURAS PROTEUS
#use delay(clock=4M)
#include <lcd.c>
float temperatura;
CODIGO COMENTADO
#include <16f887.h>
#fuses XT, NOWDT, NOPROTECT,
NOLVP, NOCPD, NOWRT,
NODEBUG
#device *=16
#device adc=10
void main()
{
setup_adc_ports(sAN0);//entrada del
LM35
setup_adc(ADC_CLOCK_INTERNAL)
;
set_adc_channel(0);
lcd_init();
lcd_gotoxy(5,1);
printf(lcd_putc,"Temperatura");
delay_ms(350);
lcd_init();
while(true)
{
temperatura=(float)read_adc()/2;
lcd_gotoxy(5,1);
printf(lcd_putc,"%02.1f",temperatura);
lcd_gotoxy(14,1);
printf(lcd_putc,"Grados");
delay_ms(200);
}
}
Cdigo ejercicio 5.
TEMA:
CCP modo comparacin con Sensor Ultrasnico
DESCRIPCION
El siguiente programa trabaja con una serie de bits de resolucin que permiten hacer u
calculo a la seal analgica que es enviada por medio del sensor e indicarnos la
distancia qu este se encuentra. Sin embargo en proteus al no contar con las libreras
necesarias del sensor no se puede correr el programa.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
CAPTURAS PROTEUS
CODIGO COMENTADO
#include <16f887.h>
#fuses XT,NOWDT,NOMCLR
#use delay (clock=4000000)
#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_D5
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7
#define LCD_RS PIN_D2
#define LCD_E PIN_D3
#include <lcd.c>
#use standard_io(b)
#define trig pin_B1
#define echo pin_B0
int16 time;
float distance;
setup_timer_1(T1_INTERNAL|
T1_DIV_BY_8); // initiating timer
while(true)
{
output_high(trig);
ping the sonar
delay_us(20);
sending 20us pulse
output_low(trig);
//
//
while(!input(ECHO))
wait for high state of echo pin
{}
//
// Defining variables
void main()
{
lcd_init();
//
initiating the LCD
printf(LCD_PUTC, "\f
ULTRASONIC");// for LCD & MCU
restart troubleshooting
delay_ms(1000);
//
Boot-up delay, for troubleshooting
set_timer1(0);
timer zero
// setting
while(input(ECHO))
Wait for high state of echo pin
{}
time=get_timer1();
Getting the time
distance=time*10 ;
the distance
//
//
// Calculating
distance=distance/75;
printf(LCD_PUTC, "\nDistance =
%F",distance); // Putting the time and
delay_ms(1000);
}
}
Cdigo ejercicio 6.
TEMA:
CCP modo comparacin con un sensor de presencia
DESCRIPCION
El siguiente programa detecta la presencia de un sensor infrarrojo en el rango permisible
del mismo lo que indicara n mensaje de detectado y no detectado en un pantalla LCD
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
Sensor infrarrojo
CAPTURAS PROTEUS
CODIGO COMENTADO
#include <16f887.h>
#fuses XT, NOWDT, NOPROTECT,
NOLVP, NOCPD, NOWRT,
NODEBUG
#device *=16
#device adc=10
#use delay(clock=4M)
#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_D5
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7
#define LCD_RS PIN_D2
#define LCD_E PIN_D3
#include <lcd.c>
int16 value;
float32 y;
void main()
{
setup_adc_ports(sAN0|
VSS_VDD);//entrada del LM35
setup_adc(ADC_CLOCK_INTERNAL)
;
set_adc_channel(0);
lcd_init();
lcd_gotoxy(5,1);
printf(lcd_putc,"Luminosidad");
delay_ms(350);
lcd_init();
while(true)
{
delay_ms(50);
value=read_adc();
y=value*0.005;
y=y-1.183;
lcd_gotoxy(5,2);
printf(lcd_putc,"%2.3f cm",y);
lcd_gotoxy(5,1);
printf(lcd_putc,"Distancia");
delay_ms(1000);
if((y<=3)&&(y>0))
{
printf(lcd_putc,"\f Detecta");
delay_ms(1000);
printf(lcd_putc,"\f");
}
else
{
printf(lcd_putc,"\f NO Detecta");
delay_ms(1000);
printf(lcd_putc,"\f");
}
}
}
Cdigo ejercicio 7.
TEMA:
Motor DC PWM
DESCRIPCION
El siguiente programa tiene por objetivo disear un lenguaje de programacin que nos
permita variar el ciclo de trabajo de una seal cuadrtica y verificar su funcionaiento en
un motor de 5volts.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
Motor dc
CAPTURAS PROTEUS
CODIGO COMENTADO
#include <18f4550.h>
#fuses xt, nowdt, nowrt, nomclr
#use delay (clock=4M)
#define LCD_ENABLE_PIN PIN_D0
////
#define LCD_RS_PIN
PIN_D1
////
#define LCD_RW_PIN
PIN_D2
////
#define LCD_DATA4
////
#define LCD_DATA5
////
#define LCD_DATA6
////
#define LCD_DATA7
#include <lcd.c>
#include <kbd_lib.c>
PIN_D4
PIN_D5
PIN_D6
PIN_D7
#use pwm(ccp1,frequency=2k,
duty=50)
#use pwm(ccp2,frequency=2k,
duty=50)
char a=10;
short int d=1;
int z;
int i;
int de;
#INT_RB
void teclado(){
char b;
output_toggle(pin_c1);
kbd_init();
do{
b=kbd_getc();
if(b!=0){
a=b;
lcd_putc("\f"+b);
}
}while(b==0);
d=1;
clear_interrupt(int_rb);
}
void main(){
lcd_init();
lcd_putc("\fControl PWM");
delay_ms(100);
set_tris_c(0x00);
set_tris_E(0x00);
port_b_pullups(true);
enable_interrupts(int_rb);
enable_interrupts(global);
while (true){
if(d==1){
set_tris_b(0xf0);
output_low(pin_b0);
output_low(pin_b1);
output_low(pin_b2);
output_low(pin_b3);
d=0;
}
switch(a)
{
case 'A':
lcd_gotoxy(1,1);
printf(lcd_putc,"\fSistema ON ");
delay_ms(100);
z=3;
break;
case 'B' :
printf(lcd_putc,"\fSistema OFF ");
SET_PWM1_DUTY(0);
SET_PWM2_DUTY(0);
delay_ms(100);
z=0;
break;
case 'C' :
printf(lcd_putc,"\fIzquierda
");//encendido
SET_PWM1_DUTY(0);
SET_PWM2_DUTY(0);
delay_ms(100);
de=0;
i=1;
break;
case 'D' :
printf(lcd_putc,"\fDerrecha
");//encendido
SET_PWM1_DUTY(0);
SET_PWM2_DUTY(0);
delay_ms(100);
de=1;
i=0;
break;
case '1':
if(z>1){
if(i==1){
printf(lcd_putc,"\f DC 25");//velocidad
1
SET_PWM1_DUTY(0);
SET_PWM2_DUTY(300);
delay_ms(100);
}
if(de==1){
printf(lcd_putc,"\f DC 25");//velocidad
1
SET_PWM1_DUTY(300);
SET_PWM2_DUTY(0);
delay_ms(100);
}
}
break;
case '2':
if(z>1){
if(i==1){
printf(lcd_putc,"\f DC 75");//velocidad
1
SET_PWM1_DUTY(0);
SET_PWM2_DUTY(400);
delay_ms(100);
}
if(de==1){
printf(lcd_putc,"\f DC 75");//velocidad
1
SET_PWM1_DUTY(400);
SET_PWM2_DUTY(0);
delay_ms(100);
}
}
break;
case '3':
if(z>1){
if(i==1){
printf(lcd_putc,"\f DC 90");//velocidad
1
SET_PWM1_DUTY(0);
SET_PWM2_DUTY(500);
delay_ms(100);
}
if(de==1){
printf(lcd_putc,"\f DC 90");//velocidad
1
SET_PWM1_DUTY(500);
SET_PWM2_DUTY(0);
delay_ms(100);
}
}
break;
default:
printf(lcd_putc,"\fNo Corresponde");
delay_ms(100);
}
}
}
Cdigo ejercicio 8.
TEMA:
Motor AC con TRIAC
DESCRIPCION
El siguiente programa tiene por objetivo establecer un lenguaje de programacin que
permita controlar el ciclo de trabajo de en seal PWM adems de acoplarse a un circuito
de potencia que detectara el cruce pro cero y variara la cantidad de energa que legue a
la carga.
Nota: La simulacin no puede ejecutarse debido a un error en el diseo del circuito en la
parte de potencia.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
Motor dc
CAPTURAS PROTEUS
CODIGO COMENTADO
#INCLUDE <16F887.H>
#fuses intrc_io, nowdt, nomclr, noput
#fuses intrc_io, nowdt, nomclr, noput
#use delay(clock=4M)
#include <kbd_lib.c>
#BYTE WPUB =0X95
#BYTE OPTION_REG = 0X81
#include <lcd.c>
char k;
int y,z;
void main()
{
OPTION_REG = 0;
WPUB= 0B11111111;
//port_b_pullups(true);
kbd_init();
lcd_init();
lcd_putc("\f SISTEMA Funcionando");
delay_us(100);
while (true)
{
delay_us(100);
k=kbd_getc();
if(k!=0)
{
y=k-48;
switch (y)
{
case(1):
z=1;
lcd_putc("\f Duty en:\n duty 12 ");
delay_us(20);
break;
case(2):
z=2;
lcd_putc("\f Duty en: \n 25");
delay_us(20);
break;
case(3):
z=3;
printf(lcd_putc,"\f Duty en: \n 45");
delay_us(20);
break;
case (4):
z=4;
printf(lcd_putc,"\f Duty en: \n 60");
delay_us(20);
break;
case (5):
z=5;
printf(lcd_putc,"\f Duty en: \n 85");
delay_us(20);
break;
case (6):
lcd_putc("\f SISTEMA AC");
output_low(pin_c0);
delay_us(20);
K=0;
z=0;
}
}else output_low(pin_c0);
if((z==1))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(7200);
output_high(pin_c0);
delay_us(1000);
}
}
}else if((z==2))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(6000);
output_high(pin_c0);
delay_us(2200);
}
}
}else if((z==3))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(4800);
output_high(pin_c0);
delay_us(3400);
}
}
}else if((z==4))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(3600);
output_high(pin_c0);
delay_us(4600);
}
}
}else if((z==5))
{
while(input(pin_a1))
{
if(input(pin_a0))
{
output_low(pin_c0);
delay_us(2400);
output_high(pin_c0);
delay_us(5800);
}
}
}
}
}
Cdigo ejercicio 9.
TEMA:
COMUNICACIN SPI
DESCRIPCION
El siguiente programa permite la comunicacin entre dos microcontroladores pic uno
denominado maestro y otro llamado esclavo mediante el protocolo SPI, adems cuenta
con un teclado conectado a ambos pics que envan datos al presionar una tecla.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
Motor dc
CAPTURAS PROTEUS
rx=spi_read();
//k=dat;
lcd_gotoxy(8,1);
printf(lcd_putc,"\f %u",rx);
if(rx!=0){
if(rx==67){
printf(lcd_putc,"\f C ");
delay_ms(100);
}
if(rx==68){
printf(lcd_putc,"\f D ");
delay_ms(100);
}
if(rx==35){
printf(lcd_putc,"\f # ");
delay_ms(100);
}
}
}
}}
void main(){
kbd_init();
lcd_init();
printf(lcd_putc,"\f Maestro ");
delay_ms(100);
while (true){
tecla=kbd_getc();
dat=tecla-48;
if(tecla!=0){
if(tecla=='A'){
setup_spi(spi_master | spi_l_to_h |
spi_clk_div_16);
printf(lcd_putc,"\f Modo TX ");
delay_ms(100);
disable_interrupts(INT_SSP);
z=1;
}
if(tecla=='B'){
z=0;
setup_spi(spi_slave | spi_l_to_h |
spi_clk_div_16| SPI_XMIT_L_TO_H);
printf(lcd_putc,"\f Modo RX ");
delay_ms(100);
enable_interrupts(GLOBAL); // habilita
interrupcion global
enable_interrupts(INT_SSP);
ssp_interrupt();
}
if(tecla=='1'){
spi_write(tecla);
printf(lcd_putc,"\f 1 ");
}
if(tecla=='2'){
spi_write(tecla);
printf(lcd_putc,"\f 2 ");
}
if(tecla=='3'){
spi_write(dat);
printf(lcd_putc,"\f 3 ");
}
if(tecla=='4'){
spi_write(dat);
printf(lcd_putc,"\f 4 ");
}
if(tecla=='5'){
spi_write(dat);
printf(lcd_putc,"\f 5 ");
delay_ms(500);
}
if(tecla=='6'){
spi_write(6);
printf(lcd_putc,"\f 6 ");
delay_ms(500);
}
if(tecla=='7'){
spi_write(dat);
printf(lcd_putc,"\f 7 ");
delay_ms(500);
}
if(tecla=='8'){
spi_write(dat);
printf(lcd_putc,"\f 8 ");
}
if(tecla=='9'){
spi_write(dat);
printf(lcd_putc,"\f 9 ");
}
if(tecla=='C'){
spi_write(dat);
printf(lcd_putc,"\f C");
}
if(tecla=='D'){
spi_write(dat);
printf(lcd_putc,"\f D ");
}
if(tecla=='#'){
spi_write(dat);
printf(lcd_putc,"\f # ");
}
}
}
}
if(rx==68){
printf(lcd_putc,"\f D ");
delay_ms(100);
}
if(rx==35){
printf(lcd_putc,"\f # ");
delay_ms(100);
}
}
}
}}
void main(){
kbd_init();
lcd_init();
printf(lcd_putc,"\f Maestro ");
delay_ms(100);
while (true){
tecla=kbd_getc();
dat=tecla-48;
if(tecla!=0){
if(tecla=='A'){
setup_spi(spi_master | spi_l_to_h |
spi_clk_div_16);
printf(lcd_putc,"\f Modo TX ");
delay_ms(100);
disable_interrupts(INT_SSP);
z=1;
}
if(tecla=='B'){
z=0;
setup_spi(spi_slave | spi_l_to_h |
spi_clk_div_16| SPI_XMIT_L_TO_H);
printf(lcd_putc,"\f Modo RX ");
delay_ms(100);
enable_interrupts(GLOBAL); //habilita
interrupcion global
enable_interrupts(INT_SSP);
ssp_interrupt();
}
delay_ms(500);
}
if(tecla=='8'){
spi_write(dat);
printf(lcd_putc,"\f 8 ");
if(tecla=='1'){
spi_write(tecla);
printf(lcd_putc,"\f 1 ");
}
if(tecla=='2'){
spi_write(tecla);
printf(lcd_putc,"\f 2 ");
}
if(tecla=='9'){
spi_write(dat);
printf(lcd_putc,"\f 9 ");
}
if(tecla=='3'){
spi_write(dat);
printf(lcd_putc,"\f 3 ");
}
if(tecla=='C'){
spi_write(dat);
printf(lcd_putc,"\f C");
}
if(tecla=='4'){
spi_write(dat);
printf(lcd_putc,"\f 4 ");
}
if(tecla=='5'){
spi_write(dat);
printf(lcd_putc,"\f 5 ");
delay_ms(500);
}
if(tecla=='6'){
spi_write(6);
printf(lcd_putc,"\f 6 ");
delay_ms(500);
}
if(tecla=='7'){
spi_write(dat);
printf(lcd_putc,"\f 7 ");
}
if(tecla=='D'){
spi_write(dat);
printf(lcd_putc,"\f D ");
}
if(tecla=='#'){
spi_write(dat);
printf(lcd_putc,"\f # ");
}
}
}
}
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
CAPTURAS PROTEUS
#define LCD_DATA6
#define LCD_DATA7
#include <lcd.c>
#include <vinueza.c>
#use standard_io(a)
#use standard_io(b)
#use standard_io(c)
#use standard_io(d)
int8 tecla;
int8 dato1 = 0;
void envio_I2C (){
PIN_B4
PIN_B5
i2c_start();
i2c_write(0xa0);
i2c_write(tecla);
i2c_stop();
}
void recibo_datos()
{
i2c_start ();
i2c_write (0xa0);
i2c_write (0x02+1);
i2c_stop();
i2c_start ();
i2c_write (0xa1);
dato1 = i2c_read(0);
//lcd_putc(dato1);
if (dato1=='0'){
printf(lcd_putc,"\nRecibio 0");
delay_ms(1000);
}
if (dato1=='1'){
printf(lcd_putc,"\nRecibio 1");
delay_ms(1000);
}
if (dato1=='2'){
printf(lcd_putc,"\nRecibio 2");
delay_ms(1000);
}
if (dato1=='3'){
printf(lcd_putc,"\nRecibio 3");
delay_ms(1000);
}
if (dato1=='4'){
printf(lcd_putc,"\nRecibio 4");
delay_ms(1000);
}
if (dato1=='5'){
printf(lcd_putc,"\nRecibio 5");
delay_ms(1000);
}
if (dato1=='6'){
printf(lcd_putc,"\nRecibio 6");
delay_ms(1000);
}
if (dato1=='7'){
printf(lcd_putc,"\nRecibio 7");
delay_ms(1000);
}
if (dato1=='8'){
printf(lcd_putc,"\nRecibio 8");
delay_ms(1000);
}
if (dato1=='9'){
printf(lcd_putc,"\nRecibio 9");
delay_ms(1000);
}
if (dato1=='A'){
printf(lcd_putc,"\nRecibio A");
delay_ms(1000);
}
if (dato1=='B'){
printf(lcd_putc,"\nRecibio B");
delay_ms(1000);
}
if (dato1=='C'){
printf(lcd_putc,"\nRecibio C");
delay_ms(1000);
}
if (dato1=='D'){
printf(lcd_putc,"\nRecibio D");
delay_ms(1000);
}
if (dato1=='*'){
printf(lcd_putc,"\nRecibio *");
delay_ms(1000);
}
if (dato1=='#'){
printf(lcd_putc,"\nRecibio #");
delay_ms(1000);
}
i2c_stop ();
}
void main(){
kbd_init();
lcd_init();
printf(lcd_putc,"\n MAESTRO ");
delay_ms(100);
while (true){
tecla=kbd_getc();
if(tecla!=0){
if (tecla=='0'){
}
if (tecla=='7'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 7");
delay_ms(100);
recibo_datos();
delay_ms(100);
}
if(tecla!='0'){
if (tecla=='1'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 1");
delay_ms(100);
}
}
if (tecla=='8'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 8");
delay_ms(100);
}
if (tecla=='9'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 9");
delay_ms(100);
if (tecla=='2'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 2");
delay_ms(100);
}
if (tecla=='3'){
envio_I2C ();
envio_I2C ();
printf(lcd_putc,"\fEnvio 3");
delay_ms(100);
}
if (tecla=='4'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 4");
delay_ms(100);
}
if (tecla=='5'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 5");
delay_ms(100);
}
if (tecla=='6'){
envio_I2C ();
printf(lcd_putc,"\fEnvio 6");
delay_ms(100);
}
if (tecla=='A'){
envio_I2C ();
printf(lcd_putc,"\fEnvio A");
delay_ms(100);
}
if (tecla=='B'){
envio_I2C ();
printf(lcd_putc,"\fEnvio B");
delay_ms(100);
}
if (tecla=='C'){
envio_I2C ();
printf(lcd_putc,"\fEnvio C");
delay_ms(100);
}
if (tecla=='D'){
envio_I2C ();
printf(lcd_putc,"\fEnvio D");
delay_ms(100);
}
if (tecla=='*'){
envio_I2C ();
printf(lcd_putc,"\fEnvio *");
delay_ms(100);
}
if (tecla=='#'){
envio_I2C ();
printf(lcd_putc,"\fEnvio #");
{
x = i2c_read();
}
if(state < 0x80)
{
x = i2c_read();
}
}
}
}
if(state==0x80){
i2c_write(buffer[0x02]);
output_high(PIN_A1);
}
}
}
}
CODIGO COMENTADO DEL
ESCLAVO
#include <16f887.h>
#fuses XT,NOMCLR
#use delay (clock=4000000)
#use I2C(Slave, SDA=PIN_C4 , SLOW,
SCL=PIN_C3, ADDRESS=0xa0,
NOFORCE_SW)
#include <LCD.c>
#include <kbd_lib.c>
#use standard_io(c)
#use standard_io(e)
void main() {
set_tris_b(0b00000011);
lcd_init();
kbd_init();
enable_interrupts(INT_SSP);
enable_interrupts(GLOBAL);
while (true) {
tecla2=kbd_getc();
if(tecla2!=0){
buffer[0x02]=tecla2;
///////////////
int8 tecla2;
int state;
// I2C var
Int8 x=0;
int8 buffer[0x03];
//int8 address;
#INT_SSP
void ssp_interrupt()
{ output_high(PIN_A2);
state=i2c_isr_state();
if(state <0x80)
if (buffer[0x02]=='0'){
printf(lcd_putc,"\fEnvio 0");}
if (buffer[0x02]=='1'){
printf(lcd_putc,"\fEnvio 1"); }
if (buffer[0x02]=='2'){
printf(lcd_putc,"\fEnvio 2");}
if (buffer[0x02]=='3'){
printf(lcd_putc,"\fEnvio 3");}
if (buffer[0x02]=='4'){
printf(lcd_putc,"\fEnvio 4");}
if (buffer[0x02]=='5'){
printf(lcd_putc,"\fEnvio 5");}
if (buffer[0x02]=='6'){
printf(lcd_putc,"\fEnvio 6");}
if (buffer[0x02]=='7'){
printf(lcd_putc,"\fEnvio 7");}
if (buffer[0x02]=='8'){
printf(lcd_putc,"\fEnvio 8");}
if (buffer[0x02]=='9'){
printf(lcd_putc,"\fEnvio 9");}
if (buffer[0x02]=='A'){
printf(lcd_putc,"\fEnvio A");}
if (buffer[0x02]=='B'){
printf(lcd_putc,"\fEnvio B");}
if (buffer[0x02]=='C'){
printf(lcd_putc,"\fEnvio C");}
if (buffer[0x02]=='D'){
printf(lcd_putc,"\fEnvio D");}
if (buffer[0x02]=='*'){
printf(lcd_putc,"\fEnvio *");}
if (buffer[0x02]=='#'){
printf(lcd_putc,"\fEnvio #");}
}
if(state<0x80)
{
if (x=='0'){
printf(lcd_putc,"\nRecibio 0");}
if (x=='1'){
printf(lcd_putc,"\nRecibio 1"); }
if (x=='2'){
printf(lcd_putc,"\nRecibio 2");}
if (x=='3'){
printf(lcd_putc,"\nRecibio 3");}
if (x=='4'){
printf(lcd_putc,"\nRecibio 4");}
if (x=='5'){
printf(lcd_putc,"\nRecibio 5");}
if (x=='6'){
printf(lcd_putc,"\nRecibio 6");}
if (x=='7'){
printf(lcd_putc,"\nRecibio 7");}
if (x=='8'){
printf(lcd_putc,"\nRecibio 8");}
if (x=='9'){
printf(lcd_putc,"\nRecibio 9");}
if (x=='A'){
printf(lcd_putc,"\nRecibio A");}
if (x=='B'){
printf(lcd_putc,"\nRecibio B");}
if (x=='C'){
printf(lcd_putc,"\nRecibio C");}
if (x=='D'){
printf(lcd_putc,"\nRecibio D");}
if (x=='*'){
printf(lcd_putc,"\nRecibio *");}
if (x=='#'){
printf(lcd_putc,"\nRecibio #");}
}
}
}
del motor y el encendido de luces logrando un sistema completo con los dos sensores
mencionados inicialmente.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
Motor dc
CAPTURAS PROTEUS
#define LCD_RW_PIN
#define LCD_DATA4
#define LCD_DATA5
#define LCD_DATA6
#define LCD_DATA7
#include <lcd.c>
#include <vinueza.c>
char tecla = 0;
PIN_A2
PIN_B2
PIN_B3
PIN_B4
PIN_B5
int z;
char rx;
void envio_I2C (){
i2c_start();
//inicio de la
comunicacin
i2c_write(0xa0); // direccin del
PIC esclavo
i2c_write(tecla); // Envia dato
i2c_stop();
//Finalizacin de la
transmisin
}
#INT_SSP
void Recepcion_I2C (){
if(i2c_poll()) {
rx=i2c_read();
printf (lcd_putc,"=%c ",rx);
}
}
void main(){
lcd_init();
kbd_init();
lcd_putc("\f I2C");
delay_ms(2000);
lcd_putc("\f Maestro");
delay_ms(100);
while(true){
tecla = kbd_getc();
if(tecla != 0){
if(tecla=='A'){
printf(lcd_putc,"\f Modo TX ");
delay_ms(100);
z=1;
}
if(tecla=='B'){
z=0;
printf(lcd_putc,"\f Modo RX ");
delay_ms(100);
enable_interrupts(GLOBAL); //habilita
interrupcion global
enable_interrupts(INT_SSP);
Recepcion_I2C();
}
if(tecla=='1'){
if(z==1){
printf(lcd_putc,"\f Enviado: 1
envio_I2C();
}
}
if(tecla=='2'){
if(z==1){
printf(lcd_putc,"\f Enviado: 2
envio_I2C();
}
}
if(tecla=='3'){
if(z==1){
printf(lcd_putc,"\f Enviado: 3
envio_I2C();;
}
}
if(tecla=='4'){
if(z==1){
printf(lcd_putc,"\f Enviado: 4
envio_I2C();
}
}
if(tecla=='5'){
if(z==1){
printf(lcd_putc,"\f Enviado: 5
envio_I2C();
}
}
if(tecla=='6'){
if(z==1){
printf(lcd_putc,"\f Enviado: 6
envio_I2C();
}
}
");
");
");
");
");
");
if(tecla=='7'){
if(z==1){
printf(lcd_putc,"\f Enviado: 7 ");
envio_I2C();
}
}
if(tecla=='8'){
if(z==1){
printf(lcd_putc,"\f Enviado: 8 ");
envio_I2C();
}
}
if(tecla=='9'){
if(z==1){
printf(lcd_putc,"\f Enviado: 9 ");
envio_I2C();
}
}
if(tecla=='0'){
if(z==1){
printf(lcd_putc,"\f Enviado: 0 ");
envio_I2C();
}
}
if(tecla=='C'){
if(z==1){
printf(lcd_putc,"\f Enviado: C ");
envio_I2C();
}
}
if(tecla=='D'){
if(z==1){
printf(lcd_putc,"\f Enviado: D ");
envio_I2C();
}
}
if(tecla=='#'){
if(z==1){
printf(lcd_putc,"\f Enviado: # ");
envio_I2C();
}
}
}
}
CODIGO COMENTADO ESCLAVO
#fuses XT, NOWDT, NOPROTECT //
fusibles de configuracion
#use delay (clock=4000000) // define
frecuencia de oscilador
#use rs232(baud=9600, xmit=pin_C6,
rcv=pin_C7, bits=8, parity=N)
#use I2C(Slave, SDA=PIN_C4 , SLOW,
SCL=PIN_C3, ADDRESS=0xa0,
NOFORCE_SW)
#use pwm(ccp1,frequency=2K,
duty=50)
#define use_portd_lcd TRUE
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B2
#define LCD_E PIN_B3
#include <lcd1.c>
#use standard_io(d)
void main() {
int DATO;
int t;
int u;
lcd_init();
lcd_gotoxy(1,1);
printf (lcd_putc,"Esclavo ");
PUTS ("UTA - FISEI");
while (1) {
// Recepcin por comunicacin I2C
if(i2c_poll()) {
DATO=i2c_read();
if(DATO!=0){
if(DATO==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Apagado
");
u=0;
t=0;
PUTS ("");
PUTS ("Sistema Apagado ");
PUTS ("Aplicacion Finalizada ");
PUTS ("");
}
if(DATO==2){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Encendido
");
t=0;
u=0;
PUTS ("");
PUTS ("Sistema Iniciado");
PUTS ("");
}
if(DATO==3){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Aplicacion 1
");
t=1;
u=0;
PUTS ("");
PUTS (" Aplicacion de
temperatura");
PUTS (" Actualizar datos");
PUTS ("");
output_low(pin_d0);
output_low(pin_d1);
output_low(pin_d2);
output_low(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
if(DATO==4){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Aplicacion 2
");
t=0;
u=1;
PUTS ("");
}
if (dato<20) {
if(t==1){
pwm_set_duty_percent(150);
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Duty 15
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion De
Temperatura");
PUTS ("Velocidad uno");
PUTS ("Duty 15 ");
}
}
if (dato>20){
if(dato<25) {
if(t==1){
pwm_set_duty_percent(500);
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Duty 50
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion De
Temperatura");
PUTS ("Velocidad dos");
PUTS ("Duty 50 ");
}
}
}
if (dato>26) {
if(t==1){
pwm_set_duty_percent(900);
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Duty 90
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion De
Temperatura");
PUTS ("Velocidad tres");
PUTS ("Duty 90 ");
}
}
if (dato <= 4){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_low(pin_d1);
output_low(pin_d2);
output_low(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 8){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_low(pin_d2);
output_low(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 23){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_high(pin_d5);
output_high(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 29){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_high(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 26){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_high(pin_d5);
output_high(pin_d6);
output_high(pin_d7);
}
}
}
}
}
}
TEMA:
COMUNICACIN I2C MEDIANTE COMUNICACION RS232 DESDE EL SCLAVO
CON UNA ETAPA DE SENSORIZACION
DESCRIPCION
El siguiente programa tiene por objetivo disear un lenguaje de programacin que
cumpla con los parmetros siguientes: utilizar un microcontrolador pic como maestro al
cual est conectado un teclado matricial y una pantalla lcd que indique las aplicaciones
de sensor lm35 o sensor de proximidad comunicado mediante el protocolo SPI a un
esclavo que tenga comunicacin directa con la pc mediante RS232 y vare la velocidad
del motor y el encendido de luces logrando un sistema completo con los dos sensores
mencionados inicialmente.
MATERIALES
1 Pantalla LCD
1 PIC 16F887
1 Fuente de alimentacin (5v)
1 Protoboard
Diodos Led
Potencimetro
Motor dc
CAPTURAS PROTEUS
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){
");
");
");
");
");
");
");
lcd_gotoxy(1,1);
printf (lcd_putc,"Esclavo ");
PUTS ("UTA - FISEI");
while (1) {
// Recepcin por comunicacin I2C
if(i2c_poll()) {
DATO=i2c_read();
if(DATO!=0){
if(DATO==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Apagado
");
u=0;
t=0;
PUTS ("");
PUTS ("Sistema Apagado ");
PUTS ("Aplicacion Finalizada ");
PUTS ("");
}
if(DATO==2){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Encendido
");
t=0;
u=0;
PUTS ("");
PUTS ("Sistema Iniciado");
PUTS ("");
}
if(DATO==3){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Aplicacion 1 ");
t=1;
u=0;
PUTS ("");
PUTS (" Aplicacion de temperatura");
PUTS (" Actualizar datos");
PUTS ("");
output_low(pin_d0);
output_low(pin_d1);
output_low(pin_d2);
output_low(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
if(DATO==4){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Aplicacion 2 ");
t=0;
u=1;
PUTS ("");
PUTS (" Aplicacion de temperatura");
PUTS (" Actualizar datos");
PUTS ("");
}
else{
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
}
if (dato<20) {
if(t==1){
pwm_set_duty_percent(150);
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Duty 15
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion De Temperatura");
PUTS ("Velocidad uno");
PUTS ("Duty 15 ");
}
}
if (dato>20){
if(dato<25) {
if(t==1){
pwm_set_duty_percent(500);
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Duty 50 ");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion De Temperatura");
PUTS ("Velocidad dos");
PUTS ("Duty 50 ");
}
}
}
if (dato>26) {
if(t==1){
pwm_set_duty_percent(900);
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Duty 90
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion De Temperatura");
PUTS ("Velocidad tres");
PUTS ("Duty 90 ");
}
}
if (dato <= 4){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_low(pin_d1);
output_low(pin_d2);
output_low(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 8){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_low(pin_d2);
output_low(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 11){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_low(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 15){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_low(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 19){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_low(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 23){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_high(pin_d5);
output_low(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 26){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_high(pin_d5);
output_high(pin_d6);
output_low(pin_d7);
}
}
if (dato >= 29){
if(u==1){
lcd_gotoxy(1,1);
printf(lcd_putc,"\f Ultrasonico
");
lcd_gotoxy(1,2);
printf(lcd_putc,"%i ",DATO);
PUTS ("Medicion de distancia");
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_high(pin_d3);
output_high(pin_d4);
output_high(pin_d5);
output_high(pin_d6);
output_high(pin_d7);
}
}
}
}
}
}
CUESTIONARIO
MICROCONTROLADORES
Respuesta: A
Justificacin: El microprocesador es un dispositivo de propsito de propsito General.
Referencia: Curso de Ingeniera Tcnica en Informtica de Sistemas.
Dificultad: Media
2.
Respuesta: B
Justificacin: El microcontrolador es un dispositivo de propsito Especfico.
Referencia: Curso de Ingeniera Tcnica en Informtica de Sistemas.
Dificultad: Media
3.
Comunicacin
Capacidad
Aplicaciones
Arquitectura
Respuesta: D
Justificacin: Al microcontrolador est delimitado por la arquitectura que posee.
Referencia: Mdulo de Microcontroladores.
Dificultad: Media
4.- Ordene:
1.
2.
3.
4.
A. 4,2,3,1
B. 4,3,2,1
C. 4,1,3,2
D. 4,1,2,3
Respuesta: A
Justificacin: El microcontrolador no tiene la capacidad de ejecutar aplicaciones y el Microcontrolador
ejecuta aplicaciones por s mismo
Referencia: Mdulo de Microcontroladores.
Dificultad: Media
5.- El microprocesador se utiliza para la parte informtica, y el microcontrolador para la parte:
A. Digital
B. Electrnica
C. Robtica
D. Todas las anteriores
Respuesta: C
Justificacin: El microprocesador se utiliza para la parte informtica, y el microcontrolador para la parte
electrnica
Referencia: Mdulo de Microcontroladores.
Dificultad: Media
B. La arquitectura de Ven
Respuesta: A
Justificacin: Es la arquitectura que utilizan la mayora de computadoras moderadas para administrar o
gestionar las interrupciones de dispositivos externos como ratn, teclado, etc.
Referencia:https://www.academia.edu/8951985/Arquitectura_de_Computadores_Von_Newman_.
Dificultad: Media
D. La arquitectura de Harvard es una familia de las arquitecturas de computadoras que utilizan una
misma instruccin para todo tipo de datos.
Respuesta: B
Justificacin: Es la arquitectura que almacena en cachs separados para mejorar el rendimiento.
Referencia: http://comping.galeon.com/productos2326864.html.
Dificultad: Media
8.-De las siguientes caractersticas de microprocesadores basados en la arquitectura CISC (Complex
Instruction Set Computer), una no pertenece a este tipo. Indique cul es sta:
A. Reduce la dificultad de crear compiladores.
B. La CPU trabaja ms rpido al utilizar menos ciclos de reloj para ejecutar instrucciones
C. Reduce los costos de creacin de software.
D. Mejora la compactacin de cdigo.
Respuesta: B
Justificacin: En una arquitectura CISC, al ser un conjunto de instrucciones complejas, cada instruccin
toma de 4 a 10 ciclos de reloj para su ejecucin. La opcin marcada corresponde a un microprocesador de
arquitectura RISC, que slo toma un ciclo de reloj para realizar una instruccin.
Referencia: Gualdrn Gamarra, A., & Pinilla, J. P. (2015). Plataforma para la emulacin y
reconfiguracin de arquitecturas CISC Y RISC..
Dificultad: Media
9.- La siguiente descripcin: Este conjunto de seales se usa para sincronizar las actividades y
transacciones con los perifricos del sistema. Algunas de estas seales, como R/W, son seales que la
CPU enva para indicar qu tipo de operacin se espera en ese momento; a cul de las de las opciones a
continuacin corresponde::
A. Bus de direcciones.
B. Bus de estado.
C. Bus de datos.
D. Bus de control
Respuesta: D
Justificacin: El bus de control transporta datos respecto de las operaciones que se encuentra realizando el
CPU. Los perifricos tambin pueden remitir seales de control a la CPU, como son INT, RESET, BUS
RQ.
Referencia Rossano, V. (2013). Electrnica & microcontroladores PIC. USERSHOP.
Dificultad: Media
Respuesta: C
Justificacin: La evolucin de la arquitectura de los microcontroladores inicia con el Von Neumann (su
utilizacin era muy compleja), despus de un tiempo se crea la arquitectura segmentada (hacia ms fcil
su utilizacin) pero esto no era suficiente, entonces aparece la arquitectura Harvard ayudando al usuario
optimizar tiempo y ahorrar recursos por ende hace que el funcionamiento sea ms eficiente. El balanceo
de carga permite que el router reenve paquetes a la misma red de destino a travs de varias rutas.
Referencia: Microcontroladores: http://www.unicrom.com/Tut_arquitectura_microcontrolador.asp.
Dificultad: Media-Alta
13.- El comando para cambiar el porcentaje del ancho de banda que se usa en EIGRP es:
A. Router(config-if)#bandwith percent eigrp as-number percent
B. Router(config)#bandwith percent eigrp as-number percent
A. Datos-CPU-Programa
B. CPU-Datos-Programa
C. Programa-Datos-CPU
D. Programa-CPU-Datos
Respuesta: D
Justificacin: La arquitectura Harvard utiliza memorias separadas para programas en la memoria ROM y
datos en la memoria RAM, los cuales se conectan a la CPU mediante los buses dedicados de instruccin,
direccin y control.
Referencia: Fernando Valds. Ramon Palls. Microcontroladores: Fundamentos y aplicaciones con PIC,
pp. 23, Primera Edicin. Marcombo, S. A. 2007.
Dificultad: Media
A.- Reset
B.- Power
C.- MCLR
D.- WDT
Respuesta: C
Justificacin: El pin de reset en los PIC es llamado MCLR (master clear).
Referencia: http://www.utp.edu.co/~eduque/arquitec/PIC16F877.pdf.
Dificultad: Media
17.- Cuantos Puertos tiene en Pic 16f887?.
A. 3
B. 4
C. 2
D. 6
Respuesta: B
Justificacin: El pic 16887 tiene cuatro puertos de entrada y salida (A, B, C, D).
Referencia: http://www.mikroe.com/chapters/view/81/capitulo-3-microcontrolador-pic16f887/#c3v3.
Dificultad: Media
18.- Cual es el nico puerto en el pic 16f887 que tiene resistencias pull ups?:
A. D
B. A
C. B
D. Ninguna de las anteriones
Respuesta: C
Justificacin: el nico puerto en el pic 16f887 que tiene resistencias pull ups es el puerto B.
Referencia: http://www.mikroe.com/chapters/view/81/capitulo-3-microcontrolador-pic16f887/#c3v3.
Dificultad: Media
19.-El mdulo del temporizador Timer0 es un temporizador/contador de _______.
A.
B.
C.
D.
16 bits
32 bits
8 bits
Ninguna de las anteriores
Respuesta: C
Justificacin: El mdulo del temporizador Timer0 es un temporizador/contador de 8 bits.
Referencia: http://www.mikroe.com/chapters/view/81/capitulo-3-microcontrolador-pic16f887/#c3v3.
Dificultad: Media
A. 16 bits
B. 32 bits
C. 8 bits
D. Ninguna de las anteriores
Respuesta: A
Justificacin: El mdulo del temporizador Timer1 es un temporizador/contador de 16 bits.
Referencia: http://www.mikroe.com/chapters/view/81/capitulo-3-microcontrolador-pic16f887/#c3v3.
Dificultad: Media
A.- 8 bits
B.- 16 bits
C.- 32 bits
D.- 64 bits
Respuesta: C
Justificacin: el rango en CCS del tipo de dato float es 32 bits.
Referencia: http://www.puntoflotante.net/VARIABLES%20ARREGLOS.htm.
Dificultad: Media
A.- SUMWF
B.- MORWR
C.- ADDWF
D.- Ninguna De las anteriores
Respuesta: D
Justificacin: el juego de instrucciones que permite sumar W y f es ADDWF.
Referencia: http://web.udl.es/usuaris/p7806757/ensamblador.html.
Dificultad: Media
A.- NOP
B.- NOPE
C.- OPN
D.- Ninguna de las anteriores
Respuesta: A
Justificacin: el juego de instrucciones que permite.
Referencia: http://web.udl.es/usuaris/p7806757/ensamblador.html.
Dificultad: Media
37.- Librera Fast_IO, afecta al cdigo que el compilador generar para las instrucciones de entrada y
salida. Este mtodo rpido de hacer I/O ocasiona que el compilador realice I/O sin programar el registro
de direccin. Seleccione su correcta sintaxis:
A.- #use fast_io(A)
B.- #use fast_io (puerto)
C.- # fast_io (puerto)
D.- fast_io_b( 0x0F );
Respuesta: B
Justificacin: Librera Fast_IO: Esta directiva afecta al cdigo que el compilador generar para las
instrucciones de entrada y salida. Este mtodo rpido de hacer I/O ocasiona que el compilador realice
I/O sin programar el registro de direccin. El puerto puede ser A-G.
Sintaxis:
#use fast_io (puerto)
Referencia:
Librera
fast_io.
Disponible
en:
https://www.google.com.ec/url?
sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CCoQFjAC&url=http%3A%2F
%2Fwww.robozes.com%2Fpresentaciones%2FCCS.ppt&ei=D5JYVYD8OG9ygPrz4H4Bg&usg=AFQjCNGkGhzQbhyjLimJo1CNdfScmKHXg&sig2=kQoMBO1lkGuLPzSY1N0Ymg.
Dificultad: Media
38.- Para configurar un cristal oscilador de 4Mhz o el oscilador interno del PIC Qu fusible debe ser
activado?
A.- #FUSES XT
B.- # FUSES HS
C.- # FUSES LP
D.- Ninguna de las anteriones
Respuesta: A
Justificacin: Es un acrnimo que viene de XTAL (o cristal en castellano). Este modo de funcionamiento
implica que tendremos que disponer de un cristal de cuarzo externo al Pic y dos condensadores pero
tambin se puede hacer uso del oscilador interno que trabaja en el rango de 31Khz a 8Mhz a. El valor del
cristal generalmente ser de 4Mhz o 10Mhz, y los condensadores sern cermicos de entre 27 y 33 nF. La
exactitud de este dispositivo es muy muy alta, por lo que lo hace muy recomendable para casi todas las
aplicaciones..
Referencia: Rueda Luis, Ero-Pic, Microcontroladores PIC-Fuses del PIC 16F84/C84,2013, Disponible en:
http://perso.wanadoo.es/luis_ju/pic/pic_fuse.html.
Dificultad: Media
39.- Qu funcin cumple la librera FAST_I/O al ser declarado como directiva?
A.- La directiva FAST_I/O afecta al cdigo que el compilador generar para las instrucciones de entrada,
es el mtodo rpido de hacer que I/O ocasiona que el compilador realice I/O sin programar el registro de
direccin.
B.- La directiva FAST_I/O afecta al cdigo que el compilador generar para las instrucciones de salida,
es el mtodo rpido de hacer que I/O ocasiona que el compilador realice I/O sin programar el registro de
direccin.
C.- c. La directiva FAST_I/O afecta al cdigo que el compilador generar para las instrucciones de
entrada y salida, es el mtodo rpido de hacer que I/O ocasiona que el compilador realice I/O sin
programar el registro de direccin.
D.- Ninguna de las anteriores.
Respuesta: C
Justificacin: La funcin que cumple es de declarar entradas y salidas de manera rpida sin programar el
registro de direccin, generando las instrucciones de entrada y salida..
Referencia: Cnovas Lpez Andrs, C Compiler for Microchip PICmicro MCUs-Manual de usuario del
compilador PCW de CCs,-FAST_I/O.
Dificultad: Media
puertos y debe ser usado con FAST_IO() y cuando se accede a los puertos de I/O como si fuera memoria
Respuesta: D
Justificacin: Estas funciones permiten escribir directamente los registros tri-estado para la configuracin
de los puertos. Esto debe usarse con FAST_IO() y cuando se accede a los puertos de I/O como si fueran
memoria, igual que cuando se utiliza una directiva #BYTE. Cada bit de value representa una patilla. Un
'1' indica que la patilla es de entrada y un '0' que es de salida.
Referencia: Cnovas Lpez Andrs, C Compiler for Microchip PICmicro MCUs-Manual de usuario del
compilador PCW de CCs,-FAST_I/O.
Dificultad: Media
A.Memorias y Datos
B.Buses y Registros
C.Interrupciones y Fusibles
D.- Mdulos y Perifricos
Respuesta: D
Justificacin: Microcontrolador es un circuito integrado que contiene todos los componentes de un
sistema micro-programable (CPU, memoria ROM y RAM, Mdulo de E/S, Perifricos y Buses de
interconexin). La gran ventaja que presenta un microcontrolador frente a un microprocesador es la
inclusin de diversos mdulos y perifricos que permiten que el microcontrolador realice funciones
completas sin necesidad de elementos externos ms all de cristal y un oscilador.
Referencia: Jos Miguel Pay Abad. Microcontroladores y Desarrollo de proyectos de productos
electrnicos, Desarrollo de productos electrnicos.
Dificultad: Media
45.- Una interrupcin es un ______que hace que el microcontrolador deje de ejecutar la ________que
est realizando para atender dicho acontecimiento y luego regrese y contine la tarea que estaba
realizando antes de que se presentara la interrupcin.
50.- Comando de configuracin necesaria para encender el nible alto y apagar el nible bajo del puerto D
es:
A.-set_tris_d(0xF0)
B.- settris_d(0xF0);
C.- set_tris_d(0xF0);
D.- set_trisd(0xF0);
Respuesta: C
Justificacin: Comando de configuracin necesaria para encender el nible alto y apagar el nible bajo del
puerto D es: set_tris_d(0xF0);
Referencia: Mdulo de Microcontroladores.
Dificultad: Media
b) Sensor infrarrojo
c) Sensor de temperatura
d) Sensor de fuerza
Respuesta: b
Justificacin: Un sensor infrarrojo emite un haz de luz invisible para el ojo humano, que se
refleja en una superficie adyacente (3-15mm) y capturado por el fototransistor, que tiene una
pelcula de filtrado de luz natural, que permite el paso de infrarrojos emitida por los LED. Por
lo tanto, de acuerdo con la reflectividad de la superficie, el fototransistor recibe un valor mayor
o menor de la reflexin.
Fuente: http://www.x-robotics.com/sensores.htm
Nivel de dificultad: Fcil
52. Las siguientes aplicaciones: sistemas de alarma de intrusin, puertas automticas y sensores
de copia de seguridad para automviles pueden ser realizadas con un sensor ultrasnico
verdadero o falso justifique.
a) verdadero
b) Falso
c) Ninguna de las Anteriores
d) Sin Justificacin
Respuesta: a
Justificacin: Un sensor ultrasnico transmite ondas ultrasnicas en el aire y detecta las ondas
reflejadas desde un objeto. Hay muchas aplicaciones para sensores de ultrasonidos, tales como
en sistemas de alarma de intrusin, puertas automticas y sensores de copia de seguridad para
automviles.
Fuente: http://stevenengineering.com/Tech_Support/PDFs/32USONIC .pdf.
Nivel de dificultad: Fcil
53. Qu enunciado es correcto?
a) Funciona mediante la recepcin de una rfaga de ultrasonido en una frecuencia muy por
encima del rango auditivo humano y provee un pulso de salida.
a) Funciona mediante la recepcin de una rfaga de ultrasonido en una frecuencia muy por
debajo del rango auditivo humano y provee un pulso de salida.
c) Funciona mediante la transmisin de una rfaga de ultrasonido en una frecuencia muy por
encima del rango auditivo humano y provee un pulso de salida.
Respuesta: d
Justificacin.- Funciona mediante la transmisin de una rfaga de ultrasonido en una frecuencia
muy por encima del rango auditivo humano y provee un pulso de salida, el cual corresponde con
el tiempo requerido por el eco (rebote) para retornar hasta el sensor.
Fuente: http://stevenengineering.com/Tech_Support/PDFs/32USONIC .pdf.
Nivel de Dificultad: Fcil
54. Defina las 4 caractersticas principales para un trabajo ptimo de sensores?
b) La influencia de las seales de ruido as como los efectos de carga del hardware de
adquisicin de datos sobre el sensor.
c) La calibracin del sensor con respecto a la variable fsica. Si la respuesta del sensor a los
cambios de la variable fsica es lineal o no. Una calibracin mal hecha va a producir
mediciones errneas.
Rango: 2 cm a 3 m
Interfaz bidireccional por pulso, en un nico pin de E/S para comunicacin con
serie
LM35
es
la
precisin
de
circuitos
integrados
de
serie
LM35
es
la
precisin
de
circuitos
integrados
de
Katerin
Jacome
http://es.scribd.com/doc/113120204/Caracterizacion-Sensor-
Lm35#scribd
Nivel de Dificultad: Medio
58. Que nos permite medir un transductor y por qu motivo
a) Energa lumnica, acstica, presin, elctrica, caudal
b) Energa calrica, , acstica, , movimiento, caudal
c) Energa calrica, lumnica, acstica, presin, movimiento, caudal
d) Energa calrica, temperatura , presin, movimiento, caudal
Respuesta: c
Justificacin.- Un transductor es un dispositivo que convierte energa de tipo calrica, lumnica,
acstica, presin, movimiento, caudal, etc. a otra generalmente elctrica para poder medirla y
eventualmente controlarla en forma relativamente fcil.
Fuente:CAPITULOVIISENSORES,http://www.unet.edu.ve/~ielectro/sensores.pdf
Nivel de Dificultad: Medio
59. Complete
Fuente: http://www.x-robotics.com/sensores.htm
Dificultad: Moderado
En la Red elctrica
c)
En los bobinados
d)
e) Respuesta: a
f) Justificacin: Un motor para funcionar se vale de las fuerzas de atraccin y repulsin que
existen entre los polos.
g) Fuente: Maquinas Elctricas - Chapman
h) Nivel de dificultad: Fcil
63. El principio que Andr Ampre establece: que si una corriente pasa a travs de un conductor
situado en el interior de un campo magntico, ste ejerce una fuerza. sobre el conductor.
a) Elctrica.
b) Mecnica.
c) Magntica.
d) Electromagntica.
i)
Respuesta: b
j)
Justificacin.- Y el principio que Andr Ampre observo en 1820, en el que establece: que si
una corriente pasa a travs de un conductor situado en el interior de un campo magntico,
ste ejerce una fuerza mecnica o f.e.m. (fuerza electromotriz), sobre el conductor.
k) Fuente: Maquinas Elctricas - Chapman
l) Nivel de Dificultad: Fcil
64. Los dispositivos mas conocidos de la familia de los tiristores para aplicaciones de potencia
son:
a) TRANSISTOR, TRIAC.
b) TRANSISTOR, GTO, SRC.
c) SCR, GTO.
d) SCR, TRIAC, GTO
m)
Respuesta: d
c) 3 SRC en paralelos.
d) 3 SRC en serie.
i)
Respuesta: a
j)
68. Los tiristores constituyen una familia de dispositivos, pero donde todos los elementos que la
componen se basan?
a) En otros principios de funcionamiento
b) En el funcionamiento de los transistores
c) En el mismo principio de funcionamiento
d) En distintos tipos de funcionamientos
m) Respuesta: c
n) Justificacin.- Los tiristores constituyen una familia de dispositivos que pueden tomar
diferentes nombres y caractersticas, pero donde todos los elementos que la componen se
basan en el mismo principio de funcionamiento
o) Fuente: Antonio Nachez - Caractersticas y principios de funcionamiento
p)
69. La parte positiva de la onda (semiciclo positivo) pasar por el triac siempre y cuando haya
habido una?
a) Seal Positiva.
b) Seal Negativa.
c) Seal de disparo en la compuerta.
d) Seal Positiva y negativa.
q) Respuesta c
r) Justificacin: La parte positiva de la onda (semiciclo positivo) pasar por el triac siempre y
cuando haya habido una seal de disparo en la compuerta, de esta manera la corriente
circular de arriba hacia abajo (pasar por el tiristor que apunta hacia abajo).
s) Fuente: Antonio Nachez - Caractersticas y principios de funcionamiento
t)
Dificultad: Medio
70. En que patilla del TRIAC se puede obtener la seal en cualkiera de los 2 semiciclos
(positivo y negativo)?
a) Anodo 1.
b) Compuerta.
c) Anodo 2.
d) No se puede medir en ninguna patilla.
u) Respuesta b
v) Justificacin: Para los semiciclos la seal de disparo se obtiene de la misma patilla (la
puerta o compuerta).
w) Fuente: Antonio Nachez - Caractersticas y principios de funcionamiento
x) Dificultad: Moderado
y)
d) Serie
am)Respuesta: d
an) El estndar SPI es utilizado para la comunicacin serial entre dispositivos. Se trata de un
enlace de datos en serie, sncrono, y que opera en modo full dplex, es decir, las seales de
datos viajan en ambas direcciones en forma simultnea.
ao) Nivel de dificultad: Medio
ap) Fuente:
Estndar
SPI,
Comunicacin
SPI
[Online]
Disponible
en:
http://www.puntoflotante.net/COMUNICACION-SPI-TUTORIAL.htm
74. Elija la respuesta correcta
aq) Que funciones debe cumplir los cuatro pines asociados al mdulo SPI?
a) SS, SPSCK, MOSI, MISO
b) MOSI y MISO
c) MOSI, MISO Y SS
d) SS y SPSCK
ar) Respuesta: a
as) Mientras el bit SPE est seteado, los cuatro pines asociados al mdulo SPI deben cumplir
las funciones de:
Estndar
SPI,
Comunicacin
SPI
[Online]
Disponible
http://www.puntoflotante.net/COMUNICACION-SPI-TUTORIAL.htm
75. Elija la respuesta correcta
aw) Cul es el modo bidireccional de SPI?
a) Duplex
b) Half Duplex
c) Full Duplex
d) Full Full Duplex
ax) Respuesta: c
ay) El mdulo SPI incluye las siguientes caractersticas:
en:
I2C,
2007,
Robots Argentina,
[Online]:
Disponible
en:
http://robots-argentina.com.ar/Comunicacion_busI2C.htm
77. Describa que tipos de seales utiliza la comunicacin I2C.
a) SCL-SDA-GND
b) MSB-SCL-GND
c) MOSI-SDA-GND
d) GND-MISO-MOSI
bh) Respuesta: a
bi) Justificacin: Las seales que utiliza son:
bj) SCL (System Clock) es la lnea de los pulsos de reloj que sincronizan el sistema.
bk) SDA (System Data) es la lnea por la que se mueven los datos entre los dispositivos.
bl) GND (Masa) comn de la interconeccin entre todos los dispositivos "enganchados" al bus.
bm)Nivel de dificultad: Media
bn) Fuente: Eduardo J. Carletti, Descripcin y funcionamiento de la Comunicacin I2C,
2007,
Robots
Argentina,
[Online]:
Disponible
http://robotsargentina.com.ar/Comunicacion_busI2C.htm
78. Cul es la funcin que desempean las seales en la comunicacin I2C?
en:
a) Las lneas SDA (serial Data) y SCL (serial Clock) son bidireccionales,
conectadas al positivo de la alimentacin a travs de las resistencias
de pull-up. Cuando el bus est libre, ambas lneas estn en nivel alto.
b) Las lneas SDA (serial Data) y SCL (serial Clock) son unidireccionales,
conectadas al positivo de la alimentacin a travs de las resistencias.
c) Las lneas SDA (serial Data) y SCL (serial Clock) son bidireccionales,
conectadas a la alimentacin a travs de las resistencias de pulldown.
d)
bo) Respuesta: a
bp) Justificacin.- Las lneas SDA (serial Data) y SCL (serial Clock) son bidireccionales,
conectadas al positivo de la alimentacin a travs de las resistencias de pull-up. Cuando el
bus est libre, ambas lneas estn en nivel alto.
bq) Nivel de Dificultad: Media
br) Fuente: Eduardo Coquet Comunicacin del Bus I2C, Comunidad de Electrnicos,
[Online]: Disponible en: http://www.comunidadelectronicos.com/articulos/i2c.htm
79. Cul es la funcin del maestro y esclavo?
a) El Maestro sincroniza las seales de reloj y el Esclavo recibe
datos desde el bus.
b) Maestro genera las seales de reloj y termina un envi de
datos y el Esclavo, es direccionado por el multi-maestro.
c) Maestro controla la corrupcin de mensajes y el Esclavo
genera las seales de reloj.
d) Maestro genera las seales de reloj y termina un envi de
datos y el Esclavo, es direccionado por el maestro.
bs) Respuesta: d
bt) Justificacin.- Maestro genera las seales de reloj y termina un envi de datos y el Esclavo,
es direccionado por el maestro.
bu) Nivel de Dificultad: Difcil
bv) Fuente: Eduardo J. Carletti, Comunicacin Bus I2C, Robots. Pasin por la robtica en
Argentina, 2008
80. Elija que velocidad y voltaje maneja el bus I2C.
a) Velocidades hasta de 2.5MHz/s con voltajes de 2V a 5V.
1(1.3
Detalles
Importantes),
1998,
http://www.comunidadelectronicos.com/articulos/i2c.htm
ca)
[Online]:
Disponible
en:
802.11n
G. 802.15.4
H. 802.4.15
cc)
cd) Respuesta: C
ce)
cf) Justificacin: La tecnologa ZigBee (basada en el IEEE 802.15.4) se est consolidando como un
estndar de comunicaciones relativamente nuevo muy similar al Bluetooth (IEEE 802.15.1).
cg) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
en:
http://eprints.ucm.es/8922/1/memoria.pdf
ch) Nivel de Dificultad: Moderado
82. De cuntos nodos como mximo puede contar una red Zigbee?
E. 192
F.
G. 255
H. 512
ci)
cj) Respuesta: C
ck)
cl) Justificacin: Una red ZigBee puede constar de un mximo de 255 nodos, frente a los 8 mximos de
una red Bluetooth.
cm) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
en:
http://eprints.ucm.es/8922/1/memoria.pdf
cn) Nivel de Dificultad: Moderado.
83. Por qu el consumo elctrico en Zigbee es menor que en Bluetooth?
co)
A. El dispositivo se queda dormido la mayor parte de tiempo
B. El dispositivo est siempre transmitiendo y/o recibiendo
C. El dispositivo siempre est trabajando
D. Ninguna de las anteriores
cp)
cq) Respuesta: A
cr) Justificacin: Menor consumo elctrico en sistemas ZigBee que en Bluetooth. Esto se debe a que el
dispositivo ZigBee se queda la mayor parte del tiempo dormido, mientras que en una comunicacin
Bluetooth esto no se puede dar, y siempre se est transmitiendo y/o recibiendo.
cs)
ct) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
en:
http://eprints.ucm.es/8922/1/memoria.pdf
cu) Nivel de Dificultad: Fcil
84. Cul es el ancho de banda con el que trabaja Zigbee?
cv)
E. 256kbps
F.
156kbps
G. 64kbps
H. 250kbps
cw)
cx) Respuesta: D
cy)
cz) Justificacin: El estndar ZigBee tiene un ancho de banda de 250 kbps, mientras que el Bluetooth
tiene 1 Mbps.
da)
db) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
en:
http://eprints.ucm.es/8922/1/memoria.pdf
dc) Nivel de Dificultado: Moderada
85. Cul es el rango de operacin que tiene Zegbee?
dd)
A. 1 a 100m
B. 10 a 75m
C. 40m a 100 m
D. 30 a 50m
de)
df) Respuesta: B
dg)
dh)Justificacin: ZigBee tiene un rango de operacin de 10 a 75 m, respecto al de 1 a 100 m de Bluetooth
di)
dj) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
en:
http://eprints.ucm.es/8922/1/memoria.pdf
dk) Nivel de Dificultad: Fcil
dl)
dm)
dn)
86. Seleccione los 4 tipos de tramas del nivel fsico (tramas del IEEE 802.15.4) que tiene Zegbee?
do)
A. Datos, reconocimiento, comandos MAC, piloto.
A. Sirve para confirmar el xito en la recepcin y para validar las tramas de datos y los comandos
MAC. El campo de control en el frame (Frame Control) indica si se espera un ACK o no.
a)
B. Permite verificar la integridad de los datos llamados FCS (Frame Check Sequence) y se incluye
un nmero de secuencia para permitir el reensamblado y la retransmisin.
b)
C. Esta es una trama que permite el control y la configuracin de los nodos as como la formacin
de la red.
c)
D. Son el direccionar a varios dispositivos para que enven informacin, permitir mantener a los
nodos sincronizados sin tener que escuchar permanentemente el canal
dy)
dz) Respuesta: B
ea)
eb) Justificacin: Se permiten hasta 102 bytes como mximo para datos (n) MAX=102 bytes, se incluyen
2 bytes para verificar la integridad de los datos llamados FCS (Frame Check Sequence) y se incluye
un nmero de secuencia para permitir el reensamblado y la retransmisin.
ec)
ed) Fuente: Zigbee: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
ee) Nivel de Dificultad: Moderado
88. Cules son las principales funciones que garantiza Zegbee de la trama de comando MAC a nivel
fisico?
ef)
A. Recepcin, tramas de datos y los comandos MAC, indicacin de calidad del enlace, deteccin
de actividad del canal, RX y TX de datos.
d)
C. Control y la configuracin de los nodos, deteccin de energa, indicacin de calidad del enlace.
D. Activacin y desactivacin de nodos, deteccin de energa, indicacin de calidad del enlace,
deteccin de actividad del canal, RX y TX de datos.
eg)
eh) Respuesta: D
ei)
ej) Justificacin: Esta es una trama que permite el control y la configuracin de los nodos as como la
formacin de la red. Para ello, el estndar contempla 26 directivas para garantizar principalmente las
siguientes funciones a nivel fsico:
ek)
el) Activacin y desactivacin de nodos
em) Deteccin de energa
en) Indicacin de calidad del enlace
eo) Deteccin de actividad del canal
ep) RX y TX de datos.
eq)
er) Fuente: Zigbee: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
es) Nivel de Dificultad: Moderado
et)
89. Seleccione el par de palabras correctas, para completar el siguiente enunciado?
eu)
ev) ZigBee opera en las bandas libres de 2.4Ghz,
y
ew)
A.
B.
C.
D.
ex)
ey) Respuesta: C
ez)
fa) Justificacin: ZigBee opera en las bandas libres de 2.4Ghz, 858Mhz para Europa y 915Mhz para
Estados Unidos.De acuerdo al protocolo 802 (incluyendo ZigBee).
fb)
fc) Fuente: Zigbee: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
fd) Nivel de Dificultad: Moderado
90. Seleccione los equipos o los dispositivos con los que Zigbee trabaja, segn su papel en la red?
fe)
A. Coordinador ZigBee (ZigBee Coordinator, ZC), Router ZigBee (ZigBee Router, ZR),
Dispositivo final (ZigBee End Device, ZED).
B. Enrutador ZigBee (ZigBee router, ZC), HUB ZigBee (ZigBee HUB, ZR), Dispositivo final
(ZigBee End Device, ZED).
D. HUB ZigBee (ZigBee HUB, ZR), Coordinador ZigBee (ZigBee Coordinator, ZC), Router
ZigBee (ZigBee Router, ZR).
ff)
fg) Respuesta: A
fh)
fi) Justificacin: los equipos o los dispositivos con los que Zigbee trabaja, segn su papel en la red son
tres: Coordinador ZigBee (ZigBee Coordinator, ZC), Router ZigBee (ZigBee Router, ZR),
Dispositivo final (ZigBee End Device, ZED).
fj)
fk) Fuente: Zigbee: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
fl) Nivel de Dificultad: Moderado
fm)
B. 3, 4, 5
C. 1,4, 5
D. 2, 4, 5
ga)
gb)
gc)
gd)
ge)
gf)
gg)
gh)
gi)
gj)
gk)
gl)
Respuesta: D
A continuacin, podemos resumir los principales objetivos que se desean conseguir con esta norma:
de
http://www.elec-
A.
B.
C.
D.
go)
gp)
gq)
gr)
gs)
gt)
Respuesta: A
Composicin del paquete:
Cdigo de acceso (72 bits): Es usado para sincronizacin, identificacin y compensacin.
Cabecera (54 bits): Contiene informacin del control de enlace con 6 campos:
Campo de datos o carga til (hasta 2746 bits): Contiene el conjunto de datos que supone la
informacin a transmitir
gu) FUENTE: S.A., E. (s.f.). Electro componentes S.A. Obtenido de http://www.electrocomponentes.com/
gv) Nivel de Dificultad: Moderado
94. Elija tres de los 6 campos del control de enlace de la Cabecera del paquete de Bluetooth:
gw) 1. Flujo
gx) 2. nmero de host.
gy) 3. ARQN
gz) 4. Carga til
ha) 5. Direccin.
A. 1, 2, 3
B. 3, 4, 5
C. 2, 4, 5
D. 1, 3, 5
hb)
hc)
hd)
he)
hf)
Respuesta: D
Argumentacin:
Cabecera (54 bits): Contiene informacin de con 6 campos:
Direccin o AM_ADDR: direccin temporal de 3 bits que se utiliza para distinguir los
dispositivos activos en una piconet, siendo la direccin 000 la direccin broadcast.
hg) Tipo: Define qu tipo de paquete es enviado y cuntos slots va a ocupar.
hh)
Flujo o Flow: El bit de control de flujo es usado para notificar al emisor cundo el
buffer
del receptor est lleno y que debe de dejar de transmitir.
hi) ARQN: bit de reconocimiento de paquetes recibidos paquetes correcto o
incorrecto (ltimo paquete recibido). Si es un 1 es un ACK, y con un 0 un NAK.
hj) SEQN: bit que se va invirtiendo para evitar retransmisiones en el receptor.
hk) HEC: Cdigo de redundancia para comprobar errores en la transmisin.
hl) Bibliografa:
hm) S.A., E. (s.f.). Electrocomponentes S.A. Obtenido de http://www.elec- trocomponentes.com/D
hn) Composicin del paquete:
ho) Cdigo de acceso (72 bits): Es usado para sincronizacin, identificacin y compensacin.
hp) Cabecera (54 bits): Contiene informacin del control de enlace con 6 campos:
hq) Campo de datos o carga til (hasta 2746 bits): Contiene el conjunto de datos que supone la
informacin a transmitir
hr) Nivel de Dificultad: Moderado
hs)
95. Cmo es la comunicacin de Bluetooth?
A. El equipo que mejor funcione acta como maestro y es el quien define por que canal enva
mientras los esclavos esperan la informacin.
g)
C. El dispositivo maestro espera que se conecten a l dispositivos que van actuar como esclavos y
ellos son los que definen las condiciones de comunicacin
D. El dispositivo maestro establece la frecuencia, la trama y el dispositivo esclavo solo puede mirar
la trama pero no modificarla.
ht)
hu) Respuesta: B
hv) En una red Bluetooth, cualquier dispositivo puede actuar como maestro o como esclavo:
hw) El dispositivo maestro se encarga de definir cmo se establece la comunicacin fsicamente
(frecuencia de salto, fase, etc.).
hx) Los dispositivos esclavos coordinan sus transmisiones segn las especificaciones del maestro.
Normalmente, el primero que solicita el servicio acta como maestro, excepto cuando la red ya ha
sido establecida.
hy) Bibliografa:
hz) Prasad R., 1997, Resea de las Comunicaciones Personales Inalmbricas Perspectivas de
Microondas, IEEE Communications Magazn, Volumen 9, Pginas 104-108.
96. Cuntos aparatos pueden conectase simultneamente a Bluetooth y cul es su velocidad mxima de
transferencia de datos:
A.
B.
C.
D.
A.
B.
C.
D.
2.6 GHz
2.8 GHz
2,48 GHZ
2.4 GHz
ie)
if) Respuesta correcta: D
ig) Los radios Bluetooth operan en el espectro de banda de 2.4 GHz. Cada unidad incluye una radio, un
controlador de enlaces de banda base y el software para la administracin de los enlaces y flujo de
datos.
ih) Bibliografia: S.A., E. (s.f.). Electrocomponentes S.A. Obtenido de http://www.electrocomponentes.com/
98. Complete los campos de del paquete Cabecera de la trama Bluetooth
ii) Cdigo de Acceso
Cabecera
Carga til
ij)
1
2
3
4
5
6
ik) Direccin
Flujo
HEC
il)
h)
A.
B.
C.
D.
im)
in)
io)
ip)
iq)
ir)
is)
it)
iu)
iv)
iw)
ix)
99.
Respuesta: B
Argumentacin:
Cabecera (54 bits): Contiene informacin del control de enlace con 6 campos:
1. Direccin o AM_ADDR:
2. Tipo
3. Flujo
4. ARQN
5. SEQN
6. HEC.
Bibliografa:
S.A., E. (s.f.). Electrocomponentes S.A. Obtenido de http://www.elec- trocomponentes.com/
Cul es la principal diferencia entre los mdulos HC-05 vs HC-06
A.
B.
C.
D.
Hardware es diferente
A.
B.
C.
D.
10 m
EL firmware
iy)
iz) Respuesta: D
ja) Esto se debe a que esencialmente el hardware es el mismo para ambos mdulos. La nica diferencia
real es el firmware que viene cargado de fbrica.
jb) Bibliografa:
jc) Prasad R., 1997, Resea de las Comunicaciones Personales Inalmbricas Perspectivas de
Microondas, IEEE Communications Magazn, Volumen 9, Pginas 120-124.
100.Cul es el radio efectivo que permite Bluetooth conectar todo tipo de dispositivos incorporando un
transmisor
25 m
15 m
20 m
jd)
je) Respuesta: A
jf) Argumentacin:
jg) Integrado en un pequeo transmisor de radiofrecuencia que permite conectar entre s todo tipo de
dispositivos electrnicos (telfonos, ordenadores, impresoras, faxes, etc) situados dentro de un radio
limitado de 10 metros (ampliable a 100, aunque con mayor distorsin) sin necesidad de utilizar
cables.
jh) Bibliografa:
ji) Bluetooth: comunicacin inalmbrica: http://html.rincondelvago.com/bluetooth_comunicacioninalambrica.html
jj)
802.11n
K. 802.15.4
L. Ninguno
jl)
jm) Respuesta: D
jn) Justificacin: La tecnologa RF no tiene un estndar o norma en la que trabaje.
jo) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
http://eprints.ucm.es/8922/1/memoria.pdf
jp) Nivel de Dificultad: Moderado
102.De cuntos canales como mximo puede contar una red Zigbee?
I.
J.
Disponible
en:
K. 255
L. 512
jq)
jr) Respuesta: B
js)
jt) Justificacin: Una red RF dependiendo de la configuracin puede trabajar en un canal pero este
puede cambiar debido a las interferencias o afectaciones del enlace.
ju) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
en:
http://eprints.ucm.es/8922/1/memoria.pdf
jv) Nivel de Dificultad: Moderado.
103.Por qu el consumo elctrico en RF es mayor que en Bluetooth?
jw)
E. El dispositivo se queda dormido la mayor parte de tiempo
F. El dispositivo est siempre esta enlazado a al receptor
G. El dispositivo siempre est trabajando
H. Ninguna de las anteriores
jx)
jy) Respuesta: A
jz)
ka)
kb) Justificacin: Mayor consumo elctrico en sistemas RF que en Bluetooth. Esto se debe a que el
dispositivo RF se enlaza mayor parte del tiempo al receptor existen cambios de canal
Bidireccionalmente, mientras que en una comunicacin Bluetooth esto no se puede dar, y siempre se
est transmitiendo y/o recibiendo.
kc)
kd) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
en:
http://eprints.ucm.es/8922/1/memoria.pdf
ke) Nivel de Dificultad: Fcil
104.Cul es el tamao de la trama con el que trabaja RF?
kf)
I. 256bits
J.
128bits
K. 512bits
L. 1024bits
kg)
kh) Respuesta: A
ki)
kj) Justificacin: El estndar RF tiene una trama de 256bps.
kk)
kl) Fuente:
Sistema
Interactivo
de
Docencia
http://eprints.ucm.es/8922/1/memoria.pdf
km) Nivel de Dificultado: Moderada
105.Cul es el rango de operacin que tiene RF?
kn)
E. 1 a 100m
[Online]
Disponible
en:
F. 10 a 75m
G. 1 a 5KM
H. 30 a 50m
ko)
kp) Respuesta: C
kq)
kr) Justificacin: RF tiene un rango de operacin de 1 a 5Km, respecto al de 1 a 100 m de Bluetooth
ks)
kt) Fuente:
Sistema
Interactivo
de
Docencia
[Online]
Disponible
http://eprints.ucm.es/8922/1/memoria.pdf
ku) Nivel de Dificultad: Fcil
106.Seleccione los 4 tipos de tramas del nivel fsico (tramas del IEEE 802.15.4) que tiene Zegbee?
kv)
E. Datos, reconocimiento, comandos MAC, piloto.
en:
E. Sirve para confirmar el xito en la recepcin y para validar las tramas de datos y los comandos
MAC. El campo de control en el frame (Frame Control) indica si se espera un ACK o no.
i)
F. Permite verificar la integridad de los datos llamados FCS (Frame Check Sequence) y se incluye
un nmero de secuencia para permitir el reensamblado y la retransmisin.
j)
G. Esta es una trama que permite el control y la configuracin de los nodos as como la formacin
de la red.
k)
H. Son el direccionar a varios dispositivos para que enven informacin, permitir mantener a los
nodos sincronizados sin tener que escuchar permanentemente el canal
ll)
lm) Respuesta: B
ln)
lo) Justificacin: Se permiten hasta 102 bytes como mximo para datos (n) MAX=102 bytes, se incluyen
2 bytes para verificar la integridad de los datos llamados FCS (Frame Check Sequence) y se incluye
un nmero de secuencia para permitir el reensamblado y la retransmisin.
lp)
lq) Fuente: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
lr) Nivel de Dificultad: Moderado
108.Cules son las principales funciones que garantiza la comunicacin de RF?
ls)
E. Recepcin, tramas de datos y los comandos MAC, indicacin de calidad del enlace, deteccin
de actividad del canal, RX y TX de datos.
l)
G. Control y la configuracin de los nodos, deteccin de energa, indicacin de calidad del enlace.
H. Activacin y desactivacin de nodos, deteccin de energa, indicacin de calidad del enlace,
deteccin de actividad del canal, RX y TX de datos.
lt)
lu) Respuesta: D
lv)
lw)Justificacin: Esta es una trama que permite el control y la configuracin de los nodos as como la
formacin de la red. Para ello, el estndar contempla 26 directivas para garantizar principalmente las
siguientes funciones a nivel fsico:
lx)
ly)
lz) Fuente: Zigbee: Wireless Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
ma) Nivel de Dificultad: Moderado
mb)
109.Seleccione el par de palabras correctas, para completar el siguiente enunciado?
mc)
md) Las bandas ms operadas de RF operan en las bandas libres de 2.4Ghz,
y
me)
E. 868Mhz para Europa y 916Mhz para Estados Unidos
B. RF Coordinador de enlace
C. RF RECEPTOR
D. Variador de Frecuencias (CODIFICADORES Y DECODIFICADORES
mn)
mo) Respuesta: D
mp)
mq) Justificacin: los equipos o los dispositivos con los que se realizan el enlace se mantenga estable
mr)
ms) Fuente: RF Control That Simply Works. William C. Craig. Program Manager Wireless
Communications.
mt) Nivel de Dificultad: Moderado
mu)
mv)
mw)
mx)
my)
mz)
na) BIBLIOGRAFA
[1] Online: http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf
[2] Online:http://www.mikroe.com/chapters/view/81/capitulo-3-microcontroladorpic16f887/#c3v1
[3] Online: http://iemicrox.blogspot.com/p/pic16f887.html
[4] Online:http://www.microchip.com/wwwproducts/Devices.aspx?
dDocName=en026561#developmentTools
[5] Microchips,
Data
Sheet
PIC18F2455/2550/4455/4550,
Disponible
en
en:
http://tecbolivia.com/index.php/articulos-y-tutoriales-
microcontroladores/34-entendiendo-los-bits-de-configuracion-en-el-pic16-de-microchip
[8] MICROCONTROLADORES II. Manejo de Perifericos (Displays, LCD, Teclado y
EEPROM). Profesor Luis Zurita. Marzo 18/2011.
[9] Online:http://www.slideshare.net/lmzurita/manejo-de-perifericos-paramicrocontroladores-en-c.
nb) [8] Eduardo Santamara (2000-Pag. 35) Electrnica digital y microprocesadores
cuarta edicin, 2000, Pag. 35
nc) [9] Edward V. Ramrez, Melvyn Weiss Introduccin a los microprocesadores
segunda edicin 2006-Pag. 45
nd) [10] Eduardo Santamara (2000-Pag. 35) Electrnica digital y microprocesadores
cuarta edicin, 2000, Pag. 40
ne) [11] Enrique Mandado Prez Sistema integrado para el auto aprendizaje Tercera
Edicin 2002-Pag. 2
nf) [12] J. M. Ordua Huertas, Vicente Arnau Llompart Arquitectura y programacin
de microcontroladores Cuarta Edicin 2001-Pag. 3
ng) [13] Users Staff Microcontroladores Quinta Edicin 2003-Pag. 40
nh) [14] Enrique Mandado Prez Sistema integrado para el auto aprendizaje Tercera
Edicin 2002-Pag. 5
ni) [15] Hwang Briggs Arquitectura de computadoras Editorial Mc Graw Hill.
nj) [16] Fernando E. Valdez, Ramn Pallas Microcontroladores: Fundamentos y
Aplicaciones con PIC Quinta edicin, 2007, Marcombo, Capitulo 3, Pag. 69.
nk) [17] P. de Miguel Fundamentos de los computadores Sptima edicin, 1999,
Paraninfo, Capitulo 5, Pag. 135.
nl) [18] [19] W. Stirling Organizacin y Arquitectura de Computadores Quinta
edicin, 2000, Prentice-Hall, Capitulo 5, Pag. 120.
nm) [20] [21] Gordon Mosquera Christian Roberto, Modulo didctico para el
microcontrolador ATMega, Quieto, 2006
nn)
no) [21] Mikel Etxebarria Isuskiza Microcontroladores PIC: teora y prctica Tercera
Edicin, 2003, Capitulo 4, Pag. 67.
np) [22] [23] V. Garca, Tema del Articulo Trucar un servo Disponible en:
http://www.hispavila.com/3ds/atmega/trucarservo.html
nq) [24] Aeromodelismo, "Motores Brushless",19 de marzo del 2015, Ramn Borroso.
[Online]
Disponible
en:
http://www.aeromodelismofacil.com/Motores
%20brushless.htm
nr) [25] Master Ingenieros, Motor Brushless caractersticas fundamentales, Cartagena,
Universidad Politcnica de Cartagena. [Online]
ns) Disponible en: http:// www.adsnt-recursos-masteringenieros-file-motor (1).pdf
nt) [26] Irving L. Kosow (1 de mayo de 1993). Mquinas elctricas y transformadores.
Pearson Educacin. pp. 429. ISBN 9789688802939. Consultado el 26 de enero de
2011.
nu) [27] Robtica uC- Pic, Sensores [online]
nv) Disponible en: http://www.x-robotics.com/sensores.htm#LM35
nw) [28] K. Soria. Todo lo que tienes que saber sobre: HC-SR04 Sensor
Ultrasnico. Septiembre, 2013. [Online].
nx) Disponible en: http://bkargado.blogspot.com/2013/09/todosobrehc-sr04.html
ny) [29] Sensor de Distancia de Ultrasonido HC-SR04. ELECTRONILAB. Bogot
D.C., Colombia. [Online].
nz) Disponible
en:http://electronilab.co/tienda/sensor-de-distancia-de-ultrasonido-hcsr04/
oa) [30] Jorge Gonzlez Coneo, Sistema de monitoreo en tiempo real para la medicin
de temperatura, 2012. [Online]
ob) Disponible en: http://dialnet.unirioja.es/descarga/articulo/4316534.pdf
oc)
od)
oe)
of)
og)