Autor Tema: entendiendo los sitemas de proteccion de los pics  (Leído 7290 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
entendiendo los sitemas de proteccion de los pics
« en: 13 de Febrero de 2010, 11:35:02 »
hola.queria abrir este tema no para explicar su funcionamiento.si no,para crear un debate al respecto de funciones que tiene el pic y que no solemos utilizar por el desconociminto de estas.que estan relacionadas con el reseteo del pic.

la mayoria de estas estan en la palabra de configuracion:como el BODEN ,PWRTE,WDT y otros.

quiero empezar por comentar algunas dudas sobre el watchdog:

es la primera vez que estoy usando el WDT y segun el datasheet hay unas lineas que no comprendo del todo.
son para cambiar del WDT -> TMR0  y del TMR0 ->WDT

en estas lineas se realiza el cambio del prescaler de TIMER0 a WDT

bcf STATUS,RP0            ;Bank 0
clrwdt                           ;Clear WDT
clrf TMR0                      ;Clear TMR0 and prescaler

bsf STATUS,RP0            ;Bank 1
movlw b’00101111’        ;Required if desired
movwf OPTION_REG      ; PS2:PS0 is
clrwdt                           ; 000 or 001

movlw b’00101xxx’        ;Set postscaler to
movwf OPTION_REG      ; desired WDT rate
bcf STATUS,RP0            ;Bank 0

las dudas que tengo al respecto son:
segun lo de "required if desired" a mi entender dice que si la configuracion del prescaler es 000 o 001 forzosamente tendremos que borrar el WDT.
y que si es una configuracion diferente,no hace falta borrar el WDT.

o quedra decir que si la configuracion del prescaler es 000 o 001 tenemos que borra el WDT,y que posteriormente tenemos que volver a configurar el prescaler?

haber si alguien me puede aclarar esta duda.

respecto al cambio de WDT a TIMER0,no veo ninguna duda.


clrwdt                                ;Clear WDT and   postscaler
bsf         STATUS,RP0         ;Bank 1
movlw     b’xxxx0xxx’         ;Select TMR0 prescale  and
movwf    OPTION_REG
bcf         STATUS,RP0          ;Bank 0



otra duda que tengo respecto al seguimiento del WDT en el PMLAB.es que no veo ningun registro relacionado con el WDT.y no se cuando poner un clrwdt para ajustarlo lo mejor posible.











Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado JBQ

  • PIC16
  • ***
  • Mensajes: 118
Re: entendiendo los sitemas de proteccion de los pics
« Respuesta #1 en: 13 de Febrero de 2010, 15:35:10 »
Hola groundman, no logré ubicar ese parte de "required if desired" en el datasheet, pero como yo lo entiendo, asignes o no asignes el prescaler al WDT, si lo habilitas (en la palabra de configuración), tienes que borrarlo de vez en cuando, si no, este generara el reset respectivo.

 
Citar
otra duda que tengo respecto al seguimiento del WDT en el PMLAB.es que no veo ningun registro relacionado con el WDT.y no se cuando poner un clrwdt para ajustarlo lo mejor posible.

Bueno, eso es por que el WDT es un temporizador físico al que no se tiene acceso ni de escritura ni de lectura, a lo mucho podrás asignarle el prescaler para retardar su cuenta. Respecto a donde ubicar mejor la instruccion clrwdt, eso es criterio propio del firmware, es decir, si le asignas prescaler o no, dependera cada cuanto tiempo borres el WDT, o si un proceso en especial se tiende a quedar en un bucle infinito por razones X.

Respecto al tema, sería interesante escuchar las experiencias de otros al usar estos recursos de la palabra de configuración y aprovechar de esa forma su potencial al máximo. Yo por ejemplo, siempre habilito el PWRT, para dar estabilidad al oscilador y esperar la linealidad de la fuente, el BODEN casi nunca lo uso, y el LVP, si no me equivoco es para habilitar el ICSP a 5 voltios, bueno, eso creo, porque solo lo eh leído, nunca lo he utilizado, corrijame alguién si me equivoco por favor.

un saludo y chao.

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: entendiendo los sitemas de proteccion de los pics
« Respuesta #2 en: 13 de Febrero de 2010, 15:37:58 »
.

Es muy buena tu pregunta, yo nunca me había fijado en ese detalle. Me fijé en el datasheet, y a mi entender estas líneas:
movlw b’00101111’        ;Required if desired
movwf OPTION_REG      ; PS2:PS0 is
clrwdt                           ; 000 or 001
Son requeridas si el valor que queremos ponerle es 000 ó 001. Aunque la gran intriga es.. ¿POR QUÉ?  :huh:
Y ahora que lo pienso.. ¿Cuántos ciclos hacen falta para hacer saltar el WDT?



When you see a good move, look for a better one (Emanuel Lasker)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: entendiendo los sitemas de proteccion de los pics
« Respuesta #3 en: 13 de Febrero de 2010, 16:07:33 »
pues no sabia que al activar el WDT en la parabra de configuracion,habia que borrarlo aunque el prescaler estubiera asignado al TIMER0.
he hecho una pruevas y me he dado cuenta de que el reseteo del pic por no borrar el WDT sin que este asignado a este.es de 17742 ciclos de reloj despues de ejecutar el borrado del watchdog.

lo he calculado configurando TMR1 para que empieze a contar desde cero.despues de un clrwdt.en el MPSIM.

lo del requerimiento del datasheet habra que esperar a que algun guru nos lo aclare.



Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado JBQ

  • PIC16
  • ***
  • Mensajes: 118
Re: entendiendo los sitemas de proteccion de los pics
« Respuesta #4 en: 15 de Febrero de 2010, 11:01:00 »
Citar
he hecho una pruevas y me he dado cuenta de que el reseteo del pic por no borrar el WDT sin que este asignado a este.es de 17742 ciclos de reloj despues de ejecutar el borrado del watchdog.

Hola groundman, supongo que cuando mencionas esto te refieres a que no has asignado el prescaler al WDT y que tus resultados de esta configuración dieron 17742 ciclos de instrucción después del último clrwdt. Bueno, eso es correcto, ya que si multiplicas el numero de instrucciones (17742) por el periodo de instrucción (que a juzgar por tus resultados es de 1 useg, debido a un oscilador de 4 MHz) dara como resultado aproximadamente los 18 mseg que tiene temporizado el WDT.

Lo que sucede es que el WDT es un oscilador independiente del oscilador principal, incluso puede seguir funcionando si no existe el oscilador principal, y su cuenta de temporizacion es de 18mseg (tipicamente), tengas un osciladorde 32 KHz o  de 20 MHz. Esto se debe a que el WDT debe seguir funcionando incluso si el microcntrolador esta en modo sleep. Ahora supongamos que le asignamos el prescaler, y quieres saber la temporizacion resultante, la fórmula sería así :

TWDT = (PRESCALER)*18                 ;el número 18 puede variar según el datasheet

entonces concluimos que la máxima temporización que se le puede asignar al WDT es de 2304 mseg aprox.

Bueno, suerte con tus demás pruebas y chao.

Pdta. sigo sin encontrar esa especificación en el datasheet, no podrías poner la pagina por favor para revisarla?

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: entendiendo los sitemas de proteccion de los pics
« Respuesta #5 en: 15 de Febrero de 2010, 17:07:25 »
pues balla.hay cosas que no sabia.lo revisare bien.

respecto al datasheet es el del PIC 12F629/675 y esta en la pagina 29 "31 del pdf"
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: entendiendo los sitemas de proteccion de los pics
« Respuesta #6 en: 15 de Febrero de 2010, 21:22:29 »
exacto JBQ.

he mirado el datasheet y el valor del tiempo en que el pic se resetea activando el WDT esta entre 10 y 25ms a 5V cuando la temperatura esta entre -40 y +85ºC
y de 17ms a temperatura ambiente.

aunque en el proteus he hecho nuevas pruevas.y es lo que tu dices.el WDT salta a los 18ms sin asignar el prescaler al WDT.
y si asignamos el prescaler al WDT tendriamos un maximo de 18ms x 128=2.304 segundos

ya lo he entendido.lo bueno de esto es que si asignamos el prescaler al TMR0.podremos usar el TMR0 y el WDT al mismo tiempo.
solo tenemos que usar un clrwdt en un lugar estrategico.

lo que no entiendo es algo que he visto en algun tema de ajustar el WDT.
creo que esto es bastante dificil si el oscilador principal y el del WDT no estan sincronizados.aunque se aproximan bastante.
porque en 18ms se han ejecutado 17742 instrucciones a 1us por instruccion. 0.018-0.017742= 258us de retarso en el WDT.en este caso significa que
el oscilador del WDT es de 3.875968Mhz

para ajustar el WDT los tiempos de este deberian de poder ser programados con mas exactitud.y decidiendo cuantas instrucciones queremos
que se ejecuten antes de que borremos el WDT para que no salte.
en el caso real tienen que pasar 17742 instrucciones-1 sin prescaler.para borrar el WDT y que no se resetee el pic.siempre y cuando por causas de temperatura
no varie la frecuencia del WDT.

esa seria la forma de ajustar al maximo el WDT.a no ser que ajustar el WDT no signifique esto.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: entendiendo los sitemas de proteccion de los pics
« Respuesta #7 en: 16 de Febrero de 2010, 20:15:45 »
.


Según el datasheet del 12F629 (página 64) en el peor de los casos (vdd=min, temp=max, wdt_prescaler=max) toman varios segundos antes de que el wdt se active. A mi me da a entender que el temporizador no se vuelve más rápido por empeorar las condiciones, sino más lento, así que tomar como referencia un valor de aprox 18ms (sin prescaler) pareciera aceptable. Aunque siempre conviene adelantarse un poquito y hacer que sean 15ms  ;-)
Por cierto, muy interesantes tus investigaciones. Saludos.


When you see a good move, look for a better one (Emanuel Lasker)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: entendiendo los sitemas de proteccion de los pics
« Respuesta #8 en: 16 de Febrero de 2010, 20:45:20 »
gracias mtristan.ya se lo que quieres decir.pero no creo que sea eficaz del todo vajar el voltage y aumentar la temperatura para llegar a tener un desbordamiento
del WDT mas corto.

otra cosa que quiero comentar es que no se puede fiar uno mucho del simulador.ya que el el proteus la simulacion me va perfectamente.pero en el circuito fisico.
he tenido que intercalar un clrwdt.para que el pic no estubiera constantemente reiniciandose.
con esto quiero decir que es mas facil que en el montage fisico.el WDT es mas rapido que en el simulador.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: entendiendo los sitemas de proteccion de los pics
« Respuesta #9 en: 16 de Febrero de 2010, 21:20:02 »
.


Una investigación apenas más exhaustiva (página 98 del mencionado datasheet) indica lo siguiente:
Watchdog Timer Time-Out Period (No Prescaler; Vdd=5V; -40ºC<Temp<+85ºC): Min=10ms; Typ(25ºC)=17ms; Max=25ms.
Parece ser que es bastante menos que los 15ms que yo preveía  :tongue:



When you see a good move, look for a better one (Emanuel Lasker)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: entendiendo los sitemas de proteccion de los pics
« Respuesta #10 en: 17 de Febrero de 2010, 10:27:59 »
de lo que deduzco de unos calculos que he realizado.que el tiempo de variacion es de  120us por grado.

no estoy muy seguro.pero si realizamos un programa con estos datos,es posible que se pueda calcular la temperatura interna del pic.
y visualizarla en un lcd.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado JBQ

  • PIC16
  • ***
  • Mensajes: 118
Re: entendiendo los sitemas de proteccion de los pics
« Respuesta #11 en: 17 de Febrero de 2010, 12:02:45 »
Hola a todos. groundman, ya encontré esa parte de datasheet que mencionas y procedo a explicarla según mi modesto entender:

Como ya se sabe, el prescaler está compartido entre el TMR0 y el WDT, y su asignación a uno de ellos se hace mediante el bit PSA del registro OPTION_REG.
Lo interesante, es que esto se puede hacer en cualquier momento, es  decir, en un mismo firmware puedes asignarle primero al WDT, luego al TMR0. luego al WDT y asi sucesivamente (cosa poco practica y usada según yo creo). Entonces aqui entra a tallar ese detalle, al hacer estos "sucesivos intercambios", no basta con tan solo manipular el bit PSA, se tiene que seguir esta secuencia de instrucciones si se desea que el WDT trabaje correctamente (pero solo si se desea que el WDT trabaje con un prescaler de 1 ó 2).

Me explico mejor: supongamos que el prescaler está asignado al TMR0 y por motivos x del firmware ahora deseas asignarselo al WDT, entonces tendrías que hacer esto:

movlw b'xxxx1xxx'
movwf OPTION_REG

pero esto solo es valido si los bits PS<2:0> estan comprendidos entre los valores 010 y 111. En caso se desee que su valor sea 000 ó 001, la secuencia a de ser la sgte.

movlw b'00101111'                 ;estas 3 lineas son las requeridas si se desea un 
mowf OPTION_REG                 ;prescaler para el WDT de 1 ó 2 cuando se hace el
clrwdt                                  ;cambio desde el TMR0 al WDT

movlw b'xxxx1xxx'
movwf OPTION_REG

y luego de la secuencia requerida, recién los bits PS<2:0> toman el valor deseado, sea 000 ó 001.

como se podrá observar, esto solo se realiza cuando el prescaler es reasignado desde el TMR0 al WDT, pero que sucede si es al revés, bueno aqui el asunto es más fácil, ya que no hay prerequisitos para la configuración de los bits PS<2:0>, entonces la secuencia sería como sigue:

movlw b'xxxx0xxx'
movwf OPTION_REG

y resulta que esta es la forma que generalmente más se usa, ya que por defecto (es decir, cuando alimentamos el microcontrlador), el prescaler inicia asignado al WDT, oséa  el bit PSA seteado, entonces cuando queremos asignar el prescaler al TMR0, solo realizamos la secuencia anterior sin ningun prerrequisito, y si en caso contrario, queremos darle un prescaler de 1 ó 2 o x al WDT, pues ya no es necesario la secuencia requerida ya que el prescaler ya esta asignado al WDT por default.

Bueno, eso es todo, espero haber contribuido en algo, un saludo a todos y chao.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: entendiendo los sitemas de proteccion de los pics
« Respuesta #12 en: 17 de Febrero de 2010, 17:58:33 »
muy bien JBQ.mejor no creo que se pueda explicar.lo he entendido a la perfeccion.no sabia que por defecto se asignaba el prescaler al WDT.
lo que no estoy muy seguro es si el valor requerido b'00101111' tiene que ser exactamente este.porque hay bits en este registro que no tienen nada que ver
con el WDT o el TMR0.como son el bit 7 para las resistencias pull-up.y el 6 para la interrupcion por cambio de GP2/tocki.
e incluso el bit 5 y 4 que aunque si trabajan con el TMR0 puede ser que no hubiera que tocarlos.
almenos no hacen falta tocarlos si queremos pasar del WDT al TMR0 y biceversa.cuando no usamos las divisiones 000 y 001.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado JBQ

  • PIC16
  • ***
  • Mensajes: 118
Re: entendiendo los sitemas de proteccion de los pics
« Respuesta #13 en: 18 de Febrero de 2010, 19:43:18 »
Hola groundman, respecto a si tiene que ser ese valor exacto de b'00101111' en el OPTION_REG, no estoy tan seguro, ya que no  he tenido la ocasión de realizarlo, pero ya que lo mencionamos por aqui, me puse a realizar pruebas, y vaya que fueron realmente controvertidas:

Primero, que el valor de los 4bit MSB del OPTION_REG (<7:4>), es sin importancia.

Segundo, es muy importante antes de manipular el OPTION_REG, borrar el TMR0 (clrf TMR0), solo si estas en esta cuestión de cambiar el prescaler desde el TMR0 hacia el WDT.

Bueno esos fueron los resultados, y en conclusión, solo con borrar el TMR0 antes de hacer cambios en el OPTION_REG en los bits PSA y PS<2:0> es suficiente.
Es raro, ya que busque y busque y no encontre ninguna errata con respecto a eso.

Bueno, como te comente antes, eso de de estar intercambiando el prescaler entre el WDT y el TMR0, no es muy practico ni recomendado, ya que al inicio de configuración deregistros en tu firmware, o le asignas el prescaler al WDT o al TMR0, y listo, solo una vez y de la formas que desees, mediante manipulación de bits (bsf bcf), o por registros (movlw movwf).

En fin, eso es lo que dice el datasheet, y no es la primera cosa extraña que encuentro, algo similar me paso con el TIMER1, su datasheet decia una cosa con respecto al bit T1OSCEN del T1CON, pero las pruebas daban otro resultado.

Un saludo y chao.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: entendiendo los sitemas de proteccion de los pics
« Respuesta #14 en: 19 de Febrero de 2010, 10:31:45 »
valla.te lo has currao muy bien.siempre hay cosas raras en los microcontroladores.aunque como tu dices.no es muy practico estar cambiando el prescaler para el WDT y el TMR0.prefiero intercalar mas clrwdt entre las lineas del codigo.
Montando mi primera impresora 3D (Raprep Prusa i3)