Autor Tema: Diferencia de tiempo entre MPLABX e ISIS  (Leído 1440 veces)

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

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Diferencia de tiempo entre MPLABX e ISIS
« en: 17 de Julio de 2016, 12:12:19 »
  Hola, buenos días.
  Escribo esto aquí ya que no sé donde colocarlo.

  Tengo hecho un programa en C (compilado con XC8 versión 1.33). Utilizo el Timer1 en modo timer y lo mantengo encendido durante un segundo aproximadamente (para lograr ese tiempo incremento una variable cada vez que ocurre una interrupción del Timer1). Durante ese tiempo cuento los pulsos que ingresan por RB0, utilizando interrupción.

  En MPLABX, coloco un breackpoint cuando enciendo el Timer1 y otro cuando lo apago. El tiempo entre ambos breackpoints me da 1,000004 S (es decir, 1 Seg con 4 uSeg).

  En ISIS haciendo lo mismo, el tiempo medido es 937,49 mSeg.

  ¿A alguien le ha pasado algo similar?

  Les adjunto el código, y las capturas

Código: C
  1. #include <xc.h>
  2. #include <stdint.h>
  3. #include <stdlib.h>
  4. //#include <stdio.h>
  5. #include <string.h>
  6.  
  7. #define _XTAL_FREQ 8000000
  8.  
  9. #include "xclcd.h"
  10.  
  11. // CONFIG
  12. #pragma config FOSC = HS        // Oscillator Selection bits (XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)
  13. #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
  14. #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
  15. #pragma config MCLRE = OFF      // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
  16. #pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
  17. #pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
  18. #pragma config CPD = OFF        // Data EE Memory Code Protection bit (Data memory code protection off)
  19. #pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
  20.  
  21. #define MAX_FREQ_LENGTH 6       // largo de la frecuencia incluyendo el caracter nulo
  22.  
  23. uint16_t frecuencia;
  24. uint8_t tiempoDeCuenta;
  25. bit showDisplay;
  26.  
  27. void interrupt ISR()
  28. {
  29.     if ((INTCONbits.INTF ==1) && (INTCONbits.INTE == 1))
  30.     {
  31.         if (T1CONbits.TMR1ON == 1) frecuencia++;
  32.         INTCONbits.INTF = 0;
  33.     }
  34.     if ((PIR1bits.TMR1IF == 1) && (PIE1bits.TMR1IE == 1))
  35.     {
  36.         TMR1 = 3068;
  37.         tiempoDeCuenta++;
  38.         if (tiempoDeCuenta >= 32)
  39.         {
  40.             T1CONbits.TMR1ON = 0;
  41.             tiempoDeCuenta = 0;
  42.             showDisplay = 1;
  43.         }
  44.         PIR1bits.TMR1IF = 0;
  45.     }
  46. }
  47.  
  48. void main()
  49. {
  50.     uint8_t frecuenciaTxt[MAX_FREQ_LENGTH];
  51.     //uint8_t frecuenciaParcialTxt[4];
  52.    // uint8_t * pFrecuencia;
  53.     int * estado;
  54.     uint8_t frecuenciaParteDecimal;
  55.     uint16_t frecuenciaParteEntera;
  56.     uint8_t cantidadDeEspacios;
  57.     uint8_t espacios;
  58.    
  59.     CMCON = 0X07;
  60.     PORTB = 0x00;
  61.     PORTA = 0x00;
  62.     TRISB = 0x01;
  63.     TRISA = 0x00;
  64.  
  65.   //  pFrecuencia = frecuenciaTxt;
  66.  
  67.     OPTION_REG = 0x80;
  68.  
  69.     LCDInit();
  70.     LCDGotoxy(2,1);
  71.     LCDPuts("FW SoundSystem");
  72.     LCDGotoxy(14,2);
  73.     LCDPuts("Hz");
  74.  
  75.  
  76.     TMR1 = 3068;
  77.  
  78.     /*
  79.     INTCONbits.INTF = 0;
  80.     PIR1bits.TMR1IF = 0;
  81.     PIE1bits.TMR1IE = 1;
  82.     INTCONbits.INTE = 1;
  83.     INTCONbits.PEIE = 1;
  84.     INTCONbits.GIE = 1;
  85.      */
  86.  
  87.     INTCON = 0x50;
  88.     PIR1bits.TMR1IF = 0;
  89.     PIE1bits.TMR1IE = 1;
  90.     INTCONbits.GIE = 1;
  91.  
  92.     T1CONbits.TMR1ON = 1;
  93.  
  94.     while(1)
  95.     {
  96.         if (showDisplay == 1)
  97.         {
  98.             //frecuenciaParteEntera = frecuencia / 2;
  99.             frecuenciaParteEntera = frecuencia >> 1;
  100.             frecuenciaParteDecimal = frecuencia % 2;
  101.             utoa(frecuenciaTxt, frecuenciaParteEntera, 10);
  102.      /*
  103.             if (frecuenciaParteDecimal != 0)
  104.             {
  105.                 strcpy(frecuenciaParcialTxt, ".50");
  106.             }
  107.             else
  108.                 strcpy(frecuenciaParcialTxt, ".00");
  109.             strcat(frecuenciaTxt, frecuenciaParcialTxt);
  110.       */
  111.             cantidadDeEspacios = MAX_FREQ_LENGTH - strlen(frecuenciaTxt);
  112.            
  113.             LCDGotoxy(4,2);
  114.            
  115.             for(espacios = cantidadDeEspacios; espacios > 0; espacios--)
  116.             {
  117.                 LCDPutc(' ');
  118.             }
  119.  
  120.             LCDPuts(frecuenciaTxt);
  121.             // agregado para la version 2.0
  122.             LCDPutc('.');
  123.             if (frecuenciaParteDecimal != 0) LCDPutc('5');
  124.             else
  125.                 LCDPutc('0');
  126.             showDisplay = 0;
  127.             frecuencia = 0;
  128.             TMR1 = 3068;
  129.             T1CONbits.TMR1ON = 1;
  130.             NOP();
  131.         }
  132.     }
  133. }

* captura-isis.png
(82.41 kB, 1366x768 - visto 315 veces)


* captura-mplabx.png
(114.38 kB, 1366x768 - visto 298 veces)

 
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5470
    • Electrónica Didacta
Re:Diferencia de tiempo entre MPLABX e ISIS
« Respuesta #1 en: 17 de Julio de 2016, 14:33:14 »
angelgris

estás tomando el cuenta el tiempo transcurrido hasta el primer BP?

tienes que tomar las lecturas (primer y segundo BP) que arroja el proteus y luego restarlas.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re:Diferencia de tiempo entre MPLABX e ISIS
« Respuesta #2 en: 17 de Julio de 2016, 16:42:22 »
  Hola Pali, el tiempo que estoy tomando es el transcurrido entre el BP en el cual enciendo el Timer1 y el BP en el cual apago el Timer1. El encendido del Timer1 está dentro del ciclo while y el apagado dentro de la interrupción.
Tanto en MPLABX como en ISIS tomo el mismo tiempo por ello me llama la atención la diferencia.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Diferencia de tiempo entre MPLABX e ISIS
« Respuesta #3 en: 18 de Julio de 2016, 02:12:11 »
Yo le creo mas al MPLAB, por que el MPLAB solo cuenta los ciclos que deberia tener el hardware, mientras que el Proteus ese tiempo no creo que este relacionado en NADA con la cantidad de ciclos, por lo cual puede tener un error.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re:Diferencia de tiempo entre MPLABX e ISIS
« Respuesta #4 en: 18 de Julio de 2016, 02:41:52 »
Hola AngelGris, me a pasado eso mismo, aunque yo trabajo en .asm, y por supuesto el error estaba en el ISIS.

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é.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re:Diferencia de tiempo entre MPLABX e ISIS
« Respuesta #5 en: 18 de Julio de 2016, 20:03:18 »
  Perfecto!!! Muchísimas gracias por sus respuestas!!!
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything