TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Picoffon en 21 de Diciembre de 2004, 07:06:00

Título: ¿Pause o pauseus?
Publicado por: Picoffon en 21 de Diciembre de 2004, 07:06:00
Hola a todos. Resulta que en un programa que estoy haciendo utilizo el "pause" para hacer una pausa de 3minutos y medio, pero parece ser que no es muy preciso y realmente la pausa es de 3min y 24seg aprox. El caso es que si cambio el "pause" por el  "pauseus" (ya que tiene mayor precisión),  entonces el programa no me funciona correctamente. Querría saber si es que hay que poner algo para poder utilizar el "pauseus" o a ver si alguien sabe que puede estar pasando.

Mi PIC es el 16F84a, y tengo un cristal de 4MHZ, por tanto no debería tener problemas aunque no pusiera un "define OSC", puesto que el pauseus considera por defecto un reloj de 4Mhz. Otra cosa, utilizo el Pic basic pro.


Gracias a todos.
Título: RE: ¿Pause o pauseus?
Publicado por: Lager. en 21 de Diciembre de 2004, 12:43:00
Hola picofon,
Me imagino que usaste VARIOS pause para llegar a 3 minutos, por que solo soporta cada uno un maximo de 65.xxx segundos (65.535 ). all igual que pauseus.Ahora que si usaste rutinas COMBINADAS.. con for, repeat, while etc.. el control de tiempo se vuelve problematico ya que no depende de una sola rutina y habria que revizar que tan eficiente es el pbp al generar el codigo ensamblado. Otro detalle no se que tan preciso sea el pause en pbp, pero como chekaste el tiempo? por que si lo simulaste no es buena idea. habria que chekarse en montaje real . por ultimo para casos sensitivos de tiempos te recomiendo que hagas una rutina en asm o con el generador de retardos que esta en esta web, con estos vas a tener los 3.30 y no 3.32 ni 3.24 ni 3.25(lo cual para aplicaciones no tan criticas es util) .

Salu2
Título: RE: ¿Pause o pauseus?
Publicado por: RGL en 21 de Diciembre de 2004, 17:31:00
Un 13% de deriva en ese cálculo es mucho. No creo que el problema lo tengas en el pause, sino en lo que rodea al pause (ya apuntado por el amigo Lager).

Una alternativa es usar el Timer0 o el Timer1 contando desbordamientos mediante interrupción o pooling (más precisa la interrupcion).  Si pones tu código de la pause le podemos dar un vistazo y te decimos algo.

saludos.
Ricky
Título: RE: ¿Pause o pauseus?
Publicado por: Picoffon en 22 de Diciembre de 2004, 04:08:00
Bueno, la manera de testearlo es la mejor para hacerlo, es decir: programando el pic y mirando su respuesta real.  

Este es el fragmento de código de la pausa, como vereis no es gran cosa.

high  rele
high led_azul
pause 60000                   " dura 1 minuto
low rele
pause 51000                    "dura 3 minutos y medio
pause 51000
pause 51000
pause 51000
low  led_azul

Lo de high rele,low rele, etc. no hacerle mucho caso. Simplemente son salidas que activo o apago. Donde me da realmente el problema de tiempo es en el de 3 y medio. En el de un minuto no tengo problema (hombre, mi sistema para medir el tiempo es un misero cronómetro, pero más o menos lo puedo medir bien).

El que si que me da realmente problemas de tiempo, y que ayer no pude probar, es este fragmento que pongo a continuación:

for i=1 to 900
if porta.0=1 then CICLO
pause 100
next i

Esta instrucción debería hacer una pausa de minuto y medio, sin embargo, la pausa es de aprox 20seg.
¿por qué demonios no me funciona el "pauseus" ? (Cambiándolos por los pauses)
Título: RE: ¿Pause o pauseus?
Publicado por: khasistos en 22 de Diciembre de 2004, 06:36:00
Hola.

veo que tu solo te estas contestando y no te has dado cuenta .....

Si 60000 es un minuto EXACTO entonces 3 1/2 seian 210000...y no

4 x 51000 = 204000...
entoces prueba
Pause 60000
pause 60000
pause 60000
pause 30000

Saludos

khasistos
Título: RE: ¿Pause o pauseus?
Publicado por: Picoffon en 22 de Diciembre de 2004, 07:05:00
¡¡¡Cieerto!!!, Vaya fallo de principiante que he tenido.(La verdad es que lo soyGiño).
Gracias por el aclarado. Mira que no ponerme a contar...

De todas maneras lo del bucle "for" debería funcionar y no lo hace. Creo que tiene que ver con el 900, porque he probado con un bucle hasta 90 y si que me funciona. A ver si alguien sabe porque es.
Título: RE: ¿Pause o pauseus?
Publicado por: manex_1987 en 22 de Diciembre de 2004, 09:42:00
Pues será porque has declarado la variable del FOR como byte, y al poner un valor >255 pues fallo... aunque pienso que el compilador deberia de decir algo al respecto al compilar.

salu2
Título: RE: ¿Pause o pauseus?
Publicado por: Lager. en 22 de Diciembre de 2004, 09:51:00
picoffon como defines la variable i???? tiene que ser word.. Si solo cuenta 20 segundos: 255 * 100ms=25500 ms=25.5 segundos.. muy probable  lo de la variable tu problema.
El pauseus es en us portanto es hasta peor usar un contador de menor temporizacion para periodos largos, ya que solo llegarias hasta  65535 us. o 65 ms y tu REQUIERES temporizaciones LARGAS..... mas bucles mas error y por tanto menos precision.

Salu2 pana
Título: RE: ¿Pause o pauseus?
Publicado por: Picoffon en 23 de Diciembre de 2004, 04:34:00
Exactamente, eso era. Tenía declarada mi variable "i" como byte en vez de como word.

Muchas gracias, porque si no capaz que hubiese puesto 10 bucles hasta llegar al tiempo correcto.  

Lo que no se es porque cuando cambio los pauses por pauseus, en vez de hacer la pausa se la salta. Si alguno tiene idea de porque es, le estaría bastante agradecido.
Título: RE: ¿Pause o pauseus?
Publicado por: Lager. en 23 de Diciembre de 2004, 12:00:00
Pana picoffon,
podrias poner esa parte de codigo que se supone que salta?? acuerdate que el pause us es en microsegundos(us) puede parecer que la salta por que la hace mas rapido.... aun asi dime con mas precision como la estas empleando... ademas recuerda que como usas un xtal de 4mhz tu pausa minima es de 24 us..

Salu2 pana
Título: RE: ¿Pause o pauseus?
Publicado por: Picoffon en 03 de Enero de 2005, 11:39:00
Perdonad si he tardado en contestar pero es que me había ido de vacaciones.
En fin, creo que ya se el problema, ya que estaba utilizando el pauseus simplemente sustituyendo los pauses por estos. Al tener mayor precisión las pausas tal y como están en el código de programa tal vez sean demasiado pequeñas para apreciarlas, tal y como dice Lager. No lo he probado todavía pero seguro que estaba ahí el fallo.

Muchas gracias a todos por vuestra ayuda.