Autor Tema: Temporizador con 16f84  (Leído 4168 veces)

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

Desconectado catk

  • PIC10
  • *
  • Mensajes: 13
Temporizador con 16f84
« en: 15 de Marzo de 2009, 09:51:17 »
Hola amigos.

Les solicito su ayuda porque ya la verdad estoy desesperado y no supe como mas seguir. Les cuento me piden en la U un circuito que realize lo siguiente:

1.   El circuito siempre va a estar alimentado
2.   En la entrada PORTA,0 van a existir 5v pero en el momento que deje de recibir 5v esa entrada debe activar el relay (PORTB,0) para que por esta linea (PORTA,0) sigan existiendo 5v por un periodo de tiempo de 1 minuto.
3.   Pasado este minuto el relay se debe desactivar y el sistema debe estar de nuevo “atento” a recibir de nuevo 5v y estar pendiente cuando los deje de recibir de nuevo. Importante: En la entrada PORTB,1debe existir una masa SIEMPRE, si dirante el minuto pierde esa masa el circuito debe asumir que ya paso el minuto y volver al paso 2
4.   BONO: Adicionalmente si es posible configurar otras 3 entradas donde según la entrada seleccionada la temporizacion dure: 1, 2 o 3 minutos


Lo que he hecho: Ya se como temporizar (La libreria retardos.inc> que handa por ahi, pero....
1. Si uso esa libreria no se como manejar las interrupciones para PORTA,1

Les adjunto lo que tengo de codigo.

Código: [Seleccionar]
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

LIST P=16F84A
INCLUDE <P16F84A.INC>

CBLOCK 0x00C                 

 ENDC


ORG 0


Inicio
 bsf  STATUS, RP0
 clrf TRISB
 movlw b'00011111'
 movwf TRISA
 bcf  STATUS,RP0

 
Principal
 bcf  PORTB,1
 btfss PORTA,0
 goto Tiempo
 goto Principal
 
Tiempo
 bsf  PORTB,1
 call Retardo_20s
 call Retardo_20s
 call Retardo_20s
 bcf  PORTB,1
 goto Espera

Espera:
 btfss PORTA,0
 goto Principal
 goto Espera

 INCLUDE <RETARDOS.INC>
 END


Pda: Adjunto tambien la imagen omitiendo que en ella dice 12v en lugar de 5v


A quien me pueda dar una manito con este proyecto muchas gracias



Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Temporizador con 16f84
« Respuesta #1 en: 15 de Marzo de 2009, 10:40:25 »
Usa el Timer0 y su interrupción para la temporización, de esa manera podras también testear el estado de PORTB,1.
« Última modificación: 15 de Marzo de 2009, 11:15:11 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado catk

  • PIC10
  • *
  • Mensajes: 13
Re: Temporizador con 16f84
« Respuesta #2 en: 15 de Marzo de 2009, 10:45:09 »
Primero que todo gracias por tu respuesta, pero la verdad es que nunca he trabajado con interrupciones, tengo por ahi un ejemplo de esta pero no supe como hacer para diferenciar entre PORTA0 y PORTA1 y lo otro es que creo que todas deben estar establecidas con un mismo franco de subida o bajada y si vez las dos entradas una es positiva y la otra negativa :S

Gracias por tu ayuda

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Temporizador con 16f84
« Respuesta #3 en: 15 de Marzo de 2009, 11:15:30 »
Aquí puedes fijarte en el uso del timer0, como se configura y como se calcula la temporización.
Además fíjate que te equivocas en los bits del hardware. El relay supuestamente es RB0 y no RB1.

Una manera podria ser esta:


No te preocupes en los flancos de las señales, testea los niveles, con eso alcanza.

Saludos!
« Última modificación: 15 de Marzo de 2009, 11:17:40 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado catk

  • PIC10
  • *
  • Mensajes: 13
Re: Temporizador con 16f84
« Respuesta #4 en: 16 de Marzo de 2009, 17:24:35 »
Suky de verdad muchas gracias por tu ayuda, ya pude adelantar algo pero tengo aun dos problemitas:

Mi codigo actual:

Código: [Seleccionar]



__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

LIST    P=16F84A

INCLUDE  <P16F84A.INC>



CBLOCK   0x0C

ENDC



#DEFINE   EntradaRB7 PORTB,7

#DEFINE   EntradaRB6 PORTB,6

#DEFINE   SalidaRelay PORTB,2







ORG 0

goto Inicio

ORG 4

goto ServicioInterrupcion

Inicio

bsf STATUS,RP0

bsf EntradaRB7

bsf EntradaRB6

bcf SalidaRelay

bcf OPTION_REG,NOT_RBPU

bcf STATUS,RP0

movlw b'10001000'

movwf INTCON



Principal

sleep

goto Principal




ServicioInterrupcion

call Retardo_20ms

btfss EntradaRB7

call ActivaRelay

btfss EntradaRB6

call DesactivaRelay

EsperaDejePulsar

bcf INTCON,RBIF

retfie





ActivaRelay

bsf SalidaRelay
call Retardo_20s
bcf SalidaRelay

return

DesactivaRelay

bcf SalidaRelay
return



INCLUDE   <RETARDOS.INC>

END





Problema 1: Cuando presiono el pulsador 2 osea el que debe interrumpir el proceso nunca lo hace...
Problema 2: La primera vez cuando se conecta el circuito y no ha recibido la señal en EntradaRB7 me activa la temnporizacion

Lo tengo simulado en proteus por si alguien quiere verlo ...

Gracias!
« Última modificación: 16 de Marzo de 2009, 17:58:00 por catk »

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Temporizador con 16f84
« Respuesta #5 en: 17 de Marzo de 2009, 01:10:09 »
•   Para el manejo de interrupción por cambio de estado de RB4-RB7 además de borrar por software el flag RBIF debes realizar una operación de lectura (o escritura) del PORTB  para que deje de darse la discrepancia entre el valor actual y el valor leído.
Código: ASM
  1. movf    PORTB,f         ; Operacion de lectura.-
•   Antes de activar la interrupción:
Código: ASM
  1. bcf     INTCON,RBIF
  2. movf    PORTB,f         ; Operacion de lectura.-

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado catk

  • PIC10
  • *
  • Mensajes: 13
Re: Temporizador con 16f84
« Respuesta #6 en: 17 de Marzo de 2009, 17:47:16 »
Listo gracias voy a probar con esto...

Ahora otra pregunta... :$

Como hago para que la primera vez q alimento el circuito no me testee que no tengo señal y me active la salida?
Osea necesito que el programa no me haga testeo la primera vez q conecto el pic...

Gracias de nuevo

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Temporizador con 16f84
« Respuesta #7 en: 17 de Marzo de 2009, 23:25:57 »
Borrando la bandera y realizando una lectura/escritura del Puerto B antes de habilitar la interrupción. De esta manera al alimentar no entra en la interrupción. Sino también, antes de la habilitación de la interrupción agrega una demora.
Saludos!
No contesto mensajes privados, las consultas en el foro