Autor Tema: POR, BOR y WDT  (Leído 6502 veces)

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

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
POR, BOR y WDT
« en: 27 de Diciembre de 2007, 00:16:49 »
Hola, otra vez yo con mis coflictos en C del CCs y el pic 18F4550, es que estoy tratando de configurar el POR , el BOR y WDT... entre a los fuses y vi unos de estos para declararlos, también revise el datasheet del pic y pues vi que si le coloco 01 al registro RCON en los bits de SBOREN se activa el BOR... pero, lo que no entiendo es como configurar el registro, es decir, en ASM se que le muevo un valor a W y de alli al registro... pero en C, no se como hacerlo.... Ayudenme please!

Atte: Enigma... La llanerita de Guayana :-/
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: POR, BOR y WDT
« Respuesta #1 en: 27 de Diciembre de 2007, 01:36:37 »
He hecho esto investigando en el CCS, es con 18F4550... Pero No se como declarar el POR y el BOR:

switch(restart_cause())
   {
      case WDT_TIMEOUT:
      {
         output_d(0x7F);
         break;
      }
      case NORMAL_POWER_UP:
      {
         output_d(0x01);
         break;
      }
      case MCLR_FROM_RUN:
       {
         output_d(0x7F);
         break;
      }
   }
   setup_wdt(WDT_ON);

   while(TRUE)
   {
      restart_wdt();
      //perform_activity();

   }

}

Cuando se desborda el WDT (creo que es por el WDT que se resetea el micro), pues lo según lo que le puse allá arriba deberia mandar un ocho a el display y pues no lo hace, igualmente cuando le doy MCLR manual... No lo hace, es como si no leyera la sentencia de la instrucción.... además, el WDT tarda mucho y cuando se reseta solo se apaga y ya... como puedo controlar el tiempo de desbordamiento del perro guardian...??.... Si alguién sabe, ayudeme por fa!!!

El Normal Power UP es el POR????? :?

Atte: Enigma... La llanerita de Guayana  :-/
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: POR, BOR y WDT
« Respuesta #2 en: 27 de Diciembre de 2007, 03:34:59 »
¿Has probado el "Project Wizard" de CCS?
Ahí puedes establecer la configuración de tu micro de manera visual y muy inteligible, y el wizard creará automáticamente el código necesario en CCS.

Lo que estás preguntando es cómo se establecen los fuses en CCS, y se hace así:
#FUSES WDT
#FUSES BROWNOUT             
#FUSES BORV20
#FUSES PUT

Para establecer el tiempo del WatchDog, tienes el comando setup_wdt (mode). Mira sus opciones en la ayuda.

Y para asignar valores a un registro "a pelo", siempre puedes hacerlo como te dije el otro día:

#byte RCON=0xFD0

RCON=0x01;

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: POR, BOR y WDT
« Respuesta #3 en: 27 de Diciembre de 2007, 10:33:03 »
Hola que tal.... Ya busque en la yuda, y sólo me aparece WDT_ON,  WDT_OFF para los pics de la serio 18... no aparece nada de como colocarle el tiempo al perro guardia....

La otra vez hice eso: (#byte RCON=0xFD0 - RCON=0x01;) y el complilador me daba la libreria como error.... y no se porque....

Aja una pregunta cuando yo declaro el BOR, no tengo que poner más nada.... sólo un potenciometro a la alimentación del pic...??? y como sabe el micro que se está reseteando por BOR...????

Atte: Enigma... La llanerita de Guayana :?
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: POR, BOR y WDT
« Respuesta #4 en: 27 de Diciembre de 2007, 12:29:33 »
Eso es porque a los PIC de la serie 18 se les configura el Watchdog mediante fuses:

WDT1      Watch Dog Timer uses 1:1 Postscale
WDT2      Watch Dog Timer uses 1:2 Postscale
WDT4      Watch Dog Timer uses 1:4 Postscale
WDT8      Watch Dog Timer uses 1:8 Postscale
WDT16      Watch Dog Timer uses 1:16 Postscale
WDT32      Watch Dog Timer uses 1:32 Postscale
WDT64      Watch Dog Timer uses 1:64 Postscale
WDT128      Watch Dog Timer uses 1:128 Postscale
WDT      Watch Dog Timer
NOWDT      No Watch Dog Timer

¿Cuál es el error que te tira el compilador al utilizar RCON?

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: POR, BOR y WDT
« Respuesta #5 en: 27 de Diciembre de 2007, 14:05:08 »
Ummm.... Bueno ya no me está dando error, ha de ser que tenia un error de escritura.... Pero tengo un problemita, O.k, habilite el BOR con los FUSES y el registro RCON, pues escribi en el para habilitar el RCON, pero hay un detalle, el bit 6 de este registro es SBOREN, el cual hay que ponerle un valor a sus dos bits que son BOREN0:BOREN1 del 01 al 11, esto para habilitar el BOR verdaderamente por así decirlo... Todo chevere por ahí, la cuestión es que como habilito estos bits via, software, me he leido el datasheet en está parte y bueno no me ayuda, sólo me sale para que sirven y todo eso... intente colocarlo asi: BOREN1:BOREN0=01; y pues me dice que BOREN0 está desconocido.... no se si eso es #byte por pertenecer a un registro o es un fuses.... pero estoy tirando flechas y pos nada!!!

Todo eso añadiendo, que se me sigue reseteando el WDT al tiempo que quiero, pero igualito no me muestra en pantalla el mensaje que quiero que muestre cuando se resetee... Ya he intentado de todo con mis pocos conocimientos... pero nada de nada! :?

Atte: Enigma... La llanerita de Guayana :?
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: POR, BOR y WDT
« Respuesta #6 en: 27 de Diciembre de 2007, 14:45:22 »
A ver si te sirve esto:

Para configurar el BOR tienes estos fuses:
BROWNOUT_NOSL   Brownout enabled during operation, disabled during SLEEP
BROWNOUT_SW   Brownout controlled by configuration bit in special file register
NOBROWNOUT   No brownout reset
BROWNOUT   Reset when brownout detected

Y luego, si quieres jugar con SBOREN:
#byte RCON=0xFD0
#bit SBOREN=RCON.6

Y luego:

SBOREN=0

o

SBOREN=1

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: POR, BOR y WDT
« Respuesta #7 en: 27 de Diciembre de 2007, 14:59:49 »
Ya a ver si entendi.. O.k tengo activado el fuses BROWNOUT   Reset when brownout detected....

Pero miren esto:

BIT 6 SBOREN: Bit activador de reset por BOR
(En un reset SBOREN=1)
Si BOREN1:BOREN0=01
1=BOR activo
0=BOR desactivado
Si BOREN1:BOREN0=00, 10 ó 11
Bit desactivado, se lee 0

TABLA 4-1: CONFIGURACIÓN DEL BOR
Configuración del BOR Estado de
BOREN1 BOREN0        SBOREN            Operaciones del BOR
                              (RCON<6>)
    0            0          No disponible        BOR desactivado; para activarlo reprogramar el bit de configuración
    0            1          Disponible            BOR activo en software; se controlan las operaciones por SBOREN.    1            0          No disponible        BOR activo en hardware en los modos RUN e IDLE, desactivado en el modo SLEEP
    1            1          No disponible        BOR activo en hardware; para desactivarlo reprogramar el bit de configuración.

Esto lo saque del datasheet....
 Ahora, no se si soy yo que ya tengo el cerebro obstruido (es lo más seguro) :( o no estoy razonando como se debe.... Me dices que con esto:

#byte RCON=0xFD0
#bit SBOREN=RCON.6

Le puedo colocar a SBOREN0=1 y a SBOREN1=0... Para así lograr colocar la combinaci´pn que quiero???

Ahora otra pregunta:

Para asignarle un valor a un solo bit de un registro... Por ejemplo siguiendo con el mismo RCON, si quisiera asignarle 0 al IPEN para desabilitar la prioridad, lo haría así como me mostraste... 

#byte RCON=0xFD0
#bit IPEN=RCON.7

IPEN=0;.. ? es correcto hacer eso....??? :o

Atte: Enigma... La llanerita de Guayana  :?

Disculpoen la ladilla!!!





No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: POR, BOR y WDT
« Respuesta #8 en: 27 de Diciembre de 2007, 15:11:21 »
Ya a ver si entendi.. O.k tengo activado el fuses BROWNOUT   Reset when brownout detected....

Pero miren esto:

BIT 6 SBOREN: Bit activador de reset por BOR
(En un reset SBOREN=1)
Si BOREN1:BOREN0=01
1=BOR activo
0=BOR desactivado
Si BOREN1:BOREN0=00, 10 ó 11
Bit desactivado, se lee 0

TABLA 4-1: CONFIGURACIÓN DEL BOR
Configuración del BOR Estado de
BOREN1 BOREN0        SBOREN            Operaciones del BOR
                              (RCON<6>)
    0            0          No disponible        BOR desactivado; para activarlo reprogramar el bit de configuración
    0            1          Disponible            BOR activo en software; se controlan las operaciones por SBOREN.    1            0          No disponible        BOR activo en hardware en los modos RUN e IDLE, desactivado en el modo SLEEP
    1            1          No disponible        BOR activo en hardware; para desactivarlo reprogramar el bit de configuración.

Esto lo saque del datasheet....
 Ahora, no se si soy yo que ya tengo el cerebro obstruido (es lo más seguro) :( o no estoy razonando como se debe.... Me dices que con esto:

#byte RCON=0xFD0
#bit SBOREN=RCON.6

Le puedo colocar a SBOREN0=1 y a SBOREN1=0... Para así lograr colocar la combinaci´pn que quiero???



Ahora otra pregunta:

Para asignarle un valor a un solo bit de un registro... Por ejemplo siguiendo con el mismo RCON, si quisiera asignarle 0 al IPEN para desabilitar la prioridad, lo haría así como me mostraste... 

#byte RCON=0xFD0
#bit IPEN=RCON.7

IPEN=0;.. ? es correcto hacer eso....??? :o


Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: POR, BOR y WDT
« Respuesta #9 en: 27 de Diciembre de 2007, 15:13:36 »
Umm... o.k... voy a probar a ver... ahorita aviso los resultados!!!! :D

Atte: Enigma... La llanerita de Guayana   :(
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: POR, BOR y WDT
« Respuesta #10 en: 27 de Diciembre de 2007, 15:27:03 »
Bueno ya probe.... :(

#include <18f4550.h>
#fuses XT,WDT,NOPROTECT,NOCPD,NOLVP,VREGEN,NOPBADEN,INTRC_IO,MCLR,BROWNOUT,BORV20
#use fast_io (A)
#use fast_io (B)
#use fast_io (C)
#use fast_io (D)
#use delay(clock=4000000)
#byte RCON=0xFD0
#bit SBOREN=RCON.6
#bit IPEN=RCON.7


void main(void)
{

         IPEN=0;
         SBOREN0=1;
         SBOREN1=0;
         
         enable_interrupts(int_ext);                // Activa máscara INTE
         enable_interrupts(int_ext1);
         ext_int_edge (H_TO_L);                     // Flag INTF si flanco de bajada.
         ext_int_edge(1,H_TO_L);
         enable_interrupts(global);                 //Habilita máscara global de int.
         set_tris_b (0xFF);                         // Configura puerto b como entrada
         set_tris_d (0x00);                         // Configura puerto d como salida
         set_tris_a (0xF0);                         // Configura los pines RA6 - RA4 como entradas y RA3 - RA0 como salidas
         set_tris_c (0x00);                         // Configura puerto c como salida
         output_c (0x00);                           // Limpio el puerto C
         output_b (0x00);                           // Limpio el puerto B
         output_d (0x00);                           // Limpio el puerto d
         output_a (0x00);                           // Limpio el puerto A


2 Errores:
Undefined Indentifier SBOREN1
Undefined Indentifier SBOREN0....... siempre me dan estos errores!!!!

No se si es algo que no estoy viendo!!!!

Atte: Enigma... La llanerita de Guayana :(
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: POR, BOR y WDT
« Respuesta #11 en: 27 de Diciembre de 2007, 15:56:46 »
         SBOREN0=1;
         SBOREN1=0;
te aparece el error, porque estas variables no las estas definiendo nunca, la que has definido es esta:
#bit SBOREN=RCON.6

pero no hay el SBOREN0 y SBOREN1 definidos, y si no me equivoco lo que tu pretendes hacer es activar alguno de ellos:
BROWNOUT_NOSL,BROWNOUT_SW,NOBROWNOUT,BROWNOUT

este lo defines en los fuses, y de acuerdo a como o configures funcionara como en la hoja de datos:

BOREN1:BOREN0: Brown-out Reset Enable bits
11 =Brown-out Reset enabled in hardware only (SBOREN is disabled)
10 =Brown-out Reset enabled in hardware only and disabled in Sleep mode (SBOREN is disabled)
01 =Brown-out Reset enabled and controlled by software (SBOREN is enabled)
00 =Brown-out Reset disabled in hardware and software

pero esto se hace solamente en los fuses, ya que son los bits de configuracion, y creo que no se pueden cambiar mas por software, solo se programan una vez al grabar el programa en el micro

ahora, si configuras como BROWNOUT_SW (en vez de BROWNOUT) en los fuses

ahi si puedes manejar el
SBOREN=0
ó
SBOREN=1
para activar o desactivar el brown out reset por software
creo que eso es lo que pretendes, bueno, ahi pruebalo

un saludo
.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: POR, BOR y WDT
« Respuesta #12 en: 27 de Diciembre de 2007, 16:07:03 »
Exacto, Cryn te lo ha explicado estupendamente.

De todas formas, llanerita, creo que sigues pensando en ASM y CCS es mucho más sencillo.
Sólo tienes que activar/desactivar los fuses que necesites y utilizar las funciones de alto nivel que proporciona:
setup_wdt();
setup_oscillator();
...

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: POR, BOR y WDT
« Respuesta #13 en: 27 de Diciembre de 2007, 16:21:11 »
Ahhh..... Coooo!!!! ahora si entendi!!! jajaja! :mrgreen: Ya no me da error!!!  es que no sabia de esto que BROWNOUT_NOSL,BROWNOUT_SW,NOBROWNOUT,BROWNOUT correspondian a los 00, 01, 10, 11.... jijijiji  :Ddonde salia eso??

Si ya entendi fino....

Una pregunta más... El POR y el BOR no se pueden simular en Proteus verdad?? es que como el pic que sale allí pues no se alimenta como en la vida real....??

Atte: Enigma... La llanerita de Guayana :D
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: POR, BOR y WDT
« Respuesta #14 en: 27 de Diciembre de 2007, 16:27:22 »
si, no creo q pueda simularse, ya que la alimentacion es asi como tu dices, talvez si se hace alguna movida, nose, jeje

todo eso BROWNOUT_NOSL,BROWNOUT_SW,NOBROWNOUT,BROWNOUT esta en el archivo.h qeu te dije, en la carpeta DEVICES del ccs

un saludo, feliz año
.


 

anything