Autor Tema: Posible problema con tipo de variables  (Leído 1365 veces)

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

Desconectado diego3602

  • PIC10
  • *
  • Mensajes: 10
Posible problema con tipo de variables
« en: 13 de Agosto de 2019, 19:11:24 »
Estimados

Estoy usando el pic32mx360F512 con XC32 v1.3.
Y estoy haciendo una medicion de tension eficaz; Tomo 50 muestras durante el lapso de 2ms y por cada interrupcion del timer 2 (que sucede cada 20ms)y luego aplico la ecuación para verdadero valor eficaz. El problema que tengo es que la variable Vef me queda en 0.

Yo mando a un webserver el valor del canal analogico y el calculo cada 1min. Y puedo obvservar que el canal del adc lo esta leyendo correctamente. por lo que sospecho que pueda ser un problema entre variables.

adjunto fragmento de codigo.


int m;
float adc1, valorMax;
int Vef;
void MCU_Init(void);
unsigned int StartTime; // Start Time
unsigned int DelayCount = 1600;
int min=0;
float aux;

void __ISR(_TIMER_2_VECTOR, IPL2AUTO) ISR_Timer2(void) {
    valorMax=0;
    for (m = 0; m < 50; m++)
        {
        adc1=ADC1BUF1; //* 3.3 / 1023.0;
        StartTime = ReadCoreTimer();
        while ((ReadCoreTimer() - StartTime) < DelayCount) {}
        valorMax = (adc1 * adc1) + valorMax;
    }
    aux=(sqrt (valorMax / 50));
    Vef=(aux*(250/1023));
    m = 0;
    IFS0CLR = _IFS0_T2IF_MASK; // Clear the timer interrupt status flag
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Posible problema con tipo de variables
« Respuesta #1 en: 13 de Agosto de 2019, 20:10:04 »
Código: C
  1. Vef=(aux*(250.0/1023));


Al hacerlo con enteros a esa division, queda 0, por lo tanto le pones el .0 para forzarlo que lo haga con flotantes

Desconectado diego3602

  • PIC10
  • *
  • Mensajes: 10
Re:Posible problema con tipo de variables
« Respuesta #2 en: 13 de Agosto de 2019, 20:22:04 »
Muchas gracias killer JC eso no lo sabia.
termine dandome de cuenta sobre esa division lo que opte fue declarar una variable float con el cociente de la division y multiplicar la raiz. otra aclaracion que quiero hacer es que si trabajamos con float hay que usar la funcion sqrtf(float variable) de la libreria math.h

Espero que esto le sirva a alguien mas.

Se agradece mucho la ayuda.

Saludos.