/*! * @file main.c * @authors Simon Donnet-Monay & Remi Heredero * @date 14 march 2023 * @brief Main is in two part. * First for setup everything * Second for loop on measure and set duty cycle for PWM */ #include "mcc_generated_files/mcc.h" #include "lcd/lcd.h" #include "measure.h" #include "modbus.h" #define MAX_COL 16 //!< columns for lcd screen (and 2 rows) void main(void) { /* SETUP FUNCTIONS: */ // Initialize the system with all mcc default configs SYSTEM_Initialize(); Lcd_Init(); // Initialize lcd screen adc_init(); // Initialize adc for measures modbus_init(0x80); // Initialize all specific modbus function // Enable the Global Interrupts INTERRUPT_GlobalInterruptEnable(); // Enable the Peripheral Interrupts INTERRUPT_PeripheralInterruptEnable(); /* * Initialize offset current. * 1. disable load * 2. Measure current without load * * The goal it's to remove the offset due to the electronics parts */ EPWM1_LoadDutyValue(0); const uint16_t offsetCurrent = measure_current(offsetCurrent); // create a char array for display on lcd (with space for '\0') char msg[MAX_COL+1]; /* LOOP MAIN PROGRAM: */ while (1) { // Get the measure and save it and the appropriate register input_registers[0] = measure_voltage(); input_registers[1] = measure_current(offsetCurrent); // Print on the first row of the lcd the Voltage sprintf(msg, "U = %04d [mV] ", input_registers[0]); LCD_2x16_WriteMsg(msg,0); // Print on the second row of the lcd the current sprintf(msg, "I = %04d [uA] ", input_registers[1]); LCD_2x16_WriteMsg(msg,1); // Write the duty cycle for pwm from the appropriate register EPWM1_LoadDutyValue(holding_registers[0]); } }