SYMBOL PWM_SERIAL = c.1
SYMBOL ADC_VAR_WORD = W0
SYMBOL ADC_VAR = B0
SYMBOL ADC_VAR1 =B1
SYMBOL ID_VAR = B2
SYMBOL ID_VAR_1 = B3
SYMBOL PROG_VAR = B4
SYMBOL PROG_VAR_1 = B5
SYMBOL PROG_VAR_WORD = W2
SYMBOL ANALOG_LO = B6
SYMBOL ANALOG_HI = B7
SYMBOL ANALOG_DATA = W3
SYMBOL OUT_BYTE = B8
SYMBOL RANGE_MULTIPLIER = B9
SYMBOL WAVE_ID = B10
SYMBOL REFRESH_STAT = B12
SYMBOL REFRESH_STAT1 = B13
SYMBOL B2ASCII_0XXXX = B18
SYMBOL B2ASCII_X0XXX = B19
SYMBOL B2ASCII_XX0XX = B20
SYMBOL B2ASCII_XXX0X = B21
SYMBOL B2ASCII_XXXX0 = B22
SYMBOL RAW_WORD_0 = W12
SYMBOL RAW_WORD_1 = W13
SYMBOL RAW_WORD_2 = W14
SYMBOL OUT_WORD_0 = W15
SYMBOL OUT_WORD_1 = W16
SYMBOL ADC_YE_RLY = B.5
SYMBOL ADC_GN_RLY = C.4
SYMBOL ADC_YE = 7
SYMBOL ADC_GN = 3
SYMBOL OUT_2_CTRL = C.5 `PASSA A C.6
SYMBOL OUT_3_CTRL = C.2
SYMBOL _5V_SWITCH = B.0
SYMBOL _12V_SWITCH = B.2
SYMBOL V_SEL_RLY = B.4
SYMBOL YE_PIN = C.3
#NO_TABLE
#NO_DATA
SETFREQ M32
HSERSETUP B9600_32, %001 ` = SERIN C.7, T9600_32, (B4,B5) CONFIGURA BACKGROUND SERIAL RECIEVE
PAUSE 16000
`-----------------------------------------------------------------------------------------------------------------------------------------------------------
HSEROUT 0, ("bkcmd=0", $FF, $FF, $FF)
_MAIN:
LOW _5V_SWITCH
LOW _12V_SWITCH
SETINTFLAGS %00100000,%00100000
DO
IF ID_VAR = $A1 THEN GOTO _PWM_GEN
IF ID_VAR = $A2 THEN GOTO _VOLT_METER
IF ID_VAR = $A3 THEN GOTO _MEDIR_CARGA
IF ID_VAR = $A4 THEN GOTO _TESTAR_SIG
IF ID_VAR = $A5 THEN GOTO _TESTAR_RVC
IF ID_VAR = $A6 THEN GOTO _MEDIR_FREQ
LOOP
`---------------------------------------------------------------------------------------------------------------------- MEDIR CARACT PWM----------
_MEDIR_FREQ:
DO
IF ID_VAR = $AA THEN
GOTO _MAIN
ENDIF
COUNT YE_PIN, 8000, ADC_VAR_WORD `THANKS TO PETE
OUT_WORD_0 = ADC_VAR_WORD
HSEROUT 0, ("n2.val=", #OUT_WORD_0, $FF, $FF, $FF)
ADC_VAR_WORD = ADC_VAR_WORD / 10 `HERE I CONVERT Hz IN PERIOD mS
ANALOG_DATA = 10000 / ADC_VAR_WORD
BINTOASCII ANALOG_DATA, B2ASCII_0XXXX, B2ASCII_X0XXX, B2ASCII_XX0XX, B2ASCII_XXX0X, B2ASCII_XXXX0
PULSIN YE_PIN, 1, RAW_WORD_0
PULSIN YE_PIN, 0, RAW_WORD_1
RAW_WORD_2 = RAW_WORD_0 + RAW_WORD_1 / 100 `HERE I CONVERT PULSIN OUTPUT DATA IN PERCENTAGE
OUT_WORD_0 = RAW_WORD_0 / RAW_WORD_2
OUT_WORD_1 = RAW_WORD_1 / RAW_WORD_2
IF ID_VAR = $AA THEN
GOTO _MAIN
ENDIF
GOSUB PRINT_WORD
LOOP
`---------------------------------------------------------------------------------------------------------------------- TESTE CARGA -----
_MEDIR_CARGA:
DO
READADC ADC_YE, ADC_VAR
RANGE_MULTIPLIER = 4
WAVE_ID = 5
GOSUB PRINT_CH0
GOSUB PRINT_WAVE0
IF ADC_VAR > 163 AND ADC_VAR < 189 AND REFRESH_STAT1 = 0 THEN
GOSUB VIS_OK
ENDIF
IF ADC_VAR < 162 OR ADC_VAR > 190 AND REFRESH_STAT1 = 1 THEN
GOSUB VIS_NOK
ENDIF
IF ID_VAR = $AA THEN
GOTO _MAIN
ENDIF
LOOP
`------------------------------------------------------------------------------------------------------------------------------ TESTE SIG ------------------
_TESTAR_SIG:
PROG_VAR_WORD = 125
GOSUB PRINT_FREQ
LOW _5V_SWITCH
HIGH V_SEL_RLY
HIGH _12V_SWITCH
HIGH OUT_2_CTRL
LOW OUT_3_CTRL
DO
READADC ADC_YE, ADC_VAR
RANGE_MULTIPLIER = 4
GOSUB PRINT_CH0
IF ADC_VAR > 163 AND ADC_VAR < 189 AND REFRESH_STAT1 = 0 THEN
GOSUB VIS_OK
ENDIF
IF ADC_VAR < 162 OR ADC_VAR > 190 AND REFRESH_STAT1 = 1 THEN
GOSUB VIS_NOK
ENDIF
IF ID_VAR = $1A OR ID_VAR = $1B OR ID_VAR = $1C OR ID_VAR = $1D OR ID_VAR = $1E AND REFRESH_STAT = 1 THEN
GOSUB PRINT_DUTY
ENDIF
IF ID_VAR = $AA THEN
PROG_VAR_WORD = 0
GOSUB PRINT_DUTY
PAUSE 50
GOSUB PRINT_FREQ
LOW _12V_SWITCH, OUT_2_CTRL, V_SEL_RLY
GOTO _MAIN
ENDIF
LOOP
`------------------------------------------------------------------------------------------------------------------- TESTE RVC -----------------------------
_TESTAR_RVC:
PROG_VAR_WORD = 140
GOSUB PRINT_FREQ
LOW _5V_SWITCH
HIGH V_SEL_RLY
HIGH _12V_SWITCH
HIGH OUT_2_CTRL
LOW OUT_3_CTRL
DO
READADC ADC_YE, ADC_VAR
RANGE_MULTIPLIER = 4
GOSUB PRINT_CH0
IF ADC_VAR > 163 AND ADC_VAR < 189 AND REFRESH_STAT1 = 0 THEN
GOSUB VIS_OK
ENDIF
IF ADC_VAR < 162 OR ADC_VAR > 190 AND REFRESH_STAT1 = 1 THEN
GOSUB VIS_NOK
ENDIF
IF ID_VAR = $19 OR ID_VAR = $1A OR ID_VAR = $1B OR ID_VAR = $1C OR ID_VAR = $1D AND REFRESH_STAT = 1 THEN
GOSUB PRINT_DUTY
ENDIF
IF ID_VAR = $AA THEN
PROG_VAR_WORD = 0
GOSUB PRINT_DUTY
PAUSE 50
GOSUB PRINT_FREQ
LOW _12V_SWITCH, OUT_2_CTRL, V_SEL_RLY
GOTO _MAIN
ENDIF
LOOP
`---------------------------------------------------------------------------------------------------------------- VOLTMETER --------------------------------
_VOLT_METER:
DO
READADC ADC_YE, ADC_VAR
READADC ADC_GN, ADC_VAR1
RANGE_MULTIPLIER = 4
IF ADC_VAR > 254 OR ADC_VAR1 > 254 AND RANGE_MULTIPLIER = 1 THEN
LOW ADC_YE_RLY
LOW ADC_GN_RLY
HSEROUT 0, ("click 36,0", $FF, $FF, $FF)
RANGE_MULTIPLIER = 4
ENDIF
IF ID_VAR = $12 AND PROG_VAR = $01 THEN `5V OUTPUT
LOW _12V_SWITCH
LOW V_SEL_RLY
HIGH _5V_SWITCH
HIGH ADC_YE_RLY
HIGH ADC_GN_RLY
RANGE_MULTIPLIER = 1
ENDIF
IF ID_VAR = $12 AND PROG_VAR = $00 THEN
LOW _5V_SWITCH
LOW ADC_YE_RLY
LOW ADC_GN_RLY
ENDIF
IF ID_VAR = $13 AND PROG_VAR = $01 THEN `12V OUTPUT
LOW _5V_SWITCH
HIGH V_SEL_RLY
HIGH _12V_SWITCH
LOW ADC_YE_RLY
LOW ADC_GN_RLY
RANGE_MULTIPLIER = 4
ENDIF
IF ID_VAR = $13 AND PROG_VAR = $00 THEN
LOW _12V_SWITCH
LOW V_SEL_RLY
ENDIF
WAVE_ID = 6
GOSUB PRINT_CH0
GOSUB PRINT_CH1
GOSUB PRINT_WAVE0
GOSUB PRINT_WAVE1
IF ID_VAR = $AA THEN
LOW _5V_SWITCH
LOW _12V_SWITCH
LOW ADC_YE_RLY
LOW ADC_GN_RLY
LOW V_SEL_RLY
GOTO _MAIN
ENDIF
LOOP
`-------------------------------------------------------------------------------------------------------------------------- PMW ----------------------------
_PWM_GEN:
HIGH _12V_SWITCH, OUT_2_CTRL, V_SEL_RLY
LOW _5V_SWITCH, OUT_3_CTRL
DO
IF ID_VAR = $04 AND PROG_VAR_WORD < 1000 AND REFRESH_STAT = 1 THEN
GOSUB PRINT_FREQ
REFRESH_STAT = 0
ENDIF
IF ID_VAR = $04 AND PROG_VAR_WORD > 999 AND REFRESH_STAT = 1 THEN
BINTOASCII PROG_VAR_WORD, B2ASCII_0XXXX, B2ASCII_X0XXX, B2ASCII_XX0XX, B2ASCII_XXX0X, B2ASCII_XXXX0
SEROUT PWM_SERIAL, T9600_32, ("F", B2ASCII_X0XXX, ".", B2ASCII_XX0XX, B2ASCII_XXX0X)
REFRESH_STAT = 0
ENDIF
IF ID_VAR = $09 AND REFRESH_STAT = 1 THEN
GOSUB PRINT_DUTY
REFRESH_STAT = 0
ENDIF
IF ID_VAR = $AA THEN
PROG_VAR_WORD = 0
GOSUB PRINT_DUTY
PAUSE 50
GOSUB PRINT_FREQ
LOW _12V_SWITCH, OUT_2_CTRL, V_SEL_RLY
GOTO _MAIN
ENDIF
LOOP
`------------------------------------------------------------------------------------------------------------------ SUB-ROTINAS ----------------------------
PRINT_WORD:
HSEROUT 0, ("x0.val=", B2ASCII_0XXXX, B2ASCII_X0XXX, B2ASCII_XX0XX, B2ASCII_XXX0X, B2ASCII_XXXX0, $FF, $FF, $FF)
HSEROUT 0, ("n0.val=", #OUT_WORD_0, $FF, $FF, $FF)
HSEROUT 0, ("n1.val=", #OUT_WORD_1, $FF, $FF, $FF)
RETURN
PRINT_DUTY:
IF REFRESH_STAT = 1 THEN
BINTOASCII PROG_VAR, B2ASCII_0XXXX, B2ASCII_X0XXX, B2ASCII_XX0XX
SEROUT PWM_SERIAL, T9600_32, ("D", B2ASCII_0XXXX, B2ASCII_X0XXX, B2ASCII_XX0XX)
ENDIF
REFRESH_STAT = 0
RETURN
PRINT_FREQ:
BINTOASCII PROG_VAR_WORD, B2ASCII_0XXXX, B2ASCII_X0XXX, B2ASCII_XX0XX, B2ASCII_XXX0X, B2ASCII_XXXX0
SEROUT PWM_SERIAL, T9600_32, ("F", B2ASCII_XX0XX, B2ASCII_XXX0X, B2ASCII_XXXX0)
REFRESH_STAT = 0
RETURN
VIS_OK:
HSEROUT 0, ("vis t4,0", $FF, $FF, $FF)
HSEROUT 0, ("vis t1,1", $FF, $FF, $FF)
REFRESH_STAT1 = 1
RETURN
VIS_NOK:
HSEROUT 0, ("vis t1,0", $FF, $FF, $FF)
HSEROUT 0, ("vis t4,1", $FF, $FF, $FF)
REFRESH_STAT1 = 0
RETURN
PRINT_WAVE0:
HSEROUT 0, ("add " ,#WAVE_ID,",",#0,",",#ADC_VAR, $FF, $FF, $FF) `ROTINA DE ENVIO DE WAVEFORM
RETURN
PRINT_WAVE1:
HSEROUT 0, ("add " ,#WAVE_ID,",",#1,",",#ADC_VAR1, $FF, $FF, $FF)
RETURN
PRINT_CH0:
ANALOG_LO = ADC_VAR `SAME AS READADC
ANALOG_HI = 0
ANALOG_DATA = ANALOG_DATA * 196 / 100
ANALOG_DATA = ANALOG_DATA * RANGE_MULTIPLIER `15V RANGE
OUT_BYTE = ANALOG_DATA // 10 + $30
ANALOG_DATA = ANALOG_DATA / 10
HSEROUT 0, ("n3.val=", OUT_BYTE, $FF, $FF, $FF) `XX.X0
OUT_BYTE = ANALOG_DATA // 10 + $30
ANALOG_DATA = ANALOG_DATA / 10
HSEROUT 0, ("n2.val=", OUT_BYTE, $FF, $FF, $FF) `XX.0X
OUT_BYTE = ANALOG_DATA // 10 + $30
ANALOG_DATA = ANALOG_DATA / 10
HSEROUT 0, ("n1.val=", OUT_BYTE, $FF, $FF, $FF) `X0.XX
OUT_BYTE = ANALOG_DATA + $30
HSEROUT 0, ("n0.val=", OUT_BYTE, $FF, $FF, $FF) `0X.XX
RETURN
PRINT_CH1:
ANALOG_LO = ADC_VAR1 `SAME AS READADC
ANALOG_HI = 0
ANALOG_DATA = ANALOG_DATA * 196 / 100
ANALOG_DATA = ANALOG_DATA * RANGE_MULTIPLIER `15V RANGE
OUT_BYTE = ANALOG_DATA // 10 + $30
ANALOG_DATA = ANALOG_DATA / 10
HSEROUT 0, ("n4.val=", OUT_BYTE, $FF, $FF, $FF) `XX.X0
OUT_BYTE = ANALOG_DATA // 10 + $30
ANALOG_DATA = ANALOG_DATA / 10
HSEROUT 0, ("n5.val=", OUT_BYTE, $FF, $FF, $FF) `XX.0X
OUT_BYTE = ANALOG_DATA // 10 + $30
ANALOG_DATA = ANALOG_DATA / 10
HSEROUT 0, ("n6.val=", OUT_BYTE, $FF, $FF, $FF) `X0.XX
OUT_BYTE = ANALOG_DATA + $30
HSEROUT 0, ("n7.val=", OUT_BYTE, $FF, $FF, $FF) `0X.XX
RETURN
INTERRUPT:
PAUSE 100
GET 0, ID_VAR
GET 1, PROG_VAR
GET 2, PROG_VAR_1
HSERINFLAG = 0
HSERPTR = 0
PTR = 0
SETINTFLAGS %00100000,%00100000
REFRESH_STAT = 1
RETURN