hola me podrías ayudar o por lo menos guiarme como debo hacer para realizar dos o tres funciones simultáneamente pero con tiempos diferentes, sin que una interfiera en el trabajo de otra.
les explico....... soy nuevo en el foro y también tengo poco tiempo programando y utilizo el Portón IDE y lo poco que lo he expresado en este proyecto
hace tiempo compile un sensor controlador de temperatura que funciona muy bien, el programa que yo uso es el Proton IDE por su facilidad.
Este sensor y controlador lo realice para una incubadora automática de huevos de gallinas que incluso ya he logrado sacar pollitos.pero dicha incubadora carece de volteo automático el cual es esencial en la incubacion.
lo que pretendo realizar es que con un mismo Pic (16f877a), poder controlar la temperatura y al mismo tiempo este mismo pic me realice el volteado automáticamente cada 8 horas y 25 minutos (8:25 horas).
me explico bien. el pic deberá realizar dos trabajos diferentes pero simultáneamente. 1) el primero que seria ser el censado y controlado de la temperatura (ya esto esta realizado hasta el momento) y 2) el segundo que es lo que quiero lograr, es que a cada 8 horas con 25 min me permita realizar el volteado de los huevos....... la cuestión esta en que el uno no interfiera en trabajo de otro el otro
en algunos post he leido la utilizacion de los temporizadores pero no se como se usan
¿ como podría realizalo ?
aquí les dejo el código a ver si me puede ayudar, mi correo es (smiller_josse@hotmail.com)
aqui esta solo es el codigo de programa:
el mismo cuenta con el ajuste de temperaturas altas y bajas en memoria no volatil, utiliza un lcd,pulsores y sensor de temperatura ds1822
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [EMELY SUMOZA] *
'* Notice : Copyright (c) 2014 [SMILLER c.a] *
'* : All Rights Reserved *
'* Date : 20/06/2014 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
Device 16F877A ' Define LCD registers and bits
Declare Xtal=4
TRISA=0
CMCON = 7 ; Set PORTA and PORTE to digital
;-------------------------------------------------------------------------------
Declare LCD_Type 0 ; definimos el tipo de lcd que se va a utilizar
Declare LCD_DTPort PORTA ; Definimos puertos a emplear
Declare LCD_DTPin PORTA.0 ; puertos que se usaran como línea de datos
Declare LCD_RSPin PORTB.2 ; puerto que va funcionar como RESET
Declare LCD_ENPin PORTB.1 ; Definimos el puerto que va a ENABLE en el LCD
;-------------------------------------------------------------------------------
DQ VAR PORTB.0 ; One-wire data pin
count_per_c VAR Byte ; Count per degree C
;-------------------------------------------------------------------------------
temperature VAR Word
x VAR Byte
x3 var Float
Tempbaj VAR Float
tempalt VAR Float
;------------------------------------------------------------
rF VAR PORTB.7
rC VAR PORTB.6
led VAR PORTA.4
enter VAR PORTB.5
bsubir VAR PORTB.4
bbajar VAR PORTB.3
;-------------------------------------------------------------------------------
DIn VAR Byte
DIn = 0
x1 var Float
x1 = 28.2
x2 var Float
x2 = 28
EWrite Din,[x1]
tempalt = ERead 0
EWrite Din,[X2] ;contenido inicial 0 de la EEPROM
;lee la EEPROM 0 y lo guarda en tempalt
tempbaj = ERead 1 ;lee la EEPROM 1 y lo guarda en tempbaj
;-------------------------------------------------------------------------------
Print $fe, 1,"BIENVENIDO" ;limpiar LCD y sacar texto
Print $fe, $c1,"CARGANDO ."
DelayMS 1500
Print $fe, 1,"BIENVENIDO " ;limpiar LCD y sacar texto
Print $fe, $c1,"CARGANDO .."
DelayMS 1000
Print $fe, 1,"BIENVENIDO" ;limpiar LCD y sacar texto
Print $fe, $c1,"CARGANDO ...."
DelayMS 1000
Print $fe, 1,"TEMPERATURA" ;limpiar LCD y sacar texto
Print $fe, $c1,"CARGANDA "
DelayMS 1000
;-------------------------------------------------------------------------------
inicio: ;3 parpadeos del led que indica funciona
For x =1 To 3
High led
DelayMS 500
Low led
DelayMS 300
Next
;-------------------------------------------------------------------------------
mainloop:
OWrite DQ, 1, [$CC, $44] ' Start temperature conversion
High led
DelayMS 100
Low led
DelayMS 100
OWrite DQ, 1, [$CC, $BE] ' Read the temperature
ORead DQ, 0, [temperature.LowByte, temperature.HighByte]
temperature = temperature */ 1600
x3=temperature/100
Print $fe, 1,"TEMPERATURA"
Print $fe, $c1, Dec1 x3,06, 223,"C"
;-----------------------------------------------------------------------
For x = 1 To 100 ;repetir 100 veces
If enter =0 Then grabar1a
DelayMS 10
If X3 <= tempbaj Then calentar ;si X3 es <tempbaj ir a calentar
If X3 >= tempalt Then enfriar ;si X3 es >tempALT ir a ENFRIAR
Low rC : Low rF ;apagar los 2 relés
Next
GoTo mainloop ;continuar sensando
calentar:
High rC : Low rF
GoTo mainloop
enfriar:
High rF : Low rC
GoTo mainloop
grabar1a:
GoSub soltar
grabar1:
Print $fe, 1, "Programar temp."
Print $fe,$c0,"baja= ",Dec1 tempbaj ,223,"C"
DelayMS 50
If bbajar=0 Then restar1
If bsubir=0 Then sumar1
If enter=0 Then grabarA
GoTo grabar1
restar1:
GoSub soltar ;programa antirrebote de tecla
If tempbaj < 1 Then grabar1
tempbaj= tempbaj -0.1
GoTo grabar1
sumar1:
GoSub soltar
If tempbaj > 100 Then grabar1
tempbaj= tempbaj + 0.1
GoTo grabar1
;..................................................................
grabarA:
GoSub soltar
EWrite 1,[x1] ;escribir en la dirección 0 de la EEPROM
;...................................................................
grabar2:
Print $fe, 1, "Programar temp."
Print $fe,$c0,"alta= ",Dec1 tempalt ,223,"C"
DelayMS 100
If bbajar=0 Then restar2
If bsubir=0 Then sumar2
If enter=0 Then grabarB
GoTo grabar2
restar2:
GoSub soltar
If tempalt < 5 Then grabar2
tempalt= tempalt -0.1
GoTo grabar2
sumar2:
GoSub soltar
If tempalt > 50 Then grabar2
tempalt= tempalt + 0.1
GoTo grabar2
;................................................................
grabarB:
GoSub soltar
EWrite 0,[x2];escribir en la dirección 1 de la EEPROM
GoTo inicio
;................................................................
soltar: ;programa antirrebote de tecla
High led:
High PORTB.7
DelayMS 150
Low led
soltar2:
If bbajar=0 Then soltar2
If bsubir=0 Then soltar2
If enter=0 Then soltar2
DelayMS 100
Return
End