#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_VAR * | variables = vars |
| SYS_INFO | sys_info |
| #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 |
| 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 | |||
| ) |
| 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 }
| 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 }
| 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 $" |
| 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 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] |
1.4.7