13
Practica Hacer un programa que controle la intensidad luminosa en una lámpara incandescente alimentada con C.A. (Dimmer) Mediante el control del ángulo de disparo por medio del triac T1 de la tarjeta de desarrollo. Incrementar la luminosidad con la tecla S3 y decrementarla con la tecla S2. Fecha: 03 de septiembre de 2014

Programa Que Controle La Intensidad Luminosa en Una Lámpara Incandescente Alimentada Con C.a. (Dimmer) Ensamblador

  • Upload
    jose

  • View
    270

  • Download
    1

Embed Size (px)

DESCRIPTION

Lenguaje ensamblador PIC

Citation preview

Page 1: Programa Que Controle La Intensidad Luminosa en Una Lámpara Incandescente Alimentada Con C.a. (Dimmer) Ensamblador

Practica

Hacer un programa que controle la intensidad luminosa en una lámpara

incandescente alimentada con C.A. (Dimmer)

Mediante el control del ángulo de disparo por medio del

triac T1 de la tarjeta de desarrollo.

Incrementar la luminosidad con la tecla S3 y decrementarla con la tecla S2.

Fecha: 03 de septiembre de 2014

Page 2: Programa Que Controle La Intensidad Luminosa en Una Lámpara Incandescente Alimentada Con C.a. (Dimmer) Ensamblador

Introducción

Se realizo tres programas en MAPLAB. En donde el primero nosotros tuvimos el objetivo de

prender una lámpara incandescente en la salida del puerto C del microcontrolador, usando

control del ángulo de disparo por medio del triac T1 de la tarjeta de desarrollo. Después en el

segundo programa nosotros controlamos la intensidad de la corriente que llegaba al foco por medio

de las teclas del S2,S3 para decrementar o incrementar la intensidad de luz del foco. En el tercer

programa nosotros hicimos que se agrandaran los rangos del incremento o decremento de la

intensidad o corriente del foco.

Objetivo

1. Prender una lámpara con un programa,

2. Incrementar la luminosidad con la tecla S3 y decrementarla con la tecla S2. Limitar el

encendido y apagado de la lámpara.

3. Que el prender o pagar la lámpara sea en más intervalos.

Material y Equipo utilizado.

PC.

MPLAB.

Tarjeta con.

Microchip MPLAB IDE.

Microcontrolador PIC16F877A (situado en la tarjeta).

Lámpara

Diagrama esquemático de circuito.

Page 3: Programa Que Controle La Intensidad Luminosa en Una Lámpara Incandescente Alimentada Con C.a. (Dimmer) Ensamblador

Programa documentado

Programa encender la lámpara. Primer programa

list p=16F877A ; Indica el modelo de PIC que se usa ; Es una directiva de ensamblador #include <p16F877A.inc> ; definición de registros del microcontrolador ;***** DEFINICIÓN DE VARIABLES DELH EQU 0x20 DELL EQU 0x21 CONT EQU 0x22 DECRE EQU 0x23 ;RESULTADO EQU 0x22 ;********************************************************************** ORG 0x00 ; vector de reset goto MAIN ; salta al inicio del programa ORG 0x05 INICIALIA bcf STATUS,RP0 bcf STATUS,RP0 ;selacciona banco 0 bcf STATUS,RP1 ;Selecciona banco 0 clrf PORTA ;Limpia los latches de salida del puerto A bsf STATUS,RP0 ;Selecciona banco 1 purto A movlw 0x06 ;Configura todos los pines del puerto A movwf ADCON1 ;como E/S digitales movlw 0x23 ;Programa RA0, RA1 y RA5 como entradas movwf TRISA ;y RA2, RA3 y RA4 como salidas bcf STATUS,RP0 ;Selecciona banco 0 movlw 0x0C movwf PORTA ;Saca 0x0C por puerto A bcf STATUS,RP1 ;Selecciona banco 0 clrf PORTC ;Limpia los latches de salida del puerto C bsf STATUS,RP0 ;Selecciona banco 1 purto C movlw 0x06 ;Configura todos los pines del puerto C movwf ADCON1 ;como E/S digitales movlw 0x00 ;Programa RA0, RA1 y RA5 como entradas movwf TRISC ;y RA2, RA3 y RA4 como salidas bcf STATUS,RP0 ;Selecciona banco 0 movlw 0x0C movwf PORTC ;Saca 0x0C por puerto C return DELAY movf DISP,w ;Subrutina de retardo movwf DELH DEL2 movlw 0xFF movwf DELL DEL1 decfsz DELL,f goto DEL1 decfsz DELH,f goto DEL2 return

Page 4: Programa Que Controle La Intensidad Luminosa en Una Lámpara Incandescente Alimentada Con C.a. (Dimmer) Ensamblador

Programa para limitar (segundo programa )

MAIN call INICIALIA ;subrutina de inicialización de puertos SALTO btfsc PORTA,1 ; Verificamos el estado del bit 1 del puerto A,se salta la siguiente instrucción si el bit 1 es 0 goto SALTO ;Regresa ala instrucción con la etiqueta SALTO movlw 0x0C ;Mueve el Valor literal 0 al registro de trabajo movwf PORTC ;Mueve el valor del registro de trabajo al puerto C ,apaga el foco LEER btfss PORTA,1 ;Verifica el estado del bit 1 del puerto A se el bit es uno salta la siguente instruccion goto LEER ; Regresa ala instrucción con la etiqueta LEER call DELAY ;Subrutina de retardo movlw 0x02 ;Mueve el valor literal 2 al registro de trabajo W movwf PORTC ; Mueve el valor del registro de trabajo al puerto C prende el foco goto SALTO ;Regresa ala etiquta Salto END ;Fin del programa

list p=16F877A ; Indica el modelo de PIC que se usa ; Es una directiva de ensamblador #include <p16F877A.inc> ; definición de registros del microcontrolador ;***** DEFINICIÓN DE VARIABLES DELH EQU 0x20 DELL EQU 0x21 CONT EQU 0x22 DISP EQU 0x23 ;RESULTADO EQU 0x22

;********************************************************************** ORG 0x00 ; vector de reset goto MAIN ; salta al inicio del programa ORG 0x05 INICIALIA bcf STATUS,RP0 bcf STATUS,RP0 ;selacciona banco 0 bcf STATUS,RP1 ;Selecciona banco 0 clrf PORTA ;Limpia los latches de salida del puerto A bsf STATUS,RP0 ;Selecciona banco 1 purto A movlw 0x06 ;Configura todos los pines del puerto A movwf ADCON1 ;como E/S digitales movlw 0x32 ;Programa RA0, RA1 y RA5 como entradas movwf TRISA ;y RA2, RA3 y RA4 como salidas

Page 5: Programa Que Controle La Intensidad Luminosa en Una Lámpara Incandescente Alimentada Con C.a. (Dimmer) Ensamblador

bcf STATUS,RP0 ;Selecciona banco 0 movlw 0x0C movwf PORTA ;Saca 0x0C por puerto A bcf STATUS,RP1 ;Selecciona banco 0 clrf PORTC ;Limpia los latches de salida del puerto C bsf STATUS,RP0 ;Selecciona banco 1 purto C movlw 0x06 ;Configura todos los pines del puerto C movwf ADCON1 ;como E/S digitales movlw 0x00 ;Programa RA0, RA1 y RA5 como entradas movwf TRISC ;y RA2, RA3 y RA4 como salidas bcf STATUS,RP0 ;Selecciona banco 0 movlw 0x0C movwf PORTC ;Saca 0x0C por puerto C movlw 0x15 movwf DISP return DELAY movf DISP,w ;Subrutina de retardo movwf DELH DEL2 movlw 0xFF movwf DELL DEL1 decfsz DELL,f goto DEL1 decfsz DELH,f goto DEL2 return MAIN call INICIALIA ;Llama ala subrutina de inicializacion de puertos LAZO btfsc PORTA,1 ;Verifica el estado del bit 1 del puerto A se salta la siguiente instrucción si el bit es cero goto LAZO ;Regesa ala etiqueta LAZO bcf PORTC,1 ;apaga triac LAZO1 btfss PORTA,1 ;lee estado del bit 1 del puerto A se salta la siguiente instrucción si el bit es uno goto LAZO1 ;Regesa ala etiqueta LAZO1 ; leer el estado s2 con un salto condicional btfsc PORTA,5 ;Verifica el estado del bit 5 del puerto A se salta la siguiente instrucción si el bit es cero goto LAZO2 ; verifica s2, Regesa ala etiqueta LAZO ; modificar el retardo movf DISP,w ;Mueve DISP al registro de trabajo W sublw 0x30 ; Resta el valor de W con 30 btfss STATUS,Z ;Verifica la vandeja de estado cero, se salta la siguiente instrucción si el bit es uno incf DISP,f ;Incrementa 1 el valor de DISP goto LAZO3 ;Salta a la etiqueta LAZO3

Page 6: Programa Que Controle La Intensidad Luminosa en Una Lámpara Incandescente Alimentada Con C.a. (Dimmer) Ensamblador

Programa que controle la intensidad luminosa en una lámpara incandescente

alimentada con C.A. (Dimmer) tercer programa

LAZO2 ; si no esta presionado me voy a lazo2 btfsc PORTA,4 ;Verifica el estado del bit 1 del puerto A se salta la siguiente instrucción si el bit es cero goto LAZO3 ;verifica s3, Salta a la etiqueta LAZO3 movf DISP,w ; Mueve el valor DISP al registro de trabajo W sublw 0x01 ;mueve el valor literal 0x01 a registro de trabajo W btfss STATUS,Z ;Verifica la vandeja de estado cero, se salta la siguiente instrucción si el bit es uno decf DISP,f ;Decrementa un bit a DISP LAZO3 call DELAY ;Subrutina de retardo bsf PORTC,1 ;dispara triac goto LAZO ;Regresa ala etiquta LAZO END ; directiva "fin del programa "

list p=16F877A ; Indica el modelo de PIC que se usa ; Es una directiva de ensamblador #include <p16F877A.inc> ; definición de registros del microcontrolador ;***** DEFINICIÓN DE VARIABLES DELH EQU 0x20 DELL EQU 0x21 RETH EQU 0x22 DISP EQU 0x23 SEM_CONT EQU 0x24 RETL EQU 0x25 SEMI EQU 0X26 ;RESULTADO EQU 0x22 ;********************************************************************** ORG 0x00 ; vector de reset movlw 0x10 movwf SEMI ; salta al inicio del programa goto MAIN ORG 0x05 INICIALIA bcf STATUS,RP0 bcf STATUS,RP1 ;Selecciona banco 0 clrf PORTA ;Limpia los latches de salida del puerto A bsf STATUS,RP0 ;Selecciona banco 1 purto A movlw 0x06 ;Configura todos los pines del puerto A movwf ADCON1 ;como E/S digitales movlw 0x32 ;Programa RA0, RA1 y RA5 como entradas movwf TRISA ;y RA2, RA3 y RA4 como salidas bcf STATUS,RP0 ;Selecciona banco 0 movlw 0x0C movwf PORTA ;Saca 0x0C por puerto A bcf STATUS,RP1 ;Selecciona banco 0 clrf PORTC ;Limpia los latches de salida del puerto C bsf STATUS,RP0 ;Selecciona banco 1 purto C

Page 7: Programa Que Controle La Intensidad Luminosa en Una Lámpara Incandescente Alimentada Con C.a. (Dimmer) Ensamblador

movlw 0x06 ;Configura todos los pines del puerto C movwf ADCON1 ;como E/S digitales movlw 0x00 ;Programa RA0, RA1 y RA5 como entradas movwf TRISC ;y RA2, RA3 y RA4 como salidas bcf STATUS,RP0 ;Selecciona banco 0 movlw 0x0C movwf PORTC ;Saca 0x0C por puerto C movlw 0x29 movwf RETH movlw 0x10 ;le da a W un valor literal de 10 movwf SEM_CONT ;Mueve el valor de W a la variable SEM_CONT bcf PORTC,1 ;Limpia el bit 1 del Puerto C return DELAY movf RETH,w Subrutina de retardo movwf DELH DEL2 movlw 0xFF movwf DELL DEL1 decfsz DELL,f goto DEL1 decfsz DELH,f goto DEL2 return MAIN call INICIALIA LAZO btfsc PORTA,1 ; Verifica el estado del bit 1 del puerto A se salta la siguiente instrucción si el bit es cero goto LAZO ;Regresa ala instrucción en donde este la etiquta LAZO bcf PORTC,1 ;apaga triac LAZO1 btfsc PORTA,1 ; Verifica el estado del bit 1 del puerto A se salta la siguiente instrucción si el bit es cero goto LAZO1 ;Regresa ala instrucción en donde este la etiquta LAZO1 btfsc PORTA,5 ; Verifica el estado del bit 5 del puerto A se salta la siguiente instrucción si el bit es cero goto LAZO2 ;Salta a la etiqueta LAZO2 movf RETH,w ;Mueve el valor RETH a W sublw 0x30 ;Resta W con 30 btfsc STATUS,Z ;Verifica la vandeja de estado cero, se salta la siguiente instrucción si el bit es cero goto LAZO3 ;Slta a donde esta la etiqueta de LAZO3 decfsz SEMI,f ;Decrementa SEME de F goto LAZO3 ;Salta ala etiqueta LAZO3 incf RETH,f ;Incremeta RETH movlw 0x10 ;Mueve un valor literal a W movwf SEMI ; Mueve este valor literal a SEMI goto LAZO3 ;Salta ala etiqueta LAZO3 LAZO2 ; si no esta presionado me voy a lazo2 btfsc PORTA,4 ; Verifica el estado del bit 4 del puerto A se salta la siguiente instrucción si el bit es cero goto LAZO3 ;Salta a la etiqueta LAZO3 movf RETH,w ;Mueve RETH a w sublw 0x01 ;Resta W con 1 btfsc STATUS,Z Verifica la vandeja de estado cero, se salta la siguiente instrucción si el bit es cero goto LAZO3 ;Salta a la etiqueta LAZO 3 decfsz SEMI,f ;Decrementa SEMI goto LAZO3 ;Salta a la etiqueta LAZO 3 decf RETH,f ;Decrementa RETH movlw 0x10 ;Mueve el valor literal a W movwf SEMI ;Mueve el valor de w a SEMI

Page 8: Programa Que Controle La Intensidad Luminosa en Una Lámpara Incandescente Alimentada Con C.a. (Dimmer) Ensamblador

Desarrollo

El diagrama de Flujo

LAZO3 btfss PORTA,1 ; Verificamos el estado del bit 1 del puerto A,se salta la siguiente instrucción si el bit 1 es 1 goto LAZO3 ;Regresa a la etiqueta LAZO3 call DELAY ;Llama ala subrutina de retardo bsf PORTC,1 ;dispara triac goto LAZO ;Regresa a la etiqueta LAZO END ; directiva "fin del programa "

Page 9: Programa Que Controle La Intensidad Luminosa en Una Lámpara Incandescente Alimentada Con C.a. (Dimmer) Ensamblador

Programa para encender la lámpara

Creamos un proyecto nuevo en MPLAB.

Configuramos los Bits. (FIGURA 1.0)

Figura 1.0

Colocamos el código del primer programa.

Guardamos el código como .asm.

En la siguiente parte del programa es donde se hace la tarea de encienda

y apague la lámpara

En el programa se encuentra las siguientes instrucciones de la subrutina.

MAIN call INICIALIA SALTO btfsc PORTA,1 goto SALTO movlw 0x0C movwf PORTC LEER btfss PORTA,1 goto LEER call DELAY movlw 0x02 movwf PORTC goto SALTO END

DELAY movlw 0xFF

movwf DELH

DEL2 movlw 0xFF

movwf DELL

DEL1 decfsz DELL,f

goto DEL1

decfsz DELH,f

goto DEL2

return

Page 10: Programa Que Controle La Intensidad Luminosa en Una Lámpara Incandescente Alimentada Con C.a. (Dimmer) Ensamblador

Una vez hecho correctamente el programa se ensambla, y si no hay ningún error.

Programamos el PIC

Una vez programado en la tarjeta se prendió el foco. Resultados en la tarjeta (FIGURA 1.1)

FIGURA 1.1

Programa para limitar la lámpara.

Creamos un proyecto nuevo en MPLAB.

Configuramos los Bits. (FIGURA 1.0)

Figura 1.0

Colocamos el código del segundo programa.

Guardamos el código como .asm.

En la siguiente parte del programa es donde se hace la tarea de limitar el

encendido y apagado de la lámpara.

Page 11: Programa Que Controle La Intensidad Luminosa en Una Lámpara Incandescente Alimentada Con C.a. (Dimmer) Ensamblador

En el programa tiene una subrutina DELAY en donde está la variable DISP.

Una vez hecho correctamente el programa se ensambla, y si no hay ningún error de sintaxis.

Programamos el PIC

MAIN call INICIALIA ;Llama ala subrutina de inicializacion de puertos LAZO btfsc PORTA,1 ;Verifica el estado del bit 1 del puerto A se salta la siguiente instrucción si el bit es cero goto LAZO ;Regresa ala etiqueta LAZO bcf PORTC,1 ;apaga triac, foco apagado LAZO1 btfss PORTA,1 ;lee estado del bit 1 del puerto A se salta la siguiente instrucción si el bit es uno goto LAZO1 ;Regresa ala etiqueta LAZO1 ; leer el estado s2 con un salto condicional btfsc PORTA,5 ;Verifica el estado del bit 5 del puerto A se salta la siguiente instrucción si el bit es cero goto LAZO2 ; verifica s2, Regresa a la etiqueta LAZO ; modificar el retardo movf DISP,w ;Mueve DISP al registro de trabajo W sublw 0x30 ; Resta el valor de W con 30,el valor de 30 es donde el foco esta apagado btfss STATUS,Z ;Verifica la bandeja de estado cero, se salta la siguiente instrucción si el bit es uno incf DISP,f ;Incrementa 1 el valor de DISP goto LAZO3 ;Salta a la etiqueta LAZO3 LAZO2 ; si no esta presionado me voy a lazo2 btfsc PORTA,4 ;Verifica el estado del bit 1 del puerto A se salta la siguiente instrucción si el bit es cero goto LAZO3 ;verifica s3, Salta a la etiqueta LAZO3 movf DISP,w ; Mueve el valor DISP al registro de trabajo W sublw 0x01 ;mueve el valor literal 0x01 a registro de trabajo W,foco con la mayor corriente posible btfss STATUS,Z ;Verifica la bandeja de estado cero, se salta la siguiente instrucción si el bit es uno decf DISP,f ;Decrementa un bit a DISP LAZO3 call DELAY ; Subrutina de retardo bsf PORTC,1 ;dispara triac goto LAZO ;Regresa ala etiquta LAZO END ; directiva "fin del programa "

DELAY movf DISP,w

movwf DELH

DEL2 movlw 0xFF

movwf DELL

DEL1 decfsz DELL,f

goto DEL1

decfsz DELH,f

goto DEL2

return

Page 12: Programa Que Controle La Intensidad Luminosa en Una Lámpara Incandescente Alimentada Con C.a. (Dimmer) Ensamblador

Una vez programado en la tarjeta podemos controlar la intensidad del foco por medio de

las teclas S2 Y S3,ademas de que estas están limitadas, o sea al incrementar a un valor

máximo o mínimo estas ya no se incrementan o decrementan .

La tercera parte es igual que la segundo solo que ahora tenemos que agregar un contador para así

poder hacer que el encendido o apagado de la lámpara valla más lento. Simplemente le agregamos

lo siguiente.

MAIN call INICIALIA ;Inicializamos los puertos LAZO btfsc PORTA,1 ; Verifica el estado del bit 1 del puerto A se salta la siguiente instrucción si el bit es cero goto LAZO ;Regresa ala instrucción en donde este la etiquta LAZO bcf PORTC,1 ;apaga triac LAZO1 btfsc PORTA,1 ; Verifica el estado del bit 1 del puerto A se salta la siguiente instrucción si el bit es cero goto LAZO1 ;Regresa ala instrucción en donde este la etiquta LAZO1 btfsc PORTA,5 ; Verifica el estado del bit 5 del puerto A se salta la siguiente instrucción si el bit es cero goto LAZO2 ;Salta a la etiqueta LAZO2 movf RETH,w ;Mueve el valor RETH a W sublw 0x30 ;Resta W con 30 btfsc STATUS,Z ;Verifica la vandeja de estado cero, se salta la siguiente instrucción si el bit es cero goto LAZO3 ;Slta a donde esta la etiqueta de LAZO3 decfsz SEMI,f ;Decrementa SEME de F goto LAZO3 ;Salta ala etiqueta LAZO3 incf RETH,f ;Incremeta RETH movlw 0x10 ;Mueve un valor literal a W movwf SEMI ; Mueve este valor literal a SEMI goto LAZO3 ;Salta ala etiqueta LAZO3 LAZO2 ; si no esta presionado me voy a lazo2 btfsc PORTA,4 ; Verifica el estado del bit 4 del puerto A se salta la siguiente instrucción si el bit es cero goto LAZO3 ;Salta a la etiqueta LAZO3 movf RETH,w ;Mueve RETH a w sublw 0x01 ;Resta W con 1 btfsc STATUS,Z Verifica la vandeja de estado cero, se salta la siguiente instrucción si el bit es cero goto LAZO3 ;Salta a la etiqueta LAZO 3 decfsz SEMI,f ;Decrementa SEMI goto LAZO3 ;Salta a la etiqueta LAZO 3 decf RETH,f ;Decrementa RETH movlw 0x10 ;Mueve el valor literal a W movwf SEMI ;Mueve el valor de w a SEMI

LAZO3 btfss PORTA,1 goto LAZO3 call DELAY bsf PORTC,1 ;dispara triac goto LAZO END ; directiva "fin del programa "

Page 13: Programa Que Controle La Intensidad Luminosa en Una Lámpara Incandescente Alimentada Con C.a. (Dimmer) Ensamblador

En el programa tiene una subrutina DELAY en donde está la variable DISP.

Una vez hecho correctamente el programa se ensambla, y si no hay ningún error de sintaxis.

Programamos el PIC

Ensamblamos el programa en el microcontrolador y con las teclas S2,S3 se pudo observar

que se alago el intervalo de incrementar la intensidad de corriente en el foco a su vez que el

decremento se observo que se había largo el apagado según como oprimíamos la tecla de

apagado.

Conclusiones

Con esta práctica nosotros pudimos comprender el funcionamiento del dimer en la tarjeta de

desarrollo.

Se logro el objetivo deseado en la primera parte del programa que era lograr prender el foco y

observar que pasaba si modificábamos los valores del DIPS(disparo) en la subrutina DALAY.

En este caso se observaba que nosotros podíamos controlar la corriente en el foco, y averiguar qué

valores eran los mínimos y máximos en el caso de 1 para completamente encendido o 30

completamente pagado.

En el segundo programa nosotros logramos el objetivo de limitar el encendido y el pagado para que

ya no hubiera un incremento más a ya de 30 (apagado) o decremento en el caso de 1 (encendido).

En el tercer programa se logro alargar el intervalo de encendido o apagado del foco.

DELAY movf DISP,w

movwf DELH

DEL2 movlw 0xFF

movwf DELL

DEL1 decfsz DELL,f

goto DEL1

decfsz DELH,f

goto DEL2

return