Autor Tema: (Solucionado) problema con Delay, causa reinicio  (Leído 3167 veces)

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

Desconectado kordrak

  • PIC10
  • *
  • Mensajes: 17
(Solucionado) problema con Delay, causa reinicio
« en: 08 de Febrero de 2012, 10:52:48 »
Hola, estoy tratando de encontrar la razon por la cual mi pic se resetea, hasta ahora, y habiendo descartado otras opciones, identifique una posible causa

en mi programa, estoy encendiendo una lampara con un rele conectado a un puerto del pic, (se enciende al presionar un pulsador)
luego de encenderse, tengo unos delay de 1 segundo ejecutandose uno tras otro hasta que se cumple x tiempo
 pasado ese tiempo, el la lampara se debe apagar.

mi problema es que estoy encendiendo la lampara, pero cuando el programa llega a los delay, se reinicia el pic, por tanto se reinicializa todo y se apaga la lampara antes que se cumpla el tiempo( se alcanza a ver que se energiza la lampara y se apaga inmediatamente)

.
.
.
switch(Tp){
            case 0:
               PORTBbits.RB1 = 1;   //   Activa Rele
               Delay10KTCYx(125);
               break;//500 ms

            case 1:
               PORTBbits.RB1 = 1;
               Delay10KTCYx(250);
               break;//1 segundo
.
.
.
}
   //   PORTBbits.RB1 = 0;   //RELE   (comente estas lineas para comprobar que era un reinicio el que estaba apagando el rele y no algun comando)
   //   estado=0;
      }


dentro del programa estoy usando interrupciones (timer0) cada 1 segundo para generar un "timeout" que desabilite el pulsador pasados 2 minutos, pero desde que tengo este problema que el timeout también dejo de funcionar.

se agradece de antemano cualquier comentario/idea con respecto al origen y posible solucion del problema,


Saludos!
« Última modificación: 09 de Febrero de 2012, 17:17:46 por kordrak »

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: problema con Delay, causa reinicio
« Respuesta #1 en: 08 de Febrero de 2012, 11:01:35 »
kordrak:
          posteá tu código completo usando geSHi (eso que se ve arriba a la derecha al postear. Elegí código en lenguaje c y en medio de los corchetes entre code y barra code poné tu código.

[ ....]
tu codigo
[...]
                 Jukinch
       
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado kordrak

  • PIC10
  • *
  • Mensajes: 17
Re: problema con Delay, causa reinicio
« Respuesta #2 en: 08 de Febrero de 2012, 11:08:49 »
Hola Jukinch, ahi va el codigo completo


Código: C
  1. #include <p18f252.h>
  2. #include <adc.h>
  3. #include <usart.h>
  4. #include <stdlib.h>
  5. #include <timers.h>
  6. #include <delays.h>
  7.  
  8. #pragma config OSC = HS
  9. #pragma config WDT = OFF
  10. #pragma config LVP = OFF
  11. #pragma config DEBUG = OFF
  12.  
  13. unsigned char ACTIVA, DESACTIVA;
  14. unsigned char dato, LeeDIR, LeeTP;
  15. int Dir, Tp, N_Dir;
  16. volatile int estado;
  17. volatile int minutos=0;
  18. volatile int segundos=0;
  19.  
  20. void ConfiguraUSART(void);
  21. void ProcesarUSART(unsigned char);
  22. void ProcesarPulsador(int);
  23. void SET_DIR(void);
  24. void SET_TP(void);
  25. void ISRTimer0(void);
  26.  
  27. #pragma code Interrupcion = 0x08
  28. void VectorInterrupcion(void){
  29.         _asm goto ISRTimer0 _endasm
  30. }
  31. #pragma code
  32.  
  33. #pragma interruptlow ISRAltaPrioridad
  34. void ISRAltaPrioridad(void){}
  35.  
  36. #pragma interrupt ISRTimer0
  37. void ISRTimer0(void){
  38.   if(INTCONbits.TMR0IF==1){
  39.         WriteTimer0(26473); // 1000,012 ms a 16bit, 1:64
  40.     INTCONbits.TMR0IF=0;
  41.         segundos++;
  42.         if (segundos==60){
  43.                 minutos++;
  44.                 segundos = 0;
  45.                 }
  46.         if (minutos==2 && estado==1){
  47.                 estado = 0;
  48.                 minutos = 0;
  49.                 segundos = 0;
  50.                 }      
  51.         }
  52. }
  53.  
  54. void main(void){
  55.         TRISA   = 0xFF;                 //      Puerto A como entrada
  56.         TRISB   = 0x08;                 //      Puerto B Salidas menos RB3(Pulsador)
  57.         TRISC   = 0x8F;
  58.         PORTB   = 0x00;
  59.         PORTC   = 0x00;
  60.         RCONbits.IPEN=0;        // Deshabilitamos prioridades.
  61.         INTCONbits.PEIE=1;      // Habilitamos interrupcion de perifericos.
  62.         INTCONbits.GIE=1;       // Habilitamos interrupcion global.
  63.         OpenTimer0(TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_64);
  64.         SET_DIR();
  65.         SET_TP();
  66.         ConfiguraUSART();
  67. while(1){
  68.         if(DataRdyUSART()){
  69.                 while(BusyUSART());
  70.                 dato = ReadUSART();
  71.                 ProcesarUSART(dato);
  72.                 }
  73.         ProcesarPulsador(Tp);
  74.         }
  75. CloseUSART();
  76. }
  77.  
  78. void ProcesarUSART(unsigned char dato){
  79.         if(dato == ACTIVA){
  80.                 WriteTimer0(26473);     // 1000.012 ms
  81.                 estado = 1;
  82.                 minutos = 0;
  83.                 segundos = 0;
  84.         }
  85.         else if(dato == DESACTIVA){
  86.                 estado = 0;
  87.         }
  88. }
  89.  
  90. void ProcesarPulsador(int Tp){
  91.         if(estado==0){
  92.                 PORTBbits.RB0 = 0;
  93.         }
  94.         else if(estado==1){
  95.                 PORTBbits.RB0 = 1;
  96.                 if(PORTBbits.RB3==1){
  97.                         estado = 0;
  98.                         PORTBbits.RB0 = 0;      //      Apaga Led
  99.                        
  100.                         switch(Tp){
  101.                                 case 0:
  102.                                         PORTBbits.RB1 = 1;      //      Activa Rele
  103.                                         Delay10KTCYx(125);
  104.                                         break;//500 ms
  105.  
  106.                                 case 1:
  107.                                         PORTBbits.RB1 = 1;
  108.                                         Delay10KTCYx(250);
  109.                                         break;//1 segundo
  110.  
  111.                                 case 2:
  112.                                         PORTBbits.RB1 = 1;
  113.                                         Delay10KTCYx(250);
  114.                                         Delay10KTCYx(250);
  115.                                         break;
  116.  
  117.                                 case 3:
  118.                                         PORTBbits.RB1 = 1;
  119.                                         Delay10KTCYx(250);
  120.                                         Delay10KTCYx(250);
  121.                                         Delay10KTCYx(250);
  122.                                         break;
  123.  
  124.                                 case 4:
  125.                                         PORTBbits.RB1 = 1;
  126.                                         Delay10KTCYx(250);
  127.                                         Delay10KTCYx(250);
  128.                                         Delay10KTCYx(250);
  129.                                         Delay10KTCYx(250);
  130.                                         break;
  131.  
  132.                                 case 5:
  133.                                         PORTBbits.RB1 = 1;
  134.                                         Delay10KTCYx(250);
  135.                                         Delay10KTCYx(250);
  136.                                         Delay10KTCYx(250);
  137.                                         Delay10KTCYx(250);
  138.                                         Delay10KTCYx(250);
  139.                                         break;
  140.  
  141.                                 case 6:
  142.                                         PORTBbits.RB1 = 1;
  143.                                         Delay10KTCYx(250);
  144.                                         Delay10KTCYx(250);
  145.                                         Delay10KTCYx(250);
  146.                                         Delay10KTCYx(250);
  147.                                         Delay10KTCYx(250);
  148.                                         Delay10KTCYx(250);
  149.                                         break;
  150.  
  151.                                 case 7:
  152.                                         PORTBbits.RB1 = 1;
  153.                                         Delay10KTCYx(250);
  154.                                         Delay10KTCYx(250);
  155.                                         Delay10KTCYx(250);
  156.                                         Delay10KTCYx(250);
  157.                                         Delay10KTCYx(250);
  158.                                         Delay10KTCYx(250);
  159.                                         Delay10KTCYx(250);
  160.                                         break;
  161.  
  162.                                 case 8:
  163.                                         PORTBbits.RB1 = 1;
  164.                                         Delay10KTCYx(250);
  165.                                         Delay10KTCYx(250);
  166.                                         Delay10KTCYx(250);
  167.                                         Delay10KTCYx(250);
  168.                                         Delay10KTCYx(250);
  169.                                         Delay10KTCYx(250);
  170.                                         Delay10KTCYx(250);
  171.                                         Delay10KTCYx(250);
  172.                                         break;
  173.  
  174.                                 case 9:
  175.                                         PORTBbits.RB1 = 1;
  176.                                         Delay10KTCYx(250);
  177.                                         Delay10KTCYx(250);
  178.                                         Delay10KTCYx(250);
  179.                                         Delay10KTCYx(250);
  180.                                         Delay10KTCYx(250);
  181.                                         Delay10KTCYx(250);
  182.                                         Delay10KTCYx(250);
  183.                                         Delay10KTCYx(250);
  184.                                         Delay10KTCYx(250);
  185.                                         break;
  186.  
  187.                                 case 10 :
  188.                                         PORTBbits.RB1 = 1;
  189.                                         Delay10KTCYx(250);
  190.                                         Delay10KTCYx(250);
  191.                                         Delay10KTCYx(250);
  192.                                         Delay10KTCYx(250);
  193.                                         Delay10KTCYx(250);
  194.                                         Delay10KTCYx(250);
  195.                                         Delay10KTCYx(250);
  196.                                         Delay10KTCYx(250);
  197.                                         Delay10KTCYx(250);
  198.                                         Delay10KTCYx(250);
  199.                                         break;
  200.  
  201.                                 case 11:
  202.                                         PORTBbits.RB1 = 1;
  203.                                         Delay10KTCYx(250);
  204.                                         Delay10KTCYx(250);
  205.                                         Delay10KTCYx(250);
  206.                                         Delay10KTCYx(250);
  207.                                         Delay10KTCYx(250);
  208.                                         Delay10KTCYx(250);
  209.                                         Delay10KTCYx(250);
  210.                                         Delay10KTCYx(250);
  211.                                         Delay10KTCYx(250);
  212.                                         Delay10KTCYx(250);
  213.                                         Delay10KTCYx(250);
  214.                                         break;
  215.  
  216.                                 case 12:
  217.                                         PORTBbits.RB1 = 1;
  218.                                         Delay10KTCYx(250);
  219.                                         Delay10KTCYx(250);
  220.                                         Delay10KTCYx(250);
  221.                                         Delay10KTCYx(250);
  222.                                         Delay10KTCYx(250);
  223.                                         Delay10KTCYx(250);
  224.                                         Delay10KTCYx(250);
  225.                                         Delay10KTCYx(250);
  226.                                         Delay10KTCYx(250);
  227.                                         Delay10KTCYx(250);
  228.                                         Delay10KTCYx(250);
  229.                                         Delay10KTCYx(250);
  230.                                         break;
  231.  
  232.                                 case 13:
  233.                                         PORTBbits.RB1 = 1;
  234.                                         Delay10KTCYx(250);
  235.                                         Delay10KTCYx(250);
  236.                                         Delay10KTCYx(250);
  237.                                         Delay10KTCYx(250);
  238.                                         Delay10KTCYx(250);
  239.                                         Delay10KTCYx(250);
  240.                                         Delay10KTCYx(250);
  241.                                         Delay10KTCYx(250);
  242.                                         Delay10KTCYx(250);
  243.                                         Delay10KTCYx(250);
  244.                                         Delay10KTCYx(250);
  245.                                         Delay10KTCYx(250);
  246.                                         Delay10KTCYx(250);
  247.                                         break;
  248.  
  249.                                 case 14:
  250.                                         PORTBbits.RB1 = 1;
  251.                                         Delay10KTCYx(250);
  252.                                         Delay10KTCYx(250);
  253.                                         Delay10KTCYx(250);
  254.                                         Delay10KTCYx(250);
  255.                                         Delay10KTCYx(250);
  256.                                         Delay10KTCYx(250);
  257.                                         Delay10KTCYx(250);
  258.                                         Delay10KTCYx(250);
  259.                                         Delay10KTCYx(250);
  260.                                         Delay10KTCYx(250);
  261.                                         Delay10KTCYx(250);
  262.                                         Delay10KTCYx(250);
  263.                                         Delay10KTCYx(250);
  264.                                         Delay10KTCYx(250);
  265.                                         break;
  266.  
  267.                                 case 15:
  268.                                         PORTBbits.RB1 = 1;
  269.                                         Delay10KTCYx(250);
  270.                                         Delay10KTCYx(250);
  271.                                         Delay10KTCYx(250);
  272.                                         Delay10KTCYx(250);
  273.                                         Delay10KTCYx(250);
  274.                                         Delay10KTCYx(250);
  275.                                         Delay10KTCYx(250);
  276.                                         Delay10KTCYx(250);
  277.                                         Delay10KTCYx(250);
  278.                                         Delay10KTCYx(250);
  279.                                         Delay10KTCYx(250);
  280.                                         Delay10KTCYx(250);
  281.                                         Delay10KTCYx(250);
  282.                                         Delay10KTCYx(250);
  283.                                         Delay10KTCYx(250);
  284.                                         break;
  285.                         }
  286.         //      PORTBbits.RB1 = 0;      //RELE
  287.         //      estado=0;
  288.                 }
  289.         }
  290. }
  291.  
  292. void SET_DIR(void){
  293.         OpenADC(ADC_FOSC_RC & ADC_RIGHT_JUST & ADC_0ANA_0REF, ADC_INT_OFF);
  294.         LeeDIR = PORTA;
  295.         switch(LeeDIR){
  296.                 case 0b00000001: Dir = 0x01; ACTIVA = 0x65; DESACTIVA = 0x01; N_Dir = 1; break;
  297.                 case 0b00000010: Dir = 0x02; ACTIVA = 0x66; DESACTIVA = 0x02; N_Dir = 2; break;
  298.                 case 0b00000011: Dir = 0x03; ACTIVA = 0x67; DESACTIVA = 0x03; N_Dir = 3; break;
  299.                 case 0b00000100: Dir = 0x04; ACTIVA = 0x68; DESACTIVA = 0x04; N_Dir = 4; break;
  300.                 case 0b00000101: Dir = 0x05; ACTIVA = 0x69; DESACTIVA = 0x05; N_Dir = 5; break;
  301.                 case 0b00000110: Dir = 0x06; ACTIVA = 0x6A; DESACTIVA = 0x06; N_Dir = 6; break;
  302.                 case 0b00000111: Dir = 0x07; ACTIVA = 0x6B; DESACTIVA = 0x07; N_Dir = 7; break;
  303.                 case 0b00001000: Dir = 0x08; ACTIVA = 0x6C; DESACTIVA = 0x08; N_Dir = 8; break;
  304.                 case 0b00001001: Dir = 0x09; ACTIVA = 0x6D; DESACTIVA = 0x09; N_Dir = 9; break;
  305.                 case 0b00001010: Dir = 0x0A; ACTIVA = 0x6E; DESACTIVA = 0x0A; N_Dir = 10; break;
  306.                 case 0b00001011: Dir = 0x0B; ACTIVA = 0x6F; DESACTIVA = 0x0B; N_Dir = 11; break;
  307.                 case 0b00001100: Dir = 0x0C; ACTIVA = 0x70; DESACTIVA = 0x0C; N_Dir = 12; break;
  308.                 case 0b00001101: Dir = 0x0D; ACTIVA = 0x71; DESACTIVA = 0x0D; N_Dir = 13; break;
  309.                 case 0b00001110: Dir = 0x0E; ACTIVA = 0x72; DESACTIVA = 0x0E; N_Dir = 14; break;
  310.                 case 0b00001111: Dir = 0x0F; ACTIVA = 0x73; DESACTIVA = 0x0F; N_Dir = 15; break;
  311.                 case 0b00010000: Dir = 0x10; ACTIVA = 0x74; DESACTIVA = 0x10; N_Dir = 16; break;
  312.                 case 0b00010001: Dir = 0x11; ACTIVA = 0x75; DESACTIVA = 0x11; N_Dir = 17; break;
  313.                 case 0b00010010: Dir = 0x12; ACTIVA = 0x76; DESACTIVA = 0x12; N_Dir = 18; break;
  314.                 case 0b00010011: Dir = 0x13; ACTIVA = 0x77; DESACTIVA = 0x13; N_Dir = 19; break;
  315.                 case 0b00010100: Dir = 0x14; ACTIVA = 0x78; DESACTIVA = 0x14; N_Dir = 20; break;
  316.                 case 0b00010101: Dir = 0x15; ACTIVA = 0x79; DESACTIVA = 0x15; N_Dir = 21; break;
  317.                 case 0b00010110: Dir = 0x16; ACTIVA = 0x7A; DESACTIVA = 0x16; N_Dir = 22; break;
  318.                 case 0b00010111: Dir = 0x17; ACTIVA = 0x7B; DESACTIVA = 0x17; N_Dir = 23; break;
  319.                 case 0b00011000: Dir = 0x18; ACTIVA = 0x7C; DESACTIVA = 0x18; N_Dir = 24; break;
  320.                 case 0b00011001: Dir = 0x19; ACTIVA = 0x7D; DESACTIVA = 0x19; N_Dir = 25; break;
  321.                 case 0b00011010: Dir = 0x1A; ACTIVA = 0x7E; DESACTIVA = 0x1A; N_Dir = 26; break;
  322.                 case 0b00011011: Dir = 0x1B; ACTIVA = 0x7F; DESACTIVA = 0x1B; N_Dir = 27; break;
  323.                 case 0b00011100: Dir = 0x1C; ACTIVA = 0x80; DESACTIVA = 0x1C; N_Dir = 28; break;
  324.                 case 0b00011101: Dir = 0x1D; ACTIVA = 0x81; DESACTIVA = 0x1D; N_Dir = 29; break;
  325.                 case 0b00011110: Dir = 0x1E; ACTIVA = 0x82; DESACTIVA = 0x1E; N_Dir = 30; break;
  326.                 case 0b00011111: Dir = 0x1F; ACTIVA = 0x83; DESACTIVA = 0x1F; N_Dir = 31; break;
  327.         }
  328. }
  329.  
  330. void SET_TP(void){
  331.         if(PORTCbits.RC3 == 0 && PORTCbits.RC2 == 0 && PORTCbits.RC1 == 0 && PORTCbits.RC0 == 0){Tp = 0;}
  332.         else if(PORTCbits.RC3 == 0 && PORTCbits.RC2 == 0 && PORTCbits.RC1 == 0 && PORTCbits.RC0 == 1){Tp = 1;}
  333.         else if(PORTCbits.RC3 == 0 && PORTCbits.RC2 == 0 && PORTCbits.RC1 == 1 && PORTCbits.RC0 == 0){Tp = 2;}
  334.         else if(PORTCbits.RC3 == 0 && PORTCbits.RC2 == 0 && PORTCbits.RC1 == 1 && PORTCbits.RC0 == 1){Tp = 3;}
  335.         else if(PORTCbits.RC3 == 0 && PORTCbits.RC2 == 1 && PORTCbits.RC1 == 0 && PORTCbits.RC0 == 0){Tp = 4;}
  336.         else if(PORTCbits.RC3 == 0 && PORTCbits.RC2 == 1 && PORTCbits.RC1 == 0 && PORTCbits.RC0 == 1){Tp = 5;}
  337.         else if(PORTCbits.RC3 == 0 && PORTCbits.RC2 == 1 && PORTCbits.RC1 == 1 && PORTCbits.RC0 == 0){Tp = 6;}
  338.         else if(PORTCbits.RC3 == 0 && PORTCbits.RC2 == 1 && PORTCbits.RC1 == 1 && PORTCbits.RC0 == 1){Tp = 7;}
  339.         else if(PORTCbits.RC3 == 1 && PORTCbits.RC2 == 0 && PORTCbits.RC1 == 0 && PORTCbits.RC0 == 0){Tp = 8;}
  340.         else if(PORTCbits.RC3 == 1 && PORTCbits.RC2 == 0 && PORTCbits.RC1 == 0 && PORTCbits.RC0 == 1){Tp = 9;}
  341.         else if(PORTCbits.RC3 == 1 && PORTCbits.RC2 == 0 && PORTCbits.RC1 == 1 && PORTCbits.RC0 == 0){Tp = 10;}
  342.         else if(PORTCbits.RC3 == 1 && PORTCbits.RC2 == 0 && PORTCbits.RC1 == 1 && PORTCbits.RC0 == 1){Tp = 11;}
  343.         else if(PORTCbits.RC3 == 1 && PORTCbits.RC2 == 1 && PORTCbits.RC1 == 0 && PORTCbits.RC0 == 0){Tp = 12;}
  344.         else if(PORTCbits.RC3 == 1 && PORTCbits.RC2 == 1 && PORTCbits.RC1 == 0 && PORTCbits.RC0 == 1){Tp = 13;}
  345.         else if(PORTCbits.RC3 == 1 && PORTCbits.RC2 == 1 && PORTCbits.RC1 == 1 && PORTCbits.RC0 == 0){Tp = 14;}
  346.         else if(PORTCbits.RC3 == 1 && PORTCbits.RC2 == 1 && PORTCbits.RC1 == 1 && PORTCbits.RC0 == 1){Tp = 15;}
  347. }
  348.  
  349. void ConfiguraUSART(void){
  350.         OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF   &       USART_ASYNCH_MODE       &       USART_EIGHT_BIT &       USART_CONT_RX   &       USART_BRGH_HIGH,        64);
  351. }

Kordrak
« Última modificación: 08 de Febrero de 2012, 16:17:47 por kordrak »

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: problema con Delay, causa reinicio
« Respuesta #3 en: 08 de Febrero de 2012, 11:28:52 »
.


Puede que el reset sea causado por el ruido generado por el relay. Para descartar problemas con el programa, probá sacando el relay y poniendo un led  con una resistencia en esa salida del mcu. Si el problema persiste, deberías revisar el programa.

Saludos.

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

Desconectado kordrak

  • PIC10
  • *
  • Mensajes: 17
Re: problema con Delay, causa reinicio
« Respuesta #4 en: 08 de Febrero de 2012, 11:47:36 »
.


Puede que el reset sea causado por el ruido generado por el relay. Para descartar problemas con el programa, probá sacando el relay y poniendo un led  con una resistencia en esa salida del mcu. Si el problema persiste, deberías revisar el programa.

Saludos.



Hola mtristan, gracias por tu respuesta.

Yo la verdad dudo que sea por ruido, cuando yo hablo de un rele conectado a un pic me refiero a un optotriac y un triac, uso ese circuito de potencia por lo mismo, para eliminar los ruidos generados por los relay.

de todas maneras, realice pruebas con cada modulo que estoy usando, por separado (pulsador, led, "relay", com_usart) y todos funcionan bien por separado.


Desconectado kordrak

  • PIC10
  • *
  • Mensajes: 17
Re: problema con Delay, causa reinicio
« Respuesta #5 en: 08 de Febrero de 2012, 12:51:32 »
El timeout no se esta produciendo nunca, osea que tanto las interrupciones por separado como el delay están teniendo problemas.

Dudas:
  • Estoy usando bien las Interrupciones? :S
  • Es posible que la funcion ConfiguraUSART y la funcion SET_TP esten teniendo algun tipo de conflicto?
  • El orden en el que estoy llamando las funciones, ocupando espacios de memoria, configurando el PIC podria afectarme de esta manera?
  • E leido que el PORTC es medio mañoso.. hay alguna manera especial de configurarlo? quiero decir, si quiero usar algunos puertos como entrada, a demas de usar los pines para el USART

Saludos!
« Última modificación: 08 de Febrero de 2012, 15:49:00 por kordrak »

Desconectado _LAB_

  • PIC10
  • *
  • Mensajes: 36
Re: problema con Delay, causa reinicio
« Respuesta #6 en: 08 de Febrero de 2012, 15:01:55 »
Si es pork apenas se enciende la lampara el pic se reinicia, puede ser que tengas bajas de voltaje en la alimentacion. Prueba primero con un led en vez de la lampara asi compruebas el funcionamiento, revisas que los delay esten correctos, etc.

Desconectado kordrak

  • PIC10
  • *
  • Mensajes: 17
Re: problema con Delay, causa reinicio
« Respuesta #7 en: 08 de Febrero de 2012, 15:41:45 »
Hola _LAB_,
Las fuentes de alimentación están separadas así que no puede ser eso, de todas maneras probé conectando un led, pero el efecto fue el mismo, apenas y se vio que se había encendido y se apago.

el calculo de los Delay esta bueno, he usado ese mismo en otras ocaciones sin ningun problema.(usando el mismo cristal)

por otra parte, tengo un led que permanece encendido mientras el circuito este alimentado, si hubieran bajas de tension se notaria en una disminucion en la intensidad del led, pero este mismo permanece con la misma intensidad en todo momento.

He notado que cambiando el orden de algunas lineas de codigo afecta el desempeño del programa, por ejemplo, si agrego una linea que no hace nada mas que reescribir un estado(estado=1; estado =1;// 2 veces, la segunda esta reescribiendo y generando un error), el programa queda enclavado en la funcion procesar pulsador, enciende la luz conectada al rele mientras este presionado el pulsador, una vez lo sueltas, vuelve a esperar que presiones el pulsador, sin seguir con el resto de las tareas.

he probado el mismo codigo en 3 pic18F252, 2 de ellos estaban nuevos cuando los empece a usar, y obtengo el mismo resultado con los 3.

sigo con los mismos problemas al usar el pulsador(delay) y esperar el timeout
estoy seguro que resolviendo uno, el otro se arregla solo.

Saludos!
« Última modificación: 08 de Febrero de 2012, 15:51:30 por kordrak »

Desconectado kordrak

  • PIC10
  • *
  • Mensajes: 17
Re: problema con Delay, causa reinicio
« Respuesta #8 en: 08 de Febrero de 2012, 16:17:06 »
cuando reviso el programa con el modo debugging del PICkit2, el programa se ejecuta a la perfeccion, funcionan los delay, el pulsador, las interrupciones, lee todos los puertos como deberia y los actualiza como se supone lo deberia hacer..

lo saco del modo debug, lo dejo andando solo y falla. :5]

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: problema con Delay, causa reinicio
« Respuesta #9 en: 08 de Febrero de 2012, 20:08:04 »
kordrak:
        Pone un pulsador en un pin que tengas disponible que haga de debugger físico. Poné la función que te adjunto más abajo en cada lugar que quieras testear. Así podrás ver hasta donde llegás a correr el programa. Esa función queda esperando a que pulses el botón y va a encender dos leds cuando lo pulses y continuará la ejecución. Con esto seguro al menos acotarás el problema.  ;-)


EsperaBotonDebugger();


Código: C
  1. #define teclaDebugger PORTAbits.RA0 // tecla para avanzar en programa para controlar errores
  2.                                                    // recordar configurar el tris del puerto correspondiente como entrada
  3.  
  4. #define ledDebugger LATAbits.LATA2   // leds para controlar estado del programa
  5.                                                     // recordar configurar los tris del puerto correspondiente como salida
  6. #define ledDebugger2 LATAbits.LATA3
  7.  
  8. // definicion de funciones
  9. void EsperaBotonDebugger(void);
  10.  
  11.  
  12.  
  13. EsperaBotonDebugger(); // llama la función desde cada lugar que quieras testear el paso del programa
  14.  
  15.  
  16. /****************** desarrollo de la funcion espera se pulse boton de debugger ****************/
  17.  
  18. void EsperaBotonDebugger(void)
  19. {
  20.         while (teclaDebugger==0) // verificar si el pulsador es con resistencia pullup o pulldown.
  21.                                         {                      
  22.                                         }
  23.                                         Delay10KTCYx(255);    
  24.                                         ledDebugger=1; // ENCIENDO LED
  25.                                         Delay10KTCYx(255);    
  26.                                         ledDebugger =0; // APAGO LED
  27.                                         Delay10KTCYx(255);    
  28.                                         ledDebugger =1; // ENCIENDO LED
  29.                                         Delay10KTCYx(255);    
  30.                                         ledDebugger=0; // APAGO LED
  31.                                         Delay10KTCYx(255);    
  32.                                         ledDebugger=1; // ENCIENDO LED
  33.                                         Delay10KTCYx(255);    
  34.                                         ledDebugger=0; // APAGO LED
  35.                                         Delay10KTCYx(255);    
  36. }
  37. /****************** fin espera se pulse boton de debugger ************************************/

Modificado: el valor de los delays a 255
« Última modificación: 09 de Febrero de 2012, 12:42:56 por jukinch »
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado kordrak

  • PIC10
  • *
  • Mensajes: 17
Re: problema con Delay, causa reinicio
« Respuesta #10 en: 09 de Febrero de 2012, 12:24:01 »
Hola Jukinch,
gracias por la respuesta, voy a probar con tu metodo en un rato mas.. ayer en la onche me decici a reescribir todo el codigo e ir probando a medida que voy agregando las funciones.

en este momento tengo el codigo, sin la lectura del puerto c y sin las interrupciones, y me pasa lo mismo que antes.. cuando tiene que hacer el delay, no lo hace y vuelve al inicio o se enclava si es que estado =0; estaba despues del delay..

  • alguien me podria facilitar la libreria delay.h?
creo que la mia podria tener algo malo

de antemano gracias, Saludos!

Desconectado kordrak

  • PIC10
  • *
  • Mensajes: 17
Re: problema con Delay, causa reinicio
« Respuesta #11 en: 09 de Febrero de 2012, 14:42:23 »
Logre solucionar el problemade los delay.. estaba escondido en la raiz del codigo.. y revisando mis funciones nunca lo iba a encontrar..
tuve que desenmarañar todo, hasta que me quede solamente con un par de delays y un led conectado..

mi problema es que el pic estaba asumiento configuraciones por default con las que no contaba, tuve que cambiar la configuración a la siguiente:


#pragma config OSC = HS
#pragma config OSCS = OFF     // lo puse por si las moscas.. en realidad no era necesario y daño al parecer no a hecho
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config DEBUG = OFF
#pragma config STVR = OFF     // tiene algo que ver son los reset
#pragma config BOR = OFF      // lo mismo xD


ahora funcionan los delays.. pero me falta corregir el asunto de las interrupciones

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: problema con Delay, causa reinicio
« Respuesta #12 en: 09 de Febrero de 2012, 16:56:29 »
 :-/ que bueno! Nada mas lindo que encontrar la solución uno mismo.  ((:-))
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes