problemacon pic16f876a

hola!

Llevo como loco con este pic ya 2 meses,resulta que de vez en cuando el pic se queda colgado y no responde, teoricamente tiene un wagdog activado para que se resetee pero no lo hace.

aqui pongo el código de inicialización a ver si es que hago algo mal. estoy desesperado:

setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_spi(FALSE); setup_counters(RTCC_INTERNAL,WDT_2304MS); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); // setup_comparator(NC_NC_NC_NC); // setup_vref(FALSE); kbd_init(); enable_interrupts(INT_RTCC); enable_interrupts(global); port_b_pullups(TRUE);

¿veis algo que no esté bien?
Reply to
Carmelo J. Morales Muñoz
Loading thread data ...

Doy un poco mas de información..... sospecho que tiene que ver algo con alimentación , no estoy seguro.... pero el caso es que cuando se está agotando la batería se queda bloqueado.

he probado a meter una rutina sin refrescar el watchDog y se resetea, perocuando se queda bloqueado no. ¿alguna idea?.

Que es este modificador exactamente, mi ingles no es muy bueno y no lo entiendo:

BROWNOUT

bye!

Reply to
Carmelo J. Morales Muñoz

Carmelo J. Morales Muñoz escribió:

Puede ser que la tensión que alimenta al micro caiga demasiado y active el reset por baja tensión.

El brownout es una caida de tensión. Supongo que el nombre le viene del color que presentan las bombillas con poca tensión.

Reply to
Miguel Gimenez

Precisamente lo del brown-out puede estar relacionado con lo que te pasa. Míralo en el data-sheet con más detalle, pero así por encima, es lo siguiente.

Un brown-out es una caída en la tensión de alimentación. Se podría pensar que cuando la tensión de alimentación va bajando, el micro funcionará correctamente hasta llegar a un punto en que dejará de hacerlo, pero la realidad no es esta. Cuando la tensión de alimentación va bajando, llega un momento en que algunos elementos de la circuitería interna del micro empiezan a malfuncionar, y otros no, de forma que el micro, no se resetea, sino que funciona incorrectamente (poniendo un ejemplo muy simple, imagina que funciona todo menos los timers).

Para hacer frente a esto, la mayoría de PICs (incluidos los 16F87x) tienen un circuito que supervisa la tensión de alimentación, y permite que el micro haga un reset controlado cuando baja de cierto nivel, si está activado cierto bit de configuración. Lo dicho, mira el data-sheet.

--
Saludos de Jose Manuel Garcia
jose.mgg@terra.es
 Click to see the full signature
Reply to
Pepitof

Carmelo J. Morales Muñoz se atrevió a decir:

Pues yo no diría que está relacionado, sino que casi con absoluta seguridad ahí está el problema:

Brownout es una caída de tensión (blackout es la ausencia total de tensión). Aunque teóricamente los circuitos digitales funcionan a dos niveles (y por ende funcionan o no funcionan), la cruda realidad es que están formados por transistores diodos y resistencias que necesitan una polarización. Si la tensión cae lo suficiente, los circuitos pueden funcionar pero no como se espera, pueden aparecer niveles intermedios (por debajo de un nivel l es 0, por encima de un nivel h es 1, pero en la zona intermedia h-l el comportamiento no está definido y es imprevisible), puede ser que se pare el clock, en fin, no se sabe qué puede pasar. Para evitarlo, está el brownout que se encarga de resetear el micro si la tensión cae por debajo de lo admisible. Para alimentación a baterías y si no hay otra monitorización, EMHO imprescindible. Asegúrate de que la bandera brownout está activada. En cualquier caso, si te es posible, deja el circuito alimentado con una fuente una semanita, no debería pasar nada. Si tienes curiosidad, que la fuente sea regulable, y vas bajando la tensión a ver si reproduces el problema.

Reply to
Franois

Pues os comento, creo que según me indicais debe ser eso, pero el caso es que creo que no se resetea, se queda colgado.

Programo en C, con el CCS, aquí va la configuración del fichero de cabecera:

#include #device *=16 #device adc=8 #use delay(clock=4000000,RESTART_WDT) #fuses XT, PUT, BROWNOUT

Luego, en el programa, inicializo todo tal que así:

setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_spi(FALSE); setup_counters(RTCC_INTERNAL,WDT_2304MS); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); kbd_init(); enable_interrupts(INT_RTCC); enable_interrupts(global); port_b_pullups(TRUE);

¿VEIS algo que pueda estár mal?. Porque con las pruebas que he realizado se que el wagdog funciona, si hago que entre en un bucle sin refrescargo se resetea el pic, pero lo de la alimentación es mas dificil, no tengo fuente regulable, intentaré a ver si con unas pilas y resistencias hago juegos para bajar alimentación por debajo de los 5v a ver.

gracias!

Reply to
Carmelo J. Morales Muñoz

Se me ha olvidado decir, que luego grabo el pic con el icprog, le activo las siguientes flags:

WDT -> on PWRT -> on BODEN - On

y desactivo

LVP -> off cpd -> off cp -> off debugger -> off

a ver si me iluminais, porque yo estoy fundido con los problemas que me está dando.

bye!

Reply to
Carmelo J. Morales Muñoz

Pero bueno, ¿para qué tienes que tocar los flags en ICProg? ¿Es que CCS no incluye esa información en el fichero .HEX? Si es así, es una cutrez bastante gorda. Cualquier compilador o ensamblador medio serio, debería incluir esa información, de forma que al cargar el .HEX en ICProg, la configuración quedará exactamente igual que la has definido en tu programa en C.

--
Saludos de Jose Manuel Garcia
jose.mgg@terra.es
 Click to see the full signature
Reply to
Pepitof
¿Estás seguro de que se queda colgado? ¿No podría ser que se quede continuamente reseteando, al seguir estando la alimentación demasiado baja?
--
Saludos de Jose Manuel Garcia
jose.mgg@terra.es
 Click to see the full signature
Reply to
Pepitof

hola!

Pues la verdad, es que toma todo a excepción del LVP (low voltage programed), esa se la tengo de desactivar yo, y el caso es que en el fuente (ccs) no le he dicho en ningún sitio que tome esa bandera, pero al ir a programar el chip con el icprog me aparece activada y he de desactivarla.

bye!

Reply to
Carmelo J. Morales Muñoz

Pues me pones en duda, miraré con polímetro cuando vuelva a pasar..... pero el caso es que la alimentación he utilizado un sistema ininterrumpido,es decir, se alimenta de la batería (comutando rele) cuando se va la luz, y al volver luz pasa de la luz y se recarga batería, el circuito en si es para una alarma. Por eso lo de la batería.

voy a ver que sospecho que puede que tengas razón y no me he caido en revisar lo mas obvio.

un saludo!,,, comentaré mis resultados

Reply to
Carmelo J. Morales Muñoz
¿que es eso de EMHO ?

gracias!

"Franois" escribió en el mensaje news: snipped-for-privacy@terra.es...

Reply to
Carmelo J. Morales Muñoz

Puede que en el tiempo que tarda en conmutar, reciba una cantidad infame de ruido en la alimentación, por los rebotes del relé. ¿Has probado a ponerle a la alimentación del PIC un condensador gordo (por ejemplo 1000uF, depende de las cargas que alimente el PIC), además del típico de 100nF?

--
Saludos de Jose Manuel Garcia
jose.mgg@terra.es
 Click to see the full signature
Reply to
Pepitof

Prueba a definirlo explicitamente a off. Ten en cuenta que por defecto ese bit está activado.

--
Saludos de Jose Manuel Garcia
jose.mgg@terra.es
 Click to see the full signature
Reply to
Pepitof

Creo que significa "En Mi Honesta Opinión", mal-traído de los foros y news en inglés, donde es común ver "IMHO" (In My Honest Opinion).

--
Saludos de Jose Manuel Garcia
jose.mgg@terra.es
 Click to see the full signature
Reply to
Pepitof

Carmelo J. Morales Muñoz expuso:

La resistencia interna de la batería también podría afectarle. No sé qué circuito de alimentación usas pero sería bueno un condensador o varios en paralelo de 470uF para arriba. Las baterías con el paso del tiempo se van degradando y les sube la resistencia interna. En los móviles es un gran problema, por ejemplo yo he alargado la vida útil de una batería NiMH de un Ericsson poniendo un par de condensadores de 470uF en paralelo con la batería, antes se apagaba aún estando llena al recibir alguna llamada, ahora dura hasta que el marcador marca vacío y vuelve a durar unos tres días.

Reply to
Jeroni Paul

El sábado pudimos ver a Carmelo J. Morales Muñoz diciendo:

Pepitof casi acierta:

Es la versión en castellano de IMHO, acrónimo de 'In my humble opinión' EMHO sería 'En mi humilde opinión'. En otros entornos es muy común, pero es cierto que por la jerarquía es. no tanto. Yo lo uso para acotar que lo que afirmo es una apreciación personal y/o subjetiva mía y que el que la lea la coja como tal. O sea, sólo mi humilde opinión. :-)

Reply to
Franois

El sábado pudimos ver a Carmelo J. Morales Muñoz diciendo:

Puede ser, se me ocurre que si cuando se queda en ese estado, subes el voltaje con otra fuente o batería sin desconectar nada, y el pic vuelve a la vida, no estaba colgado sino en reset por BO (brownout) perpétuo. En principio, si es lo que comenta Pepitof, al subir el voltaje a valores normales el BO dejará de quejarse y la ejecución continuará (desde el reset, claro está).

Reply to
Franois

Carmelo J. Morales Muñoz se atrevió a decir:

Por cierto, esto no responde al problema del micro en sí, pero se me acaba de ocurrir: asegúrate de respetar el dropout en el regulador, a ver si está justillo y al bajar lo mínimo las baterías el regulador se vuelve errante.

Reply to
Franois

hola!

solo quería agradecera todos vuestra ayuda, ciertamente entraba en reser perpetuo debido a que tenia casi cortocircuitado una pista con otra y derivaba mucha corriente, me di cuenta porque un integrado se calentabaen exceso, con cuter corté y lleva 2 días perfecto.

Mil gracias por vuestra ayuda!, como siempre!. ;)

bye!

Reply to
Carmelo J. Morales Muñoz

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.