Autor Tema: Control de Potencia / Dimmer con 16F84A  (Leído 8945 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado clements3rd

  • PIC10
  • *
  • Mensajes: 24
Control de Potencia / Dimmer con 16F84A
« en: 14 de Marzo de 2010, 03:16:44 »
Buenos Dias a todos! Como estan?
He estado haciendo algunos programillas y quise compartir este con ustedes.

Se trata de controlar el encendido de un bombillo y un motor DC (Luminosidad y Velocidad, respectivamente) mediante un sensor de luz, representado en este caso por una fotoresistencia.

Aqui el Esquema electrico:


La fotoresistencia va conectada a un potenciometro, el cual sirve para calibrar la sensibilidad del mismo a la luz. Esa pasa a travez de 4 comparadores, cada uno con un valor diferente (1, 2, 3 y 4 volts), estos valores solo los que haran varias la luminosidad del bombillo y la velocidad del motor. Mientras mas oscuridad exista, mas rapido andará el motor y alumbrara mucho mas el bombillo.

La señal generada por los comparadores (LM324 en este caso) es la que le dará el codigo al PIC 16F84A, leida a travez del puerto A. El PIC comparará el valor para saber cuanta iluminacion hay en el entorno y enviar las señales por RB1 y RB2 para el encendido del motor y el bombillo.

A traves del puerto RB0 será recibida la señal de la red electrica pasada por un transformador 120V:12V y adecuada con una resistencia de 1M, para de esta manera hacer el detector del cruce por cero, y de esta manera saber en que momento enviar las señales de disparo a ambas cargas.

Aqui les dejo el Codigo en Asembler:

Citar
   
LIST      P=16F84A
INCLUDE   <P16F84A.INC>   
__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

     
;Definicion de Puertos y Variables   
STATUS   EQU      03H
PORTA   EQU      05H
PORTB   EQU      06H
      CBLOCK   20H
      PDel0
      PDel1   
      Del0   
      Del1   
      ENDC

#DEFINE   BANCO_1   BSF   STATUS,RP0
#DEFINE   BANCO_0   BCF   STATUS,RP0   

      ORG      00H
      GOTO   INICIO
         ORG      04H
         ORG      10H

INICIO   BANCO_1
      MOVLW   B'11111'
      MOVWF   TRISA         ;Puerto A Usado como Entrada
      MOVLW   B'00000001'
      MOVWF   TRISB         ;Puerto B Usado como Salida, RB0 como entrada
         BANCO_0

INICIA   BCF      STATUS,Z
      CLRF           PORTA
      CLRF           PORTB         ;Limpiando Puertos
               MOVF   PORTA,W
      XORLW   B'00000'
      BTFSC   STATUS,Z
      CALL           CERO         ;% Para las cargas
      MOVF   PORTA,W
      XORLW   B'00001'
      CALL           VEINTICINCO      ;% Para las cargas
      MOVF   PORTA,W         
      XORLW   B'00011'
      CALL           CINCUENTA      ;% Para las cargas
      MOVF   PORTA,W
      XORLW   B'00111'
      CALL           SETENTAYCINCO   ;% Para las cargas
      MOVF   PORTA,W
      XORLW   B'01111'
      CALL           CIEN         ;% Para las cargas
      GOTO   INICIA


CRUCE   BTFSS   PORTB,0
      RETURN
      GOTO   CRUCE
      
CERO   BCF      PORTB,1
      BCF      PORTB,2
      GOTO   INICIA

VEINTICINCO
      CALL           CRUCE
      BCF      PORTB,1      ; BOMBILLO APAGADO 25%
      BSF      PORTB,2      ; MOTOR ENCENDIDO 25%
      CALL           RET1
      CALL           RET1
      CALL           RET2
      BCF      PORTB,1      ; BOMBILLO APAGADO 50%
      BCF      PORTB,2      ; MOTOR APAGADO 50 %
      CALL           RET2
      CALL           RET2
      CALL           RET1
      CALL           RET1
           CALL    RET1
      CALL    RET1
      BSF      PORTB,1      ; BOMBILLO ENCENDIDO 25%
      BCF      PORTB,2      ; MOTOR APAGADO 25 %
      CALL      RET1
      CALL     RET1
      CALL    RET2
      RETURN

CINCUENTA   
            CALL   CRUCE
      BCF   PORTB,1      ; BOMBILLO APAGADO 50%
      BSF   PORTB,2      ; MOTOR ENCENDIDO 50%
      CALL   RET1
      CALL   RET1
      CALL   RET1
      CALL   RET1
      CALL   RET2
      CALL   RET2
      BSF   PORTB,1      ; BOMBILLO ENCENDIDO 50%
      BCF   PORTB,2      ; MOTOR APAGADO 50%
      CALL   RET1
      CALL   RET1
      CALL   RET1
      CALL   RET1
      CALL   RET2
      CALL   RET2
      RETURN

SETENTAYCINCO
            CALL   CRUCE
      BCF   PORTB,1      ; BOMBILLO APAGADO 25%
      BSF   PORTB,2      ; MOTOR ENCENDIDO 25%
      CALL   RET1
      CALL   RET1
      CALL   RET2
      BSF   PORTB,1      ; BOMBILLO ENCENDIDO 50%
      BSF   PORTB,2      ; MOTOR ENCENDIDO 50%
      CALL   RET2
      CALL   RET2
      CALL   RET1
      CALL   RET1
      CALL   RET1
      CALL   RET1
      BSF   PORTB,1      ; MOTOR ENCENDIDO 25%
      BCF   PORTB,2      ; MOTOR APAGADO 25%
      CALL   RET1
      CALL   RET1
      CALL   RET2
      RETURN

CIEN      CALL           CRUCE
      BSF      PORTB,1      ; BOMBILLO ENCENDIDO 100%
      BSF      PORTB,2      ; MOTOR ENCENDIDO 100%
      CALL    RET1
      CALL    RET1
      CALL    RET1
      CALL    RET1
      CALL    RET1
      CALL    RET1
      CALL    RET1
      CALL    RET1
      CALL    RET2
      CALL    RET2
      CALL    RET2
      CALL    RET2
      RETURN


; RETARDOS
;------------------------------------------------------------- 1ms
RET1    movlw     .248     ; 1 set numero de repeticion
           movwf     Del0     ; 1 |
Loop0  clrwdt             ; 1 clear watchdog
           decfsz    Del0,1   ; 1 + (1) es el tiempo 0  ?
           goto      Loop0    ; 2 no loop
DelL1   goto      DelL2    ; 2 ciclos delay
DelL2   clrwdt             ; 1 ciclo delay
           return             ; 2+2 Fin.
;-------------------------------------------------------------

;------------------------------------------------------------- 0,08ms
RET2     movlw     .18       ; 1 set numero de repeticion
            movwf     PDel0     ; 1 |
PLoop0  clrwdt              ; 1 clear watchdog
            decfsz    PDel0,1   ; 1 + (1) es el tiempo 0  ?
            goto      PLoop0    ; 2 no loop
PDelL1  goto      PDelL2    ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
            return              ; 2+2 Fin.
;-------------------------------------------------------------


END


PD: Recuerden colocarle el Cristal y todos esos detallitos que le hacen falta al PIC en el esquema electrico.

Espero que les sirva de algo.

Saludos!

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 178
Re: Control de Potencia / Dimmer con 16F84A
« Respuesta #1 en: 15 de Marzo de 2010, 13:21:16 »
gracias por el aporte asi todos continuamos aprendiendo

Desconectado clements3rd

  • PIC10
  • *
  • Mensajes: 24
Re: Control de Potencia / Dimmer con 16F84A
« Respuesta #2 en: 17 de Marzo de 2010, 20:59:07 »
Gracias a ti por tu comentario!

La gente lee y no dice nada  :cry:

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Control de Potencia / Dimmer con 16F84A
« Respuesta #3 en: 17 de Marzo de 2010, 21:11:22 »
Muy buen trabajo!
Muy bien realizado el programa y sus comentarios, y buena presentacion.

Cuando empece en el foro ojala me hubiera organizado asi!! :lol: :lol:

Felicitaciones!!
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Control de Potencia / Dimmer con 16F84A
« Respuesta #4 en: 17 de Marzo de 2010, 21:11:46 »
 ;-) ;-)  :-/ esta muy bueno, hace un dimmer me parece a mi de los desarrollos aunque sencillo es muuyyyy bueno verlo funcionar, este es como uno de los proyectos que son casi obligado lanzarse a realizarlo.

por otro lado, para tener en cuenta, creo que de manera general las rutinas de tiempo es muy bueno hacerlas con timer para no clavar al micro en los retardos por ciclos de maquina.

saludos y  :-/ :-/
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado clements3rd

  • PIC10
  • *
  • Mensajes: 24
Re: Control de Potencia / Dimmer con 16F84A
« Respuesta #5 en: 17 de Marzo de 2010, 23:51:16 »
Muchas gracias MGLSOFT y jhozate

Respecto a lo del Timer, tienes toda la razon. Sin embargo la idea que se nos propuso fue hacerlo con lo basico, a manera de principiantes, sin indagar en Timers, PWM y esas cosas.

Saludos!

Desconectado brotherprogramer

  • PIC10
  • *
  • Mensajes: 1
Re: Control de Potencia / Dimmer con 16F84A
« Respuesta #6 en: 26 de Septiembre de 2010, 16:00:02 »
disculpa como podria tener solo el codigo en assembler del bombillo solo para el mismo circuito
te lo agradeceria y....

 muy buen tema hee..


 

anything