Autor Tema: Temporizador para aromatizador  (Leído 7915 veces)

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

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Temporizador para aromatizador
« en: 30 de Abril de 2011, 09:06:50 »
Hola estoy haciendo un temporizador para controlar el encendido de 2 ventiladores usando el timer del 16f628a.La idea es que encienda y pare a intervalos de 15 min. Tengo problemas con el codigo ya que si habilito la interrupcion del tmr0 antes de cargar el valor del timer, el sistema arranca apagado a pesar de que habilito la salida de rb0 que controla los motores y el otro problema es que el tiempo de arranque y parada se hace aleatorio. Si cargo el timer antes de habilitar la interrupcion, el sistema parece que no entra nunca en el servicio de interrupcion y nunca para el motor. Hice una base de tiempo de 1 seg, cargando .239 a timer. Tengo un registro llamado Mtiempo que contiene la bandera para saber cuando llego a la cantidad de segundos que quiero y que se pone en 1. Para saber si llegue al valor de segundos lo comparo con un valor fijo en la rutina "comparar". este es el codigo que queda siempre encendido.

Código: [Seleccionar]
;_____________________________________________________________
;Programa para hacer un tiner para un aromatizador que controla
;unos ventiladores por medio de un transistor conectado a RB0
;Se activa y desactiva cada 15 min con 16f628a
;...


list p=16f628a

Mtiempo         equ 26h; Registro de la bandera de tiempo
Ftiempo         equ 00h;bandera de tiempo cumplido
Dato_A_L equ 20H
Dato_A_H equ 21h
Dato_B_L equ 22h
Dato_B_H equ 23h
Resultado_L  equ 24h
Resultado_H equ 25h
    org 00h
goto programa
org 04h
goto ActivaMotor
#include "p16f628a.inc"
#include "Sum16bit.inc"

Comparar
movf Resultado_H,w
sublw 00h
btfss STATUS,Z
goto seguir
movf Resultado_L,w
sublw 04h     ;cantidad de segundos
btfss STATUS,Z
goto seguir
bsf  Mtiempo,Ftiempo
seguir RETURN

ActivaMotor
bsf STATUS,RP1;BANCO 2
bcf STATUS,RP0
movlw .239
movwf TMR0 ;cargo el timer con 239 para que cuente 16 y se desborde

bcf STATUS,RP1;BANCO 0
bcf STATUS,RP0; Banco 0
bcf INTCON,2 ; limpio la bandera del timer
movf Resultado_L,w
movwf Dato_A_L;cargo dato A
movf Resultado_H,w
movwf Dato_A_H;cargo dato A
call suma_16_bits; sumo 1 al contador de segundos
call Comparar

btfss Mtiempo,Ftiempo
goto  finserv
clrf  Resultado_L
clrf  Resultado_H
btfsc PORTB,0
goto  gotoparar
bsf   PORTB,0
goto finserv
gotoparar bcf   PORTB,0
finserv      bcf   Mtiempo,Ftiempo
RETFIE

programa    bsf STATUS,RP0;BANCO 1
movlw b'11111111'
movwf TRISA
movlw b'11111110'
movwf TRISB; RB0 como salida al transistor
bsf  PCON,3

movlw b'00000101'
movwf OPTION_REG; pongo el prescaler en 64

clrf PIE1 ; Deshabilito las interrupciones que no uso

            bcf STATUS,RP0;BANCO 0
bsf   PORTB,0
movlw 00000111; deshabilito los comparadores
movwf CMCON


bsf STATUS,RP1;BANCO 2
bcf STATUS,RP0
movlw .239
movwf TMR0 ;cargo el timer con 239 para que cuente 16 y se desborde


bcf STATUS,RP0;BANCO 0
bcf STATUS,RP1
movlw b'10100000'
movwf INTCON; habilito las interrupciones

clrf Dato_A_L; borro los operandos de la suma
clrf Dato_A_H
clrf Dato_B_L
clrf Dato_B_H
bcf  Mtiempo,Ftiempo; pongo bandera de tiempo en 0
incf Dato_B_L; cargo el dato con el 1 que voy a sumar
clrf Resultado_L
clrf Resultado_H
espera nop
        goto espera
end

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Temporizador para aromatizador
« Respuesta #1 en: 30 de Abril de 2011, 15:20:20 »
Creo que aqui te equivocaste. Ese es INDF y no es un registro fisico.

Citar
Ftiempo         equ 00h;bandera de tiempo cumplido

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Temporizador para aromatizador
« Respuesta #2 en: 30 de Abril de 2011, 17:27:39 »
.


Ya que estás usando un 16F628A, te recomendaría que uses el timer 2 en lugar del 0. El timer 2 tiene un control de arranque y de parada, y además se le puede configurar el límite de la cuenta (osea que cuenta de 0 hasta cualquier valor hasta 255). Está bien explicado en el datasheet.
¿Por qué pasas al banco 2 para escribir el valor en el registro del timer?

Saludos.


When you see a good move, look for a better one (Emanuel Lasker)

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: Temporizador para aromatizador
« Respuesta #3 en: 30 de Abril de 2011, 18:02:47 »
Creo que aqui te equivocaste. Ese es INDF y no es un registro fisico.

Citar
Ftiempo         equ 00h;bandera de tiempo cumplido
Ftiempo es el bit sero de un registro por eso en vez de hacer
Código: [Seleccionar]
bsf registro,0hago
Código: [Seleccionar]
bsf registro,Ftiempo
Cambio al Banco 2 porque el registro del TMR0 esta en  el banco 2 me parece.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Temporizador para aromatizador
« Respuesta #4 en: 30 de Abril de 2011, 18:28:54 »
debes darle una mirada al datasheet con respecto a la organizacion de los bancos. Tapi tiene razon esa direccion 00h corresponde a indf no lo puedes usar como registro
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: Temporizador para aromatizador
« Respuesta #5 en: 30 de Abril de 2011, 20:24:05 »
cómo hiciste el mecanismo/estructura del aromatizador¿¿??
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Temporizador para aromatizador
« Respuesta #6 en: 30 de Abril de 2011, 21:34:38 »
debes darle una mirada al datasheet con respecto a la organizacion de los bancos. Tapi tiene razon esa direccion 00h corresponde a indf no lo puedes usar como registro
Creo que aqui te equivocaste. Ese es INDF y no es un registro fisico.

Citar
Ftiempo         equ 00h;bandera de tiempo cumplido


Ftiempo es el bit sero de un registro por eso en vez de hacer
Código: [Seleccionar]
bsf registro,0hago
Código: [Seleccionar]
bsf registro,Ftiempo
Cambio al Banco 2 porque el registro del TMR0 esta en  el banco 2 me parece.

Totalmente correcto.  ;-)

Después, estas usando un oscilador de ~4kHz? Lo digo para generar la base de tiempo de 1 segundo y los valores que indicas. Porque pasas al banco 2 para leer TMR0 si también está en el Banco 0? Lo estás simulando o probando con el hardware? Si es en hardware, como lo implementas?


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

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: Temporizador para aromatizador
« Respuesta #7 en: 01 de Mayo de 2011, 19:12:40 »
Hola, gracias a todos por la ayuda. Los problemas que tenia eran porque habilitaba las interrupciones de TMR0 antes de escribir el valor del TMR0 y por eso creo que se generaba un retardo aleatorio. Lo solucione habilitando la interrupcion despues de escribir el TMR0 con el valor para que me de el retardo que queria.

Otro problema es que al probarlo directamente con los motores conectados, por la inercia, no me daba cuenta de que hacia el ciclo de encendido y apagado muy rapido y parecia que siempre quedaban en funcionamiento pero no era asi. Eso lo comprobe reemplazando los motores por un led.

Lo que tuve que modificar es los valores con que cargo el timer para lograr el retardo porque no me daban los calculos de lo que yo pensaba con el oscilador interno de 4Mhz.

Ese es un error mio porque como necesitaba entre 15 min y media hora de retardo hubiera podido usar el oscilador de 4khz y no el de 4Mhz.

El proyecto lo probe con el hardware, arme la plaqueta antes de programar el PIC. Es simple, con la salida de RB0 alimento la base de un transistor comun tipo BC548, el emisor lo pongo a masa y entre positivo y el colector alimeto el motor, con un diodo en paralelo para evitar el pico de inversion. El sistema lo aliento con con 12v por los ventiladores y regulo a 5v para el PIC con un 7805.

Se ponen los coleers en un gabinete de PC, los 2 colers conectados al sistema, uno que entre el aire y otro que lo saque, y en el medio se pone un frasquito con la escencia y una mecha y listo, ya tenes tu aromatizador hecho. Mas adelante subo el codigo para el que le interese ya que ahora y tengo problemas con internet. saludos

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Temporizador para aromatizador
« Respuesta #8 en: 01 de Mayo de 2011, 19:27:39 »
.


Me alegro de que hayas podido solucionar todos los problemas. ¿Podrías poner una fotito del aparato finalizado? Me gusta ver cómo quedan los proyectos finalizados :-)

Saludos.

When you see a good move, look for a better one (Emanuel Lasker)

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: Temporizador para aromatizador
« Respuesta #9 en: 02 de Mayo de 2011, 15:58:56 »
.


Me alegro de que hayas podido solucionar todos los problemas. ¿Podrías poner una fotito del aparato finalizado? Me gusta ver cómo quedan los proyectos finalizados :-)

Saludos.



Aqui te paso una foto del temporizador:



Aqui hay un video del temporizador funcionando:

Cuando tenga todo montado lo subo. Saludos

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Temporizador para aromatizador
« Respuesta #10 en: 03 de Mayo de 2011, 20:40:47 »
.


Muy bonito, moe :grin:. Si me aceptás una sugerencia, yo le pondría un par de capacitores al regulador (en el datasheet vienen los valores). Parece una boludez, pero una vez tuve un problema con un circuito, donde el integrado no regulaba nada bien, y mágicamente se solucionó poniendo los capacitores que recomienda el fabricante. Desde entonces nunca me los olvido ;-).

Saludos.

When you see a good move, look for a better one (Emanuel Lasker)

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: Temporizador para aromatizador
« Respuesta #11 en: 04 de Mayo de 2011, 22:05:45 »
.


Muy bonito, moe :grin:. Si me aceptás una sugerencia, yo le pondría un par de capacitores al regulador (en el datasheet vienen los valores). Parece una boludez, pero una vez tuve un problema con un circuito, donde el integrado no regulaba nada bien, y mágicamente se solucionó poniendo los capacitores que recomienda el fabricante. Desde entonces nunca me los olvido ;-).

Saludos.



Lo voy a tener en cuenta para el proximo que haga, que lo pienso hacer mas barato usando un pic12F629. La ideas es hacerlo lo mas barato posible, incluso estoy pensando en la posibilidad de ponerle una fuente sin trafo como las que aparece en microchip.

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Temporizador para aromatizador
« Respuesta #12 en: 04 de Mayo de 2011, 23:15:07 »
.


Si te sirve la idea, tal vez te resulte más barato todavía usar un 555 y un par de contadores como divisores de frecuencia. Si ponés dos contadores de 4 bits en cascada, tenés un divisor de frecuencia por 256. Calibrando el 555 para un periodo de más o menos 3.5 seg y poniendo eso a la entrada del divisor, tenés a la salida una señal cuadrada de periodo 15 min.

Saludos.

When you see a good move, look for a better one (Emanuel Lasker)

Desconectado banistelrroy

  • PIC10
  • *
  • Mensajes: 29
Re: Temporizador para aromatizador
« Respuesta #13 en: 11 de Mayo de 2011, 01:29:45 »
eso se hace solamente un el timer o talvez dos en cascado y unos cuantos condensadores sale por la mitad de precio

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: Temporizador para aromatizador
« Respuesta #14 en: 25 de Agosto de 2013, 21:21:56 »
.


Si te sirve la idea, tal vez te resulte más barato todavía usar un 555 y un par de contadores como divisores de frecuencia. Si ponés dos contadores de 4 bits en cascada, tenés un divisor de frecuencia por 256. Calibrando el 555 para un periodo de más o menos 3.5 seg y poniendo eso a la entrada del divisor, tenés a la salida una señal cuadrada de periodo 15 min.

Saludos.


La verdad para mi es mas practico usar un PIC y soldar solo unos pocos componentes que tener un armatoste con varios integrados, ademas es probable que solo llegue a hacer solo uno y no en serie.