void Atomizer_Init() { // Select shunt value based on hardware version switch(Dataflash_info.hwVersion) { case 101: case 108: Atomizer_shuntRes = 125; break; case 103: case 104: case 105: case 106: Atomizer_shuntRes = 110; break; case 107: case 109: Atomizer_shuntRes = 120; break; case 110: case 111: Atomizer_shuntRes = 105; break; case 100: case 102: default: Atomizer_shuntRes = 115; break; } // Setup control pins PC1 = 0; GPIO_SetMode(PC, BIT1, GPIO_MODE_OUTPUT); PC3 = 0; GPIO_SetMode(PC, BIT3, GPIO_MODE_OUTPUT); // Both channels powered down Atomizer_ConfigureConverters(0, 0); // Configure 150kHz PWM PWM_ConfigOutputChannel(PWM0, ATOMIZER_PWMCH_BUCK, 150000, 0); PWM_ConfigOutputChannel(PWM0, ATOMIZER_PWMCH_BOOST, 150000, 0); // Start PWM PWM_EnableOutput(PWM0, PWM_CH_0_MASK); PWM_EnableOutput(PWM0, PWM_CH_2_MASK); PWM_Start(PWM0, PWM_CH_0_MASK); PWM_Start(PWM0, PWM_CH_2_MASK); // Set duty cycle to zero PWM_SET_CMR(PWM0, ATOMIZER_PWMCH_BUCK, 0); PWM_SET_CMR(PWM0, ATOMIZER_PWMCH_BOOST, 0); Atomizer_targetVolts = 0; Atomizer_curCmr = 0; Atomizer_curState = POWEROFF; // Setup 5kHz timer for negative feedback cycle // This function should run during system init, so // the user hasn't had time to create timers yet. Timer_CreateTimer(5000, 1, Atomizer_TimerCallback, 0); }
// Main int main() { // initial settings, will change to user interactive / eeprom ctx.settings.mode = 3; ctx.settings.maxCtrlWatts = 75000; ctx.settings.maxWatts = 75000; ctx.settings.minTemp = 60; ctx.settings.maxTemp = 300; ctx.settings.tcrValue = 0.00092; ctx.settings.tT = 248; ctx.settings.tW = 56000; ctx.settings.lockRes = false; ctx.settings.flip = false; ctx.settings.stealth = false; ctx.settings.lock = false; ctx.settings.timeout = 10; // init timers uint8_t timeTimer; timeTimer = Timer_CreateTimer(1, 1, incrementTime, 1); uint8_t loopTimer; loopTimer = Timer_CreateTimer(FPS, 1, readyLoop, 1); // init atomizer Atomizer_SetErrorLock(true); // main loop, rest is event handling while(1) { loop = 0; // collect runtime data collectData(); // do controls doControls(); if(ctx.state.firing) { displayFiring(); } else { if(ctx.state.idleTimer < 20) { switch(ctx.settings.mode) { case 0: // settings displaySettings(); break; case 1: // vw displayVW(); break; case 2: // bp displayBP(); break; case 3: // tc displayTC(); break; } } else { // switch to low power mode Display_Clear(); Display_Update(); sleep(); } } // waste time until loop refresh timer is ready while(loop == 0) {} } return 0; }