Autor Tema: PROYECTO LUZ  (Leído 2452 veces)

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

Desconectado robertosa

  • PIC10
  • *
  • Mensajes: 1
PROYECTO LUZ
« en: 19 de Diciembre de 2008, 18:37:58 »
Saludos, necesito vuestra ayuda para terminar mi primer proyeco real con un microcontrolador, el ema es el siguiente....necesito encender y apagar una bombilla cada cierto tiempo( a las 11 de la noche...a las 12 y a las 6 de la mañana durane 30 min cada vez)  el microcontrolador siempre se va a encender a las 12 del medio dia...xa saber a la ora a la q se enciende y cada cierto tiempo en la ejecucion del programa se va guardando en la posicion 0 de la memoria eeprom un dato que me va a ayudar a qsi hay un corte de corriente pequeño "sepa" por donde iba en el programa y vuelva dnd estaba. El caso esque mi programa es MUY RUDIMENTARIO y queria saber como lo ariais..yo lo e probado y funciona pero seguro q hay otra forma de hacerlo mejor.AYUDA.gracias

SOBRETODO CON: según el numero guardado en la eproom saltar a la etiqueta correspondiente en vez de modificar el PCL según el numero de instrucciones que
hay entre el addwf PCL,F  y la instruccion por dnd se kedó!gracias




;********************Programa para encender y apagar la luz***********************************

   LIST   P=16F84A
   INCLUDE   <P16F84.INC>

   __CONFIG   _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC

   CBLOCK 0x0C
   Contador
   ENDC

   ORG   0x2100
   DE   0
   
   #DEFINE   BANCO1   bsf      STATUS,5
   #DEFINE   BANCO0   bcf      STATUS,5
   #DEFINE   LUZ            PORTB,0
   #DEFINE   LUZON   bsf      LUZ
   #DEFINE   LUZOFF   bcf      LUZ
      
   contador0   EQU      h'10'
   contador1   EQU      h'11'
   contador2   EQU      h'12'
   contador3   EQU      h'13'
   contador4   EQU      h'14'

   
   ORG   0
;**************INICIO**********

   goto   PROG

   ORG 4
;************INTERRUPCIONES****


   ORG 5
;**************MAIN************   


PROG   
      BANCO1
      clrf   PORTB
      BANCO0
      clrf   PORTB

   movlw   0
   call   EEPROM_LeeDato
   call   TablaVerdad
   addwf   PCL,F


;*******INICIO DE PRUEBA***********************

      call    diez         
      call   retardo
      LUZON
      bsf      PORTB,2
      call    diez         
      call   retardo
      LUZOFF

;*******EMPEZAMOS A LAS 12 de la am************
      call   hora
      call   retardo
      
      movlw   .1
      call   EEPROM_EscribeDato


;******LA 1 tarde******************************
      call   hora
      call   retardo

      movlw   .2
      call   EEPROM_EscribeDato
;******LA 2 tarde******************************
      call   hora
      call   retardo

      movlw   .3
      call   EEPROM_EscribeDato
;******LA 3 tarde******************************
      call   hora
      call   retardo

      movlw   .4
      call   EEPROM_EscribeDato
;******LA 4 tarde******************************
      call   hora
      call   retardo

      movlw   .5
      call   EEPROM_EscribeDato
;******LA 5 tarde******************************
      call   hora
      call   retardo

      movlw   .6
      call   EEPROM_EscribeDato
;******LA 6 tarde******************************
      call   hora
      call   retardo

      movlw   .7
      call   EEPROM_EscribeDato
;******LA 7 tarde******************************
      call   hora
      call   retardo

      movlw   .8
      call   EEPROM_EscribeDato
;******LA 8 tarde******************************
      call   hora
      call   retardo

      movlw   .9
      call   EEPROM_EscribeDato
;******LA 9 tarde******************************
      call   hora
      call   retardo

      movlw   .10
      call   EEPROM_EscribeDato
;******LA 10 tarde*****************************
      call   hora
      call   retardo

      movlw   .11
      call   EEPROM_EscribeDato
;******SON LAS 11 tarde************************
;***********************1er   ENCENDIDO**********
;***********************1er   ENCENDIDO**********
;***********************1er   ENCENDIDO**********
      LUZON   
      call   treinta
      call   retardo
      LUZOFF

;******LA 11.30 tarde**************************
      call   hora
      call   retardo

      movlw   .12
      call   EEPROM_EscribeDato
;******LA 12.30 tarde/noche********************
      call   hora
      call   retardo

;***********************2o   ENCENDIDO**********
;***********************2o   ENCENDIDO**********
;***********************2o   ENCENDIDO**********
      LUZON   
      call   treinta
      call   retardo
      LUZOFF

;*********YA ES LA UNA DE LA NOCHE*************

      movlw   .13
      call   EEPROM_EscribeDato
;******LA 1 madrugada**************************
      call   hora
      call   retardo

      movlw   .14
      call   EEPROM_EscribeDato
;******LA 2 madrugada**************************
      call   hora
      call   retardo

      movlw   .15
      call   EEPROM_EscribeDato
;******LA 3 madrugada**************************
      call   hora
      call   retardo

      movlw   .16
      call   EEPROM_EscribeDato
;******LA 4 madrugada**************************
      call   hora
      call   retardo

      movlw   .17
      call   EEPROM_EscribeDato
;******LA 5 madrugada**************************
      call   hora
      call   retardo

      movlw   .18
      call   EEPROM_EscribeDato
;******LA 6 madrugada**************************
;***********************2o   ENCENDIDO**********
;***********************2o   ENCENDIDO**********
;***********************2o   ENCENDIDO**********
      LUZON   
      call   treinta
      call   retardo
      LUZOFF

;*******SON LAS 6.30 de la madrugada***********
      call   treinta
      call   retardo

      movlw   .19
      call   EEPROM_EscribeDato
;*******SON LAS 7 de la madrugada**************
      call   hora
      call   retardo

      movlw   .20
      call   EEPROM_EscribeDato
;******LA 8 madrugada**************************
      call   hora
      call   retardo

      movlw   .21
      call   EEPROM_EscribeDato
;******LA 9 madrugada**************************
      call   hora
      call   retardo

      movlw   .22
      call   EEPROM_EscribeDato
;******LA 10 madrugada*************************
      call   hora
      call   retardo

      movlw   .23
      call   EEPROM_EscribeDato
;******LA 11 madrugada*************************
      call   hora
      call   retardo

      movlw   .0
      call   EEPROM_EscribeDato
;******SON LAS 12 de la madrugada**************
;******ES LA VUELTA****************************

goto   PROG
      
TablaVerdad
      addwf   PCL,F
      DT   0,.10,.13,.19,.22,.25,.28,.31,.34,.37,.40,.43,.47,.55,.58,.61,.64,.67,.70,.73,.81,.84,.87,.90,.93,.96


retardo   
bucle4
bucle3
bucle2   
bucle1
bucle0      nop
         decfsz   contador0,1
         goto   bucle0
         decfsz   contador1,1
         goto   bucle1
         decfsz   contador2,1
         goto   bucle2
         decfsz   contador3,1
         goto   bucle3
         decfsz   contador4,1
         goto   bucle4
         return

diez      movlw   d'249'             ;   retardo de 1ms = 0.001s.
         movwf   contador0
         movlw   d'249'             ;   retardo de 0.250 s arox.
         movwf   contador1
         movlw   d'10'               ;   asta aki van 60 s.
         movwf   contador2
         movlw   d'1'                ;    retardo de 1h.
         movwf   contador3
         movlw   d'1'                ;  retardo de 1/2=0.5 día.
         movwf   contador4
         return

treinta      movlw   d'249'             ;   retardo de 1ms = 0.001s.
         movwf   contador0
         movlw   d'249'             ;   retardo de 0.250 s arox.
         movwf   contador1
         movlw   d'240'               ;   asta aki van 60 s.
         movwf   contador2
         movlw   d'30'                ;    retardo de 1h.
         movwf   contador3
         movlw   d'1'                ;  retardo de 1/2=0.5 día.
         movwf   contador4
         return   

hora      movlw   d'249'             ;   retardo de 1ms = 0.001s.
         movwf   contador0
         movlw   d'249'             ;   retardo de 0.250 s arox.
         movwf   contador1
         movlw   d'240'               ;   asta aki van 60 s.
         movwf   contador2
         movlw   d'60'                ;    retardo de 1h.
         movwf   contador3
         movlw   d'1'                ;  retardo de 1/2=0.5 día.
         movwf   contador4
         return   


         INCLUDE<RETARDOS.INC>
         INCLUDE<EEPROM.INC>

   end

Desconectado handpic

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 72
Re: PROYECTO LUZ
« Respuesta #1 en: 03 de Marzo de 2009, 13:40:00 »
Hola,

No has pensado en poner algún circuito de reloj. Lo digo porque si se va la corriente el volverá al programa por donde iva, pero no sabrá que hora es y puede que el programa que esté ejecutando ya no sea el correcto.

Puedes conectarle algún circuito de estos por protocolo I2C. Luego solo tienes que ir chequeando la hora y actuar en consecuencia.

Creo que así te quedaría mejor y mas fiable. Además puedes elegir los tiempos a conveniencia, solo has de comparar registros y si son iguales.... actúa.

Saludos,

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: PROYECTO LUZ
« Respuesta #2 en: 03 de Marzo de 2009, 14:01:51 »
Como bien dice handpic no te conviene que el pic haga de RTC (real time clock) porque al perder energia te quedas sin nada.

Aqui te dejo el enlace a un RTC externo que hice yo,  que con una pilita (no consume nada) te salva de esos riesgos.

http://www.todopic.com.ar/foros/index.php?topic=24232.0

También puedes usar el DS1305 que es SPI. Si te decides por SPI avisame que te mando los ejemplos.
Ah, el DS1305 tiene un sistema de alarmas programables que pueden interrumpir al pic para "alertarlo" que han pasado 1 seg, 1min, 1 hora, 1 dia, 1 semana etc etc
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"