Autor Tema: Retardo de 30seg PIC16F84a  (Leído 2224 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado psoto

  • PIC10
  • *
  • Mensajes: 2
Retardo de 30seg PIC16F84a
« en: 08 de Febrero de 2012, 11:08:08 »
Hola amigos de todopic, es la primera vez que escribo en este foro, y quisiera que me
ayuden a corregir este programa para el PIC16f84a a 4Mhz.

Lo que me piden hacer es lo sgte. hacer un retardo de 30seg. para activar y
desactivar dos relays. Las salidas deben ser controladas por un solo switch.
Al inicio el switch esta abierto y cuando lo cierro las salidas activaran los
relays despues del retardo de 30seg. Despues de que transcurrio un tiempo mayor
al retardo se abre el switch y las salidas desactivaran los relays despues del
retardo de 30seg.

El problema que tengo es que no siempre el retardo dura los 30seg. a veces solo
dura 15seg u otras veces son solo 20seg.Uso la libreria RETARDOS.INC del libro
Desarrollo de Proyectos con Microcontroladores PIC16f84A.

Aqui dejo el codigo del programa y el circuito que estoy simulando en proteus.

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Retardo de 30seg PIC16F84a
« Respuesta #1 en: 08 de Febrero de 2012, 13:25:23 »
El programa, parece estar bien... creo que es error de la simulación...
Firmat - Santa Fe - Argentina

www.TodoPic.net

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

Desconectado psoto

  • PIC10
  • *
  • Mensajes: 2
Re: Retardo de 30seg PIC16F84a
« Respuesta #2 en: 08 de Febrero de 2012, 17:58:12 »
Gracias por responder amigo. Si el programa esta bien porque no se cumple el tiempo de retardo. He puesto un contador a las
salidas y no llega a 30 seg. A veces llega a 25seg o a 15seg.


Desconectado jorsss

  • PIC10
  • *
  • Mensajes: 28
Re: Retardo de 30seg PIC16F84a
« Respuesta #3 en: 20 de Marzo de 2012, 10:57:12 »
Hola psoto prueba usando interrupciones por TMR0 y colocando contadores... luego chekeas estos contadores con operaciones XOR y revisando el bit Z del registro STATUS para saber si estan en la cuenta que necesitas...

Una pequeña guia... si cargas el tmr0 con 0x0C4 al inicio del programa y por cada interrupcion del mismo... colocando dos contadores por ejemplo COUNT_1 y COUNT_2 al primero lo cargas con (en decimal) 100 y al segundo con 6... por cada interrupcion podes descontar COUNT_1 cuando este llegue a cero descontas COUNT_2 y volves a cargar COUNT_1 con 100 y asi hasta ke COUNT_2 llega a cero sabras que habran pasado 30 segundos EXACTOS



 

anything