void CheckSwitches(void){ Print_Level l = getPrintLevel(); setPrintLevelInfoPrint(); switched=0; volt = GetRawVoltage(); boolean up = false; uint8_t reg = isRegulated_0(); if (bankState[0] != reg ){ bankState[0]=reg; up=true; } reg = isRegulated_1(); if (bankState[1] != reg){ bankState[1] = reg; up=true; } if ((lastVolt>RawVoltageMin) && (volt<RawVoltageMin)){ up=true; lastVolt = volt; } if ((lastVolt<RawVoltageMin) && (volt>RawVoltageMin)){ up=true; lastVolt = volt; } setPrintLevel(l); }
void CheckSwitches(void){ Print_Level l = getPrintLevel(); setPrintLevelInfoPrint(); switched=0; volt = GetRawVoltage(); BOOL up = FALSE; BYTE reg = isRegulated_0(); if (bankState[0] != reg ){ bankState[0]=reg; up=TRUE; } reg = isRegulated_1(); if (bankState[1] != reg){ bankState[1] = reg; up=TRUE; } if ((lastVolt>RawVoltageMin) && (volt<RawVoltageMin)){ up=TRUE; lastVolt = volt; } if ((lastVolt<RawVoltageMin) && (volt>RawVoltageMin)){ up=TRUE; lastVolt = volt; } if(up){ println_I("\nVoltage on raw: \t"); p_fl_I(volt); println_I("Voltage on bank0: \t"); p_fl_I(GetRail0Voltage()); println_I("Voltage on bank1:\t"); p_fl_I(GetRail1Voltage()); println_I("Pushing upstream Power Packet bank 0: ");p_int_I(bankState[0]);print_I(" bank 1: ");p_int_I(bankState[1]); println_I("Power Code 0: ");p_int_I(GetRawVoltageCode(0)); println_I("Power Code 1 : ");p_int_I(GetRawVoltageCode(1)); println_I("Raw: ");p_fl_I(GetRawVoltage()); UpstreamPushPowerChange(); } setPrintLevel(l); }
uint8_t IsRegulated(float voltage){ float raw = GetRawVoltage(); if((voltage < raw+10)&&(voltage > raw-10)) return false; if ((voltage<(RawVoltageMin))&&(voltage>(FiveVoltADC))){//USB spec is 5.25v to 4.4v. return true; } return false; }
BYTE IsRegulated(float voltage){ float raw = GetRawVoltage()-130;//adding the voltage drop across the diaode if((voltage < raw+10)&&(voltage > raw-10)) return FALSE; if ((voltage<(RawVoltageMin))&&(voltage>(FiveVoltADC))){//USB spec is 5.25v to 4.4v. return TRUE; } return FALSE; }
void DownstreamPowerChange(void) { LoadCorePacket(&downstreamPacketTemp); POWER(&downstreamPacketTemp); downstreamPacketTemp.use.data[2] = GetRawVoltageCode(0); downstreamPacketTemp.use.data[3] = GetRawVoltageCode(1); if (downstreamPacketTemp.use.data[0] == bankA && downstreamPacketTemp.use.data[1] == bankB && downstreamPacketTemp.use.data[2] == batteryCode0 && downstreamPacketTemp.use.data[3] == batteryCode1) return; bankA = downstreamPacketTemp.use.data[0]; bankB = downstreamPacketTemp.use.data[1]; batteryCode0 = downstreamPacketTemp.use.data[2]; batteryCode1 = downstreamPacketTemp.use.data[3]; SendPacketToCoProc(&downstreamPacketTemp); UpstreamPushPowerChange(bankA, bankB, GetRawVoltage(), getPowerOverRide()); }
void hardwareInit() { // Configure the device for maximum performance but do not change the PBDIV // Given the options, this function will change the flash wait states, RAM // wait state and enable prefetch cache but will not change the PBDIV. // The PBDIV value is already set via the pragma FPBDIV option above.. SYSTEMConfig((80000000L), SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE); SYSTEMConfigPerformance(80000000); CHECONbits.PREFEN = 0; int j = 0, i = 0; for (i = 0; i < 6; i++) { MyMAC.v[i] = MY_MAC_ADDRESS[i]; } StartCritical(); println_I("MAC"); enableFlashStorage(true); FlashGetMac(MyMAC.v); for (i = 0; i < 6; i++) { macStr[j++] = GetHighNib(MyMAC.v[i]); macStr[j++] = GetLowNib(MyMAC.v[i]); } macStr[12] = 0; //println_I("MAC address is ="); print_I(macStr); Pic32_Bowler_HAL_Init(); usb_CDC_Serial_Init(dev, macStr, 0x04D8, 0x3742); InitLEDS(); SetColor(0, 0, 1); mInitSwitch(); //AVR Reset pin InitAVR_RST(); HoldAVRReset(); //AVR must be running before pin states can be synced in the pin initialization ReleaseAVRReset(); //Starts co-proc uart initCoProcCom(); InitPinFunction(); //Must initialize IO before hardware LoadDefaultValues(); //println_W("Pin States"); SyncModes(); //println_I("Modes synced, initializing channels"); initAdvancedAsync(); //println_I("Adding IO Namespace"); addNamespaceToList( get_bcsIoNamespace()); //println_I("Adding IO.Setmode Namespace"); addNamespaceToList(get_bcsIoSetmodeNamespace()); //println_I("Adding DyIO Namespace"); addNamespaceToList(get_neuronRoboticsDyIONamespace()); //println_I("Adding PID Namespace"); addNamespaceToList( getBcsPidNamespace()); //println_I("Adding DyIO PID Namespace"); addNamespaceToList( get_bcsPidDypidNamespace()); //println_I("Adding Safe Namespace"); addNamespaceToList((NAMESPACE_LIST *) get_bcsSafeNamespace()); Init_FLAG_BUSY_ASYNC(); //InitCTS_RTS_HO(); //ConfigUARTOpenCollector(); ConfigUARTRXTristate(); //Starts Timer 3 InitCounterPins(); InitADC(); //SetFwRev(rev); GetName(Name); if(Name[0]==0xff){ for(i=0;i<17;i++){ Name[i]=defaultName[i] ; } SetName(Name); GetName(Name); } if (!GetLockCode(LockCode)){ for(i=0;i<4;i++){ LockCode[i] = defaultlock[i]; } SetLockCode(LockCode); } EndCritical(); initBluetooth(); if(!hasBluetooth()){ Pic32UARTSetBaud( 115200 ); } boolean defaultmac=true; for (i = 0; (i < 6) && defaultmac; i++) { if(MyMAC.v[i] != MY_MAC_ADDRESS[i]){ defaultmac = false; } } if(defaultmac){ srand((unsigned) GetRawVoltage());// random seed from the air MyMAC.v[3] = MINOR_REV; MyMAC.v[4] = FIRMWARE_VERSION; MyMAC.v[5] = rand() % 255; FlashSetMac(MyMAC.v); U1CON = 0x0000; DelayMs(100); Reset(); } }