Autor Tema: Timer 20min con 16f84a  (Leído 3372 veces)

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

Desconectado diazpd

  • PIC10
  • *
  • Mensajes: 13
Timer 20min con 16f84a
« en: 27 de Junio de 2010, 21:05:11 »
Hola a todos ! les comento que estoy renegando con algo demasiado sencillo, y que no me funciona ...  :5]

La cuestion es simple , un timer de 20 minutos con 16f84a usando el timer0 .
Al apretar S1 se activa el led indicador de funcionamiento y cuando llega a los  1200 seg se activa el transistor activando el rele y LISTO !   

 pero lo simule en proteus y no anda SE TILDA !! y ya no se que mas revisar ...

les adjunto el diseño en proteus y la copia del codigo para DEBBUGUEAR !

GRACIAS DE ANTEMANO

list p=16f84a
#include p16f84a.inc

;configuramos caracteristicas del pic
__config  _HS_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF

cuenta17seg  EQU  0x0c
cuenta20min  EQU  0x0d


ORG 0

goto inicio

ORG 5

inicio

bsf STATUS, 0x5

 movlw  b'10000000' ;RB7 como ENTRADA el resto como salidas
 movwf  TRISB

 movlw b'00000'  ;configuro el portA como salidas
 movwf  TRISA

 movlw b'01010111' ;se habilita la opcion de weak up pull-up & timer0 256 preescala
 movwf OPTION_REG

bcf STATUS, 0x5

 movlw b'11111111'
 movwf PORTB
 
 
;********************************
;*  bucle de lectura de teclado *
;********************************

bucle
 
 bcf PORTB,0         ;se lleva RB0 a 0
 btfss PORTB,7      ;se testea RB7 para comprobar S1
 call timer20min_S1  ;correspondiente a S1
 clrf cuenta17seg
 clrf cuenta20min
 
 goto bucle
 
;********************************************************
;* Timer de 20 minutos indicando tecla apretada y buzzer*
;********************************************************

timer20min_S1
 
 bsf PORTA,4  ;arranco con el rele apagado
 
 bcf PORTB,2   ;prendo led (indicador de funcionamiento)
 
 movlw .255        ;cargo variables
 movwf cuenta17seg
 movlw .70
 movwf cuenta20min

lazo1
 movlw .1
 movwf TMR0
 bcf INTCON,T0IF

loop
 btfss  INTCON,T0IF
 goto loop
 
 decfsz cuenta17seg
 goto lazo1
 
 movlw .255               ;recargo variables
 movwf cuenta17seg
 decfsz cuenta20min
 goto lazo1
 
 bsf PORTA,4             ;prendo relé
 
 return

end


Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Timer 20min con 16f84a
« Respuesta #1 en: 27 de Junio de 2010, 23:07:57 »
Hola, RA4 es de colector abierto, asi que tendras que colocar una resistencia a positivo para generar el "uno"
ademas, colocas tanto para encender como para apagar el rele, BCF...
y seria encender con BSF  y apagar con BCF porta,4

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Timer 20min con 16f84a
« Respuesta #2 en: 28 de Junio de 2010, 07:20:30 »
Aburrido en el trabajo y para ayudar a un paisano argentino me puse a hacer que funcionara :)

Acá te dejo el programa. Tiene varias variaciones respecto al tuyo, sobre todo en las entradas y salidas. Después los comparás y te fijás donde estan las "7 diferencias" :)
También me tomé el atrevimiento de hacer parpadear el led mientras el temporizador está activo , y al transcurrir el tiempo se enciende fijo y activa el relay.
Si no te gusta, entonces simplemente borrá la subrutina que está entre las lineas punteadas -------------- y reactiva ";   bcf PORTB,2   ;prendo led (indicador de funcionamiento)" quitándole la ";"
Otra cosa, usá cristal de 4mhz y prestá atención a los cambios del circuito ya que no uso el PORTA , los condensadores del xtal son de 15p o 22p y tampoco uso el RB7 sino que lo llevo directamente a masa. Tampoco utilizo las weak pullups porque tienen mala fama :P.

Lo he simulado y funciona a la perfección , aunque no me he quedado 20 minutos esperando al resultado, lo he probado con menos temporización.
He querido subirte el archivo .dsn del proteus pero no me deja... bah, te adjunto circuito.


   list p=16f84a
   #include p16f84a.inc

;configuramos caracteristicas del pic
   __config  _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF


cuenta17seg  EQU  0x0c
cuenta20min  EQU  0x0d
PDel0      equ 0x0E
PDel1      equ 0x0F
FLAG   equ 0x10
   ORG 0

   goto inicio

   ORG 5

inicio
   
    bsf STATUS,RP0

    movlw  b'00000001' ;RB0 como ENTRADA el resto como salidas
    movwf  TRISB

 
    movlw b'11010111' ;deshabilita la opcion de weak up pull-up & timer0 256 preescala
    movwf OPTION_REG

   bcf STATUS,RP0
    
   bcf PORTB,1  ;arranco con el rele apagado
    bsf PORTB,2   ; led apagado
;********************************
;*  bucle de lectura de teclado *
;********************************

bucle
 
 
    btfsc PORTB,0      ;se testea RB0 para comprobar S1
   goto bucle
   call retardo      ;retardo antirrebotes
    call timer20min_S1  ;correspondiente a S1
     goto bucle
 
;********************************************************
;* Timer de 20 minutos indicando tecla apretada y buzzer*
;********************************************************

timer20min_S1
 
 
 
 ;   bcf PORTB,2   ;prendo led (indicador de funcionamiento)
     movlw .255        ;cargo variables
    movwf cuenta17seg
    movlw .72
    movwf cuenta20min

; Con cristal de 4mhz el TMR0 incrementa (con este setting) cada 65ms

lazo1
    movlw .1
    movwf TMR0
    bcf INTCON,T0IF

loop
    btfss  INTCON,T0IF
    goto loop

;-----------------------------------------------------------------------------------------------------------
;He incluido esta rutina para hacer parpadear el LED cuando se ha activado el timer, si lo ves innecesario
; simplemente borrala. AL finalizar el retardo y activar el relé, el led enciende fijo.
   btfss FLAG,0
   goto ledon
   goto ledoff

ledon    bcf PORTB,2
      bsf FLAG,0
      goto continua
ledoff    bsf PORTB,2
      bcf FLAG,0
      goto continua
;-----------------------------------------------------------------------------------------------------------

continua
     decfsz cuenta17seg,1
    goto lazo1

 ;En este punto han transcurrido 16,65 segundos (65ms * 255 = 16,6 segundos)
    movlw .255               ;recargo variables
    movwf cuenta17seg
    decfsz cuenta20min,1
    goto lazo1

;En este punto han transcurrido 19,92 minutos
;16,65 * 72 = 1198,8 segundos (19,92 minutos)
    bsf PORTB,1             ;prendo relé
   bcf PORTB,2         ;prendo led fijo
     return


;Retardo 40ms

retardo  movlw     .93       ; 1 set numero de repeticion  (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .71       ; 1 set numero de repeticion  (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  
        decfsz    PDel1, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
PDelL3  goto PDelL4         ; 2 ciclos delay
PDelL4  goto PDelL5         ; 2 ciclos delay
PDelL5  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.

   end



Un abrazo y vamos ARGENTINA!!
« Última modificación: 28 de Junio de 2010, 07:31:44 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado diazpd

  • PIC10
  • *
  • Mensajes: 13
Re: Timer 20min con 16f84a
« Respuesta #3 en: 28 de Junio de 2010, 11:34:32 »
Muchisimas gracias  !!!    ahora mismo lo voy a probar  :-/

 en esto de los pics sigo siendo un novato que intenta e intenta   :oops:..    pero cuando no anda y se complica por suerte lo tengo a UDS que son unos genios programando estos bichitos  y me pueden ayudar con mis proyectos iniciales 




Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Timer 20min con 16f84a
« Respuesta #4 en: 28 de Junio de 2010, 12:15:03 »
De nada. Y acordate que nadie nació sabiendo , todos estuvimos en tu mismo estado de confusión al principio. Pero como esto de los pics es un VICIO ya vas a ver como le agarrás el ritmo enseguida  :mrgreen:
Cualquier cosa o duda que tengas en un futuro mandame un privado o simplemente posteá tu duda. Generalmente miro los foros todos los dias, así que te responderé a la brevedad.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"