/home/daqweb/fgddaq/c8051/ccbertan410.c File Reference

#include <c8051F410.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include "mscbemb.h"

Defines

#define MAX_VOLTAGE   28000
#define MAX_CURRENT   75
#define MINDEL   200
#define TPC_R   393.4
#define IOFF   -0.1718
#define GPIB_ADDR_0   4
#define DEMAND_CHANGED   (1<<0)
#define RAMP_UP   (1<<1)
#define RAMP_DOWN   (1<<2)
#define HV_LIMIT_CHANGED   (1<<3)
#define CUR_LIMIT_CHANGED   (1<<4)
#define CUR_LIMIT_BYPASS   (1<<7)
#define STATUS_RAMP_UP   (1<<0)
#define STATUS_RAMP_DOWN   (1<<1)
#define STATUS_VLIMIT   (1<<2)
#define STATUS_ILIMIT   (1<<3)
#define STATUS_LOWCUR   (1<<4)
#define STATUS_HICUR   (1<<5)

Functions

void user_write (unsigned char index) reentrant
unsigned char send (unsigned char adr, char *str)
unsigned char send_byte (unsigned char b)
unsigned char enter (unsigned char adr, char *str, unsigned char maxlen)
void set_voltage_limit (float value)
void set_hv (float value) reentrant
void read_hvi (void)
void ramp_hv (void)
void set_current_limit (float value)
void user_init (unsigned char init)
unsigned char user_read (unsigned char index)
unsigned char user_func (unsigned char *data_in, unsigned char *data_out)
void user_loop (void)

Variables

unsigned char idata _n_sub_addr = 1
char code node_name [] = "BERTANCC"
char xdata svn_rev_code [] = "$Rev: 907 $"
unsigned char idata chn_bits = 0
int Ibypass = 0
float xdata u_actual
unsigned long xdata t_ramp
char xdata str [32]
char xdata * buf
unsigned char xdata tiwp
struct {
   unsigned char   status
   float   u_demand
   float   u_meas
   float   i_meas
   unsigned int   ramp_up
   unsigned int   ramp_down
   float   u_limit
   float   i_limit
   char   warning [32]
   char   date [24]
   unsigned char   gpib_adr
   unsigned long   mytime
user_data
MSCB_INFO_VAR code vars []
MSCB_INFO_VARvariables = vars
SYS_INFO sys_info

Define Documentation

#define CUR_LIMIT_BYPASS   (1<<7)

#define CUR_LIMIT_CHANGED   (1<<4)

#define DEMAND_CHANGED   (1<<0)

#define GPIB_ADDR_0   4

#define HV_LIMIT_CHANGED   (1<<3)

#define IOFF   -0.1718

#define MAX_CURRENT   75

#define MAX_VOLTAGE   28000

#define MINDEL   200

#define RAMP_DOWN   (1<<2)

#define RAMP_UP   (1<<1)

#define STATUS_HICUR   (1<<5)

#define STATUS_ILIMIT   (1<<3)

#define STATUS_LOWCUR   (1<<4)

#define STATUS_RAMP_DOWN   (1<<1)

#define STATUS_RAMP_UP   (1<<0)

#define STATUS_VLIMIT   (1<<2)

#define TPC_R   393.4


Function Documentation

unsigned char enter ( unsigned char  adr,
char *  str,
unsigned char  maxlen 
)

void ramp_hv ( void   ) 

void read_hvi ( void   ) 

unsigned char send ( unsigned char  adr,
char *  str 
)

unsigned char send_byte ( unsigned char  b  ) 

void set_current_limit ( float  value  ) 

void set_hv ( float  value  ) 

void set_voltage_limit ( float  value  ) 

unsigned char user_func ( unsigned char *  data_in,
unsigned char *  data_out 
)

00284 {
00285    /* echo input data */
00286    data_out[0] = data_in[0];
00287    data_out[1] = data_in[1];
00288    return 2;
00289 }

void user_init ( unsigned char  init  ) 

00148 {
00149   char xdata i;
00150   /* Format the SVN and store this code SVN revision into the system */
00151   for (i = 0; i < 4; i++) {
00152     if (svn_rev_code[6 + i] < 48) {
00153       svn_rev_code[6 + i] = '0';
00154     }
00155   }
00156   sys_info.svn_revision = (svn_rev_code[6] - '0') * 1000 +
00157     (svn_rev_code[7] - '0') * 100 +
00158     (svn_rev_code[8] - '0') * 10 +
00159     (svn_rev_code[9] - '0');
00160 
00161 //      P0MDIN = 0xFF;                                          // default 0xFF all digital pins
00162 //      P1MDIN = 0xFF;
00163 //      P2MDIN = 0xFF;
00164 
00165   P0MDOUT = 0x18;                                       // Default OD 485TX, TXD
00166   P1MDOUT = 0x00;                                       // OD
00167   P2MDOUT = 0xFF;                                       // OD
00168 
00169   P0 = 0x03;    // default 0xFF
00170   P1 = 0xFF;
00171   P2 = 0xFF;
00172 
00173   /* set initial state of lines */
00174   GPIB_DATA = 0xFF;
00175   GPIB_EOI = 1;
00176   GPIB_DAV = 1;
00177   GPIB_NRFD = 1;
00178   GPIB_NDAC = 1;
00179   GPIB_IFC = 1;
00180   GPIB_SRQ = 1;
00181   GPIB_ATN = 1;
00182   GPIB_REN = 1;
00183 
00184   BUF_CLE = 0;                  // Enable buffers
00185   BUF_DATAE = 0;
00186 
00187   /* initialize GPIB */
00188   GPIB_IFC = 0;
00189   delay_ms (1);
00190   GPIB_IFC = 1;
00191 
00192   GPIB_ATN = 0;
00193   send_byte (0x14);             // DCL
00194   GPIB_ATN = 1;
00195   
00196   user_data.gpib_adr = GPIB_ADDR_0;
00197   
00198   sprintf (str, "OE2");                         // prohibit overvoltage setting
00199   send (user_data.gpib_adr, str);
00200   sprintf (str, "OC0");                         // hv supply will *not* shutdown if current overload
00201   send (user_data.gpib_adr, str);
00202   sprintf (str, "SE0");                         // enables SRQ in response to overvoltage detection
00203   send (user_data.gpib_adr, str);
00204   sprintf (str, "SC0");                         // enables SRQ in response to overcurrent detection
00205   send (user_data.gpib_adr, str);
00206 
00207   user_data.status = 0;
00208   if (init) {
00209    user_data.ramp_up = 10;
00210    user_data.ramp_down = 10;
00211    user_data.u_limit = MAX_VOLTAGE;
00212    user_data.i_limit = MAX_CURRENT;
00213   }
00214   sprintf (user_data.warning, "current OK");
00215 
00216   set_voltage_limit(user_data.u_limit);
00217   set_current_limit(user_data.i_limit);
00218 
00219   read_hvi();                                // check to see if hv is already on
00220 
00221   if ( user_data.u_meas < 10 )               // bertan hv must be off
00222   {
00223       user_data.u_demand = 0;
00224       u_actual = 0;
00225       set_hv(0);
00226   }
00227   else                                       // bertan hv must already be on
00228   {
00229       user_data.u_demand = user_data.u_meas; // restore to status quo
00230       u_actual = user_data.u_meas;
00231   }
00232 
00233 #ifdef RTC_410
00234 // Init RTC on 410
00235    SmaRTCInit();
00236 #endif
00237 }

void user_loop ( void   ) 

00647 {
00648 
00649   /* set voltage limit if changed */
00650   if (chn_bits & HV_LIMIT_CHANGED) {
00651     set_voltage_limit(user_data.u_limit);
00652     chn_bits &= ~HV_LIMIT_CHANGED;
00653   }
00654 
00655   /* set current limit if changed */
00656   if (chn_bits & CUR_LIMIT_CHANGED) {
00657     set_current_limit(user_data.i_limit);
00658     chn_bits &= ~CUR_LIMIT_CHANGED;
00659   }
00660 
00661   // Read Voltage and Current
00662   read_hvi();
00663 
00664   // Yield to other activities (MSCB)
00665 //  yield();
00666 
00667   // Do ramping if necessary
00668   ramp_hv();
00669 
00670 #ifdef RTC_410
00671   // RTC stuff
00672   ltime = SmaRTCRead();
00673   user_data.mytime = ltime;
00674   ascTime(mydate, ltime);
00675   sprintf(user_data.date, "%s", mydate);
00676 #endif
00677 
00678   // Slow it down
00679   delay_ms (MINDEL);
00680 
00681   // Loop timing
00682   led_blink(0, 1, 50);
00683 }

unsigned char user_read ( unsigned char  index  ) 

00276 {
00277    if (index);
00278    return 0;
00279 }

void user_write ( unsigned char  index  ) 

00387 {
00388   rCSR = user_data.status;
00389   if (index == IDXCTL) {
00390     rCTL = user_data.control;
00391   } // IDXCTL
00392 
00393   //
00394   //-- EE Page function
00395   if (index == IDXEEP_CTL) EEP_CTR_Flag = 1;
00396 }


Variable Documentation

unsigned char idata _n_sub_addr = 1

char xdata * buf

unsigned char idata chn_bits = 0

char date[24]

unsigned char gpib_adr

float i_limit

float i_meas

int Ibypass = 0

unsigned long mytime

char code node_name[] = "BERTANCC"

unsigned int ramp_down

unsigned int ramp_up

unsigned char status

char xdata str[32]

char xdata svn_rev_code[] = "$Rev: 907 $"

SYS_INFO sys_info

unsigned long xdata t_ramp

unsigned char xdata tiwp

float xdata u_actual

float u_demand

float u_limit

float u_meas

struct { ... } user_data

MSCB_INFO_VAR* variables = vars

MSCB_INFO_VAR code vars[]

Initial value:

 {

   1, UNIT_BYTE,            0, 0,           0, "Status",  &user_data.status,      
   4, UNIT_VOLT,            0, 0, MSCBF_FLOAT, "Udemand", &user_data.u_demand,    
   4, UNIT_VOLT,            0, 0, MSCBF_FLOAT, "Umeas",   &user_data.u_meas,      
   4, UNIT_AMPERE, PRFX_MICRO, 0, MSCBF_FLOAT, "Imeas",   &user_data.i_meas,      
   2, UNIT_VOLT,            0, 0,           0, "RampUp",  &user_data.ramp_up,     
   2, UNIT_VOLT,            0, 0,           0, "RampDown",&user_data.ramp_down,   
   4, UNIT_VOLT,            0, 0, MSCBF_FLOAT, "Ulimit",  &user_data.u_limit,     
   4, UNIT_AMPERE, PRFX_MICRO, 0, MSCBF_FLOAT, "Ilimit",  &user_data.i_limit,     
  32, UNIT_STRING,          0, 0,           0, "warning", &user_data.warning,     



   1, UNIT_BYTE,            0, 0, MSCBF_HIDDEN, "GPIB Adr",&user_data.gpib_adr,   



   0
}

char warning[32]


Generated on 10 Jun 2013 for FGDC8051 by  doxygen 1.4.7