Autor Tema: Puedo dañar un PIC poniendolo a que se haga el mismo el reset?  (Leído 15334 veces)

0 Usuarios y 1 Visitante están viendo este tema.

AABHGA

  • Visitante
Puedo dañar un PIC poniendolo a que se haga el mismo el reset?
« en: 14 de Septiembre de 2006, 21:37:09 »
Pues esa es mi duda, en un proyecto, hago que uno de los pines me envie una señal de bajo conectada directamente al MCLR que tiene una resistencia pull up al positivo, al hacer esto me puedo cargar el pic?, hay alguna manera por código de hacerlo?

Bueno eso es todo.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Puedo dañar un PIC poniendolo a que se haga el mismo el reset?
« Respuesta #1 en: 15 de Septiembre de 2006, 00:50:34 »
Hola AABHGA, no dañaras el pic por conectarlo de esa manera, el único problema que puedes tener es que si en medio de un programa colocas por error ese pin a bajo pues se reiniciará el pic, pero nada más.

La manera que conosco de hacerlo por software es activando el wachdog y cuando querés que se te resetee, pues dejas de borrar el reguistro del mismo, con lo cual entrará en función el wachdog produciendo el reset.

Un saludo.

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

AABHGA

  • Visitante
Re: Puedo dañar un PIC poniendolo a que se haga el mismo el reset?
« Respuesta #2 en: 15 de Septiembre de 2006, 01:02:36 »
Ok Carlos, mil gracias por la info, ya con esto puedo iniciar mi proyecto de mezclar el teclado, el lcd y una conexión serial con el pc para transferencia de datos (creo que voy muy rápido pero esa es la idea no? xD)

Nos vemos.

Deimos

  • Visitante
Re: Puedo dañar un PIC poniendolo a que se haga el mismo el reset?
« Respuesta #3 en: 15 de Septiembre de 2006, 07:34:34 »
Si cargas un 0x00 en el contador de programa, tambien se hará un reset, ya que la posicion 0x00 pertenece al vector reset.

Que halla suerte!!!!!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Puedo dañar un PIC poniendolo a que se haga el mismo el reset?
« Respuesta #4 en: 15 de Septiembre de 2006, 07:45:50 »
AABHGA depende el pic que uses pero si usas la familia 18F por ejemplo, hay una sentencia de reset.

Si cargas un 0x00 en el contador de programa, tambien se hará un reset, ya que la posicion 0x00 pertenece al vector reset.

Esta operación la desaconsejo totalmente o al menos sacada de contexto es al menos "peligrosa".

Esto es válido siempre y cuando el stack esté vacío y el PCLATH sea 0, aún así si lo que se quiere es 'reiniciar' el programa es más simple ir a las rutinas de inialización.

Otra otras formas es la de hacer un simple "return" con el stack vacío y el PCLATH en 0



El uso del Watchdog para estos casos, en mi opinión tampoco es lo ideal pero es la "menos peor forma" de hacerlo.

Creo que el watchdog está para cuando se cuelga el dispositivo pero no para resetear al pic a voluntad.  Es un uso "paralelo" de la función real para la cual fue concebido el WDT, aunque habría que analizar cada caso.

Creo que cuando alguien quiere hacer un 'reset por software' en realidad solo quiere reiniciar el programa, y para esto, en general uno no recurre a toda la rutina de configuración de pinout ,etc.  De todas formas llegado el caso, eso nunca se suele ubicar en la posición 0x0000 sino en otra parte, por ello considero mejor un goto a "esa otra parte". 

Si lo vemos desde el punto de vista de C, un lenguaje estructurado, la forma elegante sería la de armar un bucle infinito dentro del cual se arma el bucle del programa y al salirse del bucle del programa en el mail se vuelve al bucle infinito "reincializandose" el programa.

El C18 por ejemplo hace esto, al salir del "main", no se va a la nada, sino que se produce otra llamada al main.

Saludos


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Deimos

  • Visitante
Re: Puedo dañar un PIC poniendolo a que se haga el mismo el reset?
« Respuesta #5 en: 18 de Septiembre de 2006, 03:50:57 »
Maunix yo creo que si se podria hacer. Unicamente habria que configurar la maquina para que cuando hiciese el reset, guardase todo el estado de maquina en una parte de la eeprom, y cuando reinicie la maquina lo primero que haga es ir a mirar este sector de memoria y volver a ponerlo todo como estaba antes del reset. Pienso que se podria hacer. Ademas, los pics no tienen un bit que indica si el estado anterior es un reset ,no? Creo recordar que si. Habia un registro o un bit que avisaba si la maquina arrancaba de un estado anterior reset o power down.

La solucion con el WDT no me acaba de convencer. Soy muy reacio a utilizar el WDT para hacer nada. Prefiero deshabilitarlo, y montar aparte un sistema interruptivo donde no se me pare la maquina y haga saltar el WDT por accidente.

La verdad es que nunca he hecho un reset por software. Supongo que puede tener utilidad en aplicaciones de comunicaciones entre micros.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Puedo dañar un PIC poniendolo a que se haga el mismo el reset?
« Respuesta #6 en: 18 de Septiembre de 2006, 08:44:15 »
Maunix yo creo que si se podria hacer. Unicamente habria que configurar la maquina para que cuando hiciese el reset, guardase todo el estado de maquina en una parte de la eeprom, y cuando reinicie la maquina lo primero que haga es ir a mirar este sector de memoria y volver a ponerlo todo como estaba antes del reset. Pienso que se podria hacer. Ademas, los pics no tienen un bit que indica si el estado anterior es un reset ,no? Creo recordar que si. Habia un registro o un bit que avisaba si la maquina arrancaba de un estado anterior reset o power down.

La solucion con el WDT no me acaba de convencer. Soy muy reacio a utilizar el WDT para hacer nada. Prefiero deshabilitarlo, y montar aparte un sistema interruptivo donde no se me pare la maquina y haga saltar el WDT por accidente.

La verdad es que nunca he hecho un reset por software. Supongo que puede tener utilidad en aplicaciones de comunicaciones entre micros.

 :shock: Deimos, creo que no has leído mi post detenidamente.

¿En qué momento he dicho que no se puede?

Todo lo contrario, he dicho que hay muchas formas pero también que hay formas "peligrosas" de hacerlo y que a la larga llevarán a un cuelgue del software (si el stack de call's está lleno). 

El watchdog está para ser usado como watchdog, nada que hagas con una interrupción por software, un timer o lo que sea lo suplanta.

Si uno usa el watchdog para "solucionar bugs de software" bueno, es que es un uso del mismo para el cual no fue diseñado.  Un software que está bien organizado no se va a perder así porque sí.  En ese punto una rutina como la que tu haces es perfectamente válida, pero de nuevo, si está todo bien... para que resetearlo.

El watchdog sí sirve y no es un capricho.  De hecho su timer es de solo lectura y una vez activado no podemos hacer nada más que detenerlo.

Lo de guardar en la eeprom para luego retomar donde se estaba, no es mala idea, pero me parece que no es de lo que se estaba hablando. 

1) Si uno sabe donde 'estaba' entonces para que resetearse...  :)

2) Si uno sabe que debe reiniciar una rutina, porque no hacer un goto y listo antes que reiniciar el software...

3) Si uno antes de resetearse va a guardar todo en la eeprom, lo cual lleva unos cuantos mseg, eso es totalmente inaceptable para muchas aplicaciones.

El uso del watchdog no es para cualquier aplicación y hay que saber 'domar a la bestia'.  Cuando se activa el mismo es como si todo comenzase de nuevo para el pic, pero oh casualidad, tal vez se habia iniciado algún proceso importante que deba ser 'retomado'.  Para ello uno puede ir haciendo eso que tu dices , durante el programa, pero el watchdog no avisa
que ocurrirá, simplemente ocurre.

Creo que es un tema super interesante y "aplicación dependiente", pero nos estamos yendo del hilo que originó el tema.

Saludos

PD: sí existe manera de saber qué reinició a un PIC, hay registros con información para ello.
« Última modificación: 18 de Septiembre de 2006, 08:45:51 por maunix »
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Puedo dañar un PIC poniendolo a que se haga el mismo el reset?
« Respuesta #7 en: 18 de Septiembre de 2006, 11:23:13 »
Hola compañeros que tal!
Ahora que miraba este post se me vino a la cabeza una instruccion en C para reiniciar el programa  es RESET_CPU(); yo la e utilizado mucho en CCS para reiniciar el pic desde el programa.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Puedo dañar un PIC poniendolo a que se haga el mismo el reset?
« Respuesta #8 en: 18 de Septiembre de 2006, 11:43:25 »
Hola compañeros que tal!
Ahora que miraba este post se me vino a la cabeza una instruccion en C para reiniciar el programa  es RESET_CPU(); yo la e utilizado mucho en CCS para reiniciar el pic desde el programa.

En qué pic?  Si es en los 18F, pues claro.  Es lo mismo que usar la funcion 'reset' del assembler  :);).  Fíjate, aquí en este post http://www.todopic.com.ar/foros/index.php?topic=13890.msg82307#msg82307

Aquí más que nada se hablaba de hacerlo en los 16F, donde no está esa posibilidad tan directa.

Saludos
« Última modificación: 18 de Septiembre de 2006, 11:54:15 por maunix »
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Puedo dañar un PIC poniendolo a que se haga el mismo el reset?
« Respuesta #9 en: 18 de Septiembre de 2006, 15:45:08 »
Hola maunix que tal yo lo he realizado solo en 16f84a, en 16f628a y  en otros pocos de la serie 16f. Yo no lo e echo en ningun 18f pero que me parece que es lo mismo en todos los PICs

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Puedo dañar un PIC poniendolo a que se haga el mismo el reset?
« Respuesta #10 en: 18 de Septiembre de 2006, 16:19:16 »
Hola maunix que tal yo lo he realizado solo en 16f84a, en 16f628a y  en otros pocos de la serie 16f. Yo no lo e echo en ningun 18f pero que me parece que es lo mismo en todos los PICs

samshiel_pic perdona pero disciento completamente.

Una cosa es que haya una función Reset para los 16F en CCS (vaya a saber qué hace y cómo lo hace) y otra es que haya una instrucción de hardware específicamente para tal fin como es el caso de los PIC18F.

Lo último, no lo decide CCS ni su gente, sino Microchip.   Sería interesante ver qué código assembler genera esa instrucción que mencionas.  Tal vez simplemente sale del main para volverlo a llamar.

Saludos

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Puedo dañar un PIC poniendolo a que se haga el mismo el reset?
« Respuesta #11 en: 18 de Septiembre de 2006, 17:14:05 »
hola maunix  :P  yo estoy de acuerdo contigo que habria que ver que es lo que  hace en el fondo esa instruccion. Pero yo solo doy mi opinion sobre el tema que se esta hablando y aportando como he realizado yo ese reset. Nada mas. Yo he utilizado esta instruccion mas concretamente en un proyecto en el que pide una clave y si al cabo de un tiempo o un  numero de veces que la hayas metido mal el pic se resetea, simple y llanamente.

Pero yo creo que para la pregunta original de AABHGA esta es una posible solucion  y otra cosa es que tampoco tenemos informacion de que PIC es, 16f o 18f.

Bueno vamos a ver si AABHGA nos dice como lo ha solucionado o algo  :D

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Puedo dañar un PIC poniendolo a que se haga el mismo el reset?
« Respuesta #12 en: 18 de Septiembre de 2006, 17:21:48 »
Para un 16F628A el CCS C traduce reset_cpu() a

Código: ASM
  1. ....................       reset_cpu();
  2. 0045:  CLRF   0A
  3. 0046:  GOTO   000

Para un 18F4550 el CCS C traduce reset_cpu() a

Código: ASM
  1. ....................       reset_cpu();
  2. 0078:  RESET

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

AABHGA

  • Visitante
Re: Puedo dañar un PIC poniendolo a que se haga el mismo el reset?
« Respuesta #13 en: 18 de Septiembre de 2006, 18:35:52 »
Lo he puesto a trabajar con un LOW en un PORT y conectarlo al MCLR de los PIC 16F628, 16F84 y 16F877, y el programa se reinicia sin ningún problema, ademas como dijo Chaly29 que haciendo eso no me lo cargo (daño) entonces así lo estoy utilizando.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Puedo dañar un PIC poniendolo a que se haga el mismo el reset?
« Respuesta #14 en: 18 de Septiembre de 2006, 18:55:11 »
Lo he puesto a trabajar con un LOW en un PORT y conectarlo al MCLR de los PIC 16F628, 16F84 y 16F877, y el programa se reinicia sin ningún problema, ademas como dijo Chaly29 que haciendo eso no me lo cargo (daño) entonces así lo estoy utilizando.

Muy bien, si bien desperdicias un pin al menos estás seguro que será un reinicio "limpio" pero cuidado con lo que hagas con el pin en cuestión ni bien se inicia el software.

Diego, a tí gracias por el post.

Solo me queda agregar que... como dije anteriormente, hacer

Código: ASM
  1. 0045:  CLRF   0A
  2.       0046:  GOTO   000

Es tremendamente peligroso si no se sabe de donde se está haciendo.  Eso no vacía el stack de los calls. 

Estaría bueno probar 2 o 3 resets de esos desde una función (que sea llamada por varias rutinas para que el CCS no la llame con un simple goto) y quisiera saber qué sucede con el stack...

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything