Post on 27-Oct-2015
PROYECTO FINAL
Presentado por:
Carlos Javier Delgado Rubio
Curso:
CAD para Electrónica
Presentado al tutor:
JAIR ZAMBRANO SANCHEZ
Director de Curso
NELSON HUMBERTO ZAMBRANO CORTES
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
Facultad de Ciencias Básicas, Tecnología e Ingeniería
Ingeniería Electrónica
21 de Mayo de 2013
INTRODUCCION
Los sistemas de control son un conjunto de elementos (programas, transistores, elementos
electromecánicos, entre otros), que unidos pueden realizar un proceso completo de forma
autómata o asistida por una persona. Los sistemas de control se han utilizado para mejorar
procesos y estilos de vida por que dan la opción a las personas y/o empresas de realizar otras
actividades simultáneamente o utilizarla como apoyo como se reflejara en este trabajo.
Para el desarrollo de este se utilizó un lenguaje de programación para el pic 16F876 utilizando el
programa MPLAB y el simulador PROTEUS que da el beneficio de correr el programa y ver el
funcionamiento del display, relés y el mismo pic sin tener que montarlo físicamente.
La construcción de un sistema de control en este proceso de aprendizaje es favorable puesto que
permite desarrollar habilidades creativas y de análisis necesarias para aprender a programar y
diseñar un circuito basado en un sistema o variables a controlar.
JUSTIFICACION
Se desarrolla este proyecto para aprender a realizar un diseño electrónico mediante la utilización
de un simulador y que a la vez favorezca la elaboración de un programa de acuerdo a las
necesidades o condiciones de trabajo.
Es importante ya que al adquirir estas habilidades se reflejara en un mejor desempeño tanto
laboral como académico y en la misma vida diaria ya que se encuentra diferentes soluciones a un
problema planteado.
La implementación de este tipo de diseños encuentra diversidad de aplicaciones como en el
manejo de un sistema de control de un rack de refrigeración, control de un sistema de
iluminación, de un sistema de ventilación entre otros.
ACTIVIDAD 11 – PROYECTO FINAL
NOMBRE DEL CURSO
CAD PARA ELECTRÓNICA - 302526
TEMÁTICAS REVISADAS
UNIDAD I Y II
INTENCIONALIDADES FORMATIVAS
Propósitos
-Fortalecer los procesos de diseño electrónico en base a herramientas de software con el fin de
dar solución a un problema específico
-Desarrollar habilidades de análisis de situaciones y estados a partir de procesos simulados
-Generar soluciones prácticas y confiables depuradas desde un simulador electrónico
Objetivos
-Desarrollar los procesos de diseño para implementar un sistema de control de acceso al
laboratorio de electrónica, donde se desactiven luces y cortinas tan pronto este vacío.
-Sustentar el proceso de diseño de acuerdo con las variables del proyecto.
ASPECTOS GENERALES DEL PROYECTO
-El curso de CAD para electrónica será evaluado por proyecto, sin opción de presentar prueba
única (100%) ni mediante prueba final de carácter objetivo (Examen Nacional).
-En la circular 400-045 de 14 de septiembre de 2010, se indica lo siguiente: “Se transcribe la
decisión que el consejo de la Escuela de Ingeniería en sesión del 29 de julio de 2010 tomó en
relación con la habilitación de los cursos metodológicos y los que tienen evaluación por proyecto:
1. Los cursos metodológicos no serán habilitables y 2. Los cursos evaluados por proyectos no serán
habilitables ni podrán ser evaluados mediante prueba única”.
-La nota correspondiente al 40% final viene dada por la presentación, entrega y sustentación del
proyecto final.
ESTRATEGIA DE APRENDIZAJE
Aprendizaje basado en proyectos.
ESPACIO PARA EL DESARROLLO DEL PROYECTO
Foro Act. 11 – Proyecto Final
Cada uno de los integrantes del grupo debe ingresar permanentemente (a diario) al foro de la
actividad durante el tiempo que este abierto, según la agenda del curso.
PUNTAJE MÁXIMO
200 puntos / 500 totales
ACTIVIDADES
El diseño y la implementación del proyecto se dividen en tres (3) actividades:
ACTIVIDAD 1. DISEÑO E IMPLEMENTACIÓN
Se abrirá un espacio en el foro de la actividad llamado TAREA 1. PROYECTO FINAL. En este espacio
todos los integrantes del grupo deben realizar sus aportes de manera oportuna y significativa con
el fin de cumplir con los objetivos, y evidenciando los avances y el éxito en la presentación del
informe.
El proyecto tiene como finalidad la solución de una situación real con el fin de lograr un control de
iluminación en el laboratorio de electrónica y buscando un ahorro en el consumo de energía en las
horas de la noche.
Los participantes deben fijar las reglas de funcionamiento del equipo de trabajo, los roles y las
asignaciones, planificando el tiempo que tienen disponible hasta la entrega del proyecto final de
acuerdo con la agenda del curso.
Los comentarios realizados deben llevar una argumentación válida y deben ser referenciados
debidamente si es necesario. Sólo se tendrán en cuenta los aportes significativos.
DESCRIPCIÓN DEL PROBLEMA
El equipo de trabajo debe diseñar un sistema de control para la iluminación y el cierre de las
persianas del laboratorio de electrónica.
En el momento del ingreso al laboratorio, el sistema debe realizar una cuenta de las personas que
ingresan, habrá un interruptor manual de encendido de la iluminación y otro para la apertura de
las persianas o cortinas. En el momento que el sistema detecte que el laboratorio quedo vacío, no
hay ninguna persona dentro, generará un retardo de 10 segundos y procederá a cerrar las
persianas en caso que estas fueran abiertas y apagará las luces.
Se debe visualizar el conteo del personal por medio de un display, debe tener en cuenta cuando
salen y entran, asumiendo que solo pasa de a una persona por la puerta de acceso.
Al momento de llegar a cero (0) el contador de personal, iniciará la cuenta regresiva para el
apagado de luces y el cierre de las persianas y se mostrará también en el display.
Se debe evidenciar todo el proceso de diseño de la solución de la actividad, se puede recurrir a la
electrónica digital, a los digitales secuenciales, y a los microcontroladores para solucionar el
problema. Se deben también considerar las etapas de potencia y control de los actuadores de
apertura y cierre de las persianas y del control de encendido y apagado de las luces, además de
escoger la mejor herramienta de software CAD para la realización del proyecto.
PUNTAJE MÁXIMO: 130 puntos / 200 totales
-ACTIVIDAD 2. CONSTRUCCIÓN Y ENTREGA INFORME FINAL
Se abrirá un espacio en el foro de la actividad llamado TAREA 2.
CONSTRUCCIÓN INFORME FINAL. En este espacio todos los integrantes del grupo deben realizar
sus aportes de manera oportuna y significativa con el fin de cumplir con los objetivos, y
evidenciando los avances y el éxito en la presentación del informe.
El informe debe contener las siguientes partes:
PORTADA: Titulo, nombre de los participantes que contribuyeron significativamente durante el
desarrollo de la actividad.
JUSTIFICACIÓN: Donde se evidencia el planteamiento del problema, el análisis de las posibles
soluciones, la metodología para dar solución al desarrollo del proyecto.
CONTENIDO: El informe debe contener en su estructura el objetivo general, la definición de
variables, el diagrama de flujo del sistema, el desarrollo de las etapas del proyecto, pantallazos de
las distintas etapas simuladas y el link de un video con la simulación del funcionamiento del
sistema.
CONCLUSIONES: Los integrantes del equipo deben hacer una reflexión sobre el desarrollo de la
actividad, sobre la aplicación de las herramientas de CAD en el diseño de soluciones electrónicas.
REFERENCIAS BIBLIOGRÁFICAS: Enunciar los apoyos bibliográficos que fueron utilizados como
soporte para la solución del proyecto y la construcción del informe final, basados en normas APA.
FORMATO DEL ARCHIVO
El archivo debe adjuntarse en el foro correspondiente, con el nombre “GRUPOXX_ACTFINAL.PDF”.
Por ejemplo, si su grupo es el 1, el nombre será GRUPO1_ACTFINAL.PDF sin usar caracteres
especiales como tildes o puntos.
PUNTAJE MÁXIMO: 50 puntos / 200 totales
ACTIVIDAD 3. EVALUACIÓN DEL PROCESO DE TRABAJO COLABORATIVO
Se abrirá un espacio en el foro de la actividad llamado TAREA 3. EVALUACIÓN DEL EQUIPO DE
TRABAJO.
En este espacio todos los integrantes del grupo deben:
-Dar a conocer sus inquietudes sobre el desarrollo de la actividad.
-Construir un documento grupal donde se describa el proceso del trabajo colaborativo que se llevó
a cabo durante el período académico.
-El documento grupal es el resultado de los aportes individuales de los integrantes del equipo de
trabajo; es decir, cada estudiante debe publicar un texto en el foro donde se evidencie lo
siguiente:
-Descripción de las actividades que hizo para la ejecución del proyecto.
Descripción de las actividades que realizó el grupo colaborativo para la implementación del
proyecto.
-Qué aprendió con el desarrollo de los trabajos colaborativos y el proyecto.
-Descripción del desempeño de cada uno de los compañeros del grupo colaborativo.
-Con la información suministrada por cada uno de los integrantes del equipo de trabajo
colaborativo, el grupo debe construir un documento final con máximo dos (2) páginas que incluya
los aspectos mencionados anteriormente y adjuntarlo antes de la fecha de cierre de la Act. 11 en
el foro “Tarea 3. Evaluación del equipo de trabajo”.
-El documento grupal debe ser subido por el Líder del grupo colaborativo o su delegado antes de
la fecha de cierre de la Act. 11.
FORMATO DEL ARCHIVO
El archivo debe adjuntarse en el foro correspondiente, con el nombre
“GRUPOXX_EVALEQUIPO.PDF”. Por ejemplo, si su grupo es el 1, el nombre será
GRUPO1_EVALEQUIPO.PDF sin usar caracteres especiales como tildes o puntos.
PUNTAJE MÁXIMO: 20 puntos / 200 totales
CONDICIONES GENERALES
No se calificará el informe que no sea adjunto en el espacio indicado.
Recuerde que el Foro es el espacio adecuado para la construcción y desarrollo del proyecto de
forma colaborativa, la clave es la planificación, organización y compromiso del equipo de trabajo.
El estudiante que ingrese a última hora o fuera del plazo establecido o no participe activamente y
con aportes validos no deberá ser incluido dentro de la portada del informe final del proyecto del
grupo colaborativo.
El estudiante que no participe en el Foro de la Act. 11 durante el período establecido en la Agenda
del Aula, obtendrá una nota de 0 en esta actividad.
El plagio tiene una calificación de 0 en la actividad.
DESCRIPCION DE ELEMENTOS UTILIZADOS EN EL PROYECTO
Transistor 2N3904
Transistores NPN generalmente usado para amplificación. Está diseñado para funcionar a
bajas intensidades, bajas potencias, tensiones medias, y puede operar a velocidades
razonablemente altas. Se trata de un transistor de bajo costo, muy común, y suficientemente
robusto como para ser usado en experimentos electrónicos.
Es un transistor de 200 miliamperios, 40 voltios, 625 milivatios, con una Frecuencia de
transición de 300 MHz, con una beta de 100. Es usado primordialmente para la amplificación
analógica.
TRANSISTOR COMO INTERRUPTOR
Encoders
Los Encoders son sensores que generan señales digitales en respuesta al movimiento.
Están disponibles en dos tipos, uno que responde a la rotación, y el otro al movimiento lineal.
Cuando son usados en conjunto con dispositivos mecánicos tales como engranajes, ruedas de
medición o flechas de motores, estos pueden ser utilizados para medir movimientos lineales,
velocidad y posición.
Encoder incremental
Este tipo de encoder se caracteriza porque determina su posición, contando el número de
impulsos que se generan cuando un rayo de luz, es atravesado por marcas opacas en la superficie
de un disco unido al eje.
En el estator hay como mínimo dos pares de fotorreceptores ópticos, escalados un número entero
de pasos más ¼ de paso. Al girar el rotor genera una señal cuadrada, el escalado hace que las
señales tengan un desfase de ¼ de periodo si el rotor gira en un sentido y de ¾ si gira en el sentido
contrario, lo que se utiliza para discriminar el sentido de giro.
FINAL DE CARRERA
Un final de carrera es un interruptor que se acciona de forma automática situados al final del
recorrido de un elemento móvil, como por ejemplo una cinta transportadora, un ascensor o una
persiana en este caso, cuando un elemento móvil llega al final de su recorrido.
Funciona como un sensor mecánico que detecta la posición del elemento móvil al accionar este
algún sistema mecánico (por ejemplo, una palanca) que abre o cierra los contactos del final de
carrera o interruptor de posicionamiento.
DISPLAY DE 7 SEGMENTOS CON 4 DIGITOS
El display o visualizador de siete segmentos se utiliza para la representación de números en
muchos dispositivos electrónicos debido en gran medida a su simplicidad. Aunque externamente
su forma difiere considerablemente de un diodo LED (diodos emisores de luz) típico, internamente
están constituidos por una serie de diodos LED con unas determinadas conexiones internas,
estratégicamente ubicados de tal forma que forme un número 8.
A cada uno de los segmentos que forman el display se les denomina a, b, c, d, e, f y g y están
ensamblados de forma que se permita activar cada segmento por separado consiguiendo formar
cualquier dígito numérico. A continuación se muestran algunos ejemplos:
Si se activan o encienden todos los segmentos se forma el número "8".
Si se activan sólo los segmentos: "a, b, c, d, e, f," se forma el número "0".
Si se activan sólo los segmentos: "a, b, g, e, d," se forma el número "2".
Si se activan sólo los segmentos: "b, c, f, g," se forma el número "4".
Para ver las palabras y el conteo en el display de 4 dígitos se utiliza la multiplexación que es
manejada por el pic 16F876.
RELES
Es un interruptor mandado a distancia que retorna a su posición inicial o de reposo cuando el
voltaje en su bobina se corta.
Posee varios contactos agrupados en forma de circuito conmutado accionado por efecto
electromagnético por el paso de una corriente a través de una bobina generando un campo
magnético que atrae una pieza mediante efecto palanca accionando contactos normalmente
abiertos (NA) y normalmente cerrados (NC)
PULSADORES
Es un interruptor de encendido o apagado que conectado a un componente eléctrico hace
funcionar o apaga el mismo. Los pulsadores existen de diversas formas y tamaños que se
encuentran en diferentes equipos electrónicos pero también muy usados en el campo de la
electricidad industrial.
Un pulsador permite el paso o interrupción de la corriente eléctrica mientras esté presionado o
accionado, y cuando deja de presionarse este vuelve a su estado original o de reposo.
El Contacto puede ser de dos tipos: Normalmente Cerrados (NC=Normal Close) que son los
pulsadores de Paro y Normalmente Abiertos (NA=NO= Normal Open) que son los pulsadores de
Marcha. Los pulsadores internamente consta de una lámina conductora que establece el contacto
o desconexión de sus terminales y un muelle o resorte que vuelve a su estado de reposo sea NC o
NA.
PIC 16F876
PRINCIPALES CARACTERÍSTICAS
Se enumeran las prestaciones y dispositivos especiales de los PIC16F87X.
· Procesador de arquitectura RISC avanzada
· Juego de solo 35 instrucciones con 14 bits de longitud. Todas ellas se ejecutan en un ciclo de
instrucción, menos las de salto que tardan dos.
· Hasta 8K palabras de 14 bits para la Memoria de Programa, tipo FLASH en los modelos 16F876 y
16F877 y 4KB de memoria para los PIC 16F873 y 16F874.
· Hasta 368 Bytes de memoria de Datos RAM.
· Hasta 256 Bytes de memoria de Datos EEPROM.
· Pines de salida compatibles para el PIC 16C73/74/76/77.
· Hasta 14 fuentes de interrupción internas y externas.
· Pila de 8 niveles.
· Modos de direccionamiento directo e indirecto.
· Power-on Reset (POP).
· Temporizador Power-on (POP) y Oscilador Temporizador Start-Up.
· Perro Guardián (WDT).
· Código de protección programable.
· Modo SLEEP de bajo consumo.
· Programación serie en circuito con dos pines, solo necesita 5V para programarlo en este modo.
· Voltaje de alimentación comprendido entre 2 y 5,5 V.
· Bajo consumo: < 2 mA valor para 5 V y 4 Mhz 20 ȝA para 3V y 32 M <1 ȝA en standby
DISPOSITIVOS PERIFÉRICOS
· Timer0: Temporizador-contador de 8 bits con preescaler de 8 bits
· Timer1: Temporizador-contador de 16 bits con preescaler que puede incrementarse en modo
sleep de forma externa por un cristal/clock.
· Timer2: Temporizador-contador de 8 bits con preescaler y postscaler.
· Dos módulos de Captura, Comparación, PWM (Modulación de Ancho de Pulsos).
· Conversor A/D de 1 0 bits.
· Puerto Serie Síncrono Master (MSSP) con SPI e I2C (Master/Slave).
· USART/SCI (Universal Syncheronus Asynchronous Receiver Transmitter) con 9 bit.
· Puerto Paralelo Esclavo (PSP) solo en encapsulados con 40 pines
ORGANIZACIÓN DE LA MEMORIA
Hay tres bloques de memoria en cada uno de estos PlCmicro. La Memoria de Programa y la
Memoria de Datos que tienen los buses separados para poder permitir el acceso simultáneo a
estos dos bloques. El tercer bloque que la Memoria de datos EEPROM.
La información adicional sobre la memoria del dispositivo puede encontrarse en el manual de
referencia de los PICmicros de gama media (DS33023).
Organización de la Memoria de programa Los dispositivos de PIC 16F87X tienen un contador de
programa de 13-bits capaz de direccionar 8Kxl4 posiciones de memoria. Los dispositivos de
PIC16F877/876 tienen 8K x 14 posiciones de memoria de programa tipo FLASH y el PIC 1
6F873/874 tienen 4Kx 14. El vector de Reset está en la posición de memoria 0000h y el vector de
interrupción está en la posición de memoria 0004h.
Organización de la Memoria de datos
La memoria de los datos se divide en los múltiples bancos que contiene los Registros del Propósito
Generales y Los Registros de la Funciones especiales Los bit RP1 (STATUS <6> y RP0 (el ESTADO
<5> seleccionan cada uno de estos bancos, de acuerdo a la siguiente tabla:
Tabla.- Selección de los bancos de memoria RAM con RP0 y RP1
En cada banco hay 7Fh posiciones de memoria (128 bytes). Las posiciones más bajas están,
reservadas para los Registros de Funciones Especiales. Por encima de los Registros de Funciones
Especiales se encuentran los Registros de Propósito General, que se utilizan como posiciones de
memoria RAM estática. Todos están estructurados en bancos. Algunos Registros de Funciones
Especiales están reflejados en varios bancos para reducir el código y tener un acceso más rápido.
LECTURA Y ESCRITURA DE LAS MEMORIAS EEPROM Y FLASH
En esta familia de microcontroladores tanto la memoria EEPROM de datos como la memoria de
programa FLASH puede ser modificada sin necesidad de utilizar un programador exterior y a la
tensión nominal de VDD. Es decir, un programa dinámicamente puede generar información que se
puede grabar en la memoria FLASH.
Por lo tanto podemos utilizar esta propiedad para que:
La propia aplicación se puede programar según las condiciones externas
Es posible ampliar el área de la memoria de datos no volátil EEPROM con posiciones libres de la
memoria FLASH.
Se dispone de seis registros especiales para leer y escribir sobre la memoria no volátil, estos
registros son: EECON1, EECON2, EEDATA, EEDATH, EEADR y EEADRH. Para direccionar los 128
posiciones de memoria EEPROM de 8 bits del PIC16F873 y 16F874 o las 256 posiciones del
PIC16FS76 y 16FS77 basta con 8 bit, por ello para escribir o leer en la memoria EEPROM solo hacen
faltan el registro EEADR para direccionar la posición y el registro EEDATA para colocar el dato leído
o escrito. Sin embargo para poder escribir o leer datos en la memoria FLASH que puede tener
hasta 8K palabras de 14 bits hacen falta dos registros para direccionar la posición de memoria, por
ello se utiliza el registro EEADR concatenado con el registro EEADRH que contiene la parte alta de
la palabra de direccionamiento de memoria. De forma similar se utilizan los registros EEDATA
concatenado con el registro EEADRH que contiene los 6 bit de mayor peso de las palabras de 14
bits.
Además para controlar el proceso de lectura y escritura de la memoria EEPROM y FLASH se
dispone de dos registros: el EECON1 y el EECON2.
MPLAB
Es un editor IDE gratuito, destinado a productos de la marca Microchip. Este editor es modular,
permite seleccionar los distintos microcontroladores soportados, además de permitir la grabación
de estos circuitos integrados directamente al programador.
Es un programa que corre bajo Windows y como tal, presenta las clásicas barras de programa, de
menú, de herramientas de estado, etc. El ambiente MPLAB® posee editor de texto, compilador y
simulación (no en tiempo real). Para comenzar un programa desde cero para luego grabarlo al pic
los pasos a seguir son:
1. Crear un nuevo archivo con extensión .ASM y nombre cualquiera
2. Crear un Proyecto nuevo eligiendo un nombre y ubicación
3. Agregar el archivo .ASM como un SOURCE FILE
4. Elegir el microcontrolador a utilizar desde SELECT DEVICE del menú CONFIGURE
Una vez realizado esto, se está en condiciones de empezar a escribir el programa respetando las
directivas necesarias y la sintaxis para luego compilarlo y grabarlo en el PIC.
Lenguaje Ensamblador: Lenguaje de bajo nivel natural de la línea PIC tanto para gama baja, media o alta.
- Con él se tiene un aprovechamiento eficiente de los recursos del PIC.
- Se pueden crear macros con este lenguaje, para después simplificar el código en
diferentes desarrollos.
- Con él se pueden controlar los tiempos y los registros bit a bit.
- Excelente para manejar interrupciones simultáneas.
- Cuando se genera el archivo .hex éste es completamente optimizado.
Instrucciones de carga
clrf f 00 → (f) Z
clrw 00 → (W) Z
movf f,d (f) → (destino) Z
movlw k k → (W)
movwf f (W) → (f)
Instrucciones de BIT
bcf f,b Pone a 0 el bit ‘b’ del registro ‘f’
bsf f,b Pone a 1 el bit ‘b’ del registro ‘f’
Instrucciones aritméticas
addlw k (W) + k → (W)
addwf f,d (W) + (f) → (destino)
decf f,d (f) - 1 → (destino)
incf f,d (f) + 1 → (destino)
sublw k K - (W) → (W)
subwf f,d (f) - (W) → (destino)
Instrucciones lógicas
andlw k (W) AND k → (W)
andwf f,d (W) AND (f) → (destino)
comf f,d (/f) → (destino)
iorlw k (W) OR k → (W)
iorwf f,d (W) OR (f) → (destino)
rlf f,d Rota (f) a izquierda → (destino)
rrf f,d Rota (f) a derecha → (destino)
swap f,d Intercambia nibbles (f) → (destino)
xorlw k (W) XOR k → (W)
xorwf f,d (W) XOR (f) → (destino)
Instrucciones de salto
btfsc f,b Salta si el bit ‘b’ de ‘f’ es 0
btfss f,b Salta si el bit ‘b’ de ‘f’ es 1
decfsz f,d (f) - 1 → (destino) y salta si es 0
incfsz f,d (f) + 1 → (destino) y salta si es 0
goto k Salta a la dirección ‘k
Instrucciones especiales
clrwdt Borra Timer del Watchdog
nop No operación
sleep Entra en modo de bajo consumo
Compilación del Programa y carga al PIC
Una vez escrito y depurado el programa, se procede a la compilación. Para esto, desde el menú
PROJECT se elige la opción BUILD ALL (construir todo) que, si no existen errores, devolverá un
mensaje como BUILD SUCCESFULL. Los errores que muestra el compilador son del tipo sintácticos,
es decir que si el programa "construido" llegara a tener un error, por ejemplo que esperase a que
se ponga un bit en “0” y nunca pasase, se estará en un bucle infinito a pesar de que el compilador
compilará perfectamente porque no hay error de sintaxis.
También existen mensajes y advertencias; los mensajes pueden ser, por ejemplo, que se está
trabajando en un banco de memoria que no es el bank 0, etc. Las advertencias tienen un poco más
de peso, por ejemplo: el PIC seleccionado no es el mismo que está definido en el programa, etc. En
ambos casos, mensajes y advertencias, la compilación termina satisfactoriamente pero hay que
tener en cuenta siempre lo que nos dicen estos para prevenir errores.
Terminada la compilación el MPLAB® nos genera un archivo de extensión .hex el cual es
completamente entendible para el PIC. Es decir, solo resta grabarlo al PIC por medio de una
interfaz como por ejemplo el programador.
Una vez completado esto, se alimenta al mismo y el programa ya se estará ejecutando.
PROGRAMA REALIZADO PARA EL PROYECTO EN MPLAB
LIST P=16F876A ; ¦
;*******************************************************¦
;PROYECTO: Control de Laboratorio ¦
;AUTOR: Carlos Javier Delgado Rubio ¦
;FECHA: 2013/05/12 03:40h ¦
;------------Definiciones de comandos-------------------¦
#define RELE_CERRAR_ON btfss PORTA,1 ;Cerrar Persiana¦
#define RELE_CERRAR_OFF btfsc PORTA,1 ;Cerrar Persiana¦
#define SI_RELE_CERRAR bsf PORTA,1 ;Cerrar Persiana¦
#define NO_RELE_CERRAR bcf PORTA,1 ;Cerrar Persiana¦
#define RELE_ABRIR_ON btfss PORTA,2 ;Abrir Persiana ¦
#define RELE_ABRIR_OFF btfsc PORTA,2 ;Abrir Persiana ¦
#define SI_RELE_ABRIR bsf PORTA,2 ;Abrir Persiana ¦
#define NO_RELE_ABRIR bcf PORTA,2 ;Abrir Persiana ¦
#define RELE_LUCES_ON btfss PORTA,0 ;Luces ¦
#define SI_RELE_LUCES bsf PORTA,0 ;Luces ¦
#define NO_RELE_LUCES bcf PORTA,0 ;Luces ¦
#define LED_VERDE_ON btfss PORTA,4 ;Led Persiana ¦
#define SI_LED_VERDE bsf PORTA,4 ;Led persiana ¦
#define NO_LED_VERDE bcf PORTA,4 ;Led persiana ¦
;---Descripcion de los bits individuales Registro-------¦
SA EQU 4 ;Sensor A Contar Personal
SB EQU 5 ;Sensor B Contar Personal
SC EQU 6 ;Sensor C Final de Carrera Abrir
SD EQU 7 ;Sensor D Final de Carrera Cerrar
TDE EQU 5 ;Tecla Luces ON/OFF
TIZ EQU 3 ;Tecla Persiana Abrir/Cerrar
;----bits utilizados como Banderas--BCNT-----------
CBLOCK 0
MA, MB, CA, JS, CP, MM, CN0, CFU
ENDC
;--Bits usados para SEñALIZADORES------------------
CBLOCK 0
TBQ, TBS, PAB, PAR, PER, PUN
ENDC
;*-+-PALABRA DE CONFIGURACION:-*-+-*-+-*-+-*-+-*-+-*-+-*+
__CONFIG _HS_OSC & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _WDT_ON & _CP_OFF
;------Register Proposito Especifico--------------------+
#include <p16f876a.inc> ;contiene los FSR
;------Registros de proposito general-------------------=
CBLOCK 0x2F ;Inicio Variables
TEMPW, TEMFSR, TEMEST, SENAL, BECLA, SALUD, PUNTO
DIRDI, DISPD, TEMPD, CNTE, CNTS, CNTD, BCNT ;Contadores
DISP1, DISP2, DISP3, DISP4 ;DISPLAYS
TIMEA, TIMEQ, TIMES, TIMOFF ;Tiempos
CNTBY, BYTEL, BYTEH ;byte hexa a decimal
BCD00, BCD01, BCD02, TEMP ;Registros BCD
ENDC ;Fin RAM Variable
constant MAXIMO=.100 ;cupo de personas
;*-+-*-+-*-+-*-+-INICIO DEL PROGRAMA-*-+-*-+-*-+-*-+-*-+-*=
ORG 0 ;Vector de Inicio
inicio goto configu ;Empieze Configurando...
ORG 4 ;Vector de Interrupciones
goto irqs ;salta a interrupciones
;*** Tabla para Decodificador para Display Anodo Comun *********
decodi addwf PCL,F ;pcl + W -> pcl DIR = CHARS
DT 0xC0, 0xF9, 0xA4, 0xB0 ;00-03=0 1 2 3
DT 0x99, 0x92, 0x82, 0xF8 ;04-07=4 5 6 7
DT 0x80, 0x90, 0x88, 0x83 ;08-0C=8 9 A B
DT 0xC6, 0xA1, 0x86, 0x8E ;0D-0F=C d E F
DT 0xBF, 0xC1, 0xC7, 0x8C ;10-13=- U L P
DT 0x89, 0xCF, 0xF1, 0x8B ;14-17=
DT 0x25, 0xAB, 0xA3, 0x00 ;18-1B=
DT 0x98, 0xCE, 0x87, 0x2C ;1C-1F=
ORG 0x0FF
RETLW 0x00
;*-+-*-+-*-+-*Configuracion inicial-*-+-*-+-*-+-*-+-*-+-*-=
configu bcf STATUS,IRP ;Para usar dir indirec B01
bcf STATUS,RP1 ;Para pasar
bsf STATUS,RP0 ;al banco 1
;1111111111111111111111111111111111111111111111111111111111
;OPTION_REG: RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
movlw b'00101111' ;division wdt 256
movwf OPTION_REG ;Asigna preescaler al WDT
movlw 0x06 ;Configure portA
movwf ADCON1 ;Como Digital
movlw B'11101000' ;para configurar trisA
movwf TRISA ;Puerta A como entrada/Salida
movlw B'11110000' ;para configurar trisB
movwf TRISB ;puerta B entrada/salida
movlw B'00000000' ;para tris C
movwf TRISC ;Portc como Salidas
bsf PIE1,TMR2IE ;Interrupcion tmr2ie
movlw .124 ;Valor para Periodo2
movwf PR2 ;Compara pr2 con tmr2
bcf STATUS,RP0 ;pasa al banco 0
;0000000000000000000000000000000000000000000000000000000000
movlw b'01001101' ;Para configurar
movwf T2CON ;pos-pre/divisor y ON tmr2
clrf PIR1 ;Borrar variables
clrf TMR1L
clrf TMR0
clrf CNTE
clrf CNTS
clrf CNTD
clrf BCNT
clrf SENAL
movlw 0x04 ;Cargar valores iniciales
movwf TIMES
movwf TIMEQ
movlw 0x10
movwf PUNTO
movlw 0x01
movwf TEMPD
movwf DISPD
bsf BCNT,CN0 ;Zero personas inicialmente
bsf INTCON,RBIE ;Permite inter PORTB
bsf INTCON,INTE ;Permite inter Externa
bsf INTCON,PEIE ;Permite Otras inter
bsf INTCON,GIE ;Permiso Global inter
;=== FIN DE LAS CONFIGURACIONES =======================
movlw 0x0A
movwf SALUD
propre clrwdt ;INICIA SALUDO
btfss SENAL,TBQ
goto propre
bcf SENAL,TBQ
decf SALUD,W
movwf DISP1
movwf DISP2
movwf DISP3
movwf DISP4
decfsz SALUD,F ;YA SALUDO?
goto propre ;No
;*-+-*-PROGRAMA PRINCIPAL*-+-*-+-*-+-*-+-*-+-*-+-*-+-*-+-*=
propri clrwdt ;INICIA PRINCIPAL
btfss SENAL,TBQ
goto propri
bcf SENAL,TBQ
call persia ;Estado de Persianas
btfss SENAL,PAR ;Secuencia de Parada?
goto verful ;No
;----- Visualizar Cuenta Regresiva ----------
movlw 0x2F
andwf DISPD,F
bsf DISPD,5 ;Punto decimal
movf TIMOFF,W ;Tiempo Off
andlw 0x3F ;Limpia
movwf DISP1 ;byte disp
movlw 0x0F
movwf DISP2 ;byte F
movwf DISP3 ;byte F
clrf DISP4 ;byte 0
goto propri
verful btfss BCNT,CFU ;Full de personas?
goto vercon ;No
;----- Visualizar palabra FULL ----------
movlw 0x0F
andwf DISPD,F ;Sin Punto decimal
movlw 0x12
movwf DISP1 ;byte L
movwf DISP2 ;byte L
movlw 0x11
movwf DISP3 ;byte U
movlw 0x0F
movwf DISP4 ;byte F
goto propri
vercon btfsc BCNT,CN0 ;Zero personas?
goto verlin ;No
;----- Visualizar Conteo de Personas -----------
movlw 0x8F
andwf DISPD,F
bsf DISPD,7 ;Punto decimal
movf CNTD,W ;contador Dentro
movwf BYTEL ;byte bajo
clrf BYTEH ;byte alto
call hexbcd ;convierte
movf BCD00,W ;toma unidades
andlw 0x0F ;filtra
movwf DISP1 ;unidades a disp 1
swapf BCD00,W ;toma decenas
andlw 0x0F ;filtra
movwf DISP2 ;decenas a disp 2
movf BCD01,W ;toma centenas
andlw 0x0F ;filtra
movwf DISP3 ;dentenas a disp 3
movlw 0x13 ;toma P
movwf DISP4 ;P a disp 4
goto propri
;----- Visualizar LINEAS Y PUNTOS ----------
verlin movlw 0x10 ;linea -
movwf DISP1 ;disp 1
movwf DISP2 ;disp 2
movwf DISP3 ;disp 3
movwf DISP4 ;disp 4
btfss SENAL,PUN ;YA punto cambio?
goto $+7
btfsc PUNTO,7 ;YA DER?
goto $+3 ;No
rlf PUNTO,F ;Rotar izq
goto punya
bcf SENAL,PUN ;Cambio de dir
goto $+3
btfsc PUNTO,4 ;YA IZQ?
goto $+3
rrf PUNTO,F ;Rotar Der
goto punya
bsf SENAL,PUN ;Cambio de dir
rlf PUNTO,F ;Rotar izq
punya movlw 0x0F
andwf DISPD,F
movf PUNTO,W
andlw 0xF0
iorwf DISPD,F ;Escribe punto
goto propri
;---------------------------------------------
persia btfss SENAL,PER ;Abrir Persi?
goto percer ;No, cerrar si
btfsc SENAL,PAB ;Persiana Abriendo?
return
btfss PORTB,SC ;Fin carrera libre?
return ;NO
RELE_ABRIR_OFF ;Si, otro Rele OFF?
return ;NO, espera a terminar
SI_RELE_CERRAR ;SI
; NO_LED_VERDE ;DesActiva piloto
bsf SENAL,PAB
return
percer btfss SENAL,PAB ;Persiana Abriendo?
return
btfss PORTB,SD ;Fin carrera Libre?
return ;No
RELE_CERRAR_OFF ;Si, otro Rele OFF?
return ;NO
SI_RELE_ABRIR ;SI
; SI_LED_VERDE ;Activa piloto
bcf SENAL,PAB
return
;***Convertir un valor hexadecimal a Decimal (bcd)********
hexbcd bcf STATUS,0
movlw 0x10
movwf CNTBY
clrf BCD00
clrf BCD01
clrf BCD02
buc16 rlf BYTEL,1
rlf BYTEH,1
rlf BCD00,1
rlf BCD01,1
rlf BCD02,1
decfsz CNTBY,1
goto ajuste
return
ajuste movlw BCD00
movwf FSR
call ajtbcd
incf FSR,1
call ajtbcd
incf FSR,1
call ajtbcd
goto buc16
ajtbcd movf INDF,0
addlw 0x03
movwf TEMP
btfsc TEMP,3
movwf INDF
movf INDF,0
addlw 0x30
movwf TEMP
btfsc TEMP,7
movwf INDF
return
;*-+-*-+RUTINA PARA SERVICIO DE INTERRUPCIONES-+-*-+-*-+-*=
irqs movwf TEMPW ;Salva a W
swapf STATUS,W ;recupera status
movwf TEMEST ;salva estado en temp
movfw FSR ;recupera fsr
movwf TEMFSR ;salva en temporal
fintal btfsc INTCON,RBIF ;Inter por RB?
goto intrbh ;Si es, atiendala
btfsc PIR1,TMR2IF ;INT por tmr2?
goto intmr2 ;Si es. atiendala
movf TEMFSR,W ;Recupera aux fsr
movwf FSR ;restaura de nuevo FSR
swapf TEMEST,W ;Recupera estado
movwf STATUS ;restaura de nuevo STATUS
swapf TEMPW,F ;Intercambia nibb de W
swapf TEMPW,W ;y la carga de nuevo
retfie ;aqui final interrupciones
;--------interrupcion por tmr2--cada 1 ms---------------=
intmr2 bcf PIR1,TMR2IF ;quita indicador t2if
clrwdt
call mostrar ;desplegar display multiplexado
;--------base de tiempo de 50 ms aqui esta es-------------
timera decfsz TIMEA,F ;tiempo YA?
goto timerq ;NO
movlw .50
movwf TIMEA ;Carga de nuevo
call teclas ;Teclas de PortA
btfss SENAL,PER ;ON?
nop
;--------base de tiempo de quarto de segundo ---------
timerq decfsz TIMEQ,F ;tiempo YA?
goto fintal ;No aun
movlw .200
movwf TIMEQ ;carga de nuevo
bsf SENAL,TBQ ;time q
;--------base de tiempo de 1000ms Control Seg -----------
timers decfsz TIMES,F ;tiempo YA?
goto fintal ;No aun
movlw .5
movwf TIMES ;carga de nuevo
btfss SENAL,PAR ;En Parada?
goto fintal ;No, salta final interrupcion
decfsz TIMOFF,F ;YA tiempo regresivo?
goto fintal ;No, salta final interrupcion
NO_RELE_LUCES ;Apagar Luces
bcf SENAL,PER ;Cerrar Persianas
bcf SENAL,PAR ;Marca quitada
goto fintal ;salta final interrupcion
;---------interrupcion por cambio en RB4~RB7-------------=
intrbh bcf INTCON,RBIF ;Quita sena de rbif
;......Revisa sensor A...................................
versea btfss PORTB,SA ;Sensor A activo?
goto sisena ;Si
btfss BCNT,JS ;Juntos Sensores?
goto verseb ;Ve a ver sensor B
bcf BCNT,JS ;quita marca
btfsc BCNT,CA ;Conteo Asendente?
bsf BCNT,CP ;Si
goto verseb ;Ve a ver sensor B
sisena btfsc BCNT,MA ;Ya marca A?
goto verseb ;Si Ve a ver sensor B
bsf BCNT,MA ;coloca marca A
btfss BCNT,MB ;Ya marca B?
bsf BCNT,CA ;coloca conte Asendente
;------Revisa sensor B-----------------------------------=
verseb btfss PORTB,SB ;Sensor B activo?
goto sisenb ;Si
btfss BCNT,JS ;Juntos Sensores?
goto versa3 ;Ve a ver sensor A3
bcf BCNT,JS ;quita marca
btfss BCNT,CA ;Conteo Asendente?
bsf BCNT,CP ;Si
goto versa3 ;Ve a ver sensor A3
sisenb btfsc BCNT,MB ;Ya marca B?
goto versa2 ;Si Ve a ver sensor A2
bsf BCNT,MB ;coloca marca B
btfss BCNT,MA ;Ya marca A?
bcf BCNT,CA ;coloca conte desendente
;......Revisa juntos sensores Activos....................
versa2 btfsc PORTB,SA ;Sensor A activo?
goto versec ;Ve a ver sensor C
bsf BCNT,JS ;coloca marca juntos
bcf BCNT,CP ;quita marca pendiente
goto versec ;Ve a ver sensor C
;......Revisa juntos sensores desActivos.................
versa3 btfss PORTB,SA ;Sensor A desactivado?
goto versec ;Ve a ver sensor C
btfsc BCNT,CP ;Conteo Pendiente?
call conte1 ;Si
bcf BCNT,CP
bcf BCNT,MA
bcf BCNT,MB ;resetea
goto versec
;--------------------------------------------------------=
conte1 btfsc BCNT,CA ;conteo Asendente?
goto cnten1 ;Si
incf CNTS,F ;Inc salidos
bcf BCNT,CFU ;YA NO FULL
btfsc BCNT,CN0 ;Contador en Zero?
return
decfsz CNTD,F ;dec dentro ?
return
bsf BCNT,CN0 ;Zero
movlw .10
movwf TIMOFF
bsf SENAL,PAR ;SENAL de Parada
return
cnten1 incf CNTE,F ;inc entrados
bcf BCNT,CN0 ;Zero ya No
btfsc BCNT,CFU ;Contador en FULL?
return
bcf SENAL,PAR ;SENAL de Parada Cancelada
incf CNTD,F ;inc dentro
movlw MAXIMO ;maximo de personas
subwf CNTD,W ;Resta
btfsc STATUS,C ;YA AL MAXIMO?
bsf BCNT,CFU ;Marca maximo
return
;--------------------------------------------------------=
versec btfsc PORTB,SC ;Sensor C activo?
goto $+3 ;No
NO_RELE_CERRAR ;Si, Apaga Rele
NO_LED_VERDE ;DesActiva piloto
btfsc PORTB,SD ;Sensor D activo?
goto fintal ;No
NO_RELE_ABRIR ;Si, Apaga Rele
SI_LED_VERDE ;Activa piloto
goto fintal
;*******MOSTRAR 4 DISPLAYS 7 SEGMENTOS**********************
mostrar movf DIRDI,W ;dir DISP N -> W
movwf FSR ;FSR
movlw 0xF0
andwf PORTB,F ;apagar display activo
movf INDF,W ;carga dato DISP N
andlw 0x1F ;Limpia bits que Sobran
call decodi ;llamado a decodificador
movwf PORTC ;Se saca por puerta C
btfsc TEMPD,7 ;PUNTO DECIMAL?
bcf PORTC,7 ;Si
movlw 0x0F
andwf TEMPD,W
iorwf PORTB,F ;activa un solo display
btfss TEMPD,3 ;Ya los cuatro?
goto $+6 ;No, direccionar el siguiente
movlw DISP4 ;Si, carga direcion 1er disp
movwf DIRDI
movf DISPD,W
movwf TEMPD
return
bcf STATUS,C ;Quita acarreo
rlf TEMPD,F ;alista nuevo display
decf DIRDI,F ;incre direccion disp
return
;-< tecla C = Izq >----------------
teclas btfsc BCNT,CN0 ;Contador en Zero?
return ;Si
btfsc PORTA,TIZ ;Tecla pulsada?
goto notepc ;No
btfsc BECLA,TIZ ;Ya antes?
goto verted ;vea Siguiente tec
bsf BECLA,TIZ ;marca
;--< tecla Izq pulsada >--
btfss SENAL,PER ;ON Persianas?
goto $+3
bcf SENAL,PER ;Cerrar Persianas
goto verted
bsf SENAL,PER ;Abrir Persianas
goto verted ;vea Siguiente tec
;--< No tecla Der Pulsada >--
notepc bcf BECLA,TIZ
;-< tecla F = Der >----------------
verted btfsc PORTA,TDE ;Tecla pulsada?
goto notepd ;No
btfsc BECLA,TDE ;Ya antes?
return ;vea Siguiente tec
bsf BECLA,TDE ;marca
;--< tecla Derecha pulsada >--
RELE_LUCES_ON ;ON?
goto $+3
NO_RELE_LUCES
return
SI_RELE_LUCES
return
;--< No tecla Der Pulsada >--
notepd bcf BECLA,TDE
;-< tecla G = libre >----------------
verteg return
;*-+-*-+-*-+-FIN DEL PROGRAMA*-+-*-+-*-+-*-+-*-+-*-+-*-+-*=
END
PARA CARGAR contadorlobor.X,production.cof
PARA SIMULARLO
Al abrir el archivo mostrara el micro de la VENTANA ABAJO activado.
Al dar play el display mostrara un conteo del nueve a cero.
Una vez termina queda a la espera de iniciar el conteo de las personas que ingresaran.
Cuando ingresan las personas se activa el interruptor marcado ENTRADA girando el encoder,
mostrando el conteo en el display habilitando el encendido de la iluminación y subir la persiana.
Para detener el conteo se abre este mismo interruptor.
Al pulsar sobe el interruptor marcado LUCES se enciende RL3 encendiéndolas.
Al pulsar sobre el interruptor marcado PERSIANA se enciende RL2 encendiendo el motor que sube
la persiana desactivando el micro VENTANA ABAJO y accionando el micro VENTANA ARRIBA
(manualmente) deteniendo el motor, quedando listo para bajar y el led indica persiana arriba
Cuando el conteo llega a 100 mostrara en el display la palabra FULL (lleno)
Cuando el conteo de personas llega a cero, inicia un conteo de 10 segundos para apagar las luces y
bajar la persiana.
Terminado el conteo apaga luces (RL3) y baja la persiana accionando RLV1 por lo que debemos
cambiar el estado de los micros de la persiana para desactivar RL1 para detener el motor.
Para guardarlo si proteus es de una versión diferente, se debe seleccionar ISIS 7.0 desing File y
luego guardar.
CONCLUSION
Una vez realizado se evidencio que con una inversión baja se puede implementar un sistema que
al mismo tiempo ayuda a ahorrar energía que se refleja en un menor costo del consumo de la
misma, por que realiza acciones como contar el número de personas que ingresan al laboratorio
hasta un máximo de 100 y cuando salen quedando vació hace una espera de 10 segundos
apagando la iluminación y cerrando persianas.
BIBLIOGRAFIA
http://www.google.com.co/url?sa=t&rct=j&q=encoder&source=web&cd=8&cad=rja&sqi=2&ved=
0CEwQFjAH&url=http%3A%2F%2Fsites.google.com%2Fsite%2Fproyectosroboticos%2Fencoder&ei
=z8SXUf-bGuTi4AOxwoCYDg&usg=AFQjCNGjdZpF6fz2ZnHMEXXNEzrXlesWOg
http://es.wikipedia.org/wiki/2N3904
http://cmapspublic2.ihmc.us/rid=1H2F1807L-JP0SG2-J1J/encoder.pdf
http://proton.ucting.udg.mx/tutorial/Manual_PIC16F87X/Manual_PIC16F87X.pdf
www.microchip.com
http://www.unioviedo.es/ate/alberto/TEMA3-Ensamblador.pdf
Microcontroladores PIC diseño práctico de aplicaciones
Segunda edición
MC Graw Hill