TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: diazpd 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
-
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
-
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!!
-
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
-
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.