ESCUELA SUPERIOR POLITÉCNICA DEL

LITORAL
FIEC

Proyecto de Electrónica 2
Tema:
Banda Transportadora con Contador (usando un
censor de fotocelda) y control de velocidad
Estudiantes
Jonathan Recalde
Paralelo: # 1

2012 – 1° TÉRMINO

El programa principal contiene un lazo infinito en espera de la interrupción. en los displays se puede ver que el conteo llega a 99 en este momento se activa un diodo el cual indica que a llegado al máximo de conteo que es 99. se seguirá censando tantas veces como pase el .  Las personas van pasando de una en una cerca del circuito. terminada la cual retorna al programa principal mediante la instrucción RETFIE.1) Especificaciones Técnicas del proyecto  Las personas pasan por la fotocelda. la cual comienza por el proceso de conteo. El número de personas que pasan por la fotocelda se va visualizando en dos displays de siete segmentos y mostrado en binario por un grupo de siete diodos leds. 2) Diagrama de bloques SENSOR DE INICIO PIC LED VISUALIZADORES EN BINARIO DISPLAYS VISUALIZADORES EN DECIMAL 3) Diagrama de flujo MAIN VARIABLES ACCESO A PUERTOS SENSOR INICIO ESPERA DE INTERRUPCION REGISTRO DEL NUMERO DE PERSONAS ACTIVA ALARMA RETFIE Definimos variables para accesar a los puertos luego la interrupción se hace por medio de un sensor en este caso es una fotocelda el cual es guardado en un registro llamado número de personas. Luego de la cual se encera y comienza el conteo de nuevo. una fotocelda determina su presencia y envía un pulso por persona a la entrada de interrupción externa del PIC. Es Decir que al detectarse una persona se produce una interrupción externa y el programa irá a atender esta subrutina.

1 #define display_uni PORTB. .etiqueta bcf display_dec .INTEDG .interrupcion goto ServicioInterrupcion . pone al registro de trabajo a 0 call Binario_a_7Segmentos . clrf decena . cuando este registro llega a 99 se activa una alarma en este caso se visualizara un diodo led el cual se encenderá.3 .define que el puertoB del pin 3 es led verde org 0.seteos del pic principal call seteos_pic. apaga el led verde bsf OPTION_REG. Inicializa el contador y lo visualiza. Inicializa el contador y lo visualiza. ir a programa principal org 4.apaga el display_uni .mueve otro 0 al registro de tabajo call Binario_a_7Segmentos .variables que se utilizan CBLOCK 0x20 Contador decena unidad decena_7seg unidad_7seg ENDC #DEFINE Pulsador PORTB. clrf unidad . llama a la funcion movwf unidad_7seg . Inicializa el contador y lo visualiza. 4) LISTADO DEL PROGRAMA FUENTE list p=16F887 #include "P16f887. habilita la interrupcion general y la RB0 la externa movlw 0x00 .del Puerto B.número de personas.INC" .llama a la funcion movwf decena_7seg . Interrupción INT se activa . Línea donde se conecta el pulsador.por flanco de bajada.enciende el dispy_dec . bcf OPTION_REG. clrf Contador .encendido de display .2 #define led_verde PORTB.NOT_RBPU .0 #define display_dec PORTB.mueve a la variable movlw 0x00 . . cambia de banco al banco c clrf PORTC .call VisualizaContador movlw b'10010000' .mueve al registro de trabajo decena_7seg movwf PORTC bsf display_dec bcf display_uni . movwf INTCON .apaga el display_dec bcf display_uni . Habilita la interrupción INT y la general. apaga el display_uni movfw decena_7seg .carga al regsitro de trabajo el puertoC .almacena en la variable decena_7seg lazo_infinito . se limpia el puerto C clrf PORTD . Activa las resistencias de Pull-Up . función que llama a seteo_pic banksel PORTC . .inicio del programa goto principal. se limpia el puerto D bcf led_verde .

call Retardo_10ms . Era un rebote y por tanto sale.movwf decena call Binario_a_7Segmentos Binario_a_7Segmentos movwf decena_7seg decena_7seg movfw BCD_Unidades .etiquetea . Comprueba si es un rebote. A NSELH para decir que es entrada o salida digital clrf ANSELH .llamada a Retardo_10ms goto lazo_infinito .salida al puerto c clrf TRISD return .99 .llama a la funcion Retardo_2s .muevo contador al puertoB donde estan los led .btfsc Pulsador . Subrutina de servicio a la interrupción.mueve al registro de trabajo a la variable .apaga el display_dec bcf display_uni .movwf unidad . Incrementa un contador y lo visualiza.cambia de banco y se dirige al registro . Espera a que se estabilice el nivel de tensión.encera contador bsf led_verde .************************************************* .5 .enciende display_uni .goto FinInterrupcion .vuelve a la etiqueta .apaga display_dec .llama a la funcion Retaro_de_10ms bcf display_dec .cargo al registro de trabjo el rb0 como entrada movwf TRISB . entrada en portb_0 clrf TRISC .F .Z . . se abre el banco en 1 banksel ANSELH .cargo al registro de trabajo contador sublw .dirigo al banco del TRISB para dejarlo como entrada salida movlw b'000000001' .carga al registro de trabajo unidad_7seg movwf PORTC bcf display_dec bsf display_uni call Retardo_10ms .carga al registro de trabajo con decenas .registra la bandera del status goto ok . Se debe visualizar en BCD.muevo contador al registro de trabajo .W movwf PORTD call BIN_a_BCD movfw BCD_Decenas .valor maximo 99 btfss STATUS. .carga lo que tiene el registro de trabajo al puertoC .enciende led verde call Retardo_2s bcf led_verde .carga en el registro de trabajo BCD_unidades .llama a la funcion . movfw Contador .apaga led verde ok VisualizaContador movf Contador. . Incrementa el contador y lo visualiza.bsf STATUS.apaga el display_uni movfw unidad_7seg .************************************************* seteos_pic . .la bandera es 0 va a OK clrf Contador . incf Contador.**************AREA DE FUNCIONES****************** . ServicioInterrupcion call Retardo_20ms .vuelve digital al puerto banksel TRISB .

El código 7 segmentos para el "1". . El código 7 segmentos para el "4". Retorna y rehabilita las interrupciones . El código 7 segmentos para el "3". . . . Tabla para display de 7 segmentos.call Binario_a_7Segmentos movwf unidad_7seg FinInterrupcion bcf INTCON. El código 7 segmentos para el "0". Limpia flag de reconocimiento (INTF). El código 7 segmentos para el "5". . .INC> end 5) Circuito en PROTEUS .INC> include <BIN_BCD. El código 7 segmentos para el "2". . El código 7 segmentos para el "8". El código 7 segmentos para el "7".F Tabla retlw 3Fh retlw 06h retlw b'01011011' retlw 4Fh retlw 66h retlw 6Dh retlw 7Dh retlw 07h retlw 7Fh retlw 67h include <RETARDOS. . . . .finalizacion del programa .. El código 7 segmentos para el "9". .INTF retfie (GIE=1). . El código 7 segmentos para el "6". mueve el registro de trabajo a la variable .AREA DE FUNCIONES Binario_a_7Segmentos addwf PCL.

que nos permite comprobar que el circuito está correctamente polarizado y R1 es la resistencia que limita el paso de la corriente a través del diodo. Cada vez que la onda cuadrada este en nivel alto. En el circuito mostrado podemos notar diferentes elementos pasivos los cuales cumplen un rol importante en el funcionamiento de este diseño. para proteger a los elementos que conforman la red. La idea es que aplicando esa onda cuadrada al motor. se pueda obtener una variación del voltaje promedio mediante la variación de las características de dicha onda. es decir que no se mantiene en un solo estado. es por ello que se encuentran dos capacitancias de entrada C1 y C3. en donde diferentes elementos permiten que esté configurado de manera estable. hace que el transistor Q1 entre en conducción. El dispositivo fundamental del circuito es el integrado 555 nombrado anteriormente.Control de Velocidad de motor DC R2 1kΩ R5 R1 470Ω VCC OUT C4 1µF LED1 D1 1N4148 RST C1 100nF S2 MOTOR 100kΩ 50% Key=A A1 V1 12 V D3 1N5401 M Ilustración 1: Circuito de control de velocidad de motor DC DIS D2 1N4148 THR TRI C3 100nF CON GND Q1 555_VIRTUAL R4 C2 100nF 10Ω IRFZ24N R3 1kΩ Para el control de la velocidad de un motor DC existen varios métodos. las cuales permiten el paso moderado de voltaje al circuito que esta expenso a esos cambios producidos por el encendido. apagado o algún corte inesperado de la energía. por lo tanto se energiza el motor. Por ejemplo mediante una resistencia variable se puede limitar la corriente que este consume. Pero para nuestro proyecto la mejor alternativa fue utilizar un control de velocidad electrónico el cual permitirá ajustar la cantidad de potencia que se entregará al motor. por lo tanto se genera una onda cuadrada en donde el nivel alto es producido por la carga del capacitor C4 a través del potenciómetro R3 en conjunto con la resistencia R2. Algo importante en esta clase de circuitos electrónicos es evitar los cambios brucos en la energía. y el nivel bajo es producido por la descarga del capacitor C4 a través del potenciómetro R3. este ciclo es gracias a los diodos D2 y D3. donde el diodo D2 permite el paso de la corriente para producir la carga del capacitor y el diodo D3 permite el paso de la corriente para la descarga del capacitor. de los cuales podemos nombrar a R1 y D1 en donde D1 es un diodo LED. Cuando la onda cuadrada está en nivel bajo el transistor Q1 de apaga y por lo tanto el motor no recibe corriente durante ese periodo de . Para ello se construyó un circuito basado en el circuito integrado 555 que se configuró como un oscilador estable para generar una onda cuadrada. con los niveles de voltaje y corriente apropiados.

Dado que el motor conectado en la salida puede exigir varios amperios. El transistor Q1 nombrado anteriormente es un MOSFET de potencia IRFZ22. Además se debe tener en cuenta el directorio de ANSEL y ANSELH para que los pines sean configurados como entradas o salidas analógicas y no tener problema con la adquisición de datos del sistema. estos sucesos pueden ser externos o internos. estas son decisivas para el desarrollo del proyecto puesto que sin estas dos líneas resulta imposible detectar cualquier tipo de interrupción además se debe recordar ubicar resistencias en las salidas para cuidar los elementos. lo cual también afectaría el tiempo de presentación del led. donde ahorramos espacio al no conectarlas. En este proyecto se usa para la interrupción de RB0 lógica negada para realizar la interrupción. algún error en los bits correspondientes a otro tipo de interrupción pueden dar errores en la compilación del programa. Esto debido a que por default el PIC 16F887 viene seteado para 8 entradas analógicas y si lo que se necesitan son entradas y salidas digitales debemos desactivar esas entradas analógicas ingresando el valor que se indica en el registro ADCON1. se utilizó un disipador de calor en el transistor para evitar que este sufra daños por altas temperaturas y para el correcto funcionamiento del motor se ubicó el diodo D4.  Concluyo que la parte más importante del código es la habilitación de la interrupción externa por medio del bit INTE y GIE en el registro INTCON.  Se podría implementar un circuito externo con el cual se pueda variar el tiempo en el que se presenta los números en los displays. 7) Recomendaciones  Para que el PIC 16F887 compile correctamente deberá hacer al registro ADCON1=7 en el BANCO 1. el cual permite mantener un voltaje estable en los extremos del motor. siendo en esta interrupción un pulso externo en la patita RB0/INT que se activa con el cuarto bit del registro Intcon además se debe activar el séptimo bit del mismo registro para permitir las interrupciones. 6) CONCLUSIONES  La interrupción es un suceso asincrónico que provoca desviaciones del flujo normal de ejecución de instrucciones. a pesar de ser tan sólo dos líneas.tiempo. cabe recalcar que la frecuencia de la señal de salida esta determina por el capacitor C4 en donde: Para evitar interferencias en la onda cuadrada de salida se ubicó el capacitor C2 en el pin 5 (control).  Tener cuidado al asignar el vector de interrupción ya que al estar habilitado GIE. .  La ventaja de activar la resistencias de Pull-Up internas por medio del bit 7 del registro Option. ya que este pin no es usado en la configuración estable. conectar o no resistencias externas no conlleva grandes diferencias como si lo haría en la implementación física. ya que al simular en Proteus.