Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

09/05/2007 #21


ya sustitui tu rutina retardo por la mia destello, ahora bien, estoy viendo la tuya y dice esto...


RETARDO movlw 0xFF
movwf TRES
WAIT movlw 0xFF
movwf DOS
movlw 0xFF
ESPERA movwf UNO
decfsz UNO,f
goto $-1
decfsz DOS,f
goto ESPERA
decfsz TRES,f
goto WAIT
return

La etiqueta Espera, no deberia en el decremento de UNO?, por que si no cada vez que vas a Espera se vuelve a cargar el contenido de W, otra casa, para que se va al wait de vuelta, no daria un bucle infinito asi? estoy confundido!! jeje
09/05/2007 #22


Tienes razón, cometi un error ahi, la etiqueta espera va en la isntruccion anterior a movwf UNO, esto funciona de esta manera:

1. al entrar a la subrutina cargas las tres variables con 0xFF,
2. Se decrementa UNO, hasta que se vuelve cero, salta y se decrementa en uno DOS y saltas a espera, vuelves a cargar UNO con 0xFF
3. Se repite el paso anterior hasta que se DOS llega a cero y salta para decrementar TRES, se decrementa TRES en uno y saltas a la etiqueta WAIT, ahi se carga DOS con 0xFF, se carga UNO con 0xFF y vuelve al paso 2,
4. Esto lo hace hasta que TRES llega a cero, salta y sale de la subrutina RETURN...

Espero haber sido claro, ojala que ahora si te funcione... hazlo de esta manera y si tienes dudas preguntame...

RETARDO movlw 0xFF
movwf TRES
WAIT movlw 0xFF
movwf DOS
ESPERA movlw 0xFF
movwf UNO
decfsz UNO,f
goto $-1
decfsz DOS,f
goto ESPERA
decfsz TRES,f
goto WAIT
return
09/05/2007 #23


RETARDO movlw 0xFF
movwf TRES
WAIT movlw 0xFF
movwf DOS
ESPERA movlw 0xFF
movwf UNO
decfsz UNO,f
goto $-1
decfsz DOS,f
goto ESPERA
decfsz TRES,f
goto WAIT
return

Haber, yo pongo un CALL RETARDO, bien, lo que hace es cargar 0xFF en tres, luego en dos, luego en uno, decremente uno, hace ese goto $-1 (que todabia no tengo muy claro para que es), decrementa dos, si es 0 vuelve a espera, si es 1, decrementa tres, y vuelvo obiamente retorna, por que nunca va a decrementar de una sola pasada tres, entoces salta la secuencia de WAIT y va directo a return...

Capas que estoy entendiendo mal... es muy mu posible.
09/05/2007 #24


Haber, yo pongo un CALL RETARDO, bien, lo que hace es cargar 0xFF en tres, luego en dos, luego en uno, decremente uno, hace ese goto $-1 (que todabia no tengo muy claro para que es), decrementa dos, si es 0 vuelve a espera, si es 1, decrementa tres, y vuelvo obiamente retorna, por que nunca va a decrementar de una sola pasada tres, entoces salta la secuencia de WAIT y va directo a return...

Primero el goto $-1 simplemente salta a la instrucción anterior, la explicación larga sería que el $-1 le resta uno al contador, hay un contador del programa donde cada instrucción tiene un numero consecutivo el contador es el PC, si en el momento que se ejecuta goto $-1 el PC es igual a 10 la siguiente instruccion que realiza es la que se encuentra en el lugar PC=9.

Siguiendo el punto, nunca se va a decrementar TRES de una sola pasada, es por eso que la instrucción va así

decfsz TRES,f
goto WAIT
RETURN

Se decrementa TRES en uno, y luego saltas a WAIT para cargar otra vez UNO y DOS porque para llegues a decrementar a TRES, UNO y DOS ya llegaron a cero. Cuando TRES llega a cero, la instruccion de goto WAIT ya no se ejecuta, se salta, y se ejecuta RETURN, con esto sales de la subrutina,´para esto ya transcurrio mucho tiempo.

Una pregunta, en tu programa ya cambiaste de lugar el goto WAIT y el RETURN???? Debe estar escrito asi como te lo puse arriba.

Me dices como vas!!!!!!
09/05/2007 #25


Si lo puse como vos decis, pero no, apreto el boton el el proteus, y la alarma nunca se activa, por ahi me estoy mandando algun lio yo, pero es raro... es como que nuca saliera del ratado...

te paso el programa completo:


LIST p=16f84A

port_a equ 0x05
port_b equ 0x06
trisb equ 0x06
trisa equ 0x05
estado equ 0x03
banco equ 5
UNO equ 0x12
DOS equ 0x12
TRE equ 0x14

BSF estado,banco
MOVLW B'00011'
MOVWF trisa
MOVLW B'00000000'
MOVWF trisb
BCF estado,banco

clrf port_a
clrf port_b

inicio movlw b'00000100'
movwf port_b
btfsc port_a,0
goto armar
goto inicio

armar BTFSC port_a,0
GOTO $-1
movlw b'00000001'
movwf port_b
call RETARDO
btfsc port_a,1
goto sonar
btfsc port_a,0
goto desarmar
movlw b'00000000'
movwf port_b
goto armar


desarmar BTFSC port_a,0
GOTO $-1
goto inicio

sonar clrf port_a
clrf port_b
movlw b'00000010'
movwf port_b
movlw b'00000000'
movwf port_b
btfsc port_a,0
goto desarmar
goto sonar

RETARDO movlw 0xFF
movwf TRE
WAIT movlw 0xFF
movwf DOS
ESPERA movlw 0xFF
movwf UNO
decfsz UNO,f
goto $-1
decfsz DOS,f
goto ESPERA
decfsz TRE,f
goto WAIT
return

end
09/05/2007 #26


intenta bajando el valor de la variable TRES, empieza con valores bajos como 0x05 o menos para que descartes que sea por exceso de tiempo....

Saludos
09/05/2007 #27


No, parpadea muy rapido, o sea preciono el boton, y se activa al toque.
09/05/2007 #28


Entonces por ahi va ve subiendo el valor de TRES hasta que tengas el tiempo que deseas...
09/05/2007 #29


Nop, por mas que le ponga 0xFFFFFFFF, no me da ni 5 de bola, al toque se arma.
10/05/2007 #30


Pasame el programa como lo tienes ahorita....

Saludos
10/05/2007 #31


LIST p=16f84A

port_a equ 0x05
port_b equ 0x06
trisb equ 0x06
trisa equ 0x05
estado equ 0x03
banco equ 5
UNO equ 0x12
DOS equ 0x12
TRE equ 0x14

BSF estado,banco
MOVLW B'00011'
MOVWF trisa
MOVLW B'00000000'
MOVWF trisb
BCF estado,banco

clrf port_a
clrf port_b

inicio movlw b'00000100'
movwf port_b
btfsc port_a,0
goto armar
goto inicio

armar BTFSC port_a,0
GOTO $-1
call RETARDO
movlw b'00000001'
movwf port_b
btfsc port_a,1
goto sonar
btfsc port_a,0
goto desarmar
movlw b'00000000'
movwf port_b
goto armar


desarmar BTFSC port_a,0
GOTO $-1
goto inicio

sonar clrf port_a
clrf port_b
movlw b'00000010'
movwf port_b
movlw b'00000000'
movwf port_b
btfsc port_a,0
goto desarmar
goto sonar

RETARDO movlw 0x9f
movwf TRE
WAIT movlw 0x9f
movwf DOS
ESPERA movlw 0x9f
movwf UNO
decfsz UNO,f
goto $-1
decfsz DOS,f
goto ESPERA
decfsz TRE,f
goto WAIT
10/05/2007 #32


Lo unico que veo en el programa es que te falta el return al final de la rutina de RETARDO y el end, al final del programa

Fuera de eso debe hacerte el retardo...
10/05/2007 #33


si no se por que no apareci pero estan, pero no arranca, le doy al pulsador y no, se queda sin armarce la alarma
10/05/2007 #34


a por cierto, si descarto el CALL RETARDO, la alarma comple con lo que pido, pero si le incluyo el CALL RETARDO, no, le das al boton y nunca se arma.
10/05/2007 #35


La rutina debe estarse cumpliendo porque no veo algo donde se te quede ciclado el micro, dices que si le pones la rutina con el retardo nunca se cumple, cuanto tiempo te estas esperando?
Y si le bajas los valores de TRE que hace???

Prueba tambien quitando el call y mandalo a la subrutina con goto, y en la subrutina retardo en lugar del return ponle un goto para que te regreses a la rutina...
10/05/2007 #36


No, no me anda, en fin, me rindo, igual ya consegui los modulos RF para hacer eso.
10/05/2007 #37


que raro que no te funcione debe ser otra cosa, si ya cambiaste las instrucciones de la rutina!!!, en fin

No te desanimes asi son las cosas en esto, ha habido programas en que he estado dias enteros hasta que me funcionan...

Estas cosas jalan... nomas hay que decirles que es lo que hagan....

Suerte
05/07/2010 #38


Respuesta: Consulta de alarma con Pic 16f84
hola queria preguntar sobre la misma alarma, como se puede hacer una secuencia, para que el pic pueda diferenciar que es una clave... Para hacerlo con pulsadores por ejemplo se pulsan 132, y es correcta y deja de sonar, si se equivoca sigue sonando... si me pueden ayudar gracias..
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.