This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

floating point

sir

     in my progrming i want to use decimal values .but the float data type is showing error .

so how can i avoid this error

  • Hi,

     in my progrming i want to use decimal values .but the float data type is showing error .

    so how can i avoid this error

    Which controller are you using? Also, can you paste the screenshot of the error?

    Regards,

    Gautam

  • This controller very well supports float datatypes. Can you paste the screenshot of the error?

  • float I,I1,Fd,F1,Iold,Fold,Imin,Fmin,Imax,Fmax;

    Description Resource Path Location Type
    #148 declaration is incompatible with "float Fmax" (declared at line 27) main.c /p1 line 28 C/C++ Problem

  • Description Resource Path Location Type
    #148 declaration is incompatible with "float Fmax" (declared at line 27) main.c /p1 line 28 C/C++ Problem

    Try using float32 datatype instead.

  • sir 

         again same error

    Description Resource Path Location Type
    #148 declaration is incompatible with "float32 Fmax" (declared at line 27) main.c /p1 line 28 C/C++ Problem

  • Lokks like you declared variable "Fmax" twice: in  line 27 and in the line "float I,I1,Fd,F1,Iold,Fold,Imin,Fmin,Imax,Fmax;" 

  • sir this is program i am getting errors

    #include "DSP28x_Project.h" // Device Headerfile

    #include "f2802x_common/include/adc.h"
    #include "f2802x_common/include/clk.h"
    #include "f2802x_common/include/flash.h"
    #include "f2802x_common/include/gpio.h"
    #include "f2802x_common/include/pie.h"
    #include "f2802x_common/include/pll.h"
    #include "f2802x_common/include/pwm.h"
    #include "f2802x_common/include/wdog.h"
    #include "f2802x_common/include/IQmathLib.h"
    #include<math.h>

    // Prototype statements for functions found within this file.
    interrupt void adc_isr(void);
    void Adc_Config(void);

    // Global variables used in this example:
    uint32_t EPwm1TimerIntCount;
    uint16_t j;
    uint16_t a;
    uint16_t x,x1,tbprd,n,i,j;
    float I,I1,Fd,F1,Iold,Fold,Imin,Fmin,Imax,Fmax;
    Fmax=20000;
    Fmin=3600;
    Imax=5;
    Imin=1;
    Iold=2;
    Fold=10000;

    ADC_Handle myAdc;
    CLK_Handle myClk;
    FLASH_Handle myFlash;
    GPIO_Handle myGpio;
    PIE_Handle myPie;
    PWM_Handle myPwm1;

    void main(void)
    {

    CPU_Handle myCpu;
    PLL_Handle myPll;
    WDOG_Handle myWDog;

    // Initialize all the handles needed for this application
    myAdc = ADC_init((void *)ADC_BASE_ADDR, sizeof(ADC_Obj));
    myClk = CLK_init((void *)CLK_BASE_ADDR, sizeof(CLK_Obj));
    myCpu = CPU_init((void *)NULL, sizeof(CPU_Obj));
    myFlash = FLASH_init((void *)FLASH_BASE_ADDR, sizeof(FLASH_Obj));
    myGpio = GPIO_init((void *)GPIO_BASE_ADDR, sizeof(GPIO_Obj));
    myPie = PIE_init((void *)PIE_BASE_ADDR, sizeof(PIE_Obj));
    myPll = PLL_init((void *)PLL_BASE_ADDR, sizeof(PLL_Obj));
    myPwm1 = PWM_init((void *)PWM_ePWM1_BASE_ADDR, sizeof(PWM_Obj));
    myWDog = WDOG_init((void *)WDOG_BASE_ADDR, sizeof(WDOG_Obj));

    // Perform basic system initialization
    WDOG_disable(myWDog);
    CLK_enableAdcClock(myClk);
    (*Device_cal)();

    //Select the internal oscillator 1 as the clock source
    CLK_setOscSrc(myClk, CLK_OscSrc_Internal);

    // Setup the PLL for x12 /2 which will yield 60Mhz = 10Mhz * 12 / 2
    PLL_setup(myPll, PLL_Multiplier_12, PLL_DivideSelect_ClkIn_by_2);
    PWM_setHighSpeedClkDiv(myPwm1, PWM_HspClkDiv_by_1);

    // Disable the PIE and all interrupts
    PIE_disable(myPie);
    PIE_disableAllInts(myPie);
    CPU_disableGlobalInts(myCpu);
    CPU_clearIntFlags(myCpu);

    // If running from flash copy RAM only functions to RAM
    #ifdef _FLASH
    memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
    #endif

    // Initalize GPIO
    GPIO_setPullUp(myGpio, GPIO_Number_0, GPIO_PullUp_Disable);
    GPIO_setPullUp(myGpio, GPIO_Number_1, GPIO_PullUp_Disable);
    GPIO_setMode(myGpio, GPIO_Number_0, GPIO_0_Mode_EPWM1A);
    GPIO_setMode(myGpio, GPIO_Number_1, GPIO_1_Mode_EPWM1B);


    // Setup a debug vector table and enable the PIE
    // PIE_setDebugIntVectorTable(myPie);
    PIE_enable(myPie);

    // Register interrupt handlers in the PIE vector table
    PIE_registerPieIntHandler(myPie, PIE_GroupNumber_10, PIE_SubGroupNumber_1, (intVec_t)&adc_isr);

    // Initialize the ADC
    ADC_enableBandGap(myAdc);
    ADC_enableRefBuffers(myAdc);
    ADC_powerUp(myAdc);
    ADC_enable(myAdc);
    ADC_setVoltRefSrc(myAdc, ADC_VoltageRefSrc_Int);
    x=0;
    for(n=0;n<5000;n++)
    {

    // Enable ADCINT1 in PIE
    PIE_enableAdcInt(myPie, ADC_IntNumber_1);
    // Enable CPU Interrupt 1
    CPU_enableInt(myCpu, CPU_IntNumber_10);
    // Enable Global interrupt INTM
    CPU_enableGlobalInts(myCpu);
    // Enable Global realtime interrupt DBGM
    CPU_enableDebugInt(myCpu);
    j=0;

    ADC_setIntPulseGenMode(myAdc, ADC_IntPulseGenMode_Prior); //ADCINT1 trips after AdcResults latch
    ADC_enableInt(myAdc, ADC_IntNumber_1); //Enabled ADCINT1
    ADC_setIntMode(myAdc, ADC_IntNumber_1, ADC_IntMode_ClearFlag); //Disable ADCINT1 Continuous mode
    ADC_setIntSrc(myAdc, ADC_IntNumber_1, ADC_IntSrc_EOC2); //setup EOC2 to trigger ADCINT1 to fire
    ADC_setSocChanNumber (myAdc, ADC_SocNumber_0, ADC_SocChanNumber_A4); //set SOC0 channel select to ADCINA4
    ADC_setSocChanNumber (myAdc, ADC_SocNumber_1, ADC_SocChanNumber_A4); //set SOC1 channel select to ADCINA4

    ADC_setSocTrigSrc(myAdc, ADC_SocNumber_0, ADC_SocTrigSrc_EPWM1_ADCSOCA); //set SOC0 start trigger on EPWM1A, due to round-robin SOC0 converts first then SOC1
    ADC_setSocTrigSrc(myAdc, ADC_SocNumber_1, ADC_SocTrigSrc_EPWM1_ADCSOCA); //set SOC1 start trigger on EPWM1A, due to round-robin SOC0 converts first then SOC1

    ADC_setSocSampleWindow(myAdc, ADC_SocNumber_0, ADC_SocSampleWindow_7_cycles); //set SOC0 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
    ADC_setSocSampleWindow(myAdc, ADC_SocNumber_1, ADC_SocSampleWindow_7_cycles); //set SOC1 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)

    x=x+a;
    }
    x1=x/n;
    PWM_setCmpA(myPwm1,x1);


    // Stop all the TB clocks
    CLK_disableTbClockSync(myClk);

    CLK_enablePwmClock(myClk, PWM_Number_1);

    // Setup Sync
    PWM_setSyncMode(myPwm1, PWM_SyncMode_EPWMxSYNC);

    // Allow each timer to be sync'ed
    PWM_enableCounterLoad(myPwm1);

    // Setup PWM
    PWM_enableSocAPulse(myPwm1); // Enable SOC on A group
    PWM_setSocAPulseSrc(myPwm1, PWM_SocPulseSrc_CounterEqualZero); // Select SOC from from CPMA on upcount
    PWM_setSocAPeriod(myPwm1, PWM_SocPeriod_FirstEvent); // Generate pulse on 1st event

    I=(x1*3.3/4096-1.65)/0.255;
    for(i=0;I>Iold && I<Imax;i++)
    {
    Fd=19394*(pow((Iold+0.1),(-1.045))-pow((Iold),(-1.045)));
    I1=Iold+0.1;
    F1=Fold+Fd;
    tbprd=30*10^6/F1;
    PWM_setPeriod(myPwm1, tbprd); // Set period for ePWM1
    PWM_setCounterMode(myPwm1, PWM_CounterMode_UpDown);
    PWM_setIntMode(myPwm1, PWM_IntMode_CounterEqualZero); // Select INT on Zero event
    PWM_enableInt(myPwm1); // Enable INT
    PWM_setIntPeriod(myPwm1, PWM_IntPeriod_FirstEvent); // count up and start

    PWM_setShadowMode_CmpA(myPwm1, PWM_ShadowMode_Shadow);

    PWM_setLoadMode_CmpA(myPwm1, PWM_LoadMode_Zero);

    PWM_setActionQual_CntUp_CmpA_PwmA(myPwm1, PWM_ActionQual_Set); // Set PWM1A on Zero
    PWM_setActionQual_CntDown_CmpA_PwmA(myPwm1, PWM_ActionQual_Clear); // Clear PWM1A on event A, up count


    Iold=I1;
    Fold=F1;
    }
    for(i=0;I<Iold&&I>Imin;i++)
    {
    Fd=19394*(pow((Iold-0.1),(-1.045))-pow((Iold),(-1.045)));
    I1=Iold-0.1;
    F1=Fold+Fd;
    tbprd=30*10^6/F1;
    PWM_setPeriod(myPwm1, tbprd) ; // Set period for ePWM1
    PWM_setCounterMode(myPwm1, PWM_CounterMode_UpDown);
    PWM_setIntMode(myPwm1, PWM_IntMode_CounterEqualZero); // Select INT on Zero event
    PWM_enableInt(myPwm1); // Enable INT
    PWM_setIntPeriod(myPwm1, PWM_IntPeriod_FirstEvent); // count up and start

    PWM_setShadowMode_CmpA(myPwm1, PWM_ShadowMode_Shadow);

    PWM_setLoadMode_CmpA(myPwm1, PWM_LoadMode_Zero);

    PWM_setCmpA(myPwm1,x1);

    PWM_setActionQual_CntUp_CmpA_PwmA(myPwm1, PWM_ActionQual_Set); // Set PWM1A on Zero
    PWM_setActionQual_CntDown_CmpA_PwmA(myPwm1, PWM_ActionQual_Clear); // Clear PWM1A on event A, up count


    Iold=I1;
    Fold=F1;
    }
    if(I==Imax)
    {
    F1=Fmin;
    tbprd=30*10^6/F1;
    PWM_setPeriod(myPwm1, tbprd); // Set period for ePWM1
    PWM_setCounterMode(myPwm1, PWM_CounterMode_UpDown);
    PWM_setIntMode(myPwm1, PWM_IntMode_CounterEqualZero); // Select INT on Zero event
    PWM_enableInt(myPwm1); // Enable INT
    PWM_setIntPeriod(myPwm1, PWM_IntPeriod_FirstEvent); // count up and start

    PWM_setShadowMode_CmpA(myPwm1, PWM_ShadowMode_Shadow);

    PWM_setLoadMode_CmpA(myPwm1, PWM_LoadMode_Zero);


    PWM_setCmpA(myPwm1,x1);

    PWM_setActionQual_CntUp_CmpA_PwmA(myPwm1, PWM_ActionQual_Set); // Set PWM1A on Zero
    PWM_setActionQual_CntDown_CmpA_PwmA(myPwm1, PWM_ActionQual_Clear); // Clear PWM1A on event A, up count

    Iold=I;
    Fold=F1;

    }
    if(I==Imin)
    {
    F1=Fmax;
    tbprd=30*10^6/F1;
    PWM_setPeriod(myPwm1, tbprd); // Set period for ePWM1
    PWM_setCounterMode(myPwm1, PWM_CounterMode_UpDown);
    PWM_setIntMode(myPwm1, PWM_IntMode_CounterEqualZero); // Select INT on Zero event
    PWM_enableInt(myPwm1); // Enable INT
    PWM_setIntPeriod(myPwm1, PWM_IntPeriod_FirstEvent); // count up and start

    PWM_setShadowMode_CmpA(myPwm1, PWM_ShadowMode_Shadow);

    PWM_setLoadMode_CmpA(myPwm1, PWM_LoadMode_Zero);


    PWM_setCmpA(myPwm1,x1);

    PWM_setActionQual_CntUp_CmpA_PwmA(myPwm1, PWM_ActionQual_Set); // Set PWM1A on Zero
    PWM_setActionQual_CntDown_CmpA_PwmA(myPwm1, PWM_ActionQual_Clear); // Clear PWM1A on event A, up count


    Iold=I;
    Fold=F1;

    }

    // Start all the timers synced
    CLK_enableTbClockSync(myClk);
    for(;;)
    {

    }
    }


    interrupt void adc_isr(void)
    {

    a= ADC_readResult(myAdc, ADC_ResultNumber_1);
    x=a;


    // Clear ADCINT1 flag reinitialize for next SOC
    ADC_clearIntFlag(myAdc, ADC_IntNumber_1);
    // Acknowledge interrupt to PIE
    PIE_clearInt(myPie, PIE_GroupNumber_10);

    return;
    }

  • float I,I1,Fd,F1,Iold,Fold,Imin,Fmin,Imax,Fmax;
    Fmax=20000;
    Fmin=3600;
    Imax=5;
    Imin=1;
    Iold=2;
    Fold=10000;

    Try initializing them all at once like this:

    float32 Fmax=20000;
    float32 Imax=5;
    //....
    //....
    //....
    //etc

    Regards,

    Gautam