COMUNIDAD DE ELECTRONICOS
Hola eres nuevo,
registrate y disfruta el nuevo foro
de electronica en donde podras dar y recibir informacion de electronica,
y asi mismo hacer tus preguntas para recibir una respueta.
Recuerda que si eres tecnico,Ingeniero o estudiante hay un rango
especial para ti, es gratis solo registrate.
DISFRUTALO

ayuda como ejecutar dos rutinas simultaneamente

Ver el tema anterior Ver el tema siguiente Ir abajo

ayuda como ejecutar dos rutinas simultaneamente

Mensaje por emely jose el Lun Oct 20, 2014 8:07 pm

le cuento....  hace un tiempo realice un controlador de temperatura para una incubadora de huevos de gallinas y si que me funciona muy bien hasta incluso he llegado a sacar pollitos. el problema que tengo es que al software que realice le quiero anexar una rutina que me permita controlar el volteo automático cada 8:25 horas sin que esta rutina me interfiera en el trabajo del censado de la temperatura, esto seria como correr dos programas al mismo tiempo ó que trabaje en un modo de segundo plano algo asi me imagino yo, no se si estoy equivocado.... 

cabe mencionar que uso el Proton IDE

aca te dejo el codigo del programa a ver si me puedes dar una mano ya que soy nuevo en esta area.

'************************************************* ***************
'* Name : control de temperatura.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: ;programa principal de censado de temperatura
OWrite DQ, 1, [$CC, $44] ' inicia la convención de la temperatura
High led
DelayMS 100
Low led
DelayMS 100

OWrite DQ, 1, [$CC, $BE] ' lee la temperatura
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 10 ;repetir 10 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 censando

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

emely jose
Principiante
Principiante

Masculino Mensajes : 2
Fecha de inscripción : 20/10/2014
Edad : 30

Volver arriba Ir abajo

Re: ayuda como ejecutar dos rutinas simultaneamente

Mensaje por desencriptador el Vie Oct 31, 2014 6:11 pm

Hola, te cuento, lo más sencillo es conseguir o construír un temporizador que accione el volteo automático en el intervalo determinado, volviendo a cero para reiniciar el conteo, independientemente del control de temperatura, que podría ser interferido por el funcionamiento de ambas rutinas en simultáneo.
No digo que sea imposible, pero, en aras de evitar complicaciones, personalmente, trataría ambas acciones independientemente, con un dispositivo independiente para cada una de ellas.
avatar
desencriptador
SUB ADMINISTRADOR
SUB ADMINISTRADOR

Masculino Mensajes : 88
Fecha de inscripción : 05/05/2013
Edad : 62
Localización : Ciudadela, Provincia de Buenos Aires, República Argentina

http://desencriptador.foroweb.org/

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.