Treehouse Mbed Team / Mbed 2 deprecated APS_DCM1SL

Dependencies:   mbed

src/boards.cpp

Committer:
mfwic
Date:
2019-01-15
Revision:
22:2c37ac12746e
Parent:
21:fe0ea1860c9f
Child:
25:8bcc8bea0e31

File content as of revision 22:2c37ac12746e:

//-------------------------------------------------------------------------------
// 
//  Treehouse Designs Inc.
//  Colorado Springs, Colorado
// 
//  Copyright (c) 2016 by Treehouse Designs Inc. 
//  Copyright (c) 2018 by Agility Power Systems Inc. 
// 
//  This code is the property of Treehouse Designs, Inc. (Treehouse) and
//  Agility Power Systems Inc. (Agility) and may not be redistributed
//  in any form without prior written permission from 
//  both copyright holders, Treehouse and Agility.
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
// 
//   
//-------------------------------------------------------------------------------
// 
//  REVISION HISTORY:
//  
//   $Author: $
//   $Rev: $
//   $Date: $
//   $URL: $
// 
//-------------------------------------------------------------------------------

#include "mbed.h"
#include "globals.h"
#include "parameters.h"
#include "boards.h"
#include "lut.h"
#include "all_io.h"
#include "serial.h"
#include "stdio.h"

unsigned int boardEnableBits;

void initBoards(struct adcValues adcVals){
    /*
    sprintf(strbuf, "\r\nV48_HI=%d\r\n", V48_HI);
    sendSerial(strbuf);
    sprintf(strbuf, "\r\nV48=%d\r\n", adcVals.v48);
    sendSerial(strbuf);
    sprintf(strbuf, "\r\nV48_LO=%d\r\n", V48_LO);
    sendSerial(strbuf);
    */
    en_out = 32;
    setBoardEnables(8191);
    
}

/*******************************************************************************
delay
*******************************************************************************/
void delay(long ticks)
{
   long i;
   for(i=0;i<ticks;i++);    
}  

/*******************************************************************************
setBoardEnables
*******************************************************************************/
unsigned int setBoardEnables(unsigned int tCode)
{
   if(!all_on){
      wr_out = tCode;
      unsigned int en_out_save = en_out;
      en_out = 0;
      wr_out = ~tCode;
      en_out = en_out_save;
   }
   return tCode;
}

/*******************************************************************************
setBoardWeights
*******************************************************************************/
unsigned int setBoardWeights(unsigned int bCode)
{
   if(!all_on){
      en_out = bCode;
   }
   toggleLatchSignal();
   return bCode;
}

/*******************************************************************************
toggleLatchSignal
*******************************************************************************/
void toggleLatchSignal(void){
    extchlat = OFF;
    extchlat = ON;
    extchlat = OFF;
}    

/************************************************************
* Routine: checkRange
* Input:   setval
*          limlo -- low limit
*          limhi -- high limit
* Returns:  1 if entry validates and is written
*           0 if entry fails
*           -1 if it slips past
* Description:
* Checks if setvalue is between the given limits.
*
**************************************************************/
int checkRange(int setvalue, int limlo, int limhi)
{
   if ((setvalue >= limlo) && (setvalue <= limhi)){
      return 1;
   }else{
      //showRangeError(0, 0, setvalue);
      return 0;
   }
}

/*******************************************************************************
startConverter
*******************************************************************************/
void startConverter(unsigned int reg)
{
    if(!running){
        running = TRUE;
        // Fire in the hole!
        wr_out_code = setBoardEnables(reg);
   
        sprintf(strbuf, "\r\nConverter started");
        sendSerial(strbuf);
    }
}   

/*******************************************************************************
stopConverter - stop the converter and set outputs to 0
*******************************************************************************/
void stopConverter(void)
{
    if(running){
        en_out = 32;
        wr_out_code = setBoardEnables(ALLON);
        running = FALSE;
        sprintf(strbuf, "\r\nConverter stopped");
        sendSerial(strbuf);
    }
}

/*******************************************************************************
checkLevels
*******************************************************************************/
struct statusValues checkLevels(struct adcValues adcVals){
    
    struct statusValues statVals;

    // Check 48V levels
    if(adcVals.v48 > V48_HI){
        //if(buck){
        //    stopConverter();
        //}
        statVals.V48_IS_HI = TRUE;
        statVals.V48_IS_LO = FALSE;
    }else if(adcVals.v48 < V48_LO){
        //if(buck){
        //    stopConverter();
        //}
        statVals.V48_IS_HI = FALSE;
        statVals.V48_IS_LO = TRUE;
    }else{
        statVals.V48_IS_HI = FALSE;
        statVals.V48_IS_LO = FALSE;
    }

    // Check 24V levels    
    if(adcVals.v24 > V24_HI){
        statVals.V24_IS_HI = TRUE;
        statVals.V24_IS_LO = FALSE;
    }else if(adcVals.v24 < V24_LO){
        statVals.V24_IS_HI = FALSE;
        statVals.V24_IS_LO = TRUE;
    }else{
        statVals.V24_IS_HI = FALSE;
        statVals.V24_IS_LO = FALSE;
    }

    // Check 12V levels
    if(adcVals.v12 > V12_HI){
        //if(!buck){
        //    stopConverter();
        //}
        statVals.V12_IS_HI = TRUE;
        statVals.V12_IS_LO = FALSE;
    }else if(adcVals.v12 < V12_LO){
        //if(!buck){
        //    stopConverter();
        //}
        statVals.V12_IS_HI = FALSE;
        statVals.V12_IS_LO = TRUE;
    }else{
        statVals.V12_IS_HI = FALSE;
        statVals.V12_IS_LO = FALSE;
    }
    return statVals;
}


/*******************************************************************************
updateControls
*******************************************************************************/
void updateControls(unsigned short ref){

    unsigned int cBuf = getLUT_thermCode(ref);
    wr_out_code = setBoardEnables(cBuf);
    
    cBuf = getLUT_binCode(ref);
    en_out_code = setBoardWeights(cBuf);
}

void XupdateControls(unsigned short ref){

    sprintf(strbuf, "refr=%d\r\n", ref);
    sendSerial(strbuf);
    
    ref = ref/64;
    
    sprintf(strbuf, "refc=%d\r\n", ref);
    sendSerial(strbuf);
    
    sendSerial("enter updateControls\r\n");
    unsigned int cBuf = getLUT_thermCode(ref);
    sendSerial("cBuf1 updateControls\r\n");
    wr_out_code = setBoardEnables(cBuf);
    sendSerial("wr_out_code updateControls\r\n");
    
    cBuf = getLUT_binCode(ref);
    sendSerial("cBuf2 updateControls\r\n");
    en_out_code = setBoardWeights(cBuf);
    sendSerial("en_out_code updateControls\r\n");
    
    wait(0.5);
}