▷ Temporizador programable por horas con PIC 16f628a - Microcode

En este post veremos como hacer un temporizador que funcione por horas, utilizando un pic 16F628A programado en lenguaje basic en el programa MICROCODE.

MATERIALES:

Utilizaremos los siguientes materiales para este proyecto:

  • 1 PIC 16F628A
  • 1 LCD 16x2
  • 3 Pulsadores
  • 3 Resistencias de 1k
  • 1 Resistencia de 220 Ohms
  • 1 Diodo led 
  • 1 Potenciometro de 10k

DIAGRAMA DE CONEXIONES:

EXPLICACIÓN DEL CÓDIGO:

  '****************************************************************
  '*  Name    : encXhoras.BAS                                     *
  '*  Author  : Esteban Carrillo - www.edeptec.com                *
  '*  Notice  : Copyright (c) 2022                                *
  '*          : All Rights Reserved                               *
  '*  Date    : 10/02/2021                                        *
  '*  Version : 1.0                                               *
  '*  Notes   :                                                   *
  '*          :                                                   *
  '****************************************************************
  CMCON = 7
  trisa =%011'Declaramos los puertos a0 y a1 como entradas, y el puerto a2 como salida.
  porta = 0
  
  'Nombramos los puertos a0 y a1 como pulsadorSumar y pulsadorIniciar respectivamente, haciendo referencia a los botones.
  pulsadorSumar VAR porta.0
  pulsadorIniciar VAR porta.1
  'Nombramos el puerto a2 como led
  led VAR porta.2
  
  'CREAMOS VARIAS VARIABLES
  ' Tres de tipo BYTE y dos de tipo WORD
  tiempoProgramado VAR BYTE
  tiempoTranscurrido VAR BYTE
  y VAR BYTE
  tiempoActual VAR WORD
  tiempoLimite var WORD
  
  y = 1' Le asignamos a la variable y el valor de 1
  
  ' Declaramos pines de conexión del lcd
  
  DEFINE LCD_DREG PORTB 
  DEFINE LCD_DBIT 4  
  DEFINE LCD_RSREG PORTB 
  DEFINE LCD_RSBIT 2
  DEFINE LCD_EREG PORTB 
  DEFINE LCD_EBIT 3
  
  'Creamos un loop: cicloProgramarTiempo
  cicloProgramarTiempo:
  
  ' Cada vez que presionemos el pulsadorSumar:
  '* Sumaremos la variable tiempoProgramado, esta variable ira de 0 a 24 
  '* Si la variable tiempoProgramado es mayor a 24 entonces tiempoProgramado = 0
  
      IF pulsadorSumar = 1 THEN 
          PAUSE 500
          tiempoProgramado = tiempoProgramado + 1
          
          IF tiempoProgramado > 24 THEN
              tiempoProgramado = 0
          ENDIF  
      ENDIF
  
      
      LCDOUT $fe, 1,$fe, 2, "PROGRAMAR TIEMPO"
      LCDOUT $fe,$C5, DEC tiempoProgramado  'Imprimimos el valor de la variable tiempoProgramado
      LCDOUT $fe,$C8, "HORAS"
      
     
      IF pulsadorIniciar = 1 THEN ' Si pulsamos pulsadorIniciar, nos dirigimos al loop tiempoOn
          GOTO iniciarTemporizador     
      ENDIF
  
  
  PAUSE 50      
   
  GOTO cicloProgramarTiempo' Cerramos el loop cicloProgramarTiempo
  
  iniciarTemporizador:
     
      tiempoLimite = tiempoProgramado * 60 ' *La variable tiempoLimite tomara valores de 60 a 1440. 
      
      LCDOUT $fe, 1, $fe, 2, "TIME ON: ",DEC tiempoProgramado, "Hr"' Imprimimos en el LCD el tiempo programado.   
      LCDOUT $fe,$c0, "ELAPSED T: ",DEC tiempoTranscurrido , "Hr" ' Imprimimos en el LCD el tiempo transcurrido. 
                               
      FOR tiempoActual = 0 TO tiempoLimite ' Creamos un ciclo for que ira de 0 hasta el valor de la variable tiempoLimite, esta es la pausa durante la cual estará encendido el led
      
          HIGH led ' Activamos led 
          PAUSE 60000 ' Establecemos una pausa de 1 minuto  
          
          IF tiempoActual == y * 60 THEN ' Condición para mostrar en el LCD el tiempoLimite transcurrido.
              y = y +  1
              tiempoTranscurrido =(tiempoActual/60)
              LCDOUT  $fe,$c0, "ELAPSED tiempoProgramado: ",DEC tiempoTranscurrido, "Hr" 
          ENDIF 
      NEXT tiempoActual 
  
  ' Una vez que se haya terminado el ciclo for
      
      LOW LED ' Desactivamos led 
      tiempoProgramado = 0 ' Enceramos la variable tiempoProgramado
      LCDOUT $fe, 1 ' limpiamos el LCD
      
  GOTO cicloProgramarTiempo ' Retornamos al loop cicloProgramarTiempo.  

EXPLICACIÓN DE LA PARTE DEL CICLO FOR (PAUSA POR HORAS).

Las pausas en microcode según lo que he probado pueden ser de hasta 65.500ms (65,5 segundos - 1 minuto 10 segundos), como podemos ver, no nos permite hacer una sola pausa que dure horas, lo que podemos hacer es pausas sucesivas ejemplo PAUSE 65500: PAUSE 65500... pero haciendo esto ocupamos mucho espacio de almacenamiento en el micro controlador, por este motivo utilizaremos un ciclo for.

Dentro del ciclo for estableceremos una pausa de 60.000 ms lo que es igual a 1 minuto, para hacer una pausa de 1 hora el ciclo for tendría que repetirse 60 veces porque 60 veces 60.000 es igual a 1 hora (60*60000ms = 3.600.000ms lo que es igual a 1 hora). Para determinar el numero de repeticiones según el tiempo programado (valor de la variable t), multiplicamos t * 60 y el valor de esta multiplicación la almacenamos en la variable tiempo.

tiempo = t * 60
FOR X = 0 TO tiempo
  PAUSE 60000    
NEXT  X

Le aumente una condición para que nos muestre en el LCD las horas transcurridas, para ello hice lo siguiente:

Dentro del ciclo for agregamos la siguiente linea de código IF X == y * 60 THEN, como sabemos a la variable "y" le dimos el valor de 1, entonces cuando el valor de X sea igual a 60 (en primera instancia), dentro de esta condición tenemos lo siguiente.

Sumamos el valor de y + 1, con esto lograremos que la próxima vez que ingrese a esta condición sea cuando el valor de X tenga valores múltiplos de 60 "60 = 1 hora, 120 = 2 horas, 180 = 3 horas, etc", cada vez que esto ocurra dividiremos el valor de X para 60 con esto obtendremos el numero de horas transcurridas, este valor lo almacenamos en la variable z  Ejemplo:

Si x = 180, z =  180/60 ==> 180/60 =  3 ==> z = 3, imprimimos este valor en el LCD. 

IF x == y * 60 THEN 
  y = y +  1  
  z =(x/60)
  LCDOUT  $fe,$c0,"ELAPSED T: ",DEC z, "Hr"       
ENDIF

Si quieren activar una caga de 110 - 220v con este proyecto, les recomiendo el siguiente post:

DESCARGA LA SIMULACIÓN Y EL CÓDIGO AQUÍ:

0/Post a Comment/Comments