You are on page 1of 3

Prctica No.

4 Control de giro de un motor de CD


Objetivo Implementar un microcontrolador para el control de giro y conteo de vueltas de un motor de corriente directa, as como la utilizacin del modo de bajo consumo de energaSLEEP. Descripcin Se utilizar el microcontrolador para generar una seal de mando a un puente H (arreglo de transistores), el cual controlar el giro de un pequeo motor de CD. Tambin se utilizar un pequeo disco perforado en una orilla, el cual est fijado al rotor del motor de CD, esto con el objetivo de que un optoacoplador sea el elemento que detecte el nmero de vueltas que realiza el disco al interrumpirse el haz de luz. Al no haber luz en el receptor del optoacoplador mandar un cero lgico al pin RA4 del puerto A. Cuando exista el paso de luz en el receptor, se producir un uno lgico que se enviar al pin RA4. El motor dar cien vueltas hacia la derecha, se detendr un pequeo instante y dar cien vueltas hacia la izquierda. Cuando el proceso termine, entrar al modo de SLEEP.. Material y equipo a utilizar Computadora personal Software MPLAB Circuito Grabador de PICs Fuente de alimentacin de 5V. 1 PIC16F84A 1 Cristal Oscilador a 4 MHz 2 Capacitores de 22 pF 4 Resistencias de 10 K 1 Resistencia de 100 2 Interruptores miniatura 1 Motor de CD.
;=========================== Prctica_10 ============================== ;Mediante la implementacin del PIC16F84A se disear un circuito que ;controle el giro y nmero de vueltas de un motor de CD. ;El motor de CD debe girar 100 vueltas hacia la derecha, esperar un ;instante y girar 100 vueltas hacia de izquierda y quedar en modo de ;sleep. ;Al presionar un pulsador conectado a RA0 el motor empezar a funcionar ;Una perforacin en un disco conectado al rotor del motor de CD, ;servir como medio para interrumpir y dejar pasar la luz de un ;optocoplador el cual mandara un pulso positivo al pin RA4 y de ;esta forma se podr realizar el conteo. ;============================= INICIO ================================= #define __16f84 LIST P = 16F84A ;Comando que indica el pic usado ;============================ Etiquetas =============================== PC EQU 0X02 ;Direccin del reg. PC en hex ESTADO EQU 0x03 ;Direccin del reg. ESTADO PORT_A EQU 0x05 ;Direccin del puerto A PORT_B EQU 0x06 ;Direccin del puerto B w EQU 0x00 ;w = 0 REG_1 EQU 0x0C ;Direccin del registro REG_1 REG_2 EQU 0x0D ;Direccin del registro REG_2

REG_3 EQU 0x0E ;Direccin del registro REG_3 VALOR1 EQU 0x05 ;Valor que se asigna a VALOR1 VALOR2 EQU 0x05 ;Valor que se asigna a VALOR2 VALOR3 EQU 0x05 ;Valor que se asigna a VALOR3 AUX EQU 0x0F ;Direccin del registro AUX DIEZ EQU d'100' ;============================= Programa =============================== ORG 0 ;Vector de reset goto inicio ;Salto a inicio ORG 5 inicio call configura ;Llamada a la rutina config off movlw 0x00 ;w = 0x00 movwf AUX ;AUX = w, AUX = 0x00 movwf PORT_B ;PORT_B = 0x00 pulsa btfsc PORT_A,0 ;PORT_A<0> = 0? goto arranca ;Si, salto a arranca goto pulsa ;No, salto a pulsa arranca movlw b'10000000' ;Carga w con b'10000000' movwf PORT_B ;PORT_B = w call conteo ;Llamada a la rutina conteo movlw 0x00 ;w = 0x00 movwf PORT_B ;PORT_B = w, PORT_B = 0x00 call retar2 ;Llamada a la rutina retar2 call retar2 ;Llamada a la rutina retar2 call retar2 ;Llamada a la rutina retar2 movlw b'01000000' ;w = b'01000000' movwf PORT_B ;PORT_B = w, PORT_B = b'01000000' clrf AUX ;Borra el contenido de AUX call conteo ;Llamada a la rutina conteo movlw 0x00 ;w = 0x00 movwf PORT_B ;PORT_B = w, PORT_B = 0x00 sleep ;El PIC se duerme ;============================ Subrutinas ============================== configura bsf ESTADO,5 ;Se pone en 1 el bit 5 del reg. ESTADO movlw b'00011111' ;Carga w con el dato b'00011111' movwf PORT_A ;Configura el puerto A como entradas movlw b'00000000' ;Carga w con el dato b'00000000' movwf PORT_B ;Configura el puerto B como salidas bcf ESTADO,5 ;Se pone en 0 el bit 5 del reg. ESTADO return ;Retorno desde subrutina retardo movlw VALOR1 ;Carga w con el nmero 30 (VALOR1) movwf REG_1 ;Mueve w al registro REG_1 tres movlw VALOR2 ;Carga w con el nmero 40 (VALOR2) movwf REG_2 ;Mueve w al registro REG_2 dos movlw VALOR3 ;Carga w con el nmero 50 (VALOR3) movwf REG_3 ;Mueve w al registro REG_3 uno decfsz REG_3 ;Decrementa el valor de REG_3 en 1 goto uno ;Salto a uno decfsz REG_2 ;Decrementa el valor de REG_2 en 1 goto dos ;Salto a dos decfsz REG_1 ;Decrementa el valor de REG_1 en 1 goto tres ;Salto a tres return ;Retorno desde subrutina retar2 call retardo ;Llamada a la rutina retardo call retardo ;Llamada a la rutina retardo call retardo ;Llamada a la rutina retardo call retardo ;Llamada a la rutina retardo call retardo ;Llamada a la rutina retardo call retardo ;Llamada a la rutina retardo return ;Retorno desde subrutina conteo btfss PORT_A,4 ;El boton esta oprimido? goto conteo ;No (salto a boton) call retardo ;Si (Llamada a la rutina retardo) boton2 btfss PORT_A,4 ;El boton sigue oprimido? goto sigue ;No (salto a sigue) goto boton2 ;Si (salto a boton2) sigue incf AUX,1 ;Incrementa AUX (AUX = AUX + 1) movf AUX,w ;Mueve AUX a w

xorlw DIEZ ;Funcion Xor (es igual a 100?) btfsc ESTADO,2 ;AUX = DIEZ? (ESTADO<2> = 0) goto para ;Salto a borra (ESTADO<2> <> 0) goto conteo ;Salto a bucle (ESTADO<2> = 0) para return ;=============================== Fin ================================== End

You might also like