Hex-current-measurements

Dependencies:   mbed LoRaWAN-lib SX1276Lib

app/main.cpp

Committer:
amirchaudhary
Date:
2019-05-01
Revision:
12:630be38ec1ed
Parent:
11:9e35ddff7ed8

File content as of revision 12:630be38ec1ed:

#include "mbed.h"
#include "board.h"
#include "SerialDisplay.h"


AnalogIn Vbat(PA_4);
AnalogIn Led1(PA_1);
AnalogIn Led2(PC_0);
AnalogIn RM(PC_2);
AnalogIn Vce(PB_1);
DigitalOut Relay(D6);


/**
 * Main application entry point.
 */
Serial pc(SERIAL_TX, SERIAL_RX,115200);
int MY_SetSysClock_PLL_HSE(void)
{
    RCC_ClkInitTypeDef RCC_ClkInitStruct;
    RCC_OscInitTypeDef RCC_OscInitStruct;

    /* Enable HSE and activate PLL with HSE as source */
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    RCC_OscInitStruct.HSEState       = RCC_HSE_ON; /* External 8 MHz xtal on OSC_IN/OSC_OUT */

    // PLLCLK = (8 MHz * 8)/2 = 32 MHz
    RCC_OscInitStruct.PLL.PLLState        = RCC_PLL_ON;
    RCC_OscInitStruct.PLL.PLLSource       = RCC_PLLSOURCE_HSE;
    RCC_OscInitStruct.PLL.PLLMUL          = RCC_PLLMUL_8;
    RCC_OscInitStruct.PLL.PLLDIV          = RCC_PLLDIV_2;
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
        return (-1); // FAIL
    }

    /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
    RCC_ClkInitStruct.ClockType      = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
    RCC_ClkInitStruct.SYSCLKSource   = RCC_SYSCLKSOURCE_PLLCLK; // 32 MHz
    RCC_ClkInitStruct.AHBCLKDivider  = RCC_SYSCLK_DIV1;         // 32 MHz
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;           // 32 MHz
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;           // 32 MHz
    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) {
        return (-2); // FAIL
    }

    /* Enable HSE and activate PLL with HSE as source */
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_MSI;
    RCC_OscInitStruct.HSIState       = RCC_HSI_OFF;
    RCC_OscInitStruct.MSIState       = RCC_MSI_OFF;
    RCC_OscInitStruct.HSI48State     = RCC_HSI48_OFF;
    RCC_OscInitStruct.PLL.PLLState   = RCC_PLL_NONE;
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
        return (-3); // FAIL
    }
        
    return 0; // OK
}

void my_patch(void)
{
    int retVal;
    
    // Put device into default clock, i.e using MSI = 2MHz
    HAL_RCC_DeInit();
    
    // Enable HSE clock
    retVal = MY_SetSysClock_PLL_HSE();
    if(retVal< 0)
    {
        // fail
        //pc.printf("Failed to start HSE, ERR= %d\r\n", retVal);
        
        // indicate error
        while(1)
        {

        }
    }    
}

int main()
{ 
    
    pc.printf("mbed-os-rev: %d.%d.%d   lib-rev: %d\r\n", \
            MBED_MAJOR_VERSION, MBED_MINOR_VERSION,MBED_PATCH_VERSION,MBED_LIBRARY_VERSION);
    pc.printf("BUILD= %s, SysClock= %d, RCC= %0X\r\n", __TIME__, SystemCoreClock, RCC->CR);   
    my_patch();
    pc.printf("NEW SysClock= %d, NEW RCC= %0X\r\n", SystemCoreClock, RCC->CR);
    wait(1);
    
    printf("\n");
    printf("\n");
    int min=0,count=0;
      
    float meas_Vbat,meas_Led1,meas_Led2,meas_RM,meas_Vce;
    float v_Vbat,v_Led1,v_Led2,v_RM,v_Vce;
 //   float meas_v;


 
//    printf("\tAnalogIn example\n");    
    printf("min");
    printf("\tVbat");
    printf("\tLED1");
    printf("\tLED2");
    printf("\tRM");     
  //  printf("\tVce");
    printf("\n");

    while(1) {
      Relay= 1; // Start the test Relay =1
      
      meas_Vbat = Vbat.read(); // Read the analog input value (value from 0.0 to 1.0 = full ADC conversion range)
      meas_Led1 = Led1.read() - Vce.read(); // Read the analog input value (value from 0.0 to 1.0 = full ADC conversion range)
      meas_Led2 = Led2.read() - Vce.read();
      meas_RM = RM.read() - Vce.read();  
   //   meas_Vce = Vce.read(); 

/*
  // Display readings
      v_Vbat = meas_Vbat*3300*2;
      v_Led1 = meas_Led1*3300;
      v_Led2 = meas_Led2*3300;
      v_RM = meas_RM*3300;  
      v_Vce = meas_Vce*3300; 
      
      */
      
      // Display readings
      v_Vbat = meas_Vbat * 3.350*2;
      v_Led1 = (meas_Led1 * 3.300)/2.2;
      v_Led2 = (meas_Led2 * 3.300)/2.2;
      v_RM = (meas_RM * 3.300)/2.2;  
    //  v_Vce = meas_Vce * 3.300; 
      

      printf("%d\t", min);
      printf("%.03f\t", v_Vbat);
      printf("%.03f\t", v_Led1);
      printf("%.03f\t", v_Led2);
      printf("%.03f\t", v_RM);

      printf("\n");         
      
      wait(10.0); // 10 second
      min++;
    }

}