TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: alex22ra en 01 de Agosto de 2005, 06:04:00

Título: Pregunta chorra
Publicado por: alex22ra en 01 de Agosto de 2005, 06:04:00
Hola a todos.

Pregunta: Si en el registro option pongo en PS2,PS1yPS0, un 000. ¿El prescaler del timer 0 sera 1:2? ¿y si no quiero prescaler que tengo que hacer?

Yo imagino que 1:2 será el minimo porque hay instrucciones que tardan 2 us en ejecutarse y por tanto podria surgir algun tipo de problema, pero no se. Ya me comentareis.

Salu2
Título: RE: Pregunta chorra
Publicado por: fenix_jn en 03 de Agosto de 2005, 20:24:00
Pues si, el prescale t dividira el timer0 entre 2 (los pulsos), yo tuve este problema una vez con un velocimetro y se soluciono d esta forma

a) Asigna el prescaler al WDT
b) Al grabar, selecciona el WDT como OFF o apagado

Esto t dara una division 1:1 en el TMR0 o mejor dicho no habra division en los pulsos, ahora yo asumo q no estaras usando el WDT en el programa, si es asi, ahora la division se t va en el WDT aumentando a doble del tiempo.

Si estas usando el WDt, considero q el WDT podria tener prioridad sobre el TMR0 asi q si no puedes mover el prescaler al WDT t tocara multiplicar por 2 el valor almacenado en el TMR0, es cosa de hacer rotar el valor del registro 1 posicion a la izquierda (ojo debe entrar un cero en el LSB)
Título: RE: Pregunta chorra
Publicado por: alex22ra en 04 de Agosto de 2005, 03:30:00
Muchas gracias, me has solucionado el problema.

Pero sigo teniendo una duda, Si la interrupcion salta justo "en medio" mientras se está ejecutando una instruccion que tarda 2 ciclos de reloj en ejecutarse (btfsc por ej) no ocurre ningun problema.
Es que esto me podria pasar a mi ya que en el bucle principal son todo comprobaciones de flags.

Salu2
Título: RE: Pregunta chorra
Publicado por: fenix_jn en 04 de Agosto de 2005, 23:28:00
bueno yo tngo entendido q una interrupcion es atendida por el micro LUEGO de q la instruccion ha sido ejecutada, en el caso de tu instruccion btfsc, la interrupcion sucederia en programa despues q se ha comprobado los valores, el hecho de q suceda dentro del ciclo del CPU no impide la ejecuccion de la instruccion, y sera atendida al finalizar el ciclo q se consume la ultima instruccion cargada.

En pocas palbaras, aun si la int ocurre dentro del rango de los 2 µS q se consume el btfsc (suponiendo q el CPU ya esta ejecutando el btfsc o sea la instruccion ya esta cargada en el CPU de PIC), primero se ejecutara el btfsc y despues la rutina de interrupcion