Autor Tema: Borrado de EEPROM al conectar alimentación  (Leído 3270 veces)

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

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Borrado de EEPROM al conectar alimentación
« en: 06 de Abril de 2015, 17:31:34 »
Hola foreros,

Hice varias tarjetas electrónicas las cuales llevan un PIC18F4550 cada una. Todas las PCB son iguales y todas llevan el mismo programa.

He tenido problemas con alguna de ellas que hace que al dar alimentación a la tarjeta pierda los datos de la memoria EEPROM.

Me parece extraño porque hay un de la y entre que se da alentacion y leo los datos de la EEPROM para evitar problemas en el areanque y no pasa siempre, solo en ocasiones aleatorias.

La alimentación viene de una fuente de alimentación fiable de 24V y en la tarjeta los convierto a 5V para el PIC.

El MCLR lo tengo inhabilitado mediante los bits de configuración, solo uso este pin para programar el PIC.

¿A alguien le a ocurrido esto con algún PIC?

Es la primera vez que me sucede y no encuentro mucha información sobre el tema.
BitPIC

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Borrado de EEPROM al conectar alimentación
« Respuesta #1 en: 06 de Abril de 2015, 18:14:53 »
Que tal bitpic,

Tiene habilitado el Power-up timer? Si no necesitas habilitarlo.
Yo tuve un problema asi en un proyecto que realicé hace ya varios años. Y el problema era que aunque la fuente es confiable, al encenderla se genraba un pico de voltaje que hacía que el contador del programa no se iniciara en el 0000, lo curiosos era que brincaba a la rutina que manejaba al eeprom interna. Lo que tuve que hacer fue habilitar el pin del MCLR y colocar un circuito de power-up externo, que no es mas que un circuito RC como el que se indica en la hoja de datos. Pero lo que hice fue calcular el valor RC de tal forma que el micro estuviera en RESET por un segundo para esperar a que se estabilizara la fuente. De este modo logre resolver el problema en ese entonces.

Espero te sirva el tip.

Elreypic.

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Borrado de EEPROM al conectar alimentación
« Respuesta #2 en: 07 de Abril de 2015, 04:40:56 »
Que tal bitpic,

Tiene habilitado el Power-up timer? Si no necesitas habilitarlo.
Yo tuve un problema asi en un proyecto que realicé hace ya varios años. Y el problema era que aunque la fuente es confiable, al encenderla se genraba un pico de voltaje que hacía que el contador del programa no se iniciara en el 0000, lo curiosos era que brincaba a la rutina que manejaba al eeprom interna. Lo que tuve que hacer fue habilitar el pin del MCLR y colocar un circuito de power-up externo, que no es mas que un circuito RC como el que se indica en la hoja de datos. Pero lo que hice fue calcular el valor RC de tal forma que el micro estuviera en RESET por un segundo para esperar a que se estabilizara la fuente. De este modo logre resolver el problema en ese entonces.

Espero te sirva el tip.

Elreypic.

Hola elreypic2,

Pues si que puede ser lo que tu comentas. Actualmente tengo desactivado MCLR a traves del bit MCLRE = OFF precisamente para no tener este tipo de problemas.

Por tu experiencia deduzco que aunque desactives MCLR puedes seguir teniendo problemas debidos a picos de tensión... ¿es esto así? Pensaba que esto de deshabilitar el MCLR era un avance para no tener resets debidos a picos o parasitos inducidos en este pin...  :?

Actualmente tengo esta configuración:
// CONFIG2L
#pragma config PWRT = OFF       // Power-up Timer Enable bit (PWRT OFF=Enabled)
#pragma config BOR = ON         // Brown-out Reset Enable bits (Brown-out Reset enabled in hardware only (SBOREN is disabled))
#pragma config BORV = 3         // Brown-out Reset Voltage bits (Minimum setting)
#pragma config VREGEN = OFF     // USB Voltage Regulator Enable bit (USB voltage regulator enabled)

Creo que es correcta, pero quiza debería bajar un poco BOR para que el voltaje no sea tan bajo, probaré poniéndolo a 2 o 1 a ver que tal. Lo único malo es que como es aleatorio es complicado de probar.

Si consigo reproducir el problema probaré lo de poner un circuito RC en MCLR a ver si de esta manera mejora el asunto. El problema que tengo es que tendré que rediseñar el PCB y pedir nuevas placas. Para las pruebas lo modificaré a mano.

Gracias.

Un saludo.
BitPIC

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Borrado de EEPROM al conectar alimentación
« Respuesta #3 en: 07 de Abril de 2015, 05:56:35 »
Citar
#pragma config PWRT = OFF       // Power-up Timer Enable bit (PWRT OFF=Enabled)

al BORV dejalo en 3.


al Power-up time Habilitalo, no le hace daño a nadie. Este es el cambio mas simple que podes hacer, si ya no funciona podrias ver lo del MCLR.
Y con una resistencia y un capacitor no tendrias problemas al tener picos de tension ya que el capacitor es el que regula la tension y ese pico no deberia de notarse. A lo sumo carga apenas un poco mas rapido el capacitor pero nada mas.

Citar
Pensaba que esto de deshabilitar el MCLR era un avance para no tener resets debidos a picos o parasitos inducidos en este pin

Respecto al MCLR, yo sigo pensando que ese pin es usado para programar, asi que por mas que lo configures como pin I/O este tiene que funcionar para poder grabarlo nuevamente. Sino lo configurarias como pin I/O y luego no lo podrias volver a grabar mas :/

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Borrado de EEPROM al conectar alimentación
« Respuesta #4 en: 07 de Abril de 2015, 06:44:49 »
Citar
#pragma config PWRT = OFF       // Power-up Timer Enable bit (PWRT OFF=Enabled)

al BORV dejalo en 3.


al Power-up time Habilitalo, no le hace daño a nadie. Este es el cambio mas simple que podes hacer, si ya no funciona podrias ver lo del MCLR.
Y con una resistencia y un capacitor no tendrias problemas al tener picos de tension ya que el capacitor es el que regula la tension y ese pico no deberia de notarse. A lo sumo carga apenas un poco mas rapido el capacitor pero nada mas.

Citar
Pensaba que esto de deshabilitar el MCLR era un avance para no tener resets debidos a picos o parasitos inducidos en este pin

Respecto al MCLR, yo sigo pensando que ese pin es usado para programar, asi que por mas que lo configures como pin I/O este tiene que funcionar para poder grabarlo nuevamente. Sino lo configurarias como pin I/O y luego no lo podrias volver a grabar mas :/

Hola KILLERJC,

Crees que mejor esté a voltaje bajo el BORV? no es mejor subirlo un poco para que una pequeña subida de tensión no afecte tanto??


Por lo que veo en el datasheet, el PWRT se habilita a 0, por eso lo tengo como OFF

PWRTEN: Power-up Timer Enable bit(2)
1 = PWRT disabled
0 = PWRT enabled

O sea que en principio lo tengo activo. Solo me queda por probar lo que comenta elreypic2 de poner un RC en el MCLR y activarlo.

Por otro lado cuando deshabilitas el MCLR lo dejas como I/O, o sea, que ahora lo tengo como I/O, no deshabilitas nunca el pin por completo, o MCLR o I/O.

Saludos.

BitPIC

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Borrado de EEPROM al conectar alimentación
« Respuesta #5 en: 07 de Abril de 2015, 06:53:25 »
Hola Bitpic, Tu alimenta tu circcuito a 24 voltio y luego un regulador de 5 Voltio? si es asi, te aconsejo que ponga un regulador de 12 voltio y desde este pon el de 5 voltio. ese problema lo estuve con un modulo Web, que al arrancar me funcionaba y cuando encendia y apaga me borraba la Eeprom, donde tenia grabada los datos.
claro que el regulador de 5 voltio se me calentaba,cosas que me dio la idea de poner uno de 12 voltio y asi resolvi el problema.
Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Borrado de EEPROM al conectar alimentación
« Respuesta #6 en: 07 de Abril de 2015, 06:55:12 »
Ups no lei el comment, asi que me disculpo. Igual una logica muy bizarra la de microchip o CCS ahi.

El Brown-out simplemente resetea el micro ( y lo mantiene si es que persiste la condicion ) si hay un nivel de tension mas bajo que el definido asi que no tiene nada que ver con un "pico de tension" pero esto te resetearia el micro pero no deberia de borrarte la EEPROM

Citar
Por otro lado cuando deshabilitas el MCLR lo dejas como I/O, o sea, que ahora lo tengo como I/O, no deshabilitas nunca el pin por completo, o MCLR o I/O.

Si pero a lo que iba mi "razonamiento" es que vos lo pensas como que es un I/O solamente, pero que realmente sigue funcionando para la programacion como el MCLR.

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Borrado de EEPROM al conectar alimentación
« Respuesta #7 en: 07 de Abril de 2015, 07:11:30 »
Hola Bitpic, Tu alimenta tu circcuito a 24 voltio y luego un regulador de 5 Voltio? si es asi, te aconsejo que ponga un regulador de 12 voltio y desde este pon el de 5 voltio. ese problema lo estuve con un modulo Web, que al arrancar me funcionaba y cuando encendia y apaga me borraba la Eeprom, donde tenia grabada los datos.
claro que el regulador de 5 voltio se me calentaba,cosas que me dio la idea de poner uno de 12 voltio y asi resolvi el problema.
Saludos


Hola stk500, no uso un 7805 como regulador, estoy usando un LM2594HV-5.0 que soporta hasta 57V de entrada, por lo que no debería haber problemas, de hecho no se caliente y parece que trabaja bien.

Solo añadiendo el regulador de 12V ya dejo de borrarte la EEPROM?


El Brown-out simplemente resetea el micro ( y lo mantiene si es que persiste la condicion ) si hay un nivel de tension mas bajo que el definido asi que no tiene nada que ver con un "pico de tension" pero esto te resetearia el micro pero no deberia de borrarte la EEPROM


KILLERJC, lo decía porque si al arrancar hay una pequeña fluctuación, por ejemplo de 3V, y el BORV esta a 2.5V igual te esta reseteando varias veces el PIC y eso proboca que el contador de programa pase a borrar la EEPROM como le pasaba a elreypic2.

Ups no lei el comment, asi que me disculpo. Igual una logica muy bizarra la de microchip o CCS ahi.

Si pero a lo que iba mi "razonamiento" es que vos lo pensas como que es un I/O solamente, pero que realmente sigue funcionando para la programacion como el MCLR.


¿Quieres decir que aun estando como I/O puede que algún pico de tensión en el arranque provoque en entre en modo programación?
¿hay algún modo de entrar en modo programación que no sea mediante VPP en MCLR?
En caso de que si que lo haya ¿lo primero que hace es borrar la EEPROM? porque el programa sigue funcionando bien, solo es la EEPROM la que se borra.

Creo que lo mejor será probar lo del RC, supongo que funcione o no para este problema será una mejora para el circuito ante otros problemas.
BitPIC

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Borrado de EEPROM al conectar alimentación
« Respuesta #8 en: 07 de Abril de 2015, 07:20:17 »
Perdón, soy un despistado, si que he puesto un RC en el MCLR, tengo una resistencia de 10K y un condensador de 22pF.

Ya me extrañaba a mi no haberlo puesto. Es que para este proyecto me pidieron que abaratara los costes lo máximo posible y creía que no había puesto el RC.

BitPIC

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Borrado de EEPROM al conectar alimentación
« Respuesta #9 en: 07 de Abril de 2015, 07:33:04 »
Que tal bitpic,

El valor del capacitor es muy pequenio, necesitas incrementar el valor de ese capacitor para mantener el micro en reset por mas tiempo. Actualmente con ese valor de R y de C solamente tienen un tiempo de carga completa de 1.1 microsegundos. (t = 5RC).
Yo te recomiendo que incrementes el capacitor a 10 uF de esta forma tendras un t = 500 milisegundos.
Esto es una calculo simple y no muy exacto, pero sirve de referencia.

Espero que esto te sea de ayuda.

Saludos.

elreypic

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Borrado de EEPROM al conectar alimentación
« Respuesta #10 en: 07 de Abril de 2015, 07:39:56 »
Citar
KILLERJC, lo decía porque si al arrancar hay una pequeña fluctuación, por ejemplo de 3V, y el BORV esta a 2.5V igual te esta reseteando varias veces el PIC y eso proboca que el contador de programa pase a borrar la EEPROM como le pasaba a elreypic2.

Entonces tu caso seria bajarle el BORV pero no le veo sentido es otra cosa distinta , al reiniciar deberia ir a parar el PC con 00h, elreypic comento que le saltaba justo a la rutina de la EEPROM y me parecio algo super raro, es como si hubiera elegido esa posicion de memoria de datos para saltar (o tal ves estaba saltando aleatoriamente siempre pero eso significa hasta el punto de llegar a omitir la configuracion de puertos y modulos, y que ademas en algun momento no hubiera funcionado el dispositivo como debia). Puede que le sucedio a el, pero que te suceda a vos igual, quiero decir que ocurra el mismo salto a la parte de la programacion de la EEPROM, en donde esa rutina puede estar en un lugar aleatorio de la memoria del PIC no se como calcularlo pero diria que las posibilidades son remotas.

Mirando el diagrama de reset

Todas activan el mismo "reset", estan todas en una OR, tanto el POR, como el BOR, el oscilador tienen que realizar 1024 ciclos antes de habilitarse el integrado, el PWRT son 65.5ms , dentro de todo eso un pico de tension deberia estar bien.

Citar
On power-up, the WREN bit is cleared. In addition, writes to the EEPROM are blocked during the Power-up Timer period (TPWRT, parameter 33, Table 28-12). The write initiate sequence and the WREN bit together help prevent an accidental write during brown-out, power glitch or software malfunction.

Tenes un reset de PWRT + OSC , es decir 65.5ms + 1024*Tosc. Si no mal vi el diagrama de tiempo. Mas la secuencia de escritura, es decir para escribir en la EEPROM tenes que escribir ciertos datos antes de poder cargar el verdadero valor, esto te lleva a que sea el codigo que lo hace o algo referido a la programacion externa, al menos es lo unico que se me ocurre xD

Sigo sin poder entender el por que deberia de borrarte la EEPROM. Pero lo borra.

En fin si podes prescindir del pin de MCLR ponele un reset largo como dijo elreypic.

Podrias tambien, hacer un pequeño script que revise los valores de la EEPROM y si te encontras con que se borraron preguntar por los bits de BOR / POR / RI / TO,  etc y que muestre cuales son, asi determinar cuando es que ocurre eso. Y si esta vinculado al reset. Son todos casos de debuggeo para saber que es realmente lo que paso, como dije lo mas simple es probar lo de elreypic.

Pense en la programacion por que es la unica manera que se me vino a la cabeza que se pudiera borrar la EEPROM xD.
« Última modificación: 07 de Abril de 2015, 08:12:52 por KILLERJC »

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Borrado de EEPROM al conectar alimentación
« Respuesta #11 en: 07 de Abril de 2015, 08:00:42 »
Que tal bitpic,

El valor del capacitor es muy pequenio, necesitas incrementar el valor de ese capacitor para mantener el micro en reset por mas tiempo. Actualmente con ese valor de R y de C solamente tienen un tiempo de carga completa de 1.1 microsegundos. (t = 5RC).
Yo te recomiendo que incrementes el capacitor a 10 uF de esta forma tendras un t = 500 milisegundos.
Esto es una calculo simple y no muy exacto, pero sirve de referencia.

Espero que esto te sea de ayuda.

Saludos.

elreypic

Lo probaré, teniendo el PCB preparado con el RC ahora es más sencillo cambiar componentes. Antes de nada quiero intentar reproducirlo de alguna manera para ver que se soluciona.

KILLERJC: Yo también pensé que era problema del programa porque nunca me había ocurrido, pero no se me ocurre nada más que mirar. Es todo muy raro que por un pico de tensión o arranques raros se borre la EEPROM. Aunque buscando por el foro encontré una consulta del 2009 que comentaba que le había pasado con un Atmel, lo que pasa es que nadie le contesto en su momento.

No se si Microchip tiene algún contacto donde poder consultar estas cosas tan raras (al menos para mi). Quizá a ellos les pueda interesar este tipo de problema para dar mayor robustez a sus micros o quizá lo sepan y tengan la solución.

Muchas gracias a todos por vuestra ayuda. Si consigo reproducirlo y resolverlo con el RC os informo.
 :) ((:-))
BitPIC


 

anything