TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: beatAurex1 en 30 de Julio de 2006, 17:29:26
-
Hola alguien me podria ayudar y explicar si ahi alguna otra forma de crear retardos mayores a 65535 ms en PICBasic para no usar varios Delayms, con esto prendo dos motores y se apagan solos ,pero si vuelvo a precionar el boton de encendido no hace caso hasta que acabe el retardo 5min, habia pensado hacerlo con una interrupcion por timer que siempre estuviera preguntando por PORTD.0 para asi reanudar todo desde inicio,, pero supongo ahi alguna otra forma mas facil de hacerlo. espero me puedan dar algun tip. GRACIAS
motor1 var portb.0
motor2 var portb.1
inicio: if PORTD.0=1
MOTOR1=1
MOTOR2=1
endif
DELAYMS 60000
DELAYMS 60000
DELAYMS 60000
DELAYMS 60000
DELAYMS 60000
MOTOR1=0
MOTOR2=0
goto inicio
Digamos lo quiero para prender dos motorcillos
-
Hola beatAurex1
Fijate en la ayuda del Protón, buscá en el índice, la función SLEEP.
Es como dice la palabra "poner a dormir todo", en realidad se pone en una especie de STAND-BY
Se utiliza como SLEEP 300
El número que le sigue a SLEEP son los segundos que puede "dormirse", que en el ejemplo que te puse son los 5 minutos que necesitás.
Luego de eso se "despierta" solito y sigue el programa.
Espro que te sirva.
Saludos.
Mario
-
Hola.
Haber si entiendo:
¿Lo que quieres es que si está corriendo el tiempo, poder interrumpir ese tiempo?
Lo que explicas es algo diferente a lo que tienes en tu tema.
Si es para crear retardos mayores a los 65 segundos, puedes usar FOR y NEXT.
Si quieres hacer otra cosa mientras el tiempo corre, creo que deberás usar las interrupciones. No creo que la del timer sea la idónea, yo usaría la externa de RB0.
Bueno, espero no complicar las cosas.
-
Que tal como estan..
y si utilizas algo como esto:
for x = 0 to 50
delayms 100
if portd.0 = 1 then goto codigo
next x
codigo:
.
.
.
.
.
ojala te sirva
salu2
-
Eso sería bueno, se me olvido el IF para preguntar en el ciclo FOR. :D
-
Hola beatAurex1
Fijate en la ayuda del Protón, buscá en el índice, la función SLEEP.
Es como dice la palabra "poner a dormir todo", en realidad se pone en una especie de STAND-BY
Se utiliza como SLEEP 300
El número que le sigue a SLEEP son los segundos que puede "dormirse", que en el ejemplo que te puse son los 5 minutos que necesitás.
Luego de eso se "despierta" solito y sigue el programa.
Espro que te sirva.
Saludos.
Mario
Pues coincido con Mario, la opcion mas efectiva es usar un sleep, e inclusive pudieras hacerlo despertar frente a una interrupcion externa claro solo si es necesario y ojo aca tambien el limite es 65535 pero segundos osea mucho tiempo, tambien es bueno recalcar que cuando el micro esta es modo sleep su consumo de corriente baja muchisimo
suerte
-
GRACIAS A TODOS POR SUS RESPUESTAS ME SIRVIERON MUCHISIMO
ya pude lograr los retardo que queria y al mismo tiempo preguntar por otras condiciones usando for
FOR B=1 TO 1000 ' PARA UNA PAUSA DE 10 SEG =1000*10ms
IF SENSOR=1 THEN
GOSUB REVELAR ENDIF
PAUSE 10
NEXT
Ahora TAlves deberia hacerlo e otro tema peOr lo hare aqui mismo PARA NO ABRIR OTRO TEMA .
COMO HAGO PARA QUE ME MUESTRE LAS TEMPERATURAS REALES EL SENSOR DE TEMEPRATURA LM35
USO EL A/D DEL PIC16F877A
-
con su convertidor de 10bits. El voltaje de referencia que uso +5v porque estoy usando todos los AN.(0...7)
y a la salida del lm35 esta un amplificador operacional LM358, con r1=4.7 y R2=10k (multivuelta)
Conversion=5v/1024=4.8mV
Ya al mostrarlo en el LCD algunos valores de temepratura si conciden con otro termometro digital que uso por separado para comprobar,, pero de repente se disparan los valores por ejemplo 25°C del lm35= 25°C del digital pero ya despues digamos el digital apenas marca 26 y el LCD ya me esta mostrando hasta 28 o 35°C.
Alguien me podria decir que esta pasando:
GRACIAS
-
HOla mira en este post encontraras mas informacion sobre el lm35dz, buneo no mucha pero si un programa ejemplo que hice con el, hay variables que no se utilizan ya que es para otro programa y se adaptan las rutinas de punto flotante.
http://www.todopic.com.ar/foros/index.php?topic=12300.0
-
:mrgreen: hola tal vez puedas usar esta simple rutina
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2006 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 09/09/2006 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
high portb.0
pause 1000 * 10 ;como sabemos 1000 milisegundos son 1 segundo asi que
low portb.0 ;solo lo multiplicas por el numero que creas necesario cualquier
;numero y tendrasretardos muy grandes
saludos desde torreon coahuila mexico
si ya hice lo dificil ahora sigue lo imposible
-
Hola:
pues a mi manera de ver eso no es muy acertado, ya que no podrias tener este valor 7000*10, y lo que beatAurex1 es crear retardos mayores a 65535ms. haciendo lo que decia, se produciria desbordamiento.
-
hola lord lafebre claro que no puedo compararme contigo en
cuestion de micros se que a tienes mucho mas tiempo que yo
y tienes mas tiempo que yo en esta pagina . mil respetos a ustedes programadores dedicados .
pero con respecto ala sujerecia pues ami no me ha causado ningun
problema ya que he en mis primeras experiencias en pbp me acuerdo
que hice un retardo de media hora y no causo desbordamiento
al momeno de compilar con el mpaswin no me mostro nada de
warnings ni nada por el estilo ,solo es un comentario gracias por leer mi sugerencia
y saludos desde meexico :-/
-
Hola:
con respecto a lo primero que mencionas, pues para nada es cierto :D, yo tambien cada dia que pasa aprendo aqui, pero me extraña eso, la verdad que el maximo valor para una variable es WORD osea 65535 eso en el caso de PBP, por eso cuando digo que haciendo esto 7000*10 se proguciria desbordamiento, claro que el compilador no da errores, pero los errores se deberian dar de una manera logica, es decir el pic no haria lo que uno quisiera que haga.