rem SimpleSetup.bas rem rem last revision 2004 June 23 rem rem simple macro for DI50T rem one input only, no scrolling texts in menus rem Interface: rem - PROG for 4 secs: two point calibration of input rem - PROG+UP : adjust brightness rem - PROG+DOWN : adjust setpoint values rem - UP+DOWN : custom menu (Freq/DecimalPoint/ScaleAnalog/ZeroWindow) rem - HOLD pin : set Tare rem - LOCK pin : clear Tare rem - CAPTURE pin : manual zero CONST PROG_TIMEOUT = 30 MEM &CODE_BLANKING = 0 // hide all codes (brightness cannot be hidden) MEM &VIEW_MODE_BLANKING = 0 // we don't need view mode MEM &SETPOINT_BLANKING = 0x007e // change only setpoint values (PROG+DOWN) // (disabled setpoints will not be displayed) ///////////////////////////////////////////////// // calibration and code settings CONST CODE2_60 = 0270 // 60 Hz mains, fast output rate, CH1 gets averaged data CONST CODE2_50 = 0370 // 50 Hz mains, fast output rate, CH1 gets averaged data MEM &CAL = 0031 // dual point calibration for CH1 (PROG for 4 secs) MEM &CODE1 = 0020 // fast update MEM &CODE2 = CODE2_60 MEM &CODE3 [] = [ 0000, 0000, 0000, 0000, 0000, 0000 ] // no other channels or datalogging MEM &CODE9 = 0065 // Set/Clear Tare with HOLD/LOCK ///////////////////////////////////////////////// // setpoint defaults (only SP1-4 are used) MEM &SP1_DATA_SOURCE [] = [ addr(&CH1), addr(&CH1), addr(&CH1), addr(&CH1), 0, 0 ] MEM &Setpoint1_Text = "Hi 1 " MEM &Setpoint2_Text = "Lo 1 " MEM &Setpoint3_Text = "Hi 2 " MEM &Setpoint4_Text = "Lo 2 " MEM &SETPOINT1 [] = [ 1000, -2000, 3000, -4000, 5000, 6000 ] // setpoint values MEM &SP1_CONTROL [] = [ 0, 0100, 0, 0100, 0, 0 ] // energize above/below/above/below MEM &SP1_HYST [] = [ 0, 0, 0, 0, 0, 0 ] // no hysteresis/PID MEM &SP1_DELAY_TYPE [] = [ 0, 0, 0, 0, 0, 0 ] // disable all setpoint timers/delays MEM &SP1_TRIGGER [] = [ 0, 0, 0, 0, 0, 0 ] // disable all setpoint triggers ///////////////////////////////////////////////// // analog output MEM &DATA_SOURCE_ANALOG1 = addr(&CH1) MEM &D2A_AOP1_ZERO = 0 // output low end calibration if source equals ZERO MEM &D2A_AOP1_FULL_SCALE = 99999 // output high end calibration if source equals FULL_SCALE ///////////////////////////////////////////////// // manual zero MEM &AZ_CAPTURE_BAND_CH1 = 255 // manual zero with CAPTURE pin MEM &AZ_APERTURE_BAND_CH1 = 200 // maximum zero offset ///////////////////////////////////////////////// // text arrays for menus DIM SkipEnter[] = [ "Skip", "Enter" ] CONST SKIP = 0 CONST ENTER = 1 DIM MainsFrequency[] = [ "60 Hz", "50 Hz" ] CONST MAINS_60 = 0 CONST MAINS_50 = 1 MEM &DISPLAY_FORMAT_CH1 = 0 // no decimal point as default DIM Decimal[] = [ "No Dp", " .1", " .12", " .123", " .1234" ] DIM Point[] = [ 0, 6, 5, 4, 3 ] ///////////////////////////////////////////////// // edit menu modes CONST eENTER_SETUP = 1 CONST eMAINS_FREQUENCY = 2 CONST eDECIMAL_POINT = 3 CONST eSCALE_ANALOG_OUTPUT = 4 CONST eANALOG_ZERO = 5 CONST eANALOG_FULL_SCALE = 6 CONST eZERO_WINDOW = 7 // triggered by PROG+UP+DOWN //////////////////////////////////////////////////////////////////////////////// CUSTOMER_ID_MACRO: //////////////////////////////////////////////////////////////////////////////// write " Simple Setup " END //////////////////////////////////////////////////////////////////////////////// RESET_MACRO: //////////////////////////////////////////////////////////////////////////////// #TEMP = 0 END //////////////////////////////////////////////////////////////////////////////// MAIN_MACRO: //////////////////////////////////////////////////////////////////////////////// // currently in standard display mode if &STATE = 0 and &EDIT_STATE = 0 then // only UP+DOWN pressed (PROG+UP+DOWN triggers Customer_ID_Macro) if |PROG_BUTTON = off and |UP_BUTTON = on and |DOWN_BUTTON = on then EDIT SKIP &EDIT_MIN = SKIP &EDIT_MAX = ENTER EDIT_TEXT SkipEnter[] write "Setup" &STATE = eENTER_SETUP endif endif END //////////////////////////////////////////////////////////////////////////////// EDIT_MACRO: //////////////////////////////////////////////////////////////////////////////// select &STATE case eENTER_SETUP: EXIT_EDIT if &EDIT_VALUE = ENTER then #TEMP = (&CODE2 and 0x00000040) / 0x40 // get bit 6 of CODE2 EDIT #TEMP &EDIT_MIN = MAINS_60 &EDIT_MAX = MAINS_50 EDIT_TEXT MainsFrequency[] &STATE = eMAINS_FREQUENCY write "FREQ " endif case eMAINS_FREQUENCY: EXIT_EDIT if &EDIT_VALUE = MAINS_60 then |NON_VOLATILE_WRITE = on &CODE2 = CODE2_60 else |NON_VOLATILE_WRITE = on &CODE2 = CODE2_50 endif #TEMP = 7 - &DISPLAY_FORMAT_CH1 // decimal display, no rounding => #TEMP > 0 if #TEMP > 4 then // invalid options or no decimal point #TEMP = 0 endif EDIT #TEMP &EDIT_MIN = 0 &EDIT_MAX = 4 &EDIT_DEF = 2 EDIT_TEXT Decimal[] &STATE = eDECIMAL_POINT write "DP " case eDECIMAL_POINT: EXIT_EDIT |NON_VOLATILE_WRITE = on &DISPLAY_FORMAT_CH1 = Point[&EDIT_VALUE] EDIT SKIP &EDIT_MIN = SKIP &EDIT_MAX = ENTER EDIT_TEXT SkipEnter[] &STATE = eSCALE_ANALOG_OUTPUT write "Sca_A" case eSCALE_ANALOG_OUTPUT: EXIT_EDIT if &EDIT_VALUE = ENTER then EDIT &D2A_AOP1_ZERO // 32bit signed, setup restricted by display width &EDIT_MIN = -19999 &EDIT_MAX = 99999 &EDIT_DEF = 0 &STATE= eANALOG_ZERO write "A_ZER" else goto edit_zero_window endif case eANALOG_ZERO: |NON_VOLATILE_WRITE = on EXIT_EDIT &D2A_AOP1_ZERO EDIT &D2A_AOP1_FULL_SCALE // 32bit signed, setup restricted by display width &EDIT_MIN = -19999 &EDIT_MAX = 99999 &EDIT_DEF = 99999 &STATE= eANALOG_FULL_SCALE write "A_FSC" case eANALOG_FULL_SCALE: |NON_VOLATILE_WRITE = on EXIT_EDIT &D2A_AOP1_FULL_SCALE edit_zero_window: EDIT &AZ_APERTURE_BAND_CH1 // 16bit unsigned &EDIT_MIN = 0 &EDIT_MAX = 65535 &EDIT_DEF = 200 &STATE = eZERO_WINDOW write "ZERO " case eZERO_WINDOW: |NON_VOLATILE_WRITE = on EXIT_EDIT &AZ_APERTURE_BAND_CH1 endsel END