TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: 16F84A en 09 de Febrero de 2009, 17:08:32
-
Buenas!
He hecho un programa de un temporizador de 12 horas, esta parte funciona bien, pero me gustaria que en ciclos de 12 horas se encendiese y apagase una luz. Esto es, 12h encendido- 12h apagado- 12h encendido.....
La parte del programa que no me convence el la ultima subrutina, y me gustaria saber vuestra opinion y los fallos o mejoras que le podeis ver.
Gracias de antemano.
PD:Ya se que solo pongo el programa principal, pero las librerias que faltan funcionan a la perfeccion, de todas formas si os sirven de algo las pondre.
-
hola.16f84a. yo una vez desarrolle un programa que manejaba tiempos para un reloj.y lo que hice fue utilizar un cristal de cuarzo de 4.192304 Mhz
y configurando uno de los contadores,logre que se produjera una interrupcion cada 0.5 segundos.de esta forma se tiene un largo tiempo dentro de la interrupcion para realizar otro contador por registros.y con 86400 procesos de interrupcion,tendrias las 12H.ya solo tienes que realizar este contador y que cuando llege a este valor se active el led.
-
Bueno ya tengo el programa hecho, era un fallo tonto....una instruccion mal puesta.
Pero como casi siempre, termina un problema pero empieza otro: este programa realiza interrupciones por desbordamiento del TIMER0, tengo un sensor de temperatura que me gustaria acoplarle al programa, el caso es que este sensor es leido tambien por interrupciones del TIMER0 y no se si al juntar los dos programas podra funcionar.
A ver si alguien me puede ayudar.
Gracias.
-
En la rutina de la interrupcion actualiza dos contadores diferentes, uno para el control de tiempo y otro para llevar un registro de cuando leer el sensor.
Suponte que interrumpas cada 1/2 segundo, actualizas la cuenta hasta llegar a cuatro, mientras en el programa principal (fuera de la interrupcion) revisas constantemente cuando llega a 4 tu conteo, entonces disparas la lectura del sensor y pones a cero la cuenta.
Esto hace que tu sensor es leido cada 2 segundos, se entiende?? :mrgreen:
-
Gracias por responder tan rapido.
La verdad no entiendo muy bien donde poner los contadores.
El sensor se lee cada 2s pero hace una interrupcion cada 50ms, al igual que el temporizador.
Aqui subo los dos programas por si a alguien le interesa.
-
Mas o menos es asi lo que digo:
<Rutina interrupcion>
Si se produjo interrupcion de Tmr0 >>> incf contador timer
incf contador sensor
preparo nueva interrupcion y salgo
<Rutina principal>
si contador sensor es mayor a 40 (para 50 mseg)>>>> contador sensor = 0
call leer sensor.
otras tareas de el programa principal
end
No mire realmente tus programas, pero esto te da una idea...
-
Grazias MGLSOFT.
El programa hace interrupciones cada 50mseg para inicializar el reloj , entonces porque poner un contador para el reloj?
De esta forma no estaria bien?
ServicioInterrupcion
btfsc INTCON,T0IF ; Si es una interrupción procedente del
incf Contado; Contador del temporizador
;call Reloj ; desbordamiento del Timer 0, actualiza el reloj.
FinInterrupcion ; correspondiente.
bcf INTCON,T0IF
retfie
-
Perdon, esto era lo que queria poner:
Gracias MGLSOFT.
El programa del temporizador hace interrupciones cada 50mseg, entonces, porque poner un contador tambien al temporizador? no estaria bien poniendoselo solo al sensor?
ServicioInterrupcion
btfsc INTCON,T0IF ; Si es una interrupción procedente del TIMER0
goto TemporizaYsensor
goto FinInterrupcion
TemporizaYsensor
incf Contador1 ; Contador del sensor
call Reloj ; desbordamiento del Timer 0, actualiza el reloj.
FinInterrupcion ; correspondiente.
bcf INTCON,T0IF
retfie
Y luego en la rutina principal comparar el contador del sensor.
-
Algo tengo que estar haciendo mal......
Al compilarlo me da unos cuantos errores:
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "D:\MPASM Suite\MPASMWIN.exe" /q /p18F452 "PROYECTO3.asm" /l"PROYECTO3.lst" /e"PROYECTO3.err" /d__DEBUG=1
Warning[215] F:\SOLUCIONES PROGRAMAS\PROYECTO3.ASM 4 : Processor superseded by command line. Verify processor symbol.
Message[301] D:\MPASM SUITE\P16F84A.INC 35 : MESSAGE: (Processor-header file mismatch. Verify selected processor.)
Error[126] D:\MPASM SUITE\P16F84A.INC 114 : Argument out of range (must be greater than or equal to 255)
Error[126] D:\MPASM SUITE\P16F84A.INC 115 : Argument out of range (__MAXRAM must be used first)
Error[126] D:\MPASM SUITE\P16F84A.INC 115 : Argument out of range (__MAXRAM must be used first)
Error[126] D:\MPASM SUITE\P16F84A.INC 115 : Argument out of range (__MAXRAM must be used first)
Warning[230] F:\SOLUCIONES PROGRAMAS\PROYECTO3.ASM 6 : __CONFIG has been deprecated for PIC18 devices. Use directive CONFIG.
Error[126] F:\SOLUCIONES PROGRAMAS\PROYECTO3.ASM 6 : Argument out of range (not a valid config register address)
Warning[202] F:\SOLUCIONES PROGRAMAS\PROYECTO3.ASM 212 : Argument out of range. Least significant bits used.
Warning[207] F:\SOLUCIONES PROGRAMAS\BUS_I2C.INC 105 : Found label after column 1. (rlf)
Error[122] F:\SOLUCIONES PROGRAMAS\BUS_I2C.INC 105 : Illegal opcode (I2C_Dato)
Warning[207] F:\SOLUCIONES PROGRAMAS\BUS_I2C.INC 145 : Found label after column 1. (rlf)
Error[122] F:\SOLUCIONES PROGRAMAS\BUS_I2C.INC 145 : Illegal opcode (I2C_Dato)
Error[113] F:\SOLUCIONES PROGRAMAS\DS1624.INC 52 : Symbol not previously defined (DS1624_FinTablaRedondeo)
Halting build on first failure as requested.
-
Habria que ver el programa completo, pero es mas seguro que falte el archivo header del PIC o no encuentre la ruta del mismo, y el resto de los errores tenga que ver con eso...
-
Ya esta solucionado, pero como siempre.... ahora compila bien pero en programa no funciona del todo bien, por favor a ver si alguien ve en el programa el fallo o sabe porque puede fallar.
Muchas gracias MGLSOFT por toda la ayuda.
-
Creo que cometes un error, yo encuentro una sola llamada a la rutina del termometro, antes de entrar al loop principal.
Creo que deberias hacer esa llamada y control dentro de ese loop. :mrgreen: :mrgreen:
-
probaste checar los registros en mplab con watch y simularlo :-/ :-/