TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: saracatunga en 28 de Septiembre de 2006, 09:43:27
-
Tengo en claro que pauseus se usa para microsegundos y que pause para milisegundos. Se me presenta um problema, porque eso se toma por defecto para reloj de 4 Mhz. Qué pasa si uso otros relojes .......12Mhz, 20Mhz ???? cómo afectan las pausas?
-
Estos comandos calculan los retardos en función al reloj que tengas configurado con la opción DEFINE OSC 4 ( puede ser 8 , 12 o 20)
saludos
-
Hola:
Como bien dice Nichita, el PBP calcula los retardos dependiendo del reloj, siempre y cuando este definido, si no defines la frecuencia que vas a utilizar, toma por defecto la de 4Mhz, que al hacer algo como esto:
Pause 1000
generara un retardo de 1 segundo utilizando un cristal de 4Mhz, si no declaraste la frecuencia, si estas utilizando un cristal que no sea de 4mhz para ese caso, ese tiempo se verá afectado.
-
Parece que soy claro con la pregunta.
Si uso un reloj que sea de 4Mhz, aunque no use define osc 4 toma por defecto el reloj de 4Mhz y el pauseus es en microsegundos y el pause en milisegundos y todo está perfecto.
Si uso un reloj distinto al de 4Mhz, ya sea de 12Mhz, 20Mhz, etc. debo usar define osc 12, define osc 20, etc. para decirle al micro que reloj uso.
Ahora la pregunta es si al especificar la frecuencia de reloj se ven afectados los tiempos, en realidad lord ya me dijo que los afecta, pero no sé cuantificar eso.
Siendo más claro deseo saber la relación matemática entre la frecuencia de reloj y el pauseus y el pause de forma de poder saber con exactitud los tiempos de las pausas que estoy usando.
-
Hola:
Veamos, yo dije que se ve afectado si en tu programas utilizas la pausa para un cristal por ejemplo de 4Mhz, y en el circuito pones uno de 20Mhz, es obvio que se vera afectado, ahora, si tu haces esto:
A)
DEFINE OSC 4
INICIO:
HIGH 0
PAUSE 1000
LOW 0
PAUSE 1000
GOTO INICIO
B)
DEFINE OSC 20
INICIO:
HIGH 0
PAUSE 1000
LOW 0
PAUSE 1000
GOTO INICIO
las dos cosas son lo mismo, ya que como digo el PBP calcula los tiempos para la frecuencia que se utilice. Ahora, la relacion matematica a la que te refieres no la se, en eso no te puedo ayudar.
-
Pues es una ecuacion lineal
Si supongamos que defines un OSC de 4mhz o bien, lo ignoras(por lo que el compilador asumira 4mhz tambien)
y en el programa colocas un retardo de 1000ms(1seg)
pero en el proyecto real,le colocas un cristal de 20mhz, pues entonces la ecuacion sera:
(4*1000ms)/20 = 200ms(exactamente la 5ta parte obviamente porque 4/20= 1/5)
o lo que es lo mismo:
(frec_definida_en_el_compilador/frec_real)*retardo= tiempo real del retardo.
Saludos.
-
Un poco mas
El que utilicemos un leguaje de alto nivel es precisamente para olvidarnos de esos cálculos.
Pauseus/ms, el compilador del lenguaje se encarga de reajustar los cálculos necesarios para que siempre sean eso us/ms, y para ese reajuste de la rutina necesita por supuesto que se le informe al compilador de la velocidad a la que funciona el micro, F.cristal, (internamente F. Cristal/4 es lo que tarda el micro en realizar una instrucción exceptuando las de salto que tardan el doble, por supuesto me refiero a instrucciones maquina, programación en bajo nivel).
Así que para saber la precisión de la rutina, pues esto es difícil, la rutina no es exacta, habría que desensamblar la compilación de la rutina contar el numero de instrucciones de la que esta compuesta y añadir este tiempo como error al calculo anterior que te indican, y después esta el error al calculo inherente al cristal, ya que es difícil conseguir los tiempos exactos, dependiendo de la frecuencia del cristal... todo esto son errores acumulados en la rutina, que genera el comando pause, cuando es compilado... por lo que la precisión del comando varia de una versión de Basic a otro, todo esta en la fineza que haya tenido el programador que diseño el Basic... por eso cuando se quiere mayor precisión la rutina pause hay que fabricarla uno mismo... pero normalmente el error suele ser muy pequeño, también este error se puede disminuir usando un cristal de una frecuencia rara que nos de un múltiplo exacto del tiempo mínimo que usamos como base de tiempos para hacer el calculo del pause.
-
Y si ya estamos en cuestiones tan técnicas, también influye la carga capacitiva del cristal.
No se le colocan capacitores a tierra con el cristal nada mas porque sí. Esos capacitores son necesarios para que empiece a oscilar.
Cuando trabajaba para una empresa tuvieron ese problema y después de 7 horas se dieron cuenta que los cristales estaban bien, la máquina de SMT había colocado capacitores que estaban fuera del rango permitido para los cristales.
Un ejemplo
http://www.tla.co.nz/xtal1.html
Otro ejemplo en el .rar
-
Aqui hay un ejemplo de como medir los tiempos de un bloque de código en PBP con el Timer1:
http://www.picbasic.co.uk/forum/showthread.php?t=365 (http://)