From 151ab50fa2b0e38ef249ee07b37b7811548da8b0 Mon Sep 17 00:00:00 2001 From: David Fainitski Date: Thu, 14 Jan 2021 18:16:26 -0800 Subject: [PATCH] Add files via upload --- .../1938_EXT_board_sources_V_3.2/1938.cfgsch | 78 + .../atu_100_fw_00.cfg | 15 + .../atu_100_fw_00.ihex | 34 + .../atu_100_fw_00.log | 15 + .../atu_100_fw_00.mcppi | 69 + .../atu_100_fw_00.mcppi_callertable.txt | 4156 ++++++++++++++++ .../atu_100_fw_00_callertable.txt | 4337 +++++++++++++++++ .../atu_100_fw_EXT_32.hex | 2087 ++++++++ .../1938_EXT_board_sources_V_3.2/backup.c | 2 + .../1938_EXT_board_sources_V_3.2/backup.c.ini | 9 + .../1938_EXT_board_sources_V_3.2/backup.mcl | Bin 0 -> 931 bytes .../1938_EXT_board_sources_V_3.2/font5x8.h | 100 + .../font5x8.h.ini | 9 + .../1938_EXT_board_sources_V_3.2/main.c | 905 ++++ .../1938_EXT_board_sources_V_3.2/main.c.ini | 9 + .../1938_EXT_board_sources_V_3.2/main.h | 424 ++ .../1938_EXT_board_sources_V_3.2/main.h.ini | 9 + .../1938_EXT_board_sources_V_3.2/main.ini | 9 + .../1938_EXT_board_sources_V_3.2/main.mcl | Bin 0 -> 266691 bytes .../1938_EXT_board_sources_V_3.2/main_main.h | 521 ++ .../oled_control.c | 407 ++ .../oled_control.c.ini | 9 + .../oled_control.h | 30 + .../oled_control.h.ini | 9 + .../oled_control.mcl | Bin 0 -> 48659 bytes .../1938_EXT_board_sources_V_3.2/pic_init.c | 48 + .../pic_init.c.ini | 9 + .../1938_EXT_board_sources_V_3.2/pic_init.h | 27 + .../pic_init.h.ini | 9 + .../1938_EXT_board_sources_V_3.2/pic_init.mcl | Bin 0 -> 3445 bytes 30 files changed, 13336 insertions(+) create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/1938.cfgsch create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.cfg create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.ihex create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.log create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.mcppi create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.mcppi_callertable.txt create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00_callertable.txt create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_EXT_32.hex create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/backup.c create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/backup.c.ini create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/backup.mcl create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/font5x8.h create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/font5x8.h.ini create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.c create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.c.ini create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.h create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.h.ini create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.ini create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.mcl create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main_main.h create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.c create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.c.ini create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.h create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.h.ini create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.mcl create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.c create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.c.ini create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.h create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.h.ini create mode 100644 ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.mcl diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/1938.cfgsch b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/1938.cfgsch new file mode 100644 index 0000000..68e6520 --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/1938.cfgsch @@ -0,0 +1,78 @@ + + + + P16F1938 + 16 + + 17 + + Oscillator Selection + INTOSC oscillator: I/O function on CLKIN pin + + + Watchdog Timer Enable + Enabled + + + Power-up Timer Enable + Enabled + + + MCLR Pin Function Select + Enabled + + + Flash Program Memory Code Protection + Disabled + + + Data Memory Code Protection + Disabled + + + Brown-out Reset Enable + Enabled + + + Clock Out Enable + Disabled + + + Internal/External Switchover + Enabled + + + Fail-Safe Clock Monitor Enable + Enabled + + + Flash Memory Self-Write Protection + Disabled + + + Voltage Regulator Capacitor Enable + Disabled + + + PLL Enable + Disabled + + + Stack Overflow/Underflow Reset Enable + Enabled + + + Brown-out Reset Voltage Selection + Brown-out Reset Voltage (Vbor), high trip point selected. + + + In-Circuit Debugger Mode + Disabled + + + Low-Voltage Programming Enable + Disabled + + + + diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.cfg b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.cfg new file mode 100644 index 0000000..1662ebf --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.cfg @@ -0,0 +1,15 @@ + + + + P16F1938 + + 2 + + $008007:$3FC4 + + + $008008:$1233 + + + + diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.ihex b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.ihex new file mode 100644 index 0000000..8b06b36 --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.ihex @@ -0,0 +1,34 @@ +:020000040001F9 +:10E000004E00010000001500130005000000010093 +:10E0100002000000070000000700000001000000EF +:10E020000000500001001000020020000400500019 +:10E03000100000002200000045000000FF00FF006B +:10E040000000100000002200000047000100000056 +:10E05000020020000400700010000000FF00FF001C +:10E06000000010000000010000000000FF00FF00A1 +:10E07000FF00FF00FF00FF00FF00FF00FF00FF00A8 +:10E08000FF00FF00FF00FF00FF00FF00FF00FF0098 +:10E09000FF00FF00FF00FF00FF00FF00FF00FF0088 +:10E0A000FF00FF00FF00FF00FF00FF00FF00FF0078 +:10E0B000FF00FF00FF00FF00FF00FF00FF00FF0068 +:10E0C000FF00FF00FF00FF00FF00FF00FF00FF0058 +:10E0D000FF00FF00FF00FF00FF00FF00FF00FF0048 +:10E0E000FF00FF00FF00FF00FF00FF00FF00FF0038 +:10E0F000FF00FF00FF00FF00FF00FF00FF00FF0028 +:10E10000FF00FF00FF00FF00FF00FF00FF00FF0017 +:10E11000FF00FF00FF00FF00FF00FF00FF00FF0007 +:10E12000FF00FF00FF00FF00FF00FF00FF00FF00F7 +:10E13000FF00FF00FF00FF00FF00FF00FF00FF00E7 +:10E14000FF00FF00FF00FF00FF00FF00FF00FF00D7 +:10E15000FF00FF00FF00FF00FF00FF00FF00FF00C7 +:10E16000FF00FF00FF00FF00FF00FF00FF00FF00B7 +:10E17000FF00FF00FF00FF00FF00FF00FF00FF00A7 +:10E18000FF00FF00FF00FF00FF00FF00FF00FF0097 +:10E19000FF00FF00FF00FF00FF00FF00FF00FF0087 +:10E1A000FF00FF00FF00FF00FF00FF00FF00FF0077 +:10E1B000FF00FF00FF00FF00FF00FF00FF00FF0067 +:10E1C000FF00FF00FF00FF00FF00FF00FF00FF0057 +:10E1D000FF00FF00FF00FF00FF00FF00FF00FF0047 +:10E1E000FF00FF00FF00FF00FF00FF00FF00FF0037 +:10E1F000FF00FF00FF000000000001000000000021 +:00000001FF diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.log b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.log new file mode 100644 index 0000000..2d2e550 --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.log @@ -0,0 +1,15 @@ +0 1 mikroCPIC1618.exe -MSF -DBG -pP16F1938 -DL -O11111114 -fo16 -EH"D:\Projects\ATU-100\fw_EXT_3.2\1938_EXT_board_sources_V_3.2\atu_100_fw_00.ihex" -N"D:\Projects\ATU-100\fw_EXT_3.2\1938_EXT_board_sources_V_3.2\atu_100_fw_00.mcppi" -SP"C:\Users\ROLIN\Documents\Mikroelektronika\mikroC PRO for PIC\Defs\" -SP"C:\Users\ROLIN\Documents\Mikroelektronika\mikroC PRO for PIC\Uses\P16_Enh\" -SP"D:\Projects\ATU-100\fw_EXT_3.2\1938_EXT_board_sources_V_3.2\" -IP"C:\Users\ROLIN\Documents\Mikroelektronika\mikroC PRO for PIC\Uses\P16_Enh\" "pic_init.c" "oled_control.c" "main.c" "__Lib_Math.mcl" "__Lib_MathDouble.mcl" "__Lib_System.mcl" "__Lib_Delays.mcl" "__Lib_Conversions.mcl" "__Lib_Button.mcl" "__Lib_ADC.mcl" "__Lib_EEPROM.mcl" +hint: 0 1139 Available RAM: 1016 [bytes], Available ROM: 16384 [bytes] +diagnostics: 0 122 Compilation Started pic_init.c +diagnostics: 48 123 Compiled Successfully pic_init.c +diagnostics: 0 122 Compilation Started oled_control.h +diagnostics: 407 123 Compiled Successfully oled_control.c +diagnostics: 0 122 Compilation Started oled_control.h +diagnostics: 903 123 Compiled Successfully main.c +diagnostics: 0 127 All files Compiled in 171 ms +hint: 0 1144 Used RAM (bytes): 860 (85%) Free RAM (bytes): 156 (15%) Used RAM (bytes): 860 (85%) Free RAM (bytes): 156 (15%) +hint: 0 1144 Used ROM (program words): 15269 (93%) Free ROM (program words): 1115 (7%) Used ROM (program words): 15269 (93%) Free ROM (program words): 1115 (7%) +diagnostics: 0 125 Project Linked Successfully atu_100_fw_00.mcppi +diagnostics: 0 128 Linked in 110 ms +diagnostics: 0 129 Project 'atu_100_fw_00.mcppi' completed: 297 ms +diagnostics: 0 103 Finished successfully: 05 Jan 2021, 14:13:28 atu_100_fw_00.mcppi diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.mcppi b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.mcppi new file mode 100644 index 0000000..713549a --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.mcppi @@ -0,0 +1,69 @@ +[DEVICE] +Name=P16F1938 +Clock=16000000 +[MEMORY_MODEL] +Value=0 +[BUILD_TYPE] +Value=0 +[ACTIVE_TAB] +Value=main.c +[USE_EEPROM] +Value=1 +[EEPROM_DEFINITION] +Value= +[USE_HEAP] +Value=0 +[HEAP_SIZE] +Value=2000 +[FILES] +File0=pic_init.c +File1=oled_control.c +File2=main.c +Count=3 +[BINARIES] +Count=0 +[IMAGES] +Count=0 +ActiveImageIndex=-1 +[OPENED_FILES] +File0=main.h +File1=oled_control.c +File2=oled_control.h +File3=main.c +File4=pic_init.c +File5=pic_init.h +Count=6 +[EEPROM] +File0=atu_100_fw_00.ihex +Count=1 +[ACTIVE_COMMENTS_FILES] +Count=0 +[OTHER_FILES] +Count=0 +[SEARCH_PATH] +Count=0 +[HEADER_PATH] +Count=0 +[HEADERS] +File0=main.h +File1=oled_control.h +File2=pic_init.h +Count=3 +[PLDS] +Count=0 +[Useses] +File0=ADC +File1=Conversions +File2=Button +File3=EEPROM +Count=4 +[EXPANDED_NODES] +Count=0 +[LIB_EXPANDED_NODES] +0=mikroE Libraries +1=System Libraries +30=Conversions +57=C_Math +126=EEPROM +162=FLASH +Count=6 diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.mcppi_callertable.txt b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.mcppi_callertable.txt new file mode 100644 index 0000000..204cc87 --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00.mcppi_callertable.txt @@ -0,0 +1,4156 @@ +main + __CC2DW + pic_init + ADC_Init + cells_init + EEPROM_Read + Bcd2Dec + Mul_8X8_U + Mul_8X8_U + Soft_I2C_Init + EEPROM_Read + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + led_init + EEPROM_Read + oled_init + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_addressing + Soft_I2C_Start + Soft_I2C_Write + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_cap + VDelay_ms + Mul_32x32_U + set_ind + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Read + lcd_prep + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + Test_init + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_prep + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + button_proc + Button + Delay_500us + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + btn_push + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + tune + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + sub_tune + coarse_tune + Div_16x16_S + Div_16x16_S_L + Mul_8X8_U + set_ind + VDelay_ms + Mul_32x32_U + coarse_cap + set_cap + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + Div_16x16_S + Div_16x16_S_L + Mul_8X8_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_cap + VDelay_ms + Mul_32x32_U + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + sharp_ind + Mul_8X8_U + set_ind + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + sharp_cap + Mul_8X8_U + set_cap + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_sw + VDelay_ms + Mul_32x32_U + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + sharp_ind + Mul_8X8_U + set_ind + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + sharp_cap + Mul_8X8_U + set_cap + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + EEPROM_Write + Div_16x16_S + Div_16x16_S_L + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + EEPROM_Write + button_proc_test + Button + Delay_500us + set_sw + VDelay_ms + Mul_32x32_U + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + dysp_off + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00_callertable.txt b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00_callertable.txt new file mode 100644 index 0000000..70a99e7 --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_00_callertable.txt @@ -0,0 +1,4337 @@ +main + __CC2DW + pic_init + ADC_Init + cells_init + EEPROM_Read + Bcd2Dec + Mul_8X8_U + Mul_8X8_U + Soft_I2C_Init + EEPROM_Read + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + led_init + EEPROM_Read + oled_init + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_addressing + Soft_I2C_Start + Soft_I2C_Write + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_cap + VDelay_ms + Mul_32x32_U + set_ind + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + Button + Delay_500us + EEPROM_Read + Bcd2Dec + Mul_8X8_U + show_loss + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + Dec2Bcd + Div_8X8_U + EEPROM_Write + lcd_prep + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + Test_init + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_prep + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + Div_16x16_S + Div_16x16_S_L + Mul_16X16_U + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + button_proc + Button + Delay_500us + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + Div_16x16_S + Div_16x16_S_L + Mul_16X16_U + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + btn_push + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + tune + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + Div_16x16_S + Div_16x16_S_L + Mul_16X16_U + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + sub_tune + coarse_tune + Div_16x16_S + Div_16x16_S_L + Mul_8X8_U + set_ind + VDelay_ms + Mul_32x32_U + coarse_cap + set_cap + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + Div_16x16_S + Div_16x16_S_L + Mul_16X16_U + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + Div_16x16_S + Div_16x16_S_L + Mul_8X8_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + Div_16x16_S + Div_16x16_S_L + Mul_16X16_U + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_cap + VDelay_ms + Mul_32x32_U + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + Div_16x16_S + Div_16x16_S_L + Mul_16X16_U + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + sharp_ind + Mul_8X8_U + set_ind + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + Div_16x16_S + Div_16x16_S_L + Mul_16X16_U + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + sharp_cap + Mul_8X8_U + set_cap + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + Div_16x16_S + Div_16x16_S_L + Mul_16X16_U + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_sw + VDelay_ms + Mul_32x32_U + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + sharp_ind + Mul_8X8_U + set_ind + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + Div_16x16_S + Div_16x16_S_L + Mul_16X16_U + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + sharp_cap + Mul_8X8_U + set_cap + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + Div_16x16_S + Div_16x16_S_L + Mul_16X16_U + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + EEPROM_Write + Div_16x16_S + Div_16x16_S_L + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + Div_16x16_S + Div_16x16_S_L + Mul_16X16_U + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + Div_16x16_S + Div_16x16_S_L + Mul_16X16_U + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + EEPROM_Write + button_proc_test + Button + Delay_500us + set_sw + VDelay_ms + Mul_32x32_U + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + longint2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + Div_16x16_S + Div_16x16_S_L + Mul_16X16_U + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + dysp_off + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_EXT_32.hex b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_EXT_32.hex new file mode 100644 index 0000000..26ca9d0 --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/atu_100_fw_EXT_32.hex @@ -0,0 +1,2087 @@ +:04000000B031432BAD +:1000060029003E08003A03193D28F1017108073C12 +:10001600031C2A282A00DC1B132821008D1315280F +:1000260021008D170630FD00FD0B172800000D1767 +:100036000630FD00FD0B1D2800000D130630FD00E7 +:10004600FD0B232800002A00DC35F10A09282100CF +:100056008D170630FD00FD0B2E2800000D1706300B +:10006600FD00FD0B342800000D130630FD00FD0BCE +:060076003A28000008001A +:10007C0029003E08003A03195C2821000D170630B0 +:10008C00FD00FD0B472800008D170630FD00FD0B11 +:10009C004D2800008D130630FD00FD0B5328000089 +:0E00AC000D130630FD00FD0B59280000080062 +:1000BA00290039082A005807DB003E2029003708A2 +:1000CA002A00DC0003202A00DC0103202A0057084A +:1000DA00B03EDC0003202A005B080F3C031C792891 +:1000EA005B08D900DA018A285B08F200F236F23698 +:1000FA00F236F2367208DA007208F000F035F0359E +:10010A00F035F03570085B02D9005908DC0003208D +:10011A002A005A08103EDC0003203E202900370836 +:10012A002A00DC00032040302A00DC0003200800FB +:10013A002000F801F9011030FC00710DF80DF90DDD +:10014A007408F8027508031C750FF9020318B4281D +:10015A007408F80775080318750FF9070310F00DEE +:08016A00F10DFC0BA2280800B6 +:1001720020007008F100F0010830FC007108F40C56 +:100182000318C728FC0BC028F10100340310CC2847 +:10019200F40C0318F107F10CF00CFC0BC928080051 +:1001A20029003E08003A0319E92821008D13063080 +:1001B200FD00FD0BDA2800000D170630FD00FD0BD7 +:1001C200E02800008D170630FD00FD0BE628000038 +:0201D200080023 +:0801D400FA1FF21300300800CD +:1001DC00FB14FB1FF828FF30F300F200F100F000D5 +:0801EC00FA0DF20CFF300800CF +:1001F4003E20290037082A00DC00032040302A0072 +:10020400DC0003202A004E08D7004D08D8005D20EA +:100214002A00D201510852020318C02952084F077C +:1002240084000030503D85000008003A031D1C295D +:10023400D401252952084F0784000030503D850021 +:1002440020300002D400D3015308043C031CB82915 +:100254005408F0000530F400B9202A005308F007D0 +:100264000030F13D003070078400B830713D8500E6 +:100274000008D5004E08023A013003190030F1009D +:100284004E08043A013003190030F0007008F105FB +:100294004E08063A013003190030F0007108F005E9 +:1002A40003197D29D5195829D6135929D617D519D3 +:1002B4005D2956135E29561755196229D6126329EA +:1002C400D61655196729561268295616D5186C2959 +:1002D400D6116D29D615D5187129561172295615BE +:1002E40055187629D6107729D61455187B29561017 +:1002F4007C2956149D2955198129D6138229D6178C +:1003040055198629561387295617D5188B29D612BD +:100314008C29D616D5189029561291295616551897 +:100324009529D6119629D61555189A2956119B291F +:100334005615D61056105608DC00032029003E0836 +:10034400043A0130031D0030F1003E08053A013043 +:10035400031D0030F0007108F0040319B5292A00C8 +:100364005608DC0003202A00D30A2629DC010320D6 +:100374002A00DC0103202A00D20A0C294E0AD700E5 +:100384004D08D8005D202A00D201510852020318FA +:10039400832A52084F0784000030503D850000082E +:1003A400003A031DD729D401E02952084F078400DD +:1003B4000030503D850020300002D400D3015308A2 +:1003C400043C031C7B2A5408F0000530F400B920D7 +:1003D4002A005308F0070030F13D00307007840014 +:1003E400B830713D85000008D5004E08023A01304E +:1003F40003190030F1004E08043A013003190030AB +:10040400F0007008F1054E08063A01300319003077 +:10041400F0007108F0050319382AD51B132AD613E6 +:10042400142AD617D51B182A5613192A5617551BE2 +:100434001D2AD6121E2AD616551B222A5612232AE4 +:100444005616D51A272AD611282AD615D51A2C2A93 +:1004540056112D2A5615551A312AD610322AD61479 +:10046400551A362A5610372A5614602A551B3C2A28 +:10047400D6133D2AD617551B412A5613422A56171E +:10048400D51A462AD612472AD616D51A4B2A5612F8 +:100494004C2A5616551A502AD611512AD615551AD1 +:1004A400552A5611562A5615D5195A2AD6105B2A9A +:1004B400D614D5195F2A5610602A56145608DC0043 +:1004C400032029003E08043A0130031D0030F100E6 +:1004D4003E08053A0130031D0030F0007108F004B5 +:1004E4000319782A2A005608DC0003202A00D30ABC +:1004F400E129DC0103202A00DC0103202A00D20ABE +:06050400C729D120080008 +:10050A002A00CE012900BF010130B8002A004D0897 +:10051A00CE00CE35CE35CE35CE3529004108031969 +:10052A00992A08302A00CE07290038080319A02A78 +:10053A0004302A00CE0729003F080319A72A0230EF +:10054A002A00CE07290040080319AD2A2A00CE0A3C +:10055A003E20290037082A00DC0003202A004E0822 +:10056A00DC000320D1200630FC003030FD00FD0BFA +:10057A00BC2AFC0BBC2A000004302A00CE023E2012 +:10058A00290037082A00DC0003202A004E08DC0074 +:10059A000320D1200630FC003030FD00FD0BD32AA9 +:0805AA00FC0BD32A000008003D +:0E05B200F201F101F001F801F3010030080040 +:1005C0007B15FB1FEA2A0130F300F201F101F00173 +:0805D000FA0DF20CFF300800E7 +:1005D8002A00D101053051020318FC2A51084F079F +:1005E80086000030503D870020308100D10AEE2A75 +:1005F80051084F0786000030503D87008101D10324 +:1006080051084F07D2000030503DD3000A30F400A3 +:10061800F5014D08F0004E08F1009D207808F00023 +:100628007908F1003030F0072A0052088600530894 +:100638008700700881000A30F400F5014D08F000C9 +:100648004E08F1009D2070082A00CD007108CE00E8 +:1006580000307106031D322B00307006031D352B48 +:08066800372BD103042B08001D +:0A0670001D30FD00FD0B3A2B0800C1 +:10067A00FB09FA09F909F809F80A0319F90A031929 +:08068A00FA0A0319FB0A08003B +:100692002A00C901CA014308CB004408CC008030BB +:1006A2004406F00080307002031D592B00304302D3 +:1006B2000318672B0130C9000030CA004308003C10 +:1006C200CB004408031C013ECC01CC024B08CD00F8 +:1006D2004C08CE004508CF004608D000EC22063078 +:1006E200C7000030C8004808003C031D7A2B4708A9 +:1006F200003C0318952B4708450786004808463DED +:10070200870001304702F0000030483BF1007008DA +:10071200450784007108463D8500000881000130CC +:10072200C7020030C83B742B450886004608870084 +:100732002030810049084A040319BB2BC701C801B4 +:100742004708450784004808463D85000008203ACE +:10075200031DAF2BC70A0319C80AA12B0130C70218 +:100762000030C83B4708450786004808463D8700D9 +:060772002D30810008009B +:1007780020002230FC00F801F901FA01FB01FC031A +:100788000319F12B0310FB0CFA0CF90CF80CF30C01 +:10079800F20CF10CF00C031CC32BFC030319E32B24 +:1007A8007408F80775080318750FF9077608031811 +:1007B800760FFA0777080318770FFB07C72B74081B +:1007C800F80775080318750FF90776080318760FE8 +:0C07D800FA0777080318770FFB070800EA +:1007E4007408F8027508031C750FF9027608031CD7 +:1007F400760FFA027708031C770FFB02F30D07301C +:10080400FC00730DF80DF90DFA0DFB0D7408731C43 +:10081400192CF8027508031C750FF9027608031CDD +:10082400760FFA027708031C770FFB02262CF807D1 +:1008340075080318750FF90776080318760FFA0779 +:1008440077080318770FFB07F30DFC0B032C720DCD +:10085400F80DF90DFA0DFB0D7408731C3F2CF8020A +:100864007508031C750FF9027608031C760FFA024B +:100874007708031C770FFB024C2CF8077508031844 +:10088400750FF90776080318760FFA077708031827 +:10089400770FFB07F20D0730FC00720DF80DF90D10 +:1008A400FA0DFB0D7408721C652CF8027508031C04 +:1008B400750FF9027608031C760FFA027708031CF9 +:1008C400770FFB02722CF80775080318750FF907E8 +:1008D40076080318760FFA0777080318770FFB07D3 +:1008E400F20DFC0B4F2C710DF80DF90DFA0DFB0DEB +:1008F4007408721C8B2CF8027508031C750FF9021E +:100904007608031C760FFA027708031C770FFB02A4 +:10091400982CF80775080318750FF907760803185B +:10092400760FFA0777080318770FFB07F10D0730E6 +:10093400FC00710DF80DF90DFA0DFB0D7408711C16 +:10094400B12CF8027508031C750FF9027608031C14 +:10095400760FFA027708031C770FFB02BE2CF80708 +:1009640075080318750FF90776080318760FFA0748 +:1009740077080318770FFB07F10DFC0B9B2C700D08 +:10098400F80DF90DFA0DFB0D7408711CD72CF80243 +:100994007508031C750FF9027608031C760FFA021A +:1009A4007708031C770FFB02E42CF807750803187B +:1009B400750FF90776080318760FFA0777080318F6 +:1009C400770FFB07F00D0730FC00700DF80DF90DE3 +:1009D400FA0DFB0D7408701CFD2CF8027508031C3D +:1009E400750FF9027608031C760FFA027708031CC8 +:1009F400770FFB020A2DF80775080318750FF9071E +:100A040076080318760FFA0777080318770FFB07A1 +:100A1400F00DFC0BE72C70181D2D7408F8077508F1 +:100A24000318750FF90776080318760FFA07770885 +:080A34000318770FFB0708000F +:100A3C0029003E08043A0130031D0030F1003E0845 +:100A4C00053A0130031D0030F0007108F004031961 +:100A5C003C2D2A004408CD004308CE004508CF00A9 +:100A6C004608D0004708D100FA20962D29003E08F0 +:100A7C00023A0130031D0030F1003E08033A013008 +:100A8C00031D0030F0007108F0040319622D0730CB +:100A9C00F0002A004408F400B920043070072A0042 +:100AAC00CD004308CE00CE354508CF004608D00017 +:100ABC004708D100FA20962D2900C0012A004308CE +:100ACC00F000F035F0357008083ECD0085222A0084 +:100ADC004408CD00852201302900C0002A00C8013D +:100AEC00470848020318962D480845078400003033 +:100AFC00463D85000008F1007108CD00CD36CD369D +:100B0C00CD36CD3685222A004808450784000030B2 +:100B1C00463D85000008CD0085222A00C80A762DA6 +:020B2C000800BF +:100B2E00833021009D052A004308F000F035F03592 +:100B3E00700821009D0438239D149D1CA72DA42D03 +:100B4E001C08F100F0011B08F0040030F10408004D +:100B5E000330FC009530FD00FD0BB32DFC0BB32DC7 +:020B6E0008007D +:060B7000FB15FF30080038 +:100B76007C18F12DFC18C22D7C19102EBB2DA1015D +:100B86007208031DE22D7108F2007008F100780862 +:100B9600F000F801A1157208031DE22D7108F2009C +:100BA6007008F100F001A11121167208031DE22D53 +:100BB6007108F200F101A11572080319042E21082B +:100BC600F302031D031C082E0310F21BF12DF80D72 +:100BD600F00DF10DF20DF30BE82D082E7B1B701CAA +:100BE6000C2EF81F0C2EF00A0319F10A0319F20A4B +:100BF600031D0C2EF20CF10CF00CF30A0319102E47 +:100C06000C2E0130FC00D922132E0230FC00E0220B +:100C1600132E0430FC00EA20132E0830FC00EE20D0 +:040C260000000800C2 +:100C2A00A1017208031D2A2E7108F2007008F10052 +:100C3A00F001A1157208031D2A2E7108F200F101B4 +:100C4A00A111211672080319382E2108F302031D77 +:100C5A00031C3C2E0310F21B402EF00DF10DF20D79 +:100C6A00F30B302E3C2E0130FC00D922432E0230E9 +:0E0C7A00FC00E022432E0430FC00EA200800BB +:100C88007B14FB1F4F2EF201FA1FFF30F200F10018 +:0A0C9800F000FA0DF20CFF30080026 +:100CA200200072087606A100F801F90173087702A4 +:100CB200031C732E7708FD007308F7007D08F3000C +:100CC2007608FD007208F6007D08F2007508FD0046 +:100CD2007108F5007D08F1007408FD007008F40049 +:100CE2007D08F00077080319EC2E7208FA00F2175B +:100CF200F61777087302F7000319A62E0830770259 +:100D0200031C9C2EF7007408F9007508F40076089D +:100D1200F500F60108307702031C9C2EF7007408D8 +:100D2200F9007508F400F50108307702031C9C2EC7 +:100D32007A08F200EC2E77080319A62E0310F60C9F +:100D4200F50CF40CF90CF70B9F2EA11FB32EF90929 +:100D5200F409F509F609F90A0319F40A0319F50A5F +:100D62000319F60A7908F80774080318740FF007D4 +:100D720075080318750FF10776080318760FF20746 +:100D8200A11BCC2E031CDC2EF20CF10CF00CF80C87 +:100D9200F30FDC2EE82E0318E02EF809F009F10912 +:100DA200F209F80A0319F00A0319F10A0319F20AFF +:100DB2008030FA06E42E0130FC00BB25EE2E023014 +:100DC200FC00BB25EE2E0430FC001526EE2E08306A +:0E0DD200FC00EE20EE2E0030FC0000000800B9 +:100DE0002A00C2013E08F1000130F0007108031929 +:100DF000FC2EF035FF3EF72E7008C1003C08840041 +:100E00003D08850070080005F10071080130031DE0 +:100E10000030F0004008F0060319282F3F08003C7E +:100E20000318162FAF25AF25BF030E2F3C088400F3 +:100E30003D08850041080005F10071080130031DDF +:100E40000030F0004008F0060319282FFF30C200E0 +:060E50004208F00008005A +:100E5600710DF80DF90D7408F8027508031C750F6D +:100E6600F902F00DF10D0F30FC00710DF80DF90DC2 +:100E76007408701C442FF8027508031C750FF902DC +:100E8600492FF80775080318750FF907F00DF10DCE +:100E9600FC0B382F7018552F7408F80775080318BF +:080EA600750FF90700000800B8 +:100EAE002000FB017308031D77080319AD2F72088C +:100EBE007606FA007708F3077E30031C6A2FF302DA +:100ECE000318B02F6D2FF302031CB32F7208F80016 +:100EDE007108FC007008FD00F817F6170310F201F8 +:100EEE00F101F0011830A1007D1C872F7408F00766 +:100EFE0075080318750FF10776080318760FF207B9 +:100F0E00F20CF10CF00CF80CFC0CFD0C0310A10B08 +:100F1E007B2FF21B972FF80DF00DF10DF20DF30351 +:100F2E007B1B701CA92FF81FA92FF00A0319F10AB9 +:100F3E000319F20A031DA92FF20CF10CF00CF30A9F +:100F4E000319B02FFA1FF2130030B52F0130D9223A +:100F5E00B52F0230EE20B52F0430E022000008003D +:100F6E0020007008F8007108F0007208F100730894 +:100F7E00F200F301FB01FC019E30F300FA01F21FB7 +:100F8E00D42FF809F009F109F209F80A0319F00A49 +:100F9E000319F10A0319F20AFA170230FC00BB25F5 +:020FAE00080039 +:100FB00020007008F800FB01FC019E30F300FA01EC +:0E0FC000F201F101F0010230FC00BB25080037 +:100FCE0029006F18ED2F22000E10EF2F22000E14A5 +:100FDE0029004C082A00BC0029004D082A00BD003B +:080FEE0088316F2580310800F5 +:1010000064002800DD01DE0126004A1C0C282800AF +:101010006308DD076408DE3D2600CA1C142828008A +:101020006108DD076208DE3D26004A1D1C282800F5 +:101030005F08DD076008DE3D2600CA1D2428280061 +:101040005908DD075A08DE3D26004A1E2C282800D4 +:101050005708DD075808DE3D2600CA1E3428280040 +:101060005508DD075608DE3D26004A1F3C282800AB +:101070005B08DD075C08DE3D28008030273AF00081 +:1010800080305E067002031D47285D080F3C031880 +:10109000692832305D07F00000305E3DF1007008D5 +:1010A000DD007108DE0070082A00C3007108C4006A +:1010B000AF30C5000430C600803149238831290093 +:1010C0003008A8003108A9002E30AA003208AB0071 +:1010D000962828005D082A00C30028005E082A0020 +:1010E000C400AF30C5000430C600803149238831C8 +:1010F00029003108203A031980283108A8008228E5 +:101100003030A8002E30A9003208203A03198B286D +:101110003208AA008D283030AA003308203A03197B +:1011200094283308AB0096283030AB004E08043AC0 +:101130000130031D0030F1004E08053A0130031D57 +:101140000030F0007108F0040319DC2826004C0878 +:10115000013A031DAF2804302A00BC00B2282A003F +:101160000630BC003C08C3001030C4002830C50065 +:101170000030C6000230C70080311E2588312A00A9 +:101180003C08C3005830C4002530C5000030C600FC +:101190000230C70080311E2588312A003C08C30078 +:1011A0002830C400A830C5000430C6000430C70091 +:1011B00080311E2588315B2929004E08023A013012 +:1011C000031D0030F1004E08033A0130031D0030CA +:1011D000F0007108F0040319222926004C08013A96 +:1011E000031DF5282A00BC01F8282A000130BC00A4 +:1011F0003C08C3000930C4002230C5000030C600DE +:101200000230C70080311E2588312A003C08C30007 +:101210000F30C4004030C5000030C6000230C700A7 +:1012200080311E2588312A003C08C3000B30C400E1 +:10123000A830C5000430C6000430C70080311E2528 +:1012400088315B2929004E08013A031D5B292600DD +:101250004C08013A031D2F292A00BC0132292A001B +:101260000130BC003C08C3000930C4005430C50044 +:101270000030C6000230C70080311E2588312A00A8 +:101280003C08C3000F30C4005230C5000030C60017 +:101290000130C70080311E2588312A003C08C30078 +:1012A0000B30C400A830C5000430C6000430C700AD +:1012B00080311E25883164002800DD01DE01260012 +:1012C000491C672928006908DD076A08DE3D2600F9 +:1012D000C91C6F2928006B08DD076C08DE3D26005D +:1012E000491D7A29290022082800DD072900230842 +:1012F0002800DE3D2600C91D852929002008280078 +:10130000DD07290021082800DE3D2600491E8D2921 +:1013100028006D08DD076E08DE3D2600C91E9529F0 +:1013200028006708DD076808DE3D2600491F9D2963 +:1013300028006508DD076608DE3D28005D082A00F4 +:10134000C30028005E082A00C400AF30C500043086 +:10135000C60080314923883129003108A8003208AD +:10136000A9003308AA003408AB004E08043A013043 +:10137000031D0030F1004E08053A0130031D003016 +:10138000F0007108F0040319FB2926004C08013A0B +:10139000031DCE2906302A00BC00D1292A000430C2 +:1013A000BC003C08C3001030C4004330C50000300E +:1013B000C6000230C70080311E2588312A003C0853 +:1013C000C3005830C4004630C5000030C6000230AB +:1013D000C70080311E2588312A003C08C300283010 +:1013E000C400A830C5000430C6000430C7008031F6 +:1013F0001E2588317A2A29004E08023A0130031D41 +:101400000030F1004E08033A0130031D0030F000B7 +:101410007108F0040319412A26004C08013A031D03 +:10142000152A01302A00BC00172A2A00BC013C08FA +:10143000C3000930C4004F30C5000030C600023080 +:10144000C70080311E2588312A003C08C3000F30B8 +:10145000C4004C30C5000030C6000230C7008031E7 +:101460001E2588312A003C08C3000B30C400A83078 +:10147000C5000430C6000430C70080311E25883105 +:101480007A2A29004E08013A031D7A2A26004C08C0 +:10149000013A031D4F2A01302A00BC00512A2A00BC +:1014A000BC013C08C3000930C4004930C50000300D +:1014B000C6000230C70080311E2588312A003C0852 +:1014C000C3000F30C4006030C5000130C6000130D9 +:1014D000C70080311E2588312A003C08C3000B302C +:1014E000C400A830C5000430C6000430C7008031F5 +:0814F0001E258831640008008C +:1014F8002000FB01FA01F9018030F800F10CF00C32 +:10150800031C8F2A7408F90775080318750FFA0762 +:101518000318FB0A0310F01F972A7408FA077508C6 +:101528000318750FFB07FB0CFA0CF90CF80C031CDD +:10153800822A7B08F3007A08F2007908F10078081B +:04154800F0000800A7 +:10154C002000FB0173080319E22A7208FA00F21753 +:10155C008E30F302F31FE52AF309F30A0830730205 +:10156C00031CC82AF300F10D7208F100F2010830D7 +:10157C007302031CC82AF300F10DF1017308031D5B +:10158C000310D02A73080319D02A0310F20CF10CA3 +:10159C00F30BCB2A7B1B711CDA2A031CDA2AF10A07 +:1015AC000319F20AF21BF12AFA1FF42AF209F109C3 +:1015BC00F10A0319F20AF42AF201F101F42A7B145C +:1015CC00FB1FF72AF201FA1FF72AFF30F200F10095 +:1015DC00FA0DF20CF72A0130FC00F92A0030FC005D +:1015EC00F92AFF30FC00FC080319FF2A803144263D +:0C15FC0088317108F0007208F10008004E +:101608007408003A031D1D2B7508003A031D1D2B95 +:101618007608003A031D1D2B7708003A031D1D2B81 +:10162800FF30F000FF30F1007F30F200FF30F300B0 +:10163800BF2B200077080319AB2B73080319B02BB5 +:10164800720876068039FA00F217F617A1017208B7 +:10165800F8007108FC007008FD007408FD027508A8 +:10166800031C750FFC027608031C760FF802F801BC +:10167800FC01FD01031C472B0310F20CF10CF00CCC +:10168800F80C0130A1007708F302031C512B7E30BF +:101698002107F3070318B52B562B7E302107F307D4 +:1016A800031CBA2B1830FA07FD0DFC0DF80DF00DD0 +:1016B800F10DF20DA10D7408F0027508031C750FE9 +:1016C800F1027608031C760FF202760DA104211CA4 +:1016D8006F2B7D147A2B7408F00775080318750FA3 +:1016E800F10776080318760AF2077D10FA031F300F +:1016F8007A05031D582B7B1B7D1CA12B0310F00DB5 +:10170800F10DF20DA10D7408F0027508031C750F98 +:10171800F1027608031C760FF202760D21040139D6 +:10172800FD070318FC0A0319F80A031DA12BF80C7E +:10173800FC0CFD0CF30A0319B52BFA1FF8137808F3 +:10174800F2007C08F1007D08F0000030BE2B01306B +:101758008031B8258831BE2B02308031D9228831BA +:10176800BE2B04308031EE208831BE2B083080310A +:08177800E022883100000800A6 +:10178000813022009700171BC62BC32B2A00C301F0 +:1017900080319725883170082A00BC007108BD008F +:1017A0008030033AF200803071067202031DDA2B9A +:1017B0007008E83C031CE12B3C08F0003D08F100F8 +:1017C000202C823022009700171BE72BE42B2A00E5 +:1017D000C30180319725883170082A00BC00710848 +:1017E000BD008030033AF200803071067202031DA2 +:1017F000FB2B7008E83C031C042C3C08F0003D085F +:10180000F100F035F10D202C833022009700171BDA +:101810000A2C072C2A00C3018031972588317008D3 +:101820002A00BC007108BD007008F2007108F300C6 +:10183000F235F30DF235F30D7208F0007308F10084 +:0218400008009E +:10184200813022009700171B272C242C01302A00FC +:10185200C30080319725883170082A00BC007108C6 +:10186200BD008030033AF200803071067202031D1F +:101872003C2C7008E83C031C462C2700B3012A00CC +:101882003C08F0003D08F100992C823022009700BC +:10189200171B4C2C492C01302A00C300803197259C +:1018A200883170082A00BC007108BD008030033AFC +:1018B200F200803071067202031D612C7008E83C50 +:1018C200031C6D2C2700B3012A003C08F0003D08E0 +:1018D200F100F035F10D992C833022009700171B8F +:1018E200732C702C01302A00C30080319725883177 +:1018F20070082A00BC007108BD008030033AF20073 +:10190200803071067202031D882C7008E83C0318AF +:101912008E2C01302700B300902C2700B3012A003F +:101922003C08F0003D08F100F035F10DF035F10D05 +:021932000800AB +:101934007408003A031DB32C7508003A031DB32C38 +:101944007608003A031DB32C7708003A031DB32C24 +:10195400FF30F000FF30F100FF30F2007F30F30081 +:101964004F2D2000FC01F71BFC0AFD01FB01FA01CD +:10197400F901F80173087204710470040319482D05 +:1019840073087706A000A01BFD09F71FD42CF409E7 +:10199400F509F609F709F40A0319F50A0319F60A11 +:1019A4000319F70AF31FE12CF009F109F209F3090D +:1019B400F00A0319F10A0319F20A0319F30A730866 +:1019C4007704A000A01B042D8031F2238831FC1B76 +:1019D400212DFD1F482DF009F109F209F309F00A40 +:1019E4000319F10A0319F20A0319F30AF809F909A8 +:1019F400FA09FB09F80A0319F90A0319FA0A03197F +:101A0400FB0A482DF71F1B2DF31B152D7308FB0034 +:101A14007208FA007108F9007008F800F301F20185 +:101A2400F101F001EB2CF301F201F101F001F00AF4 +:101A34000034F309F209F109F009FC17E62CF80A5D +:101A44000319F90A0319FA0A0319FB0A740878023C +:101A5400031DEB2C75087902031DEB2C76087A0222 +:101A6400031DEB2C77087B02031DEB2CFB01FA0111 +:101A7400F901F801F00A0319F10A0319F20A03192A +:101A8400F30AF31FEB2CA0012016FF34A0017C1CE9 +:0C1A94004E2D80313D238831003E0800BB +:101AA00020007008F8007108F000F101F201F30164 +:101AB000FB01FC019630F300FA01F01F652DF809D7 +:101AC000F009F80A0319F00AFA177008F10078080B +:0E1AD000F000F801F20180311526883108007F +:101ADE00A0302A00BE000F30BF00C001C101A030EF +:101AEE00F0000F30F1000030F2000030F3003C083F +:101AFE00F4003D08F500F601F7018031BC23883172 +:101B0E0070082A00BE007108BF007208C00073087A +:101B1E00C10000307302031D9E2D00307202031DA2 +:101B2E009E2D02307102031D9E2DB23070020318DD +:101B3E00A12DD02DB230BE020230BF3B0030C03BD3 +:101B4E00C13B0530F00070080319B32DC136C00C2F +:101B5E00BF0CBE0CFF3EAB2D3E08F0003F08F1005F +:101B6E004008F2004108F3000130BE020030BF3BD6 +:101B7E00C03BC13B70087104720473040319D02D6D +:101B8E000000000000000000000000000000000047 +:041B9E00B32D08005B +:101BA20080313E208831290037082A00DC0080314C +:101BB2000320883180302A00DC0080310320883104 +:101BC2002A003C08DC008031032088318031D1209A +:041BD200883108004E +:101BD6008030F00080302A003D067002031DF52D8E +:101BE6003C08503C031CFA2DF001F101CD2E80304B +:101BF600F00080303D067002031D032E3C08AB3C0E +:101C0600031C0A2EF430BC070030BD3DC92E8030BF +:101C1600013AF00080303D067002031D142E3C0888 +:101C2600483C031C1B2EFE30BC070030BD3DC92EB0 +:101C36008030023AF00080303D067002031D252EEA +:101C46003C08463C031C2C2E1830BC070130BD3D19 +:101C5600C92E8030033AF00080303D067002031D25 +:101C6600362E3C08343C031C3D2E2930BC0701307F +:101C7600BD3DC92E8030043AF00080303D0670022A +:101C8600031D472E3C084C3C031C4E2E3630BC0729 +:101C96000130BD3DC92E8030083AF00080303D0647 +:101CA6007002031D582E3C08853C031C5F2EAE3087 +:101CB600BC070130BD3DC92E80300C3AF0008030A3 +:101CC6003D067002031D692E3C08FA3C031C702E6B +:101CD600E430BC070130BD3DC92E8030123AF00019 +:101CE60080303D067002031D7A2E3C080F3C031C13 +:101CF600812E1230BC070230BD3DC92E8030163A07 +:101D0600F00080303D067002031D8B2E3C08E63C39 +:101D1600031C922E8830BC070230BD3DC92E803090 +:101D26001B3AF00080303D067002031D9C2E3C08D5 +:101D3600EA3C031CA32EE730BC070230BD3DC92E8A +:101D46008030213AF00080303D067002031DAD2E32 +:101D56003C08363C031CB42E2030BC070330BD3D86 +:101D6600C92E8030293AF00080303D067002031DEE +:101D7600BE2E3C08043C031CC52E4830BC0703306D +:101D8600BD3DC92E5C30BC070330BD3D3C08F000AC +:061D96003D08F100080009 +:101D9C002000FA017308031D7A147708031DFA1446 +:101DAC007A080319192F033A0319E42E7A18E12E35 +:101DBC00F61F172F152FF21F152F172F72088039AA +:101DCC00FA00F21376088039F6137A060319F22E0C +:101DDC007A080319152F172F770873020319F92E98 +:101DEC00031C0D2F112F760872020319002F031CF0 +:101DFC000D2F112F750871020319072F031C0D2FBE +:101E0C00112F740870020319192F0318112FFA08D7 +:101E1C000319172F152FFA080319152F172F031451 +:0E1E2C00080003100800031403150800080046 +:101E3A0026005108003A031D5B2F29006F18282F2E +:101E4A0022008D112A2F22008D152900EF18302F1C +:101E5A0022000C11322F22000C1529006F19382F7D +:101E6A0022000D123A2F22000D162900EF19402FD9 +:101E7A0022008C11422F22008C1529006F1A482F3C +:101E8A0022008D124A2F22008D162900EF1A502F98 +:101E9A0022008C12522F22008C1629006F1B582FF9 +:101EAA0022000C125A2F22000C16932F29006F18A9 +:101EBA00612F22008D15632F22008D112900EF1842 +:101ECA00692F22000C156B2F22000C1129006F19A3 +:101EDA00712F22000D16732F22000D122900EF19FF +:101EEA00792F22008C157B2F22008C1129006F1A62 +:101EFA00812F22008D16832F22008D122900EF1ABE +:101F0A00892F22008C168B2F22008C1229006F1B1E +:101F1A00912F22000C16932F22000C1229004C0834 +:101F2A002A00BC0029004D082A00BD006F250800C0 +:101F3A0029003E08013C0318A72FAF302A00BC0035 +:101F4A00D125B92F29003E08013A031DB92F0130C6 +:101F5A00C100C0012A00CD018031852288312A00C2 +:0A1F6A00CD01803185228831080086 +:101F74000D302A00BC000030BD00BE011930BF0086 +:101F8400C0018031F026883170082900EF000D303F +:101F94002A00BC000030BD000130BE001930BF0073 +:101FA400C0018031F026883170082900EF040D301B +:101FB4002A00BC000030BD000230BE001930BF0052 +:101FC400C0018031F026883129006F08F00403191C +:0A1FD400EE2F01302700B9000800CD +:101FDE0097302900BA000530BB004330BC000530F5 +:0E1FEE00BD00F03021009E009D011D14080072 +:102000007408003A031D0D287508003A031D0D28B9 +:10201000FF30F0007F30F10067282000FD01F9015A +:10202000F801710870040319003471087506FA008C +:10203000FA1BFD09FB01F51F2228F409F509F40A32 +:102040000319F50AF11F2928F009F109F00A03190B +:10205000F10A71087504FA00FA1B3E2880312B271B +:1020600090317B185328FD1F0034F009F109F00A64 +:102070000319F10AF809F909F80A0319F90A0034F1 +:10208000F51F4F28F11B4B287108F9007008F80064 +:10209000F101F0013328F101F001F00A0034F109F7 +:1020A000F009FB0A3028F80A0319F90A74087802C3 +:1020B000031D332875087902031D3328F901F8013F +:1020C000F00A0319F10AF11F33280000FF34080059 +:1020D00029006F186E2822008E13702822008E1798 +:1020E0002900EF18762822008E11782822008E15FC +:1020F00029006F197E2822000E13802822000E1757 +:102100002900EF19862822000E11882822000E15BA +:1021100029006F1A8E2822008E12902822008E1617 +:102120002900EF1A962822008E10982822008E147B +:1021300029006F1B9E2822000E12A02822000E16D6 +:1021400029004C082A00BC0029004D082A00BD00C7 +:0821500088316F259031080071 +:1021580000302A00A8000030A9004830AA008530C5 +:10216800AB00640020005A08003A0130031D00301B +:10217800F1006F08013A0130031D0030F0007008CB +:10218800F10580302A002106F00080307002031D1E +:10219800CF280A3020020130031C0030F0007108FB +:1021A800F0050319952926004B08003A031D9129CB +:1021B80029004E08043A0130031D0030F1004E0892 +:1021C800053A0130031D0030F0007108F0040319CE +:1021D8001E2927003608013A031D012904302A0068 +:1021E800C3001030C4005D30C5000030C6000830A0 +:1021F800C70080311E2590310F2904302A00C30002 +:102208001030C400A930C5000030C6000830C7002F +:1022180080311E25903106302A00C3001030C400DA +:10222800A030C5000030C6000830C70080311E2528 +:102238009031912929004E08023A0130031D0030DF +:10224800F1004E08033A0130031D0030F000710818 +:10225800F00403195E2927003608013A031D4229B4 +:102268002A00C3010930C4006630C5000030C6002A +:102278000830C70080311E2590314F292A00C3013C +:102288000930C400D630C5000030C6000830C70089 +:1022980080311E25903101302A00C3000930C40066 +:1022A8004F30C5000130C6000830C70080311E25F8 +:1022B8009031912929004E08013A031D91292700E0 +:1022C8003608013A031D76292A00C3010930C400E3 +:1022D8004730C5000130C6000730C70080311E25D1 +:1022E800903183292A00C3010930C4003F30C5005A +:1022F8000130C6000730C70080311E2590310130FB +:102308002A00C3000930C4005830C5000130C60097 +:102318000730C70080311E25903101302600CB00E0 +:102328009F2926004B08013A031D9D29883100206A +:1023380090312600CB0164002A00210826004E06B1 +:10234800031DA9294D082A00200603198C2D2A00EF +:1023580020082600CD002A0021082600CE002700EC +:102368003608003A031D072A80302A002106F000AB +:1023780080307002031DC22964302002031CE32947 +:1023880005302007F0000030213DF1007008A00062 +:102398007108A1007008C3007108C400AF30C500FF +:1023A8000430C60080314923903129003108A80043 +:1023B8003208A9003308AA005730AB00062A2A00C1 +:1023C8002008C3002108C400AF30C5000430C6008F +:1023D80080314923903129003308203A0319F7291D +:1023E8003308A800F9293030A8002E30A900340895 +:1023F800203A0319022A3408AA00042A3030AA0015 +:102408005730AB003E2A80302A002106F000803089 +:10241800033A7002031D122AE73020020318292A02 +:102428002008C3002108C400AF30C5000430C6002E +:1024380080314923903129003208A8003308A900C7 +:102448003408AA005730AB003E2A2A002008C300EF +:102458002108C400AF30C5000430C60080314923CC +:10246800903129003108A8003208A9003308AA00D1 +:102478003408AB004E08043A0130031D0030F10067 +:102488004E08053A0130031D0030F0007108F004D1 +:1024980003195C2A2A00C3014030C400A830C500D3 +:1024A8000430C6000430C70080311E2590316E2AE2 +:1024B80029004E08003A03196E2A2A00C301043085 +:1024C800C400A830C5000430C6000430C7008031FD +:1024D8001E259031640026004B08013A031D8C2DFF +:1024E8004A08003A0130031D0030F1004908003A5B +:1024F8000130031D0030F0007108F00503198C2A23 +:102508002A0022082900A6002A0023082900A7007B +:1025180029002608F0002708F1008831502590315D +:1025280070082A00B4007108B5007208B600730874 +:10253800B7000030F4000030F5004830F600853070 +:10254800F7003408F0003508F1003608F2003708C3 +:10255800F30088310423903170082A00B000710814 +:10256800B1007208B2007308B3003408F4003508EB +:10257800F5003608F6003708F7000030F0000030A4 +:10258800F1004830F2008530F3008831042390319F +:102598002A003008F4003108F5003208F600330844 +:1025A800F70080315126903170082A00B000710878 +:1025B800B1007208B2007308B30028006F08F00079 +:1025C8008031D82790312A003008F4003108F5000E +:1025D8003208F6003308F700803157279031003071 +:1025E800F4000030F5002030F6008230F700883122 +:1025F800042390311F30F4008530F5006B30F6006D +:102608007B30F7008031572790310030F4000030DC +:10261800F5000030F6007F30F70080315126903108 +:102628007008F4007108F5007208F6007308F700E6 +:102638000030F0000030F1000030F2007F30F3008D +:1026480088310423903170082A00B8007108B90055 +:102658007208BA007308BB003808A8003908A90036 +:102668003A08AA003B08AB002208F0002308F10052 +:1026780088315025903170082A00B4007108B500DF +:102688007208B6007308B7000030F4000030F50097 +:102698004830F6008530F7003408F0003508F100BE +:1026A8003608F2003708F3008831042390310030EF +:1026B800F4000030F5000030F6008030F70080317B +:1026C8005126903170082A00B0007108B1007208D4 +:1026D800B2007308B3003408F4003508F500360872 +:1026E800F6003708F7000030F0000030F1004830FD +:1026F800F2008530F3008831042390312A00300835 +:10270800F4003108F5003208F6003308F70080318C +:10271800512690317008F4007108F5007208F6002F +:102728007308F7000030F0000030F1000030F200CC +:102738008130F30088310423903170082A00AC00FE +:102748007108AD007208AE007308AF000030F400E5 +:102758000030F5000030F6007F30F7003808F00050 +:102768003908F1003A08F2003B08F3008831CE2618 +:1027780090310130031C0030F00070080319CD2B94 +:1027880000302A00A8000030A9000030AA007F30DD +:10279800AB002A000030F4000030F5000030F600ED +:1027A8007F30F7002C08F0002D08F1002E08F20009 +:1027B8002F08F3008831CE2690310130031C0030F9 +:1027C800F00070080319F12B00302A00AC0000302B +:1027D800AD000030AE007F30AF002A002008F000C6 +:1027E8002108F1008831502590312A002808F4008A +:1027F8002908F5002A08F6002B08F700803157272A +:1028080090312A002C08F4002D08F5002E08F60057 +:102818002F08F7008031572790318831A622903150 +:1028280070082A00A4007108A5002808F0002908EB +:10283800F1002A08F2002B08F3002C08F4002D08F8 +:10284800F5002E08F6002F08F70080315727903141 +:102858000030F4000030F5004830F6008530F7000D +:102868008031572790318831A622903170082A008C +:10287800A6007108A70080307106F200803072024D +:10288800031D482C64307002031C4E2C6330A600D4 +:102898000030A70027003608003A031DA22C80301C +:1028A8002A002506F00080307002031D5D2C64307C +:1028B8002402031C7E2C05302407F0000030253D3F +:1028C800F1007008A4007108A5007008C300710821 +:1028D800C400AF30C5000430C600803149239031B0 +:1028E80029003108A8003208A9003308AA00573087 +:1028F800AB00A12C2A002408C3002508C400AF306F +:10290800C5000430C60080314923903129003308BE +:10291800203A0319922C3308A800942C3030A800D0 +:102928002E30A9003408203A03199D2C3408AA0037 +:102938009F2C3030AA005730AB00D92C80302A00A9 +:102948002506F0008030033A7002031DAD2CE730F5 +:1029580024020318C42C2408C3002508C400AF307F +:10296800C5000430C600803149239031290032085F +:10297800A8003308A9003408AA005730AB00D92CA6 +:102988002A002408C3002508C400AF30C50004305D +:10299800C60080314923903129003108A800320847 +:1029A800A9003308AA003408AB004E08043A0130E5 +:1029B800031D0030F1004E08053A0130031D0030B8 +:1029C800F0007108F0040319F82C04302A00C30041 +:1029D8004030C400A830C5000430C6000430C70029 +:1029E80080311E259031292D29004E08023A0130E8 +:1029F800031D0030F1004E08033A0130031D00307A +:102A0800F0007108F0040319172D2A00C3010D30D6 +:102A1800C400A830C5000430C6000430C7008031A7 +:102A28001E259031292D29004E08003A0319292D19 +:102A38002A00C3010C30C400A830C5000430C60009 +:102A48000430C70080311E2590312A002608C300B3 +:102A58002708C400AF30C5000430C60080314923C0 +:102A6800903129003308A8003408A9004E08043A18 +:102A78000130031D0030F1004E08053A0130031DF6 +:102A88000030F0007108F0040319592D06302A00AF +:102A9800C3004C30C400A830C5000430C600023062 +:102AA800C70080311E2590318C2D29004E08023A2E +:102AB8000130031D0030F1004E08033A0130031DB8 +:102AC8000030F0007108F0040319792D01302A0054 +:102AD800C3000E30C400A830C5000430C600023060 +:102AE800C70080311E2590318C2D29004E08013AEF +:102AF800031D8C2D01302A00C3000D30C400A830FE +:102B0800C5000430C6000230C70080311E25903150 +:042B1800640008004D +:102B1C0064002A00210826005006031D982D4F083A +:102B2C002A00200603195B2E2A0020082600CF005D +:102B3C002A0021082600D00000302A002106031D9F +:102B4C00A92D00302006031DEB2D29004E08043A58 +:102B5C000130031D0030F1004E08053A0130031D11 +:102B6C000030F0007108F0040319CB2D02302A005C +:102B7C00C3004030C400E530C5000030C60004304E +:102B8C00C70080311E259031E72D29004E08003AF0 +:102B9C000319DF2D01302A00C3000430C400E030DB +:102BAC00C5000030C6000430C70080311E259031AE +:102BBC00E72D29004E08003A031DE72D22000D17C2 +:102BCC008D172600CF01D0015B2E2A002008C300F0 +:102BDC002108C400AF30C5000430C6008031492341 +:102BEC00903129003208A8002E30A9003308AA0021 +:102BFC003408AB004E08043A0130031D0030F100DC +:102C0C004E08053A0130031D0030F0007108F00445 +:102C1C0003191F2E02302A00C3004030C400A83014 +:102C2C00C5000430C6000430C70080311E25903129 +:102C3C005B2E29004E08003A0319332E01302A006E +:102C4C00C3000430C400A830C5000430C6000430F2 +:102C5C00C70080311E2590315B2E29004E08003AAA +:102C6C00031D5B2E8030F00080302A00210670029C +:102C7C00031D422E2008963C031C482E22000D13E7 +:102C8C008D175B2E8030F00080302A0021067002F8 +:102C9C00031D522E2008FA3C031C582E20000D1345 +:0E2CAC008D135B2E20000D178D1364000800A1 +:102CBA0064008831212490317008A0007108A100B5 +:102CCA000030A11BFF30A200A3008831C02390313D +:102CDA007008A4007108A5000030A51BFF30A600EB +:102CEA00A70028004D08013A031D9C2E2A0020083F +:102CFA00F0002108F1000330F4000030F5008831BB +:102D0A007C22903170082A00BC007108BD0088310D +:102D1A00EB25903188315025903170082A00A8009F +:102D2A007108A9007208AA007308AB00B92E2A001C +:102D3A002008F0002108F1002208F2002308F3001D +:102D4A000330F400F501F601F7018031BC2390311C +:102D5A008031B727903170082A00A8007108A900AD +:102D6A007208AA007308AB0080302706F000803092 +:102D7A0023067002031DCB2E22082602031DCB2E2A +:102D8A0021082502031DCB2E20082402031CD42E61 +:102D9A00E730A0000330A100A201A3011E2F2408DE +:102DAA002007F0002508213DF1002608223DF20007 +:102DBA002708233DF3006430F400F501F601F7011A +:102DCA008031BC2390312A002008F4002108F50044 +:102DDA002208F6002308F7002408F4022508F53B28 +:102DEA002608F63B2708F73B88319A249031700869 +:102DFA002A00A0007108A1007208A2007308A300AB +:102E0A008030F400803073067402031D162F720896 +:102E1A00003C031D162F7108033C031D162F700872 +:102E2A00E73C03181E2FE730A0000330A100A201DF +:102E3A00A30127003408F0008031D82790312A00F6 +:102E4A002808F4002908F5002A08F6002B08F700DC +:102E5A008031572790310030F4000030F5007A3085 +:102E6A00F6008830F70088310423903170082A0070 +:102E7A00A8007108A9007208AA007308AB00F43010 +:102E8A00F400FD30F5003430F6007F30F700883169 +:102E9A000423903170082A00A8007108A90072085A +:102EAA00AA007308AB0027003608013A031D862FD3 +:102EBA002A002808F0002908F1002A08F2002B0845 +:102ECA00F3002808F4002908F5002A08F6002B0860 +:102EDA00F7008031572790310030F4000030F500B8 +:102EEA004830F6008430F7008831042390317008A6 +:102EFA002A00A8007108A9007208AA007308AB008A +:102F0A00AE2F2A002808F0002908F1002A08F2004A +:102F1A002B08F3002808F4002908F5002A08F6000F +:102F2A002B08F7008031572790310030F400003029 +:102F3A00F5002030F6008130F70088310423903103 +:102F4A0070082A00A8007108A9007208AA0073086C +:102F5A00AB002808F0002908F1002A08F2002B0823 +:102F6A00F3000030F4000030F5000030F6007E3047 +:102F7A00F70080315126903170082A00A8007108A4 +:102F8A00A9007208AA007308AB008831A622903102 +:102F9A0070082900CA007108CB0080302A00230675 +:102FAA00F00080307002031DE42F00302202031D5E +:102FBA00E42F00302102031DE42F6430200203189D +:102FCA00EC2FE7302900C8000330C900F42F2A008B +:102FDA0020082900C8002A0021082900C900080081 +:102FEA002900540823009100920195131513151412 +:062FFA001308F0000800BE +:103000002900ED01EE0164304F02E8000030503B32 +:10301000E900CA01CB01640026006D08003A0130C6 +:10302000031D0030F10027003208013A0130031D72 +:103030000030F0007108F0050319622890315D2618 +:10304000983180304B06F00080307002031D2A2832 +:103050000A304A02031C612826004A082900EF00B2 +:1030600088311D279831260049082900EF0090314A +:103070006820983126004C082900EF008031E727AE +:10308000983101302600ED0088319D2798312700C6 +:103090004408F0008031D827983127005708F40001 +:1030A0005808F5005908F6005A08F70080315727EC +:1030B00098318831A622983170082600EE007108F8 +:1030C000EF00062C78302900EA00E7016A08670261 +:1030D0000318BF2820008D186F28761470287610EA +:1030E0000D19742803147528031076187B2803180B +:1030F0007B28F6107C28F61420000D188128031474 +:1031000082280310031C89282900511C8928761461 +:103110008A287610F618902876189028031091289F +:103120000314031C9D288831BA27983127003908D9 +:10313000013A031D9D28B901062C90315D26983176 +:1031400080306E06F00080304B067002031DAA2806 +:103150004A086D020318B4284A08ED004B08EE0037 +:103160004808EB004908EC001030FC009430FD00EA +:10317000FD0BB828FC0BB8280000E70A662864009D +:1031800080306E06F00080307002031DC928643064 +:103190006D02031CE92805306D07F00000306E3D1C +:1031A000F1000A30F4000030F50090310020983131 +:1031B00070082900ED007108EE000A30F4000030BC +:1031C000F50088317C22983170082900ED007108E3 +:1031D000EE006D082700B70029006E082700B80030 +:1031E000803029006E06F00080307002031DFA283E +:1031F0000A306D020318FE28EB01EC016B082A006F +:10320000A00029006C082A00A10090318E25983179 +:10321000803027003806F10080307102031D12292A +:103220000A3037020130031C0030F1004408003C32 +:10323000013003180030F0007108F005031944292B +:1032400026006D08003A031D2A290130ED0088315F +:103250009D27983127004408F0008031D827983105 +:1032600027005708F4005808F5005908F6005A08D6 +:10327000F7008031572798318831A622983170089D +:103280002600EE007108EF00803029006C06F00087 +:10329000803050067002031D4F294F086B02013029 +:1032A000031C0030F000700827003A05F50080305C +:1032B00026004806F300803029006C067302031DC7 +:1032C00064296B08260047022600013003180030ED +:1032D000F300470829006B02F10026004808290086 +:1032E0006C3BF20080306906F0008030720670029C +:1032F000031D7C2971086802013003180030F000BA +:1033000070087305F40080306C06F30080302600EE +:1033100048067302031D8F29470829006B02290004 +:10332000013003180030F3006B0826004702F1005B +:1033300029006C082600483BF2008030290069060D +:10334000F000803072067002031DA829710868021F +:10335000013003180030F0007308F00570087404A1 +:10336000F10026004808033A031DB829E730470654 +:103370000130031D0030F0007108F0047508F005FD +:103380000319C52901302700B50020008D18CA296E +:103390007614CB2976100D19CF290314D0290310E8 +:1033A0007618D6290318D629F610D729F614200046 +:1033B0000D18DC290314DD290310031CE42929005E +:1033C000511CE4297614E5297610F618EB297618B5 +:1033D000EB290310EC290314031CF8298831BA27C0 +:1033E000983127003908013A031DF829B901062C44 +:1033F000270037082A00A000270038082A00A1006B +:1034000029006B082A00A20029006C082A00A300EA +:103410009031AC20983120008D18102A7614112A92 +:1034200076100D19152A0314162A031076181C2A73 +:1034300003181C2AF6101D2AF61420000D18222A43 +:103440000314232A0310031C2A2A2900511C2A2AA8 +:1034500076142B2A7610F618312A7618312A0310A2 +:10346000322A0314031C3E2A8831BA2798312700D8 +:103470003908013A031D3E2AB901062C27006400D1 +:103480003308013A031D062C29004E08043A013086 +:10349000031D0030F1004E08053A0130031D0030D5 +:1034A000F0007108F0040319272B02302A00C30032 +:1034B0001030C400C530C5000330C6000830C70056 +:1034C00080311E2598310330FB000830FC00773036 +:1034D000FD00FD0B692AFC0B692AFB0B692A0230EF +:1034E0002A00C3001030C400A930C5000330C60054 +:1034F0000830C70080311E2598310B30FB00263084 +:10350000FC005D30FD00FD0B832AFC0B832AFB0BC6 +:10351000832A00000000640002302A00C30010303B +:10352000C400E430C5000330C6000830C700803155 +:103530001E2598310730FB001730FC006A30FD0073 +:10354000FD0BA02AFC0BA02AFB0BA02A00006400A4 +:1035500002302A00C3001030C400DB30C500033045 +:10356000C6000830C70080311E2598310B30FB00A3 +:103570002630FC005D30FD00FD0BBC2AFC0BBC2A94 +:10358000FB0BBC2A00000000640002302A00C300CC +:103590001030C4003B30C5000430C6000830C700FE +:1035A00080311E2598310730FB001730FC006A304F +:1035B000FD00FD0BD92AFC0BD92AFB0BD92A0000F0 +:1035C000640002302A00C3001030C4003230C5004D +:1035D0000430C6000830C70080311E2598310B30FA +:1035E000FB002630FC005D30FD00FD0BF52AFC0BD6 +:1035F000F52AFB0BF52A00000000640002302A00C7 +:10360000C3001030C4004430C5000430C600083088 +:10361000C70080311E2598310330FB000830FC00C4 +:103620007730FD00FD0B122BFC0B122BFB0B122B2A +:1036300002302A00C3001030C4002030C50004301E +:10364000C6000830C70080311E259831F52B2900AF +:103650004E08003A0319F52B01302A00C300C401BB +:103660002930C5000430C6000830C70080311E254F +:1036700098310330FB000830FC007730FD00FD0B73 +:103680003F2BFC0B3F2BFB0B3F2B01302A00C300D1 +:10369000C401BB30C5000330C6000830C70080310C +:1036A0001E2598310B30FB002630FC005D30FD00FC +:1036B000FD0B582BFC0B582BFB0B582B000000006C +:1036C000640001302A00C300C401CE30C5000330BD +:1036D000C6000830C70080311E2598310730FB0036 +:1036E0001730FC006A30FD00FD0B742BFC0B742BB3 +:1036F000FB0B742B0000640001302A00C300C401DE +:103700003E30C5000330C6000830C70080311E259A +:1037100098310B30FB002630FC005D30FD00FD0BC6 +:103720008F2BFC0B8F2BFB0B8F2B000000006400FA +:1037300001302A00C300C401C430C5000030C600F7 +:103740000830C70080311E2598310730FB00173044 +:10375000FC006A30FD00FD0BAB2BFC0BAB2BFB0B15 +:10376000AB2B0000640001302A00C300C401BB3051 +:10377000C5000030C6000830C70080311E259831D2 +:103780000B30FB002630FC005D30FD00FD0BC62B2E +:10379000FC0BC62BFB0BC62B0000000064000130A5 +:1037A0002A00C300C401B230C5000030C600083092 +:1037B000C70080311E2598310330FB000830FC0023 +:1037C0007730FD00FD0BE22BFC0BE22BFB0BE22B19 +:1037D00001302A00C300C401CD30C5000030C6004E +:1037E0000830C70080311E25983164001030260053 +:1037F000CF002730D00029006B082A00A000290044 +:0E3800006C082A00A10090318E259831080036 +:10380E00290067082300910092012900680823000F +:10381E0093001513951315150B08F0008B135530E7 +:10382E009600AA3096009514F01B1F2C8B13202C9B +:0C383E008B171511951C242C212C080060 +:10384A002600CA01C9012900EF0188311D279831D4 +:10385A00260049082900EF00903168209831290094 +:10386A004C082A00BC0029004D082A00BD008831F6 +:06387A006F2598310800E3 +:10388000252401302600CC0001302900EF008031D2 +:10389000E7279831FF302900E700E8010724FE30D0 +:1038A0002900E700E8010724FD302900E700013086 +:1038B000E8000724FC302900E700E8010724FB307A +:1038C0002900E700E801072488310020983126000C +:1038D000CB0122008C130C172900C801C901CA01B1 +:1038E000CB012600C701C80129004E08043A013067 +:1038F000031D0030F1004E08053A0130031D003071 +:10390000F0007108F0040319B22C02302A00C30041 +:103910001030C4005230C5000330C6000830C70064 +:1039200080311E25983164000D30FB002D30FC00E5 +:10393000D730FD00FD0B9A2CFC0B9A2CFB0B9A2C1C +:103940000000000002302A00C3001030C4005B30C9 +:10395000C5000330C6000830C70080311E259831ED +:103960006400E52C29004E08003A0319E22C0130CE +:103970002A00C300C401A030C5000330C6000830CF +:10398000C70080311E25983164000D30FB002D30BA +:10399000FC00D730FD00FD0BCB2CFC0BCB2CFB0B24 +:1039A000CB2C0000000001302A00C300C4016430A9 +:1039B000C5000330C6000830C70080311E2598318D +:1039C0006400E52C22000D178D1710302600CF0063 +:1039D0002730D0001030CD002730CE000020080066 +:1039E00090315D26983125006E08643A03190B2D3D +:1039F000EE0A803029004306F00080304B0670024A +:103A0000031D042D4A08420203180A2D4A08C20069 +:103A10004B08C300232D2500EE01290042082A008F +:103A2000A000290043082A00A100290048082A0014 +:103A3000A200290049082A00A3009031AC20983147 +:103A40002900C201C30180304B06F20080304506D8 +:103A50007202031D2D2D44084A0201300318003064 +:103A6000F20080304706F10080304B067102031DE2 +:103A70003B2D4A084602013003180030F100803027 +:103A8000F000803047067002031D482D4608003CB8 +:103A9000013003180030F0007108F0057208F004DE +:103AA0000319B82D640090315D26983125006E0809 +:103AB000643A03196E2DEE0A803029004306F000A7 +:103AC00080304B067002031D672D4A08420203181E +:103AD0006D2D4A08C2004B08C300862D2500EE015B +:103AE000290042082A00A000290043082A00A1005A +:103AF000290048082A00A200290049082A00A3003A +:103B00009031AC2098312900C201C3010D302A0048 +:103B1000BC000030BD00BE010530BF000130C00058 +:103B20008031F026983170080319992D0130250055 +:103B3000EF0025006F08013A0130031D0030290015 +:103B4000E6000D302A00BC000030BD00BE0105308B +:103B5000BF00C0018031F026983129006608F005C9 +:103B60000319B72D40242900C801C901B82D232D00 +:023B700008004B +:103B720003302900E5002600C9012900EF01903138 +:103B820068209831290065082500EB00F0240030F8 +:103B92004906031DCE2D00304806031DD12D752E7A +:103BA2001430F4000030F5004808F0004908F10034 +:103BB200903100209831700829004807E30071080D +:103BC200493DE4006508E20062081F3C031C6E2EBA +:103BD2006208F00025006D08F4008031B9209831A8 +:103BE20070082900EF00903168209831F0240030ED +:103BF2004906031DFE2D00304806031D012E752EB9 +:103C020080304906F000803064067002031D0B2EDE +:103C12006308480203186C2E1430F4000030F500DB +:103C22004808F0004908F1009031002098317008EE +:103C320029004807E3007108493DE4006208F000EA +:103C420025006D08F4008031B920983170082600F3 +:103C5200C900290065082500EB00803029004906CB +:103C6200F00080307002031D382E783048020318AD +:103C72003B2E6E2E65086207F2007208E2002500F4 +:103C82006C08003A0130031D0030F1007208093A55 +:103C92000130031D0030F0007108F0050319552EA4 +:103CA20008302900E2006B2E25006C08003A013032 +:103CB200031D0030F10029006208113A0130031D92 +:103CC2000030F0007108F00503196B2E1030E2008D +:103CD2000430E5006D2E6E2EE52D260049082900E0 +:0A3CE200EF009031682098310800CF +:103CEC0024006F08F00025006908F4008031B92029 +:103CFC00983170082900DC00700826004A07F4008F +:103D0C0074082900DE000530F20025006908F00077 +:103D1C00F10172080319962EF035F10DFF3E902E2D +:103D2C0001307002F2000030713BF30080307306FA +:103D3C00F00080307002031DA52E74087202031867 +:103D4C00B32E0530F00069082900DE007008031955 +:103D5C00B22EDE35FF3EAD2EDE0326004A082900CA +:103D6C005C020318BF2E5C0826004A022900DF0003 +:103D7C00C02EDF015F082600CA0029005F08EF0093 +:103D8C0088311D279831F02400304906031DD02EB0 +:103D9C0000304806031DD32E4B2F4808E00049087D +:103DAC00E1002500690829005F07DD005D085E025F +:103DBC00031C442F5D08EF0088311D279831F02437 +:103DCC0000304906031DEC2E00304806031DEF2E73 +:103DDC004B2F80304906F000803061067002031DC5 +:103DEC00F92E60084802031C062F3430FC00F13019 +:103DFC00FD00FD0BFF2EFC0BFF2E00000000F0243D +:103E0C0080304906F000803061067002031D102FCF +:103E1C0060084802031C1D2F3430FC00F130FD00FB +:103E2C00FD0B162FFC0B162F00000000F024803029 +:103E3C004906F000803061067002031D272F6008D0 +:103E4C00480203183E2F4808E0004908E1005D08CD +:103E5C002600CA00803029004906F000803070022C +:103E6C00031D3A2F7830480203183D2F442F3F2F63 +:103E7C00442F250069082900DD07DC2E26004A089E +:0C3E8C002900EF0088311D279831080044 +:103E98002000F8010830FC00700DF80D7408F802D5 +:103EA8000318582FF8070310F00DFC0B502F0800CB +:103EB80029005408F000F036F036F036F0360A30B3 +:103EC800F4008031B92098310F3029005405F100F1 +:063ED8007108F00708006C +:103EDE0029003E08013C03187B2FAE302A00BC009F +:103EEE008831D12598318C2F29003E08013A031DC7 +:103EFE008C2FC101C0012A00CD018031852298315D +:0C3F0E002A00CD01803185229831080086 +:103F1A002900D3015208093C0318AC2F0A30F400D7 +:103F2A005208F0004C2770082900D3007008D3000B +:103F3A00D335D335D335D3350A30F4005208F000DF +:103F4A004C277808F00070082900D304AE2F5208D5 +:083F5A00D3005308F000080039 +:103F620028006F082A00C300C401AF30C500043026 +:103F7200C6008031492398310A3028006F02031CA1 +:103F8200C62F29003308A800C92F29003030A80005 +:103F92002E30A9003408AA004E08043A0130031D4D +:103FA2000030F1004E08053A0130031D0030F000E8 +:103FB2007108F0040319EC2F04302A00C300063004 +:103FC200C400A830C5000430C6000330C7008031E9 +:103FD2001E259831FE2F29004E08003A0319FE2FA4 +:103FE20001302A00C300C401A830C5000430C60055 +:0C3FF2000330C70080311E259831080004 +:1040000025006B08F0006D08F4008031B920A03164 +:1040100070082900DC00700826004907F4007408C5 +:104020002900DE000530F20025006D08F000F101E6 +:10403000720803191F28F035F10DFF3E19280130D1 +:104040007002F2000030713BF30080307306F00024 +:1040500080307002031D2E287408720203183C2859 +:104060000530F0006D082900DE00700803193B28B8 +:10407000DE35FF3E3628DE032600490829005C02B3 +:10408000031848285C08260049022900DF00492857 +:10409000DF015F082600C90029005F08EF009031AA +:1040A0006820A0319831F024A03100304906031D6A +:1040B0005B2800304806031D5E28DC284808E00025 +:1040C0004908E10025006D0829005F07DD005D0853 +:1040D0005E02031CD5285D08EF0090316820A031F6 +:1040E0009831F024A03100304906031D79280030B2 +:1040F0004806031D7C28DC2880304906F00080300B +:1041000061067002031D862860084802031C95287A +:104110003430FC00F130FD00FD0B8C28FC0B8C28AA +:10412000000000009831F024A03180304906F000F2 +:10413000803061067002031D9F2860084802031C3E +:10414000AE283430FC00F130FD00FD0BA528FC0B3F +:10415000A528000000009831F024A03180304906E5 +:10416000F000803061067002031DB8286008480224 +:104170000318CF284808E0004908E1005D08260040 +:10418000C900803029004906F00080307002031D0C +:10419000CB28783048020318CE28D528D028D52837 +:1041A00025006D082900DD07672826004908290039 +:0A41B000EF0090316820A0310800F4 +:1041BA0003302900E100DD0161082400EF0003302B +:1041CA002900DE001430F4000030F5004808F00041 +:1041DA004908F10090310020A031700829004807F1 +:1041EA00DF007108493DE000DC015C081F3C031C4C +:1041FA008D295C08F00025006908F4008031B92097 +:10420A00A03170082900EF0088311D27A0319831AC +:10421A00B925A0319831F024A03100304906031D98 +:10422A00182900304806031D1B29AB29803049068E +:10423A00F000803060067002031D25295F084802DD +:10424A0003188B291430F4000030F5004808F000F8 +:10425A004908F10090310020A03170082900480770 +:10426A00DF007108493DE0005C08F000250069089C +:10427A00F4008031B920A03170082600CA0049082C +:10428A002900DD0061082400EF0025006B082900E1 +:10429A00DE0080304906F00080307002031D572985 +:1042AA007830480203185A298D2961085C07F20000 +:1042BA007208DC0025006A08003A0130031D00304C +:1042CA00F1007208093A0130031D0030F00071084C +:1042DA00F0050319742908302900DC008A29250011 +:1042EA006A08003A0130031D0030F10029005C0819 +:1042FA00113A0130031D0030F0007108F00503196E +:10430A008A291030DC000430E1008C298D29FA2832 +:10431A005D082600C9004A082900EF0088311D27D8 +:10432A00A031260049082900EF0090316820A03109 +:10433A0029005E082500EB003430FC00F130FD0056 +:0E434A00FD0BA529FC0BA529000000000800B2 +:1043580029004808D6004908D700DD200030290088 +:104368004906031DB92900304806031DBF299831A5 +:104378002524A0310C2B9831F024A0318030490637 +:10438800F00080307002031DCB29783048020318F2 +:10439800CE290C2B98317626A03100302900490609 +:1043A800031DD82900304806031DDE29983125242D +:1043B800A0310C2B9831F024A03180304906F00050 +:1043C80080307002031DEA29783048020318ED296D +:1043D8000C2B0020003029004906031DF529003068 +:1043E8004806031DFB2998312524A0310C2B983150 +:1043F800F024A03180304906F00080307002031D9F +:10440800072A7830480203180A2A0C2B80304906FC +:10441800F10080307102031D132AC83048020130B0 +:1044280003180030F10080304906F000803057064C +:104438007002031D212A5608480201300318003073 +:10444800F00070087105F30048085602F1004908A9 +:10445800573BF2008030F000803072067002031D76 +:10446800372A7108643C013003180030F0007308E3 +:10447800F0050319402A0C2B4808D6004908D70034 +:1044880026004A082900D800D90126004908290031 +:10449800DA00DB0126004C08013A031D552ACC013D +:1044A800572A0130CC0098312524A03126004C0829 +:1044B8002900EF008031E727A0310230FB000430EB +:1044C800FC00BA30FD00FD0B672AFC0B672AFB0BCA +:1044D800672A00009831F024A03180304906F000A6 +:1044E80080307002031D7A2A7830480203187D2A2A +:1044F8000C2BDD20003029004906031D852A0030D9 +:104508004806031D8B2A98312524A0310C2B98319D +:10451800F024A03180304906F00080307002031D7D +:10452800972A7830480203189A2A0C2B9831762655 +:10453800A031003029004906031DA42A003048068E +:10454800031DAA2A98312524A0310C2B9831F02478 +:10455800A03180304906F00080307002031DB62A71 +:10456800783048020318B92A0C2B002000302900A3 +:104578004906031DC12A00304806031DC72A983181 +:104588002524A0310C2B9831F024A0318030490625 +:10459800F00080307002031DD32A783048020318D7 +:1045A800D62A0C2B80305706F0008030490670025E +:1045B800031DE02A4808560203180B2B26004C0856 +:1045C800013A031DE92ACC01EB2A0130CC004C0842 +:1045D8002900EF008031E727A0312900580826007C +:1045E800CA0029005A082600C90029005808EF0007 +:1045F80088311D27A031260049082900EF00903195 +:104608006820A03129005608C8005708C90064006E +:02461800080098 +:10461A0064002500EE012900C201C3012500EF0153 +:10462A009831F024A03180304906F00080307002C1 +:10463A00031D212B6E3048020318242BF72B9831C7 +:10464A002524A03120006F08003A031D2F2B883142 +:10465A000020A0310230FB000430FC00BA30FD001B +:10466A00FD0B352BFC0B352BFB0B352B0000983142 +:10467A00F024A0314808A6004908A700803049065E +:10468A00F00080307002031D4C2B6E304802031874 +:10469A004F2BF72B8030F100803025067102031D65 +:1046AA00582B24086E3C013003180030F10080308A +:1046BA002506F000803049067002031D662B480863 +:1046CA002402013003180030F0007108F0050319C4 +:1046DA006F2BF72BAC21003029004906031D772BDD +:1046EA0000304806031D7D2B98312524A031F72B75 +:1046FA00803029004906F00080307002031D872BA4 +:10470A007830480203188A2BF72B20005C08053AF8 +:10471A000130031D0030F1005B08053A0130031D2A +:10472A000030F0007108F00503199C2BF72B5B0889 +:10473A00053C0318AA2B250069082400EF00013064 +:10474A002500E90098317626A031803029004906F3 +:10475A00F00080307002031DB42B78304802031831 +:10476A00B72BF72B20005C08053C0318C22B250049 +:10477A006D08EB000130ED00002020005B08053ACF +:10478A00031DCB2B01302500E900DC2B20005B0840 +:10479A00063A031DD42B02302500E900DC2B200049 +:1047AA005B08073A031DDC2B04302500E9002000D2 +:1047BA005C08053A031DE52B01302500ED00F62BB8 +:1047CA0020005C08063A031DEE2B02302500ED009E +:1047DA00F62B20005C08073A031DF62B043025004F +:0647EA00ED006400080070 +:1047F00080313E20A031290037082A00DC008031BA +:104800000320A0312A00DC0180310320A031AE302A +:104810002A00DC0080310320A03129003E08023A42 +:104820000130031D0030F1003E08033A0130031D42 +:104830000030F0007108F0040319D42CD5302A00A0 +:10484000DC0080310320A03180302A00DC00803180 +:104850000320A031A8302A00DC0080310320A031E1 +:104860003F302A00DC0080310320A031D3302A0001 +:10487000DC0080310320A03129003E08023A031DEC +:10488000482C36082A00DC0080310320A031502C4F +:10489000290036081F3E2A00DC0080310320A031A9 +:1048A00040302A00DC0080310320A0318D302A0006 +:1048B000DC0080310320A03114302A00DC0080317C +:1048C0000320A03181302A00DC0080310320A03198 +:1048D000B4302A00DC0080310320A031D9302A0016 +:1048E000DC0080310320A03122302A00DC0080313E +:1048F0000320A03120302A00DC0080310320A031C9 +:1049000002302A00DC0080310320A03121302A004F +:10491000DC0080310320A0312A00DC01803103203B +:10492000A0317F302A00DC0080310320A0312E30FE +:104930002A00DC0080310320A03129003E08023A21 +:10494000031DAF2CA0302A00DC0080310320A031F1 +:10495000C0302A00DC0080310320A031BB2CA13004 +:104960002A00DC0080310320A031C8302A00DC009E +:1049700080310320A031DA302A00DC0080310320AE +:10498000A03102302A00DC0080310320A031DB306E +:104990002A00DC0080310320A03140302A00DC00F6 +:1049A00080310320A0317C2DD5302A00DC008031FD +:1049B0000320A03180302A00DC0080310320A031A8 +:1049C000A8302A00DC0080310320A0313F302A00CB +:1049D000DC0080310320A031D3302A00DC0080319C +:1049E0000320A031290036082A00DC008031032092 +:1049F000A03140302A00DC0080310320A0318D300E +:104A00002A00DC0080310320A03114302A00DC00B1 +:104A100080310320A03181302A00DC008031032066 +:104A2000A031FF302A00DC0080310320A031D930D2 +:104A30002A00DC0080310320A031F1302A00DC00A4 +:104A400080310320A03120302A00DC008031032097 +:104A5000A03102302A00DC0080310320A031213057 +:104A60002A00DC0080310320A0312A00DC018031E3 +:104A70000320A0317F302A00DC0080310320A031E8 +:104A80002E302A00DC0080310320A03129003E08AE +:104A9000043A031D582DA0302A00DC008031032089 +:104AA000A031C0302A00DC0080310320A031642D09 +:104AB000A1302A00DC0080310320A031C8302A0058 +:104AC000DC0080310320A031DA302A00DC008031A4 +:104AD0000320A03112302A00DC0080310320A031F5 +:104AE000DB302A00DC0080310320A03140302A0076 +:104AF000DC0080310320A031A4302A00DC008031AA +:104B00000320A031A6302A00DC0080310320A03130 +:104B10008031D120A0310330FB000830FC00773019 +:104B2000FD00FD0B912DFC0B912DFB0B912D803188 +:104B30003E20A031290037082A00DC008031032004 +:104B4000A03140302A00DC0080310320A031290050 +:104B50003E08023A0130031D0030F1003E08033ADE +:104B60000130031D0030F0007108F0040319D62D48 +:104B7000D5015508033C031CD52D55082A00D70044 +:104B8000D80180315D20A0312900D4012900803076 +:104B900054020318D22DD40A2A00DC0180310320EC +:104BA000A031C62D2900D50AB92DF32DD501550800 +:104BB000073C031CF32D55082A00D700D80180318B +:104BC0005D20A0312900D40129008030540203184F +:104BD000F02DD40A2A00DC0180310320A031E42D1D +:104BE0002900D50AD72D8031D120A031AF302A003D +:0A4BF000BC008831D125A031080077 +:104BFA00640029004E08043A0130031D0030F10018 +:104C0A004E08053A0130031D0030F0007108F00427 +:104C1A0003191E2E02302A00C3004030C400DA30C5 +:104C2A00C5000230C6000430C70080311E25A031FD +:104C3A00352E29004E08003A0319322E01302A0077 +:104C4A00C3000430C4006A30C5000230C600043014 +:104C5A00C70080311E25A031352E22000D178D1771 +:104C6A000D2329004E08003A031D5E2E8030F00005 +:104C7A00803049067002031D442E4808963C031CE6 +:104C8A004A2E22000D138D175D2E8030F0008030E1 +:104C9A00290049067002031D542E4808FA3C031CD9 +:104CAA005A2E20000D138D135D2E20000D178D1323 +:104CBA00732E26004B08003A0130031D0030F10024 +:104CCA0020006F08003A0130031D0030F00071081F +:104CDA00F0040319732E88310020A031FF30290017 +:104CEA00E700260049082900E80098310724A03186 +:104CFA00FE302900E70026004A082900E80098311A +:104D0A000724A031FD302900E70026004C082900BD +:104D1A00E80098310724A031FC302900E700003070 +:104D2A00F4000130F5002608F0002708F100903160 +:104D3A000020A03170082900E80098310724A0312A +:104D4A00FB302900E7000030F4000130F5002608A6 +:104D5A00F0002708F10090310020A0317808F00017 +:104D6A007908F10070082900E80098310724A03179 +:104D7A0010302600CF002730D0001030CD00273069 +:104D8A00CE0098310020A031290048082600C7002B +:104D9A00290049082600C80022008C130C17640059 +:024DAA000800FF +:104DAC0029004E08043A0130031D0030F1004E0872 +:104DBC00053A0130031D0030F0007108F0040319AE +:104DCC00F52E2A00C3010A30C400A930C5000130F9 +:104DDC00C6000930C70080311E25A031072F2900DD +:104DEC004E08003A0319072F2A00C3010330C400F0 +:104DFC00C730C5000130C6000930C70080311E2500 +:104E0C00A03164000B30FB002630FC005D30FD004F +:104E1C00FD0B0E2FFC0B0E2FFB0B0E2F00000000BA +:104E2C0064000B30FB002630FC005D30FD00FD0BF8 +:104E3C001D2FFC0B1D2FFB0B1D2F00000000640011 +:104E4C000B30FB002630FC005D30FD00FD0B2C2FE1 +:104E5C00FC0B2C2FFB0B2C2F0000000064000B30E4 +:104E6C00FB002630FC005D30FD00FD0B3B2FFC0BE6 +:104E7C003B2FFB0B3B2F00000000640029004E0869 +:104E8C00043A0130031D0030F1004E08053A0130A0 +:104E9C00031D0030F0007108F0040319632F2A0081 +:104EAC00C3010A30C400BD30C5000130C600093052 +:104EBC00C70080311E25A031752F29004E08003AFD +:104ECC000319752F2A00C3010330C400B330C50089 +:104EDC000130C6000930C70080311E25A031983141 +:104EEC002524A03101302600CC0001302900EF0030 +:104EFC008031E727A031FF302900E7002600490860 +:104F0C002900E80098310724A031FE302900E70081 +:104F1C0026004A082900E80098310724A031FD300A +:104F2C002900E70026004C082900E80098310724E6 +:104F3C00A03129004E08043A0130031D0030F10065 +:104F4C004E08053A0130031D0030F0007108F004E2 +:104F5C000319BE2F2A00C3017030C4006D30C50088 +:104F6C000130C6000130C70080311E25A031D02F82 +:104F7C0029004E08003A0319D02F2A00C30108302B +:104F8C00C400EC30C5000130C6000130C7008031D0 +:104F9C001E25A03101302000AB00A8310020A0312B +:024FAC000800FB +:104FAE002900D4019031F527A03170082900B700EF +:104FBE000130D4009031F527A03170082900BE00D1 +:104FCE007008003A031DF22F21000D138D132200DD +:104FDE000D178D17F82F21000D178D1722000D13A9 +:044FEE008D13080017 +:10500000640029004E08043A0130031D0030F1000D +:105010004E08053A0130031D0030F0007108F0041D +:105020000319F22820002B08003A031DA4282A00A7 +:10503000C3011630C400E130C5000230C60007309D +:10504000C70080311E25A83102302A00C300063077 +:10505000C4003430C5000330C6000930C7008031B9 +:105060001E25A83104302A00C3001030C4002B30A4 +:10507000C5000330C6000830C70080311E25A831A6 +:1050800006302A00C3000430C4002030C5000330BD +:10509000C6000A30C70080311E25A83164000D30DB +:1050A000FB002D30FC00D730FD00FD0B5528FC0B1C +:1050B0005528FB0B55280000000064000B30FB0056 +:1050C0002630FC005D30FD00FD0B6428FC0B6428DD +:1050D000FB0B64280000000064002A00C3011030AC +:1050E000C400AB30C5000230C6000830C7008031B4 +:1050F0001E25A83102302A00C3000430C400A030AD +:10510000C5000230C6000A30C70080311E25A83114 +:1051100004302A00C3001030C4006130C5000230E2 +:10512000C6000830C70080311E25A83106302A008D +:10513000C3000430C400B430C5000230C6000A30D9 +:10514000C70080311E25A8310430FB000C30FC0064 +:105150003330FD00FD0BAA28FC0BAA28FB0BAA2864 +:105160000000000027003608013A031DC5282A0068 +:10517000C3011030C400D130C5000230C600083071 +:10518000C70080311E25A831D2282A00C301103063 +:10519000C400C830C5000230C6000830C7008031E6 +:1051A0001E25A83102302A00C3001030C400BF30D1 +:1051B000C5000230C6000830C70080311E25A83166 +:1051C00027003A080319F1282A00C3017030C400EF +:1051D000EE30C5000130C6000130C70080311E2509 +:1051E000A831D32929004E08003A0319D3292000F9 +:1051F0002B08003A031D89292A00C3010430C4008A +:10520000E430C5000130C6000730C70080311E25DC +:10521000A83101302A00C3000330C400DA30C500D1 +:105220000130C6000930C70080311E25A831640056 +:105230000F30FB003530FC005130FD00FD0B1E2906 +:10524000FC0B1E29FB0B1E2964000B30FB002630D3 +:10525000FC005D30FD00FD0B2B29FC0B2B29FB0B0B +:105260002B290000000064002A00C3010430C400A0 +:10527000D130C5000130C6000830C70080311E257E +:10528000A83101302A00C3000330C4002030C5001B +:105290000230C6000A30C70080311E25A8316400E4 +:1052A0000D30FB002D30FC00D730FD00FD0B5629E2 +:1052B000FC0B5629FB0B56290000000064000B3044 +:1052C000FB002630FC005D30FD00FD0B6529FC0B6A +:1052D0006529FB0B65290000000064002A00C3015A +:1052E0000430C4003F30C5000230C6000830C7009B +:1052F00080311E25A83101302A00C3000330C400CC +:105300003430C5000230C6000A30C70080311E2587 +:10531000A8310430FB000C30FC003330FD00FD0BE5 +:105320008F29FC0B8F29FB0B8F2900000000270021 +:105330003608013A031DA9292A00C301C4012B30F4 +:10534000C5000230C6000830C70080311E25A831D4 +:10535000B5292A00C301C401A030C5000130C60030 +:105360000830C70080311E25A83101302A00C30053 +:10537000C4016430C5000130C6000830C700803168 +:105380001E25A83127003A080319D3292A00C30192 +:105390000830C4006230C5000130C6000130C700CB +:1053A00080311E25A831640088310020A831080012 +:1053B00007302900D4009031F527A8317008290062 +:1053C000B6000830D4009031F527A83170082900C4 +:1053D000B9003E08013C0318F129A031F823A83197 +:1053E000642A29003E08013A031D642A0130C100E5 +:1053F000C00103302A00CD0080318522A8311A3047 +:10540000FC00F830FD00FD0B032AFC0B032A000012 +:1054100003302A00CD0080318522A8310630FC00FF +:105420003030FD00FD0B122AFC0B122A0000033065 +:105430002A00CD0080318522A83102302A00CD001B +:1054400080318522A83102302A00CD0080318522AA +:10545000A83108302A00CD0080318522A8312A00E9 +:10546000CD0180318522A83108302A00CD0080315D +:105470008522A8312A00CD0180318522A831013052 +:105480002A00CD0080318522A8311A30FC00F83086 +:10549000FD00FD0B492AFC0B492A00002A00CD0122 +:1054A00080318522A83106302A00CD008031852246 +:1054B000A8312A00CD0180318522A8310C302A0084 +:0A54C000CD0080318522A8310800DC +:1054CA000D302A00BC000030BD00BE013230BF00E2 +:1054DA00C0018031F026A831700803191D2B06304F +:1054EA00FB001330FC00AD30FD00FD0B7A2AFC0BEB +:1054FA007A2AFB0B7A2A00000000640020000D1CA7 +:10550A00992A26004C08003A031D8E2A0130CC0045 +:10551A008F2ACC014C082900EF008031E727A831F7 +:10552A0088310020A831092B28005008013A031DB0 +:10553A00A02AD001A22A0130D0005008013A031D46 +:10554A00D82A29004E08043A0130031D0030F10020 +:10555A004E08053A0130031D0030F0007108F004CE +:10556A000319C52A2A00C3017030C4004E30C50091 +:10557A000430C6000130C70080311E25A831D72A61 +:10558A0029004E08003A0319D72A2A00C301083015 +:10559A00C4005330C5000430C6000130C700803152 +:1055AA001E25A831092B29004E08043A0130031D93 +:1055BA000030F1004E08053A0130031D0030F000BA +:1055CA007108F0040319F72A2A00C3017030C400D5 +:1055DA005130C5000430C6000130C70080311E2595 +:1055EA00A831092B29004E08003A0319092B2A0071 +:1055FA00C3010830C400EE30C5000330C6000130D4 +:10560A00C70080311E25A8310D302A00BC000030A9 +:10561A00BD00BE013230BF00C0018031F026A83182 +:10562A00700803191D2B98310020A8316400092B3A +:10563A000D302A00BC000030BD000230BE003230FE +:10564A00BF00C0018031F026A83170080319A32BCE +:10565A00640020000D19A32B0530F200250069080B +:10566A00F000F101720803193E2BF035F10DFF3EEF +:10567A00382B01307002F2000030713BF3008030A9 +:10568A00F000803073067002031D4E2B720826004C +:10569A004A02013003180030F00028005008F005D3 +:1056AA000319602B2600CA0A4A082900EF0088312C +:1056BA001D27A831932B280050080130031D003004 +:1056CA00F4000530F20025006908F000F1017208C3 +:1056DA000319732BF035F10DFF3E6D2B013070026B +:1056EA00F2000030713BF3008030F0008030730626 +:1056FA007002031D832B7208260049020130031829 +:10570A000030F0007408F0050319932B2600C90A2B +:10571A0049082900EF0090316820A831883100201B +:10572A00A83198310020A8319C30FC00D730FD0008 +:10573A00FD0B9D2BFC0B9D2B64002E2B0D302A009C +:10574A00BC000030BD000130BE003230BF00C001D5 +:10575A008031F026A83127006D08003A0130031D78 +:10576A000030F1007108F0050319FC2B64002000D9 +:10577A008D18FC2B26004A08003C01300318003023 +:10578A00F00028005008F0050319D42B2600CA039C +:10579A004A082900EF0088311D27A831EC2B280080 +:1057AA0050080130031D0030F10026004908003C72 +:1057BA00013003180030F0007108F0050319EC2BD2 +:1057CA00C90349082900EF0090316820A8318831BF +:1057DA000020A83198310020A8319C30FC00D73035 +:1057EA00FD00FD0BF62BFC0BF62B6400BC2B08000E +:1057FA006400210097121716971117159710640065 +:10580A0023008C010C148C148D0122009113931324 +:10581A0078302100990020008C018D018E014030E2 +:10582A0022008C008D018E01033021008C0007308C +:10583A008D008E018831EF27A8311E149E1495130E +:0C584A0024000D148D140D158B130800A4 +:1058560012001E00F003031D2B2CF103031D2B2C3D +:02586600080038 +:1058680029005118392C74143A2C74100D302A0060 +:10587800BC000030BD00BE013230BF000130C000A6 +:105888008031F026A831F1017418F10A7108F00589 +:105898000319502C2900511429005118552C74143F +:1058A800562C74100D302A00BC000030BD00BE011B +:1058B8003230BF00C0018031F026A831F1017418E0 +:1058C800F10A7108F0050319832C27004408F00039 +:1058D8008031D827A83127005708F4005808F50068 +:1058E8005908F6005A08F70080315727A83188313F +:1058F800A622A83170082600EE007108EF000D30CE +:105908002A00BC000030BD00BE013230BF00C0011B +:105918008031F026A831F10129005118F10A7108E7 +:10592800F00527003508F0040319F92C88319D2764 +:10593800A83127004408F0008031D827A831270073 +:105948005708F4005808F5005908F6005A08F700F7 +:1059580080315727A8318831A622A831700826003F +:10596800EE007108EF000630FB001330FC00AD308C +:10597800FD00FD0BBD2CFC0BBD2CFB0BBD2C000052 +:105988000000640027003508003A0130031D00308C +:10599800F10020000D18D22C0310D32C0314F001B1 +:1059A8000318F00A7108F0050319E02C9831402417 +:1059B800A8312700ED01F92C22008C170C130630B2 +:1059C800FB001330FC00AD30FD00FD0BE92CFC0B97 +:1059D800E92CFB0BE92C00000000A031FD25A831C3 +:1059E8002700ED01B501290051100D302A00BC0037 +:1059F8000030BD000230BE003230BF00C00180312F +:105A0800F026A831700803193D2E88319D27A8314A +:105A180027004408F0008031D827A831270057080C +:105A2800F4005808F5005908F6005A08F7008031C4 +:105A38005727A8318831A622A83170082600EE0021 +:105A48007108EF00640027006D08003A031D682DF7 +:105A58000130ED00260049082400D70026004A0836 +:105A68002400D60026004C082200EF002600C901B9 +:105A780051080319422DFF30CA00432DCA010130D5 +:105A8800CC004A082900EF0088311D27A8312600DC +:105A980049082900EF0090316820A83126004C08F9 +:105AA8002900EF008031E727A83126004B08003A8B +:105AB800031D612D88310020A83127003A082400F1 +:105AC800D8002700BA01962DED01240057082600BA +:105AD800C900240056082600CA0022006F082600C4 +:105AE800CC00240057082900EF0090316820A83125 +:105AF80026004A082900EF0088311D27A831260012 +:105B08004C082900EF008031E727A83126004B0810 +:105B1800003A031D922D88310020A831240058082E +:105B28002700BA0029004E08043A0130031D00304E +:105B3800F1004E08053A0130031D0030F0007108ED +:105B4800F0040319E52D27006D080130031D00300E +:105B5800F0003A08F0050319BF2D2A00C301703080 +:105B6800C4005D30C5000230C6000130C700803176 +:105B78001E25A831E42D27003A080130031D003006 +:105B8800F0006D08F0050319D72D2A00C301703005 +:105B9800C4005B30C5000230C6000130C700803148 +:105BA8001E25A831E42D2A00C3017030C4005930E5 +:105BB800C5000230C6000130C70080311E25A8315B +:105BC800272E29004E08003A0319272E27006D08B2 +:105BD8000130031D0030F0003A08F0050319022EC9 +:105BE8002A00C3010830C4004C30C5000230C6008A +:105BF8000130C70080311E25A831272E27003A081A +:105C08000130031D0030F0006D08F00503191A2E4D +:105C18002A00C3010830C4004A30C5000230C6005B +:105C28000130C70080311E25A831272E2A00C30164 +:105C38000830C4004830C5000230C6000130C70033 +:105C480080311E25A83164000D302A00BC000030C8 +:105C5800BD000230BE003230BF00C0018031F026E6 +:105C6800A831700803193D2E98310020A83164002E +:105C7800282E0D302A00BC000030BD000130BE00C7 +:105C88003230BF00C0018031F026A83127006D08EE +:105C9800003A0130031D0030F1007108F0050319C6 +:105CA8002D2F88319D27A83127004408F000803126 +:105CB800D827A83127005708F4005808F5005908D4 +:105CC800F6005A08F70080315727A8318831A622F4 +:105CD800A83170082600EE007108EF006400270064 +:105CE8003A08003A031D7B2E0130BA007C2EBA0117 +:105CF80002302900E70027003A082900E800983117 +:105D08000724A83129004E08043A0130031D003049 +:105D1800F1004E08053A0130031D0030F00071080B +:105D2800F0040319D52E27006D080130031D00303B +:105D3800F0003A08F0050319AF2E2A00C3017030AD +:105D4800C4004E30C5000230C6000130C7008031A3 +:105D58001E25A831D42E27003A080130031D003033 +:105D6800F0006D08F0050319C72E2A00C301703032 +:105D7800C4005430C5000230C6000130C70080316D +:105D88001E25A831D42E2A00C3017030C400523019 +:105D9800C5000230C6000130C70080311E25A83179 +:105DA800172F29004E08003A0319172F27006D08EE +:105DB8000130031D0030F0003A08F0050319F22EF7 +:105DC8002A00C3010830C4005030C5000230C600A4 +:105DD8000130C70080311E25A831172F27003A0847 +:105DE8000130031D0030F0006D08F00503190A2F7B +:105DF8002A00C3010830C4005F30C5000230C60065 +:105E08000130C70080311E25A831172F2A00C30191 +:105E18000830C400DF30C5000230C6000130C700BA +:105E280080311E25A83164000D302A00BC000030E6 +:105E3800BD000130BE003230BF00C0018031F02605 +:105E4800A831700803192D2F98310020A83164005B +:045E5800182F0800F7 +:10600000640001302900D4009031F527B0317008C8 +:106010002900CE000230D4009031F527B03170084D +:10602000013A031D162801302700BA000330290069 +:10603000D4009031F527B03170082900D400983190 +:106040005C27B0317008CC00CD010430D400903111 +:10605000F527B03170082900D40098315C27B031A1 +:106060000A30F4008031B920B03170082900CF0027 +:106070007108D0000530D4009031F527B031700898 +:106080002900D40098315C27B0310A30F400803107 +:10609000B920B03170082900C4007108C50006306D +:1060A000D4009031F527B03170082900D400983120 +:1060B0005C27B0310A30F4008031B920B03170086B +:1060C0002900C6007108C7000930D4009031F527B7 +:1060D000B03170082900D40098315C27B0310A3003 +:1060E000F4008031B920B03170082900A400710893 +:1060F000A5000A30D4009031F527B0317008200097 +:10610000DB000B302900D4009031F527B031700846 +:106110002500EA000C302900D4009031F527B03179 +:1061200070082000DC000D302900D4009031F527E4 +:10613000B03170082500EC000E302900D4009031F9 +:10614000F527B03170082800CD000F302900D400A9 +:106150009031F527B03170082600D100640010306E +:106160002900D4009031F527B03170082900D400FF +:1061700098315C27B0316430F4008031B920B031FF +:1061800070082900D2007108D3001130D40090317A +:10619000F527B03170082900D40098315C27B03160 +:1061A000700852072800E30000302900533D280002 +:1061B000E40012302900D4009031F527B031700886 +:1061C0002900D40098315C27B0316430F40080316C +:1061D000B920B03170082900D2007108D300133003 +:1061E000D4009031F527B03170082900D4009831DF +:1061F0005C27B031700852072800E1000030290008 +:10620000533D2800E20014302900D4009031F527D6 +:10621000B03170082900D40098315C27B031643067 +:10622000F4008031B920B03170082900D200710823 +:10623000D3001530D4009031F527B0317008290013 +:10624000D40098315C27B031700852072800DF0075 +:1062500000302900533D2800E00016302900D4000A +:106260009031F527B03170082900D40098315C27AF +:10627000B0316430F4008031B920B03170082900A9 +:10628000D2007108D3001730D4009031F527B03117 +:1062900070082900D40098315C27B031700852078B +:1062A0002800D90000302900533D2800DA001830BA +:1062B0002900D4009031F527B03170082900D400AE +:1062C00098315C27B0316430F4008031B920B031AE +:1062D00070082900D2007108D3001930D400903121 +:1062E000F527B03170082900D40098315C27B0310F +:1062F000700852072800D70000302900533D2800BD +:10630000D8001A302900D4009031F527B031700838 +:106310002900D40098315C27B0316430F40080311A +:10632000B920B03170082900D2007108D3001B30A9 +:10633000D4009031F527B03170082900D40098318D +:106340005C27B031700852072800D50000302900C2 +:10635000533D2800D6001C302900D4009031F52789 +:10636000B03170082900D40098315C27B031643016 +:10637000F4008031B920B03170082900D2007108D2 +:10638000D3001D30D4009031F527B03170082900BA +:10639000D40098315C27B031700852072800DB0028 +:1063A00000302900533D2800DC0020302900D400B3 +:1063B0009031F527B03170082900D40098315C275E +:1063C000B0316430F4008031B920B0317008290058 +:1063D000D2007108D3002130D4009031F527B031BC +:1063E00070082900D40098315C27B031700852073A +:1063F0002800E90000302900533D2800EA0022303F +:106400002900D4009031F527B03170082900D4005C +:1064100098315C27B0316430F4008031B920B0315C +:1064200070082900D2007108D3002330D4009031C5 +:10643000F527B03170082900D40098315C27B031BD +:10644000700852072800EB0000302900533D280057 +:10645000EC0024302900D4009031F527B0317008C9 +:106460002900D40098315C27B0316430F4008031C9 +:10647000B920B03170082900D2007108D30025304E +:10648000D4009031F527B03170082900D40098313C +:106490005C27B03170085207A2000030533DA300C2 +:1064A0002630D4009031F527B03170082900D4008F +:1064B00098315C27B0316430F4008031B920B031BC +:1064C00070082900D2007108D3002730D400903121 +:1064D000F527B03170082900D40098315C27B0311D +:1064E00070085207A0000030533DA1002830D400AE +:1064F0009031F527B03170082900D40098315C271D +:10650000B0316430F4008031B920B0317008290016 +:10651000D2007108D3002930D4009031F527B03172 +:1065200070082900D40098315C27B03170085207F8 +:106530002800ED0000302900533D2800EE002A30ED +:106540002900D4009031F527B03170082900D4001B +:1065500098315C27B0316430F4008031B920B0311B +:1065600070082900D2007108D3002B30D40090317C +:10657000F527B03170082900D40098315C27B0317C +:10658000700852072800E70000302900533D28001A +:10659000E8002C302900D4009031F527B031700884 +:1065A0002900D40098315C27B0316430F400803188 +:1065B000B920B03170082900D2007108D3002D3005 +:1065C000D4009031F527B03170082900D4009831FB +:1065D0005C27B031700852072800E5000030290020 +:1065E000533D2800E60030302900D4009031F527D3 +:1065F000B03170082700B60031302900D400903146 +:10660000F527B03170082900D40098315C27B031EB +:1066100070082700B40032302900D4009031F527EB +:10662000B03170082900D40098315C27B03170086F +:106630002700C40033302900D4009031F527B03151 +:1066400070082000EF0034302900D4009031F52785 +:10665000B03170082900D40098315C27B03170083F +:106660002800EF0035302900D4009031F527B031F3 +:1066700070082900D40098315C27B03170082700D9 +:06668000B20064000800F6 +:10668600B831F821B031031A4B2B01302100DF005D +:10669600A831FD23B0310730FB001730FC006A300B +:1066A600FD00FD0B542BFC0B542BFB0B542B000055 +:1066B60064000020A031D727B03129004E08003AE7 +:1066C600031D682B22000D178D1727004408F000C4 +:1066D6008031D827B03127005708F4005808F50054 +:1066E6005908F6005A08F70080315727B03188312B +:1066F600A622B03170082600EE007108EF000730C0 +:10670600FB001730FC006A30FD00FD0B882BFC0BEC +:10671600882BFB0B882B0000640020008D18952B1E +:106726007414962B74100D199A2B03149B2B0310BB +:10673600741CA12B031CA12B7414A22B7410741CA3 +:10674600A92B20000130DA002700BA0120005B08DF +:10675600053A031DB22B01302500E900C32B2000AA +:106766005B08063A031DBB2B02302500E900C32B4C +:1067760020005B08073A031DC32B04302500E900FF +:1067860020005C08053A031DCC2B01302500ED00E6 +:10679600DD2B20005C08063A031DD52B02302500B0 +:1067A600ED00DD2B20005C08073A031DDD2B0430CD +:1067B6002500ED000730FB001730FC006A30FD00B5 +:1067C600FD0BE32BFC0BE32BFB0BE32B0000640020 +:1067D6000730FB001730FC006A30FD00FD0BF12B83 +:1067E600FC0BF12BFB0BF12B000064000730FB00C8 +:1067F6001730FC006A30FD00FD0BFF2BFC0BFF2B56 +:10680600FB0BFF2B000064000730FB001730FC0079 +:106816006A30FD00FD0B0D2CFC0B0D2CFB0B0D2C1B +:10682600000064000730FB001730FC006A30FD00F2 +:10683600FD0B1B2CFC0B1B2CFB0B1B2C0000640004 +:10684600A831D821B03120008D182B2C74142C2C93 +:1068560074100D19302C0314312C0310741C372CB2 +:10686600031C372C7414382C741020000D183D2C82 +:1068760003143E2C0310741C442C031C442C741467 +:10688600452C7410741CA62C29004E08043A0130BD +:10689600031D0030F1004E08053A0130031D00309B +:1068A600F0007108F0040319662C2A00C3010C30AD +:1068B600C4002030C5000130C6000930C700803151 +:1068C6001E25B031782C29004E08003A0319782C81 +:1068D6002A00C3010330C4003530C5000130C600AC +:1068E6000930C70080311E25B031FF302900EF0086 +:1068F60090316820B03126005108003A031D8A2CD9 +:10690600FF302900EF0088311D27B0318F2C290078 +:10691600EF0188311D27B03101302900EF008031A9 +:10692600E727B03164000B30FB002630FC005D30F9 +:10693600FD00FD0B9C2CFC0B9C2CFB0B9C2C0000E7 +:1069460000006400962C2A0064000D30BC00003064 +:10695600BD00BE016430BF00C0018031F026B031F9 +:1069660070080319952D29004E08043A0130031DBD +:106976000030F1004E08053A0130031D0030F000EA +:106986007108F0040319F12C2A00C3010630C40073 +:106996002A30C5000130C6000A30C70080311E25E6 +:1069A600B03102302A00C3000630C400EA30C50008 +:1069B6000030C6000530C70080311E25B0310430D6 +:1069C6002A00C3002A30C4005730C5000030C60074 +:1069D6000230C70080311E25B031102D29004E0827 +:1069E600003A0319102D2A00C301C4012F30C50037 +:1069F6000030C6001030C70080311E25B03101308E +:106A06002A00C3000330C4002C30C5000030C60085 +:106A16000230C70080311E25B03134302900D40041 +:106A26009031F527B03170082900D40098315C27E1 +:106A3600B03170082800EF009831B127B0310D3021 +:106A46002A00BC000030BD000230BE003230BF005C +:106A5600C0018031F026B031700803195B2D633018 +:106A660028006F020318492DEF0A9831B127B0317B +:106A760028006F082900D20098318D27B0317008A0 +:106A8600E8003430E70098310724B0310D302A0091 +:106A9600BC000030BD000230BE003230BF00C00175 +:106AA6008031F026B031700803195B2D6400492D42 +:106AB6000D30BC000030BD000130BE003230BF00DA +:106AC600C0018031F026B03170080319932D2800DB +:106AD6006F08003C0318812DEF039831B127B031C0 +:106AE60028006F082900D20098318D27B031700830 +:106AF600E8003430E70098310724B0310D302A0021 +:106B0600BC000030BD000130BE003230BF00C00105 +:106B16008031F026B03170080319932D6400812D61 +:106B26006400222D20005A08003A031DEA2DFF308A +:106B36002900D4009031F527B03170082600C9002D +:106B4600FE302900D4009031F527B03170082600B8 +:106B5600CA00FD302900D4009031F527B031700805 +:106B66002600CC00FC302900D4009031F527B03146 +:106B760070082900A700A601FB30D4009031F52744 +:106B8600B03170082900A6070030A73D26004A0844 +:106B96002900EF0088311D27B03126004908290059 +:106BA600EF0090316820B03126004C082900EF0034 +:106BB6008031E727B03121005F08013A031DE62D39 +:106BC60001302000AB00A8310020B031ED2DA031FE +:106BD600D626B03188310020B03129005114640026 +:106BE60098310020B03120005A08003A031DFF2DCD +:106BF600A8313424B031022EA8316522B0310030DC +:106C060026006F06031D092E00306E060319102E8E +:106C16000130EE020030EF3B432E20005A08003AC6 +:106C26000130031D0030F10027004408003A01300E +:106C360003190030F0007008F10526006D08013ACE +:106C46000130031D0030F0007108F0050319432ED2 +:106C56002700320803193E2E2900EF0188311D272F +:106C6600B0312900EF0190316820B0312900EF01E1 +:106C76008031E727B0312600ED0198316F27B0311A +:046C8600F22D442E79 +:1073F0002E308400AF3085004D30F0000130F100B8 +:107400002230860000308700A8312B24B831C730E5 +:107410008400AF3085003630F0000130F100A0303C +:10742000860000308700A8312B24B831FF3084005B +:107430009F3085000130F0000130F1006F30860090 +:1074400000308700A8312B24B83197308400B73042 +:1074500085001430F0000130F100D6308600003095 +:107460008700A8312B24B831ED308400B730850077 +:107470000A30F0000130F100203086000130870032 +:10748000A8312B24B831E9308400B93085000630AA +:10749000F0000130F100EA30860000308700A831AA +:1074A0002B24B83146308400B63085004330F000DC +:1074B0000130F1002A30860001308700A8312B24EA +:1074C000B8317B308400AF3085004C30F0000130A3 +:1074D000F100A030860001308700A8312B24B8319C +:1074E000FE308400B63085002830F0000130F10015 +:1074F0002030860002308700A8312B24B831F330C9 +:107500008400B93085000230F0000130F1006D30A8 +:10751000860001308700A8312B24B831EF30840079 +:10752000B93085000430F0000130F100EC30860005 +:1075300001308700A8312B24B831DF308400B73008 +:1075400085000E30F0000130F10048308600023036 +:107550008700A8312B24B831F5308400B93085007C +:107560000130F0000130F1006F30860001308700FB +:10757000A8312B24B831AB308400B73085001430EB +:10758000F0000130F1005630860002308700A8314B +:107590002B24B831C4308400B63085003A30F00076 +:1075A0000130F100A030860002308700A8312B2482 +:1075B000B831FB308400873085000530F0000130A1 +:1075C000F1006A30860002308700A8312B24B831E0 +:1075D000D0308400B73085000F30F0000130F1006A +:1075E000DA30860002308700A8312B24B8312630EB +:1075F0008400B73085002730F0000130F1002030E2 +:10760000860003308700A8312B24B831F63084007F +:10761000B93085000130F0000130F1006F30860094 +:1076200002308700A8312B24B831F9308400A7300C +:1076300085000730F0000130F100E93086000230AB +:107640008700A8312B24B8314D308400B730850035 +:107650002630F0000130F10047308600033087000B +:10766000A8312B24B831F7308400B73085000930B9 +:10767000F0000130F100A030860003308700A8310F +:107680002B24B831F7308400B93085000130F00088 +:107690000130F1006D30860003308700A8312B24C3 +:1076A000B831E0308400B93085000930F000013095 +:1076B000F100A930860003308700A8312B24B831AF +:1076C000FE3084008F3085000230F0000130F10080 +:1076D0006E30860003308700A8312B24B831893002 +:1076E0008400B63085003B30F0000130F100B2304C +:1076F000860003308700A8312B24B8317330840012 +:10770000B73085002430F0000130F10020308600D1 +:1077100004308700A8312B24B831FD308400AF300D +:1077200085000330F0000130F100ED3086000330B9 +:107730008700A8312B24B831BF308400B7308500D2 +:107740001130F0000130F100443086000430870031 +:08775000A8312B24B831080018 +:0A0FF600543455344E3445340034B1 +:041FFC000034003479 +:023FFE0000348D +:024FF200013488 +:024FF400003487 +:024FF600003485 +:024FF800003483 +:024FFA00013480 +:024FFC0000347F +:024FFE0000347D +:065E5C004C343D3400341B +:065E6200753448340034E1 +:065E68004C343D3400340F +:025E6E000034FE +:065E7000643442340034EA +:105E76004634693464346534723420344C346F34B7 +:105E860073347334203469346E3470347534743436 +:025E96000034D6 +:065E9800753448340034AB +:065E9E0043343D340034E2 +:065EA400703446340034A6 +:065EAA0043343D340034D6 +:065EB0007034463400349A +:065EB60043343D340034CA +:045EBC007534003405 +:065EC0004C343D340034B7 +:065EC60064344234003494 +:025ECC000034A0 +:025ECE00073497 +:025ED000073495 +:105ED20041344E3454343D34203420343034573439 +:025EE20000348A +:105EE40041344E3454343D34203420343034573427 +:025EF400003478 +:105EF6005034573452343D3430342E3430345734E1 +:025F0600003465 +:105F0800543445345334543420344D344F344434A9 +:045F180045340034D8 +:105F1C0020342034203420342034203420342034D5 +:045F2C0020340034E9 +:105F300020342034203420342034203420342034C1 +:045F400020340034D5 +:105F4400543445345334543420344D344F3444346D +:045F5400453400349C +:105F58006234793420344E3437344434443443344E +:025F6800003403 +:105F6A00453458345434203462346F3461347234D2 +:045F7A006434003457 +:105F7E004134543455342D343134303430340034CB +:105F8E004534463446343D342034203430342534C0 +:025F9E000034CD +:105FA00041344E3454343D3430342E34303457344C +:025FB0000034BB +:105FB200203420342034203420342034203420343F +:025FC2000034A9 +:105FC4004F345634453452344C344F3441344434D1 +:025FD400003497 +:105FD600203420342034203420342034203420341B +:025FE600003485 +:105FE8005334573452343D34203420342034203450 +:025FF800003473 +:025FFA00003471 +:045FFC0063340034D6 +:106C8C004634693464346534723420344C346F3493 +:066C9C0073347334003470 +:106CA2004634413453345434203454344534533408 +:046CB2005434003422 +:106CB60041344E343D3430342E343034573400347D +:106CC60041344E343D34203420343034573400348B +:106CD6004534463446343D3420342034303425346B +:026CE600003478 +:106CE8004534463446343D34203430342534003479 +:046CF80070340034C0 +:046CFC002E340034FE +:106D00005334573452343D3430342E3430343034EC +:026D100000344D +:026D120000344B +:026D1400003449 +:026D1600203427 +:026D1800003445 +:026D1A00003443 +:046D1C00003400340B +:026D200000343D +:026D220000343B +:106D24004F345634453452344C344F344134443463 +:026D3400003429 +:026D3600003427 +:106D380020342034203420342034203420342034AB +:026D4800003415 +:106D4A002034203420342034203420342034203499 +:026D5A00003403 +:086D5C00333433341334803466 +:106D64004F345634453452344C344F344134443423 +:026D74000034E9 +:106D7600203420342034203420342034203420346D +:026D86000034D7 +:106D8800203420342034203420342034203420345B +:066D980020342034003419 +:106D9E002034203420342034203420342034203445 +:026DAE000034AF +:106DB0002034203420342034203420342034203433 +:066DC000203420340034F1 +:106DC6005334573452343D3430342E343034303426 +:026DD600003487 +:106DD8005034573452343D3430342E3430345734F0 +:026DE800003475 +:106DEA005034573452343D342034203430345734FC +:026DFA00003463 +:106DFC00463457342034763465347234203433348A +:066E0C002E343234003484 +:106E12005034573452343D342034203430345734D3 +:026E220000343A +:106E240020342034203420342034203420342034BE +:066E34002034203400347C +:106E3A0020342034203420342034203420342034A8 +:026E4A00003412 +:106E4C004634573420347634653472342034333439 +:066E5C002E343234003434 +:106E62006234793420344E34373444344434433435 +:026E72000034EA +:106E7400453458345434203462346F3461347234B9 +:046E8400643400343E +:106E88004F345634453452344C344F3441344434FE +:026E98000034C4 +:046E9A00003400348C +:026E9E000034BE +:026EA0000034BC +:026EA2000034BA +:026EA4000034B8 +:046EA6001034273449 +:046EAA001034273445 +:026EAE000034AE +:106EB000523445345334453454342034203420344F +:026EC00000349C +:106EC2005334573452343D3430342E343034303429 +:026ED20000348A +:106ED4005334573452343D3430342E343034303417 +:026EE400003478 +:106EE6005334573452343D34203420342034203443 +:026EF600003466 +:106EF80020342034203420342034203420342034EA +:026F0800003453 +:106F0A004F345634453452344C344F34413444347B +:026F1A00003441 +:106F1C0020342034203420342034203420342034C5 +:026F2C0000342F +:106F2E0041344E3454343D3430342E3430345734AE +:026F3E0000341D +:026F400000341B +:0A6F420030342E3430343034003483 +:0A6F4C0030342E3430343034003479 +:026F5600003405 +:026F5800003403 +:026F5A00003401 +:046F5C0020340034A9 +:046F60005F34003466 +:046F64002E34003493 +:046F68005F3400345E +:106F6C002034203420342034203420342034203475 +:026F7C000034DF +:106F7E002034203420342034203420342034203463 +:026F8E000034CD +:026F90000134CA +:046F92006C34003427 +:026F96000134C4 +:046F9800633400342A +:046F9C006C3400341D +:0A6FA000543455344E3445340034A7 +:046FAA00203400345B +:106FAE004134543455342D3431343034303400348B +:046FBE002034003447 +:046FC2005F34003404 +:046FC6002E34003431 +:046FCA002E3400342D +:046FCE002E34003429 +:046FD2002034003433 +:046FD6005F340034F0 +:106FDA0046344134533454342034543445345334CD +:046FEA0054340034E7 +:106FEE005234453453344534543420342034203410 +:026FFE0000345D +:1070000000340034003400340034003400345F3481 +:1070100000340034003407340034073400341434AE +:107020007F3414347F34143424342A347F342A34A3 +:10703000123423341334083464346234363449341B +:1070400055342234503400340534033400340034D1 +:1070500000341C34223441340034003441342234AE +:107060001C34003408342A341C342A3408340834DC +:1070700008343E340834083400345034303400349A +:107080000034083408340834083408340034303408 +:1070900030340034003420341034083404340234E2 +:1070A0003E345134493445343E34003442347F3424 +:1070B000403400344234613451344934463421344C +:1070C000413445344B3431341834143412347F3461 +:1070D0001034273445344534453439343C344A344B +:1070E00049344934303401347134093405340334BB +:1070F0003634493449344934363406344934493411 +:1071000029341E340034363436340034003400342C +:107110005634363400340034003408341434223405 +:1071200041341434143414341434143441342234B7 +:107130001434083400340234013451340934063430 +:1071400032344934793441343E347E34113411348C +:1071500011347E347F3449344934493436343E3432 +:1071600041344134413422347F3441344134223477 +:107170001C347F3449344934493441347F34093430 +:107180000934013401343E34413441345134323411 +:107190007F340834083408347F34003441347F3479 +:1071A000413400342034403441343F3401347F349E +:1071B00008341434223441347F3440344034403471 +:1071C00040347F340234043402347F347F34043456 +:1071D000083410347F343E344134413441343E3439 +:1071E0007F3409340934093406343E34413451348F +:1071F00021345E347F34093419342934463446341A +:107200004934493449343134013401347F34013450 +:1072100001343F344034403440343F341F34203450 +:10722000403420341F347F342034183420347F34E9 +:107230006334143408341434633403340434783439 +:107240000434033461345134493445344334003414 +:1072500000347F344134413402340434083410346F +:107260002034413441347F34003400340434023457 +:107270000134023404344034403440344034403427 +:10728000003401340234043400342034543454348F +:10729000543478347F3448344434443438343834C3 +:1072A000443444344434203438344434443448344A +:1072B0007F343834543454345434183408347E34DD +:1072C00009340134023408341434543454343C3412 +:1072D0007F340834043404347834003444347D3446 +:1072E000403400342034403444343D3400340034DD +:1072F0007F34103428344434003441347F344034F3 +:1073000000347C3404341834043478347C34083445 +:107310000434043478343834443444344434383411 +:107320007C341434143414340834083414341434CD +:1073300018347C347C34083404340434083448343D +:10734000543454345434203404343F3444344034BA +:1073500020343C344034403420347C341C342034D9 +:10736000403420341C343C344034303440343C34D9 +:10737000443428341034283444340C3450345034D9 +:1073800050343C344434643454344C344434003445 +:107390000834363441340034003400347F3400344F +:1073A00000340034413436340834003408340834AE +:1073B0002A341C34083408341C342A340834083481 +:1073C0004F345634453452344C344F3441344434C1 +:0273D000003487 +:0C73D20069346E34703475347434003447 +:0473DE006C340034D7 +:0473E2002E34003411 +:0473E6006C340034CF +:0273EA0000346D +:0273EC0000346B +:0273EE00013468 +:020000040001F9 +:04000E00C43F3312A6 +:020000040001F9 +:10E000004E00010000001500130005000000010093 +:10E0100002000000070000000700000001000000EF +:10E020000000500001001000020020000400500019 +:10E03000100000002200000045000000FF00FF006B +:10E040000000100000002200000047000100000056 +:10E05000020020000400700010000000FF00FF001C +:10E06000000010000000010000000000FF00FF00A1 +:10E07000FF00FF00FF00FF00FF00FF00FF00FF00A8 +:10E08000FF00FF00FF00FF00FF00FF00FF00FF0098 +:10E09000FF00FF00FF00FF00FF00FF00FF00FF0088 +:10E0A000FF00FF00FF00FF00FF00FF00FF00FF0078 +:10E0B000FF00FF00FF00FF00FF00FF00FF00FF0068 +:10E0C000FF00FF00FF00FF00FF00FF00FF00FF0058 +:10E0D000FF00FF00FF00FF00FF00FF00FF00FF0048 +:10E0E000FF00FF00FF00FF00FF00FF00FF00FF0038 +:10E0F000FF00FF00FF00FF00FF00FF00FF00FF0028 +:10E10000FF00FF00FF00FF00FF00FF00FF00FF0017 +:10E11000FF00FF00FF00FF00FF00FF00FF00FF0007 +:10E12000FF00FF00FF00FF00FF00FF00FF00FF00F7 +:10E13000FF00FF00FF00FF00FF00FF00FF00FF00E7 +:10E14000FF00FF00FF00FF00FF00FF00FF00FF00D7 +:10E15000FF00FF00FF00FF00FF00FF00FF00FF00C7 +:10E16000FF00FF00FF00FF00FF00FF00FF00FF00B7 +:10E17000FF00FF00FF00FF00FF00FF00FF00FF00A7 +:10E18000FF00FF00FF00FF00FF00FF00FF00FF0097 +:10E19000FF00FF00FF00FF00FF00FF00FF00FF0087 +:10E1A000FF00FF00FF00FF00FF00FF00FF00FF0077 +:10E1B000FF00FF00FF00FF00FF00FF00FF00FF0067 +:10E1C000FF00FF00FF00FF00FF00FF00FF00FF0057 +:10E1D000FF00FF00FF00FF00FF00FF00FF00FF0047 +:10E1E000FF00FF00FF00FF00FF00FF00FF00FF0037 +:10E1F000FF00FF00FF000000000001000000000021 +:00000001FF + diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/backup.c b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/backup.c new file mode 100644 index 0000000..99a8091 --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/backup.c @@ -0,0 +1,2 @@ + + diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/backup.c.ini b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/backup.c.ini new file mode 100644 index 0000000..226e6ad --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/backup.c.ini @@ -0,0 +1,9 @@ +[Bookmarks] +Count=0 +[Position] +Line=3 +Column=1 +[BreakPoints] +Count=0 +[FoldedLines] +Count=0 diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/backup.mcl b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/backup.mcl new file mode 100644 index 0000000000000000000000000000000000000000..48858cb23f9d7da94265ab41df4b8cad3887c482 GIT binary patch literal 931 zcmZXO%TB{E5JfLVm5`9=pP&xuBUx4{Q6mLZIbn^UOBS$zO+JP_KL#v#zaN4ywlgl$ zSf26q8ISMmq(v8i;W*{!b$pz!^2M$>jWSB27%TR6c(6D+JK0>IbJ5w(;U3j>jjpS% z*(YwTi}-hjUjB+*kd>zI6Wr(aUN}&2)qZHntj(c^ETH8Jay^_w54j%Bo|M(3+AGl> zp5?pKtPh`;gdCB-c{<*{%7($yY=L*nBbZ3^0A?V12s0Etf*FY(!;D48FtO+aCJ{|+ z%puO!I?P0D&LK6nr{GUK0Eg6g1d +0x02, 0x01, 0x51, 0x09, 0x06,// ? +0x32, 0x49, 0x79, 0x41, 0x3E,// @ +0x7E, 0x11, 0x11, 0x11, 0x7E,// A +0x7F, 0x49, 0x49, 0x49, 0x36,// B +0x3E, 0x41, 0x41, 0x41, 0x22,// C +0x7F, 0x41, 0x41, 0x22, 0x1C,// D +0x7F, 0x49, 0x49, 0x49, 0x41,// E +0x7F, 0x09, 0x09, 0x01, 0x01,// F +0x3E, 0x41, 0x41, 0x51, 0x32,// G +0x7F, 0x08, 0x08, 0x08, 0x7F,// H +0x00, 0x41, 0x7F, 0x41, 0x00,// I +0x20, 0x40, 0x41, 0x3F, 0x01,// J +0x7F, 0x08, 0x14, 0x22, 0x41,// K +0x7F, 0x40, 0x40, 0x40, 0x40,// L +0x7F, 0x02, 0x04, 0x02, 0x7F,// M +0x7F, 0x04, 0x08, 0x10, 0x7F,// N +0x3E, 0x41, 0x41, 0x41, 0x3E,// O +0x7F, 0x09, 0x09, 0x09, 0x06,// P +0x3E, 0x41, 0x51, 0x21, 0x5E,// Q +0x7F, 0x09, 0x19, 0x29, 0x46,// R +0x46, 0x49, 0x49, 0x49, 0x31,// S +0x01, 0x01, 0x7F, 0x01, 0x01,// T +0x3F, 0x40, 0x40, 0x40, 0x3F,// U +0x1F, 0x20, 0x40, 0x20, 0x1F,// V +0x7F, 0x20, 0x18, 0x20, 0x7F,// W +0x63, 0x14, 0x08, 0x14, 0x63,// X +0x03, 0x04, 0x78, 0x04, 0x03,// Y +0x61, 0x51, 0x49, 0x45, 0x43,// Z +0x00, 0x00, 0x7F, 0x41, 0x41,// [ +0x02, 0x04, 0x08, 0x10, 0x20,// "\" +0x41, 0x41, 0x7F, 0x00, 0x00,// ] +0x04, 0x02, 0x01, 0x02, 0x04,// ^ +0x40, 0x40, 0x40, 0x40, 0x40,// _ +0x00, 0x01, 0x02, 0x04, 0x00,// ` +0x20, 0x54, 0x54, 0x54, 0x78,// a +0x7F, 0x48, 0x44, 0x44, 0x38,// b +0x38, 0x44, 0x44, 0x44, 0x20,// c +0x38, 0x44, 0x44, 0x48, 0x7F,// d +0x38, 0x54, 0x54, 0x54, 0x18,// e +0x08, 0x7E, 0x09, 0x01, 0x02,// f +0x08, 0x14, 0x54, 0x54, 0x3C,// g +0x7F, 0x08, 0x04, 0x04, 0x78,// h +0x00, 0x44, 0x7D, 0x40, 0x00,// i +0x20, 0x40, 0x44, 0x3D, 0x00,// j +0x00, 0x7F, 0x10, 0x28, 0x44,// k +0x00, 0x41, 0x7F, 0x40, 0x00,// l +0x7C, 0x04, 0x18, 0x04, 0x78,// m +0x7C, 0x08, 0x04, 0x04, 0x78,// n +0x38, 0x44, 0x44, 0x44, 0x38,// o +0x7C, 0x14, 0x14, 0x14, 0x08,// p +0x08, 0x14, 0x14, 0x18, 0x7C,// q +0x7C, 0x08, 0x04, 0x04, 0x08,// r +0x48, 0x54, 0x54, 0x54, 0x20,// s +0x04, 0x3F, 0x44, 0x40, 0x20,// t +0x3C, 0x40, 0x40, 0x20, 0x7C,// u +0x1C, 0x20, 0x40, 0x20, 0x1C,// v +0x3C, 0x40, 0x30, 0x40, 0x3C,// w +0x44, 0x28, 0x10, 0x28, 0x44,// x +0x0C, 0x50, 0x50, 0x50, 0x3C,// y +0x44, 0x64, 0x54, 0x4C, 0x44,// z +0x00, 0x08, 0x36, 0x41, 0x00,// { +0x00, 0x00, 0x7F, 0x00, 0x00,// | +0x00, 0x41, 0x36, 0x08, 0x00,// } +0x08, 0x08, 0x2A, 0x1C, 0x08,// -> +0x08, 0x1C, 0x2A, 0x08, 0x08 // <- +}; +// diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/font5x8.h.ini b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/font5x8.h.ini new file mode 100644 index 0000000..2879890 --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/font5x8.h.ini @@ -0,0 +1,9 @@ +[Bookmarks] +Count=0 +[Position] +Line=19 +Column=43 +[BreakPoints] +Count=0 +[FoldedLines] +Count=0 diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.c b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.c new file mode 100644 index 0000000..64a1df9 --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.c @@ -0,0 +1,905 @@ + // ATU-100 project + // David Fainitski + // 2016 + +#include "oled_control.h" +#include "pic_init.h" +#include "main.h" + + +// Variables + int SWR_fixed_old = 0, work_int; + unsigned char work_char, work_str[7], work_str_2[7]; + float Forward; + int Power =0, Power_old = 10000; + int SWR_old = 10000; + char type, Soft_tune = 0, Auto = 0, Track = 0; + char bypas = 0, cap_mem = 0, ind_mem = 0, SW_mem = 0, Auto_mem = 0; + int Auto_delta; + char Restart = 0, Test = 0, lcd_prep_short = 0; + char L = 1, but= 0; + int Cap1, Cap2, Cap3, Cap4, Cap5, Cap6, Cap7; + int Ind1, Ind2, Ind3, Ind4, Ind5, Ind6, Ind7; + char Dysp_delay = 0; + int dysp_cnt = 0; + float dysp_cnt_mult = 2.3; + char Loss_mode = 0, Fid_loss; + char dysp = 1; + bit tune_btn_release; + +//void interrupt () { +//} + + +void main() { + if(STATUS.B4==0) Restart = 1; + pic_init(); + // + Delay_ms (300); + asm CLRWDT; + cells_init(); + Soft_I2C_Init(); + if(type==0) { // 2-colors led reset + LATB.B6 = 1; + LATB.B7 = 1; + } + dysp_cnt = Dysp_delay * dysp_cnt_mult; + // + Delay_ms(300); + asm CLRWDT; + // + if(PORTB.B1==0 & PORTB.B2==0) { // Test mode + Test = 1; + Auto =0; + } + if(L_q==5)L_mult = 1; + else if(L_q==6) L_mult = 2; + else if(L_q==7) L_mult = 4; + if(C_q==5) C_mult =1; + else if(C_q==6) C_mult = 2; + else if(C_q==7) C_mult = 4; + + Delay_ms(300); + asm CLRWDT; + Delay_ms(300); + asm CLRWDT; + Delay_ms(300); + asm CLRWDT; + Delay_ms(300); + asm CLRWDT; + Delay_ms(300); + asm CLRWDT; + + led_init(); + + if(PORTB.B1==0 & PORTB.B2==0 & PORTB.B0==0) { // Fast Test mode (loop) + if(type==4 | type==5) led_wr_str (0, 12, "FAST TEST", 9); // 128*64 + else if(type!=0) led_wr_str (0, 3, "FAST TEST", 9); // 1602 | 128*32 + set_cap(255); + if(L_invert==0) set_ind(255); + else set_ind(0); + set_sw(1); + asm CLRWDT; + while(1) {Delay_ms(500);asm CLRWDT;} + } + asm CLRWDT; + // + if(Button(&PORTB, 0, 100, 0)) { // Fider loss input + if(type==4 | type==5) { led_wr_str (0, 6, "Fider Loss", 10); // 128*64 + led_wr_str (2, 6, "input", 5); + led_wr_str (4, 6+3*12, "dB", 2);} + else if(type!=0) { led_wr_str (0, 0, "Fider Loss input", 16); // 1602 | 128*32 + led_wr_str (1, 3, "dB", 2);} + Fid_loss = Bcd2Dec(EEPROM_Read(0x34)); + show_loss(); + // + while(1) { + if(Button(&PORTB, 2, 50, 0)){ // BYP button + if(Fid_loss<99) { + Fid_loss ++; + show_loss(); + EEPROM_Write(0x34, Dec2Bcd(Fid_loss)); + } + while(Button(&PORTB, 2, 50, 0)) asm CLRWDT; + } + // + if(Button(&PORTB, 1, 50, 0)){ // AUTO button + if(Fid_loss>0) { + Fid_loss --; + show_loss(); + EEPROM_Write(0x34, Dec2Bcd(Fid_loss)); + } + while(Button(&PORTB, 1, 50, 0)) asm CLRWDT; + } + asm CLRWDT; + } // while + } // Fider loss input + // + if(Test==0) { + cap = EEPROM_Read(255); + ind = EEPROM_Read(254); + SW = EEPROM_Read(253); + swr_a = EEPROM_Read(252) * 256; + swr_a += EEPROM_Read(251); + set_ind(ind); + set_cap(cap); + set_sw(SW); + if(Restart==1 ) lcd_prep_short = 1; + lcd_prep(); + } + else Test_init(); + + lcd_ind(); + tune_btn_release = 1; + + + + //******************************* + + while(1) { + asm CLRWDT; + lcd_pwr(); + // + if(Test==0) button_proc(); + else button_proc_test(); + // + if(dysp_cnt!=0) dysp_cnt--; + else if(Test==0 & Dysp_delay!=0 & dysp==1){ + if(Relay_off){ + set_ind(0); + set_cap(0); + set_SW(0); + } + dysp = 0; + dysp_off(); + } + + // next While code + + } +} + + +//***************** Routines ***************** + + void button_proc_test(void) { + if(Button(&PORTB, 0, 50, 0)){ // Tune btn + Delay_ms(250); + asm CLRWDT; + if(PORTB.B0==1) { // short press button + if(SW==0) SW = 1; else SW = 0; + set_sw(SW); + lcd_ind(); + } + else { // long press button + if(L==1) L = 0; else L = 1; + if(L==1) { + if(type==4 |type==5) // 128*64 OLED + led_wr_str (0, 16+12*8, "l", 1); + else if(type!=0) // 1602 LCD & 128*32 OLED + led_wr_str (0, 8, "l", 1); + } + else { + if(type==4 |type==5) // 128*64 OLED + led_wr_str (0, 16+12*8, "c", 1); + else if(type!=0) // 1602 LCD & 128*32 OLED + led_wr_str (0, 8, "c", 1); + } + } + while(Button(&PORTB, 0, 50, 0)) {lcd_pwr(); asm CLRWDT; } + } // END Tune btn + // + if(Button(&PORTB, 2, 50, 0)){ // BYP button + asm CLRWDT; + while(PORTB.B2==0) { + if(L & ind<32*L_mult-1) { + ind ++; + set_ind(ind); + } + else if(!L & cap<32*L_mult-1) { + cap ++; + set_cap(cap); + } + lcd_ind(); + lcd_pwr(); + Delay_ms(30); + asm CLRWDT; + } + } // end of BYP button + // + if(Button(&PORTB, 1, 50, 0) & Bypas==0){ // Auto button + asm CLRWDT; + while(PORTB.B1==0) { + if(L & ind>0) { + ind --; + set_ind(ind); + } + else if(!L & cap>0) { + cap --; + set_cap(cap); + } + lcd_ind(); + lcd_pwr(); + Delay_ms(30); + asm CLRWDT; + } + } + return; +} + + +void button_proc(void) { + if(tune_btn_release==0 & Button(&PORTB, 0, 50, 1)) tune_btn_release = 1; + if(tune_btn_release==0 & Button(&PORTB, 0, 50, 0)) dysp_cnt = Dysp_delay * dysp_cnt_mult; + if((Button(&PORTB, 0, 50, 0) & tune_btn_release) | Soft_tune){ + dysp_on(); + dysp_cnt = Dysp_delay * dysp_cnt_mult; + Delay_ms(250); + asm CLRWDT; + if(Soft_tune == 0 & PORTB.B0==1) { // short press button + show_reset(); + bypas =0; + } + else { // long press button + p_Tx = 1; // + n_Tx = 0; // TX request + Delay_ms(250); // + btn_push(); + bypas = 0; + Soft_tune = 0; + tune_btn_release = 0; + } + } + // + if(Button(&PORTB, 2, 50, 0)){ // BYP button + dysp_on(); + dysp_cnt = Dysp_delay * dysp_cnt_mult; + asm CLRWDT; + if(bypas == 0) { + bypas = 1; + cap_mem = cap; + ind_mem = ind; + SW_mem = SW; + cap = 0; + if(L_invert) ind = 255; + else ind = 0; + SW = 1; + set_ind(ind); + set_cap(cap); + set_SW(SW); + if(Loss_mode==0) lcd_ind(); + Auto_mem = Auto; + Auto = 0; + } + else { + bypas = 0; + cap = cap_mem; + ind = ind_mem; + SW = SW_mem; + set_cap(cap); + set_ind(ind); + set_SW(SW); + if(Loss_mode==0) lcd_ind(); + Auto = Auto_mem; + } + if(type==4 | type==5) { // 128*64 OLED + if(Auto & !Bypas) led_wr_str (0, 16+8*12, ".", 1); + else if(!Auto & Bypas) led_wr_str (0, 16+8*12, "_", 1); + else led_wr_str (0, 16+8*12, " ", 1); + } + else if(type!=0) { // 1602 LCD or 128*32 OLED + if(Auto & !Bypas) led_wr_str (0, 8, ".", 1); + else if(!Auto & Bypas) led_wr_str (0, 8, "_", 1); + else led_wr_str (0, 8, " ", 1); + } + asm CLRWDT; + while(Button(&PORTB, 2, 50, 0)) {lcd_pwr(); asm CLRWDT; } + } + // + if(Button(&PORTB, 1, 50, 0) & Bypas==0){ // Auto button + dysp_on(); + dysp_cnt = Dysp_delay * dysp_cnt_mult; + asm CLRWDT; + if(Auto == 0) Auto = 1; + else Auto = 0; + EEPROM_Write(2, Auto); + if(type==4 | type==5) { // 128*64 OLED + if(Auto & !Bypas) led_wr_str (0, 16+8*12, ".", 1); + else if(!Auto & Bypas) led_wr_str (0, 16+8*12, "_", 1); + else led_wr_str (0, 16+8*12, " ", 1); + } + else if(type!=0) { // 1602 LCD or 128*32 OLED + if(Auto & !Bypas) led_wr_str (0, 8, ".", 1); + else if(!Auto & Bypas) led_wr_str (0, 8, "_", 1); + else led_wr_str (0, 8, " ", 1); + } + asm CLRWDT; + while(Button(&PORTB, 1, 50, 0)) {lcd_pwr(); asm CLRWDT; } + } + return; +} + +void show_reset() { + atu_reset(); + SW = 1; + set_sw(SW); + EEPROM_Write(255, 0); + EEPROM_Write(254, 0); + EEPROM_Write(253, 1); + EEPROM_Write(252, 0); + EEPROM_Write(251, 0); + lcd_ind(); + Loss_mode = 0; + p_Tx = 0; + n_Tx = 1; + SWR = 0; + PWR = 0; + SWR_fixed_old = 0; + if(type==4 | type==5) { // 128*64 OLED + led_wr_str (2, 16, "RESET ", 8); + asm CLRWDT; + delay_ms(600); + led_wr_str (2, 16, "SWR=0.00", 8); + asm CLRWDT; + } + else if(type!=0) {// 1602 LCD & 128*32 OLED + led_wr_str (1, 0, "RESET ", 8); + asm CLRWDT; + delay_ms(600); + led_wr_str (1, 0, "SWR=0.00", 8); + asm CLRWDT; + } + else { + LATB.B6 = 1; + LATB.B7 = 1; + } + SWR_old = 10000; + Power_old = 10000; + lcd_pwr(); + return; +} + +void btn_push() { + asm CLRWDT; + if(type==4 | type==5) { // 128*64 OLED + led_wr_str (2, 16+12*4, "TUNE", 4); + } + else if(type!=0) { // 1602 LCD & 128*32 OLED + led_wr_str (1, 4, "TUNE", 4); + } + else { + LATB.B6 = 1; + LATB.B7 = 1; + } + tune(); + if(type==0) { // real-time 2-colors led work + if(swr<=150) { LATB.B6 = 0; LATB.B7 = 1; } // Green + else if(swr<=250) {PORTB.B6 = 0; PORTB.B7 = 0;} // Orange + else { PORTB.B6 = 1; PORTB.B7 = 0; } // Red + } + else if(Loss_mode==0 | Loss_ind==0) lcd_ind(); + EEPROM_Write(255, cap); + EEPROM_Write(254, ind); + EEPROM_Write(253, SW); + EEPROM_Write(252, swr_a/256); + EEPROM_Write(251, swr_a%256); + SWR_old = 10000; + Power_old = 10000; + lcd_pwr(); + SWR_fixed_old = SWR; + p_Tx = 0; + n_Tx = 1; + asm CLRWDT; + return; +} + + + void lcd_prep() { + asm CLRWDT; + if(type==4 |type==5){ // 128*64 OLED + if(lcd_prep_short==0) { + led_wr_str (0, 22, "ATU-100", 7); + led_wr_str (2, 6, "EXT board", 9); + led_wr_str (4, 16, "by N7DDC", 8); + led_wr_str (6, 4, "FW ver 3.2", 10); + asm CLRWDT; + Delay_ms(600); + asm CLRWDT; + Delay_ms(500); + asm CLRWDT; + led_wr_str (0, 16, " ", 8); + led_wr_str (2, 4, " ", 10); + led_wr_str (4, 16, " ", 8); + led_wr_str (6, 4, " ", 10); + } + Delay_ms(150); + if(P_High==1) led_wr_str (0, 16, "PWR= 0W", 8); + else led_wr_str (0, 16, "PWR=0.0W", 8); + led_wr_str (2, 16, "SWR=0.00", 8); + if(Auto) led_wr_str (0, 16+8*12, ".", 1); + } + else if(type!=0) { // 1602 LCD & 128*32 OLED + if(lcd_prep_short==0) { + led_wr_str (0, 4, "ATU-100", 7); + led_wr_str (1, 3, "EXT board", 9); + asm CLRWDT; + Delay_ms(700); + asm CLRWDT; + Delay_ms(500); + asm CLRWDT; + led_wr_str (0, 4, "by N7DDC", 8); + led_wr_str (1, 3, "FW ver 3.2", 10); + asm CLRWDT; + Delay_ms(600); + asm CLRWDT; + Delay_ms(500); + asm CLRWDT; + led_wr_str (0, 4, " ", 8); + led_wr_str (1, 3, " ", 10); + } + Delay_ms(150); + if(P_High==1) led_wr_str (0, 0, "PWR= 0W", 8); + else led_wr_str (0, 0, "PWR=0.0W", 8); + led_wr_str (1, 0, "SWR=0.00", 8); + if(Auto) led_wr_str (0, 8, ".", 1); + } + asm CLRWDT; + lcd_ind(); + return; +} + + +void lcd_swr(int swr) { + asm CLRWDT; + if(swr!=SWR_old) { + SWR_old = swr; + if(SWR==0) { // Low power + if(type==4 | type==5) led_wr_str (2, 16+4*12, "0.00", 4); // 128*64 OLED + else if(type!=0) led_wr_str (1, 4, "0.00", 4); // 1602 & 128*32 OLED + else if(type==0) { // real-time 2-colors led work + LATB.B6 = 1; + LATB.B7 = 1; + } + SWR_old = 0; + } + else { + IntToStr(swr, work_str); + work_str_2[0] = work_str[3]; + work_str_2[1] = '.'; + work_str_2[2] = work_str[4]; + work_str_2[3] = work_str[5]; + if(type==4 | type==5) led_wr_str (2, 16+4*12, work_str_2, 4); // 128*64 OLED + else if(type!=0) led_wr_str (1, 4, work_str_2, 4); // 1602 & 128*32 + else if(type==0) { // real-time 2-colors led work + if(swr<=150) { LATB.B6 = 0; LATB.B7 = 1; } // Green + else if(swr<=250) {PORTB.B6 = 0; PORTB.B7 = 0;} // Orange + else { PORTB.B6 = 1; PORTB.B7 = 0; } // Red + } + } + } + asm CLRWDT; + return; +} + + +void button_delay() { + if((Button(&PORTB, 0, 25, 0)) | (Button(&PORTB, 1, 25, 0)) | (Button(&PORTB, 2, 25, 0))) { + but = 1; + } + return; +} + +void show_pwr(int Power, int SWR) { + int p_ant, eff; + float a, b; + a = 100; + asm CLRWDT; + // + if(Test==0 & Loss_ind==1 & Power>=10) { + if(Loss_mode==0) { // prepare + if(type==4 |type==5){ // 128*64 OLED + if(P_High==1) led_wr_str(4, 16, "ANT= 0W", 8); + else led_wr_str(4, 16, "ANT=0.0W", 8); + led_wr_str(6, 16, "EFF= 0%", 8); + } + else if(type==2 | type==3) { // 128*32 OLED + if(P_High==1) led_wr_str (0, 9, "ANT= 0W", 8); + else led_wr_str (0, 9, "ANT=0.0W", 8); + led_wr_str (1, 9, "EFF= 0%", 8); + } + else if(type==1) { // 1602 LCD + if(P_High==1) led_wr_str (0, 9, "AN= 0W", 7); + else led_wr_str (0, 9, "AN=0.0W", 7); + led_wr_str (1, 9, "EFF= 0%", 7); + } + } + Loss_mode = 1; + } + else { + if(Loss_mode==1) lcd_ind(); + Loss_mode = 0; + } + asm CLRWDT; + if(Power != Power_old) { + Power_old = Power; + // + if(P_High==0) { + if(Power >= 100) { // > 10 W + Power += 5; // rounding to 1 W + IntToStr(Power, work_str); + work_str_2[0] = work_str[2]; + work_str_2[1] = work_str[3]; + work_str_2[2] = work_str[4]; + work_str_2[3] = 'W'; + } + else { + IntToStr(Power, work_str); + if(work_str[4] != ' ') work_str_2[0] = work_str[4]; else work_str_2[0] = '0'; + work_str_2[1] = '.'; + if(work_str[5] != ' ') work_str_2[2] = work_str[5]; else work_str_2[2] = '0'; + work_str_2[3] = 'W'; + } + } + else { // High Power + if(Power<999){ // 0 - 999 Watt + IntToStr(Power, work_str); + work_str_2[0] = work_str[3]; + work_str_2[1] = work_str[4]; + work_str_2[2] = work_str[5]; + work_str_2[3] = 'W'; + } + else { + IntToStr(Power, work_str); + work_str_2[0] = work_str[2]; + work_str_2[1] = work_str[3]; + work_str_2[2] = work_str[4]; + work_str_2[3] = work_str[5]; + } + } + if(type==4 | type==5) led_wr_str (0, 16+4*12, work_str_2, 4); // 128*64 OLED + else if(type!=0) led_wr_str (0, 4, work_str_2, 4); // 1602 & 128*32 + // + asm CLRWDT; + // Loss indication + if(Loss_mode==1) { + if(ind==0 & cap==0) swr_a = SWR; + a = 1.0 / ((swr_a/100.0 + 100.0/swr_a) * Fid_loss/10.0 * 0.115 + 1.0); // Fider loss + b = 4.0 / (2.0 + SWR/100.0 + 100.0/SWR); // SWR loss + if(a>=1.0) a = 1.0; + if(b>=1.0) b = 1.0; + p_ant = Power * a * b; + eff = a * b * 100; + if(eff>=100) eff = 99; + // + if(P_High==0) { + if(p_ant >= 100) { // > 10 W + p_ant += 5; // rounding to 1 W + IntToStr(p_ant, work_str); + work_str_2[0] = work_str[2]; + work_str_2[1] = work_str[3]; + work_str_2[2] = work_str[4]; + work_str_2[3] = 'W'; + } + else { + IntToStr(p_ant, work_str); + if(work_str[4] != ' ') work_str_2[0] = work_str[4]; else work_str_2[0] = '0'; + work_str_2[1] = '.'; + if(work_str[5] != ' ') work_str_2[2] = work_str[5]; else work_str_2[2] = '0'; + work_str_2[3] = 'W'; + } + } + else { // High Power + if(p_ant<999){ // 0 - 1500 Watts + IntToStr(p_ant, work_str); + work_str_2[0] = work_str[3]; + work_str_2[1] = work_str[4]; + work_str_2[2] = work_str[5]; + work_str_2[3] = 'W'; + } + else { + IntToStr(p_ant, work_str); + work_str_2[0] = work_str[2]; + work_str_2[1] = work_str[3]; + work_str_2[2] = work_str[4]; + work_str_2[3] = work_str[5]; + } + } + if(type==4 | type==5) led_wr_str (4, 16+4*12, work_str_2, 4); // 128*64 OLED + else if(type==2 | type==3) led_wr_str (0, 13, work_str_2, 4); // 128*32 + else if(type!=0) led_wr_str (0, 12, work_str_2, 4); // 1602 + // + IntToStr(eff, work_str); + work_str_2[0] = work_str[4]; + work_str_2[1] = work_str[5]; + if(type==4 | type==5) led_wr_str(6, 16+5*12, work_str_2, 2); + else if(type==2 | type==3) led_wr_str(1, 14, work_str_2, 2); + else if(type==1) led_wr_str(1, 13, work_str_2, 2); + } + } + asm CLRWDT; + return; +} + +void lcd_pwr() { + int p = 0; + char peak_cnt; + int delta = Auto_delta - 100; + char cnt; + int SWR_fixed; + PWR = 0; + asm CLRWDT; + // + if(dysp==0 & Relay_off==1){ + get_pwr(); + if(PWR>=10){ + set_ind(ind); + set_cap(cap); + set_SW(SW); + // + dysp = 1; + dysp_on(); // dysplay ON + dysp_cnt = Dysp_delay * dysp_cnt_mult; + } + return; + } + // peak detector + cnt = 120; + for(peak_cnt = 0; peak_cnt < cnt; peak_cnt++){ + if(PORTB.B1==0 | PORTB.B2==0 | (PORTB.B0==0 & tune_btn_release)) {button_delay(); if(but==1) {but = 0; return;} } + get_pwr(); + if(PWR>p) {p = PWR; SWR_fixed = SWR;} + Delay_ms(3); + } + asm CLRWDT; + if(p>=100){ p = (p + 5) / 10; p*= 10; } // round to 1 W if more then 100 W + Power = p; + if(Power<10) SWR_fixed = 0; + lcd_swr(SWR_fixed); + if(Power>=10 & Dysp_delay>0) { + if(dysp==0){ dysp = 1; dysp_on(); } // dysplay ON + dysp_cnt = Dysp_delay * dysp_cnt_mult; + } + // + if(Auto & SWR_fixed>=Auto_delta & ((SWR_fixed>SWR_fixed_old & (SWR_fixed-SWR_fixed_old)>delta) | (SWR_fixeddelta) | SWR_fixed_old==999)) + Soft_tune = 1; + // + if(PORTB.B1==0 | PORTB.B2==0 | (PORTB.B0==0 & tune_btn_release)) {button_delay(); if(but==1) {but = 0; return;} } // Fast return if button pressed + // + show_pwr(Power, SWR_fixed); + // + if(PORTB.B1==0 | PORTB.B2==0 | (PORTB.B0==0 & tune_btn_release)) {button_delay(); if(but==1) {but = 0; return;} } + asm CLRWDT; + if(Overload==1) { + if(type==4 | type==5) { // 128*64 OLED + led_wr_str (2, 16, " ", 8); + delay_ms(100); + led_wr_str (2, 16, "OVERLOAD", 8); + delay_ms(500); + asm CLRWDT; + led_wr_str (2, 16, " ", 8); + delay_ms(300); + asm CLRWDT; + led_wr_str (2, 16, "OVERLOAD", 8); + delay_ms(500); + asm CLRWDT; + led_wr_str (2, 16, " ", 8); + delay_ms(300); + asm CLRWDT; + led_wr_str (2, 16, "OVERLOAD", 8); + delay_ms(500); + asm CLRWDT; + led_wr_str (2, 16, " ", 8); + delay_ms(100); + led_wr_str (2, 16, "SWR= ", 8); + } + else if(type!=0) { // 1602 & 128*32 + led_wr_str (1, 0, " ", 8); + delay_ms(100); + led_wr_str (1, 0, "OVERLOAD", 8); + delay_ms(500); + asm CLRWDT; + led_wr_str (1, 0, " ", 8); + delay_ms(300); + asm CLRWDT; + led_wr_str (1, 0, "OVERLOAD", 8); + delay_ms(500); + asm CLRWDT; + led_wr_str (1, 0, " ", 8); + delay_ms(300); + asm CLRWDT; + led_wr_str (1, 0, "OVERLOAD", 8); + delay_ms(500); + asm CLRWDT; + led_wr_str (1, 0, " ", 8); + delay_ms(100); + led_wr_str (1, 0, "SWR= ", 8); + } + asm CLRWDT; + SWR_old = 10000; + lcd_swr(SWR_fixed); + } + return; +} + +void lcd_ind() { + char column; + asm CLRWDT; + if(1) { + work_int = 0; + if(ind.B0) work_int += Ind1; + if(ind.B1) work_int += Ind2; + if(ind.B2) work_int += Ind3; + if(ind.B3) work_int += Ind4; + if(ind.B4) work_int += Ind5; + if(ind.B5) work_int += Ind6; + if(ind.B6) work_int += Ind7; + if(work_int>9999) { // more then 9999 nH + work_int += 50; // round + IntToStr(work_int, work_str); + work_str_2[0] = work_str[1]; + work_str_2[1] = work_str[2]; + work_str_2[2] = '.'; + work_str_2[3] = work_str[3]; + } + else { + IntToStr(work_int, work_str); + if(work_str[2] != ' ') work_str_2[0] = work_str[2]; else work_str_2[0] = '0'; + work_str_2[1] = '.'; + if(work_str[3] != ' ') work_str_2[2] = work_str[3]; else work_str_2[2] = '0'; + if(work_str[4] != ' ') work_str_2[3] = work_str[4]; else work_str_2[3] = '0'; + } + if(type==4 | type==5) { // 128*64 OLED + if(SW==1) column = 4; else column = 6; + led_wr_str (column, 16, "L=", 2); + led_wr_str (column, 16+6*12, "uH", 2); + led_wr_str (column, 16+2*12, work_str_2, 4); + } + else if(type==2 | type==3) {// 128*32 OLED + if(SW==1) column = 0; else column = 1; + led_wr_str (column, 9, "L=", 2); + led_wr_str (column, 15, "uH", 2); + led_wr_str (column, 11, work_str_2, 4); + } + else if(type==1) { // 1602 LCD + if(SW==1) column = 0; else column = 1; + led_wr_str (column, 9, "L=", 2); + led_wr_str (column, 15, "u", 1); + led_wr_str (column, 11, work_str_2, 4); + } + } + asm CLRWDT; + if(1) { + work_int = 0; + if(cap.B0) work_int += Cap1; + if(cap.B1) work_int += Cap2; + if(cap.B2) work_int += Cap3; + if(cap.B3) work_int += Cap4; + if(cap.B4) work_int += Cap5; + if(cap.B5) work_int += Cap6; + if(cap.B6) work_int += Cap7; + IntToStr(work_int, work_str); + work_str_2[0] = work_str[2]; + work_str_2[1] = work_str[3]; + work_str_2[2] = work_str[4]; + work_str_2[3] = work_str[5]; + // + if(type==4 | type==5) { // 128*64 OLED + if(SW==1) column = 6; else column = 4; + led_wr_str (column, 16, "C=", 2); + led_wr_str (column, 16+6*12, "pF", 2); + led_wr_str (column, 16+2*12, work_str_2, 4); + } + else if(type==2 | type==3) {// 128*32 OLED + if(SW==1) column = 1; else column = 0; + led_wr_str (column, 9, "C=", 2); + led_wr_str (column, 15, "pF", 2); + led_wr_str (column, 11, work_str_2, 4); + } + else if(type==1) { // 1602 LCD + if(SW==1) column = 1; else column = 0; + led_wr_str (column, 9, "C=", 2); + led_wr_str (column, 15, "p", 1); + led_wr_str (column, 11, work_str_2, 4); + } + } + asm CLRWDT; + return; +} + + +void Test_init(void) { // Test mode + if(type==4 | type==5) // 128*64 OLED + led_wr_str (0, 10, "TEST MODE", 9); + else if(type!=0) // 1602 LCD or 128*32 OLED + led_wr_str (0, 3, "TEST MODE", 9); + asm CLRWDT; + Delay_ms(500); + asm CLRWDT; + Delay_ms(500); + asm CLRWDT; + Delay_ms(500); + asm CLRWDT; + Delay_ms(500); + asm CLRWDT; + if(type==4 | type==5) // 128*64 OLED + led_wr_str (0, 10, " ", 9); + else if(type!=0) // 1602 LCD or 128*32 OLED + led_wr_str (0, 3, " ", 9); + atu_reset(); + SW = 1; // C to OUT + set_sw(SW); + EEPROM_Write(255, cap); + EEPROM_Write(254, ind); + EEPROM_Write(253, SW); + // + if(type==4 | type==5) // 128*64 OLED + led_wr_str (0, 16+12*8, "l", 1); + else if(type!=0) // 1602 LCD or 128*32 OLED + led_wr_str (0, 8, "l", 1); + // + lcd_prep_short = 1; + lcd_prep(); + return; +} + + +void cells_init(void) { + // Cells init + asm CLRWDT; + //oled_addr = EEPROM_Read(0); // address + type = EEPROM_Read(1); // type of display + if(EEPROM_Read(2) == 1) Auto = 1; + Rel_Del = Bcd2Dec(EEPROM_Read(3)); // Relay's Delay + Auto_delta = Bcd2Dec(EEPROM_Read(4)) * 10; // Auto_delta + min_for_start = Bcd2Dec(EEPROM_Read(5)) * 10; // P_min_for_start + max_for_start = Bcd2Dec(EEPROM_Read(6)) * 10; // P_max_for_start + // 7 - shift down + // 8 - shift left + max_swr = Bcd2Dec(EEPROM_Read(9)) * 10; // Max SWR + L_q = EEPROM_Read(10); + L_linear = EEPROM_Read(11); + C_q = EEPROM_Read(12); + C_linear = EEPROM_Read(13); + D_correction = EEPROM_Read(14); + L_invert = EEPROM_Read(15); + // + asm CLRWDT; + Ind1 = Bcd2Dec(EEPROM_Read(16)) * 100 + Bcd2Dec(EEPROM_Read(17)); // Ind1 + Ind2 = Bcd2Dec(EEPROM_Read(18)) * 100 + Bcd2Dec(EEPROM_Read(19)); // Ind2 + Ind3 = Bcd2Dec(EEPROM_Read(20)) * 100 + Bcd2Dec(EEPROM_Read(21)); // Ind3 + Ind4 = Bcd2Dec(EEPROM_Read(22)) * 100 + Bcd2Dec(EEPROM_Read(23)); // Ind4 + Ind5 = Bcd2Dec(EEPROM_Read(24)) * 100 + Bcd2Dec(EEPROM_Read(25)); // Ind5 + Ind6 = Bcd2Dec(EEPROM_Read(26)) * 100 + Bcd2Dec(EEPROM_Read(27)); // Ind6 + Ind7 = Bcd2Dec(EEPROM_Read(28)) * 100 + Bcd2Dec(EEPROM_Read(29)); // Ind7 + // + Cap1 = Bcd2Dec(EEPROM_Read(32)) * 100 + Bcd2Dec(EEPROM_Read(33)); // Cap1 + Cap2 = Bcd2Dec(EEPROM_Read(34)) * 100 + Bcd2Dec(EEPROM_Read(35)); // Cap2 + Cap3 = Bcd2Dec(EEPROM_Read(36)) * 100 + Bcd2Dec(EEPROM_Read(37)); // Cap3 + Cap4 = Bcd2Dec(EEPROM_Read(38)) * 100 + Bcd2Dec(EEPROM_Read(39)); // Cap4 + Cap5 = Bcd2Dec(EEPROM_Read(40)) * 100 + Bcd2Dec(EEPROM_Read(41)); // Cap5 + Cap6 = Bcd2Dec(EEPROM_Read(42)) * 100 + Bcd2Dec(EEPROM_Read(43)); // Cap6 + Cap7 = Bcd2Dec(EEPROM_Read(44)) * 100 + Bcd2Dec(EEPROM_Read(45)); // Cap7 + // + P_High = EEPROM_Read(0x30); // High power + K_Mult = Bcd2Dec(EEPROM_Read(0x31)); // Tandem Match rate + Dysp_delay = Bcd2Dec(EEPROM_Read(0x32)); // Dysplay ON delay + Loss_ind = EEPROM_Read(0x33); + Fid_loss = Bcd2Dec(EEPROM_Read(0x34)); + Relay_off = Bcd2Dec(EEPROM_Read(0x35)); + asm CLRWDT; + return; + +} + +void show_loss(void) { + IntToStr(Fid_loss, work_str); + if(Fid_loss>=10) work_str_2[0] = work_str[4]; + else work_str_2[0] = '0'; + work_str_2[1] = '.'; + work_str_2[2] = work_str[5]; + if(type==4 | type==5) led_wr_str (4, 6, work_str_2, 3); // 128*64 + else if(type!=0) led_wr_str (1, 0, work_str_2, 3); // 1602 | 128*32 + return; +} + +// \ No newline at end of file diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.c.ini b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.c.ini new file mode 100644 index 0000000..88823f6 --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.c.ini @@ -0,0 +1,9 @@ +[Bookmarks] +Count=0 +[Position] +Line=247 +Column=12 +[BreakPoints] +Count=0 +[FoldedLines] +Count=0 diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.h b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.h new file mode 100644 index 0000000..07dca2f --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.h @@ -0,0 +1,424 @@ +// Main.h +// David Fainitski +// ATU-100 project 2016 + +// +static char ind = 0, cap = 0, SW = 0, step_cap = 0, step_ind = 0, L_linear = 0, C_linear = 0, L_q = 7, C_q = 7, D_correction = 1, L_invert = 0, L_mult = 1, +C_mult = 1, P_High = 0, K_Mult = 32, Overload = 0, Loss_ind = 0, Relay_off = 0; +static int Rel_Del, min_for_start, max_for_start, max_swr; +int SWR, PWR, P_max, swr_a; +char rready = 0, p_cnt = 0; +// +void btn_push(void); +void lcd_prep(void); +void lcd_swr(int); +void lcd_pwr(void); +void show_pwr(int, int); +void lcd_ind(void); +void crypto(void); +void show_reset(void); +void cells_init(void); +void test_init(void); +void button_proc(void); +void button_proc_test(void); +void button_delay(void); +void show_loss(void); +// +void atu_reset(void); +int get_reverse(void); +int get_forward(void); +int correction(int); +void get_swr(void); +void get_pwr(void); +void set_sw(char); +void coarse_cap(); +void sharp_cap(); +void sharp_ind(); +void coarse_tune(); +void tune(void); +void sub_tune(void); +// + + int correction(int input) { + // + if(input <= 80) return 0; + if(input <= 171) input += 244; + else if(input <= 328) input += 254; + else if(input <= 582) input += 280; + else if(input <= 820) input += 297; + else if(input <= 1100) input += 310; + else if(input <= 2181) input += 430; + else if(input <= 3322) input += 484; + else if(input <= 4623) input += 530; + else if(input <= 5862) input += 648; + else if(input <= 7146) input += 743; + else if(input <= 8502) input += 800; + else if(input <= 10500) input += 840; + else input += 860; + // + return input; +} + +// + +int get_reverse() { + int Reverse; + FVRCON = 0b10000001; // ADC 1024 vmV Vref + while(FVRCON.B6 == 0); + Reverse = ADC_Get_Sample(0); + if(Reverse <= 1000) return Reverse; + FVRCON = 0b10000010; // ADC 2048 vmV Vref + while(FVRCON.B6 == 0); + Reverse = ADC_Get_Sample(0); + if(Reverse <= 1000) return Reverse * 2; + FVRCON = 0b10000011; // ADC 4096 vmV Vref + while(FVRCON.B6 == 0); + Reverse = ADC_Get_Sample(0); + return Reverse * 4; +} +// + +int get_forward() { + int Forward; + FVRCON = 0b10000001; // ADC 1024 vmV Vref + while(FVRCON.B6 == 0); + Forward = ADC_Get_Sample(1); + if(Forward <= 1000){ + Overload = 0; + return Forward; + } + FVRCON = 0b10000010; // ADC 2048 vmV Vref + while(FVRCON.B6 == 0); + Forward = ADC_Get_Sample(1); + if(Forward <= 1000){ + Overload = 0; + return Forward * 2; + } + FVRCON = 0b10000011; // ADC 4096 vmV Vref + while(FVRCON.B6 == 0); + Forward = ADC_Get_Sample(1); + if(Forward > 1000) Overload = 1; + else Overload = 0; + return Forward * 4; +} + +void get_pwr() { + long Forward, Reverse; + float p; + asm CLRWDT; + // + Forward = get_forward(); + Reverse = get_reverse(); + if(D_correction==1) p = correction(Forward * 3); + else p = Forward * 3; + // + if(Reverse >= Forward) + Forward = 999; + else { + Forward = ((Forward + Reverse) * 100) / (Forward - Reverse); + if(Forward>999) Forward = 999; + } + // + p = p * K_Mult / 1000.0; // mV to Volts on Input + p = p / 1.414; + if(P_High==1) p = p * p / 50; // 0 - 1500 ( 1500 Watts) + else p = p * p / 5; // 0 - 1510 (151.0 Watts) + p = p + 0.5; // rounding + // + PWR = p; + if(Forward<100) SWR = 999; + else SWR = Forward; + return; +} + +void get_swr() { + get_pwr(); + if(p_cnt!=100) { + p_cnt += 1; + if(PWR>P_max) P_max = PWR; + } + else { + p_cnt = 0; + show_pwr(P_max, SWR); + P_max = 0; + } + while(PWR max_for_start & max_for_start>0)) { // waiting for good power + asm CLRWDT; + get_pwr(); + if(p_cnt!=100) { + p_cnt += 1; + if(PWR>P_max) P_max = PWR; + } + else { + p_cnt = 0; + show_pwr(P_max, SWR); + P_max = 0; + } + // + if(Button(&PORTB, 0, 5, 1)) rready = 1; + if(rready==1 & Button(&PORTB, 0, 5, 0)) { // press button Tune + show_reset(); + SWR = 0; + return; + } + } // good power + return; +} + +void set_ind(char Ind) { + if(L_invert == 0) { + Ind_005 = Ind.B0; + Ind_011 = Ind.B1; + Ind_022 = Ind.B2; + Ind_045 = Ind.B3; + Ind_1 = Ind.B4; + Ind_22 = Ind.B5; + Ind_45 = Ind.B6; + // + } + else { + Ind_005 = ~Ind.B0; + Ind_011 = ~Ind.B1; + Ind_022 = ~Ind.B2; + Ind_045 = ~Ind.B3; + Ind_1 = ~Ind.B4; + Ind_22 = ~Ind.B5; + Ind_45 = ~Ind.B6; + // + } + Vdelay_ms(Rel_Del); +} + +void set_cap(char Cap) { + Cap_10 = Cap.B0; + Cap_22 = Cap.B1; + Cap_47 = Cap.B2; + Cap_100 = Cap.B3; + Cap_220 = Cap.B4; + Cap_470 = Cap.B5; + Cap_1000 = Cap.B6; + // + Vdelay_ms(Rel_Del); +} + +void set_sw(char SW) { // 0 - IN, 1 - OUT + Cap_sw = SW; + Vdelay_ms(Rel_Del); +} + +void atu_reset() { + ind = 0; + cap = 0; + set_ind(ind); + set_cap(cap); + Vdelay_ms(Rel_Del); +} + + +void coarse_cap() { + char step = 3; + char count; + int min_swr; + + cap = 0; + set_cap(cap); + step_cap = step; + get_swr(); if(SWR==0) return; + min_swr = SWR + SWR/20; + for(count=step; count<=31;) { + set_cap(count*C_mult); + get_swr(); if(SWR==0) return; + if(SWR < min_swr) { + min_swr = SWR + SWR/20; + cap = count*C_mult; + step_cap = step; + if(SWR<120) break; + count +=step; + if(C_linear==0 & count==9) count = 8; + else if(C_linear==0 & count==17) {count = 16; step = 4;} + } + else break; + } + set_cap(cap); + return; +} + +void coarse_tune() { + char step = 3; + char count; + char mem_cap, mem_step_cap; + int min_swr; + + mem_cap = 0; + step_ind = step; + mem_step_cap = 3; + min_swr = SWR + SWR/20; + for(count=0; count<=31;) { + set_ind(count*L_mult); + coarse_cap(); + get_swr(); if(SWR==0) return; + if(SWR < min_swr) { + min_swr = SWR + SWR/20; + ind = count*L_mult; + mem_cap = cap; + step_ind = step; + mem_step_cap = step_cap; + if(SWR<120) break; + count +=step; + if(L_linear==0 & count==9) count = 8; + else if(L_linear==0 & count==17) {count = 16; step = 4;} + } + else break; + } + cap = mem_cap; + set_ind(ind); + set_cap(cap); + step_cap = mem_step_cap; + Delay_ms(10); + return; +} + +void sharp_cap() { + char range, count, max_range, min_range; + int min_swr; + range = step_cap*C_mult; + // + max_range = cap + range; + if(max_range>32*C_mult-1) max_range = 32*C_mult-1; + if(cap>range) min_range = cap - range; else min_range = 0; + cap = min_range; + set_cap(cap); + get_swr(); if(SWR==0) return; + min_SWR = SWR; + for(count=min_range+C_mult; count<=max_range; count+=C_mult) { + set_cap(count); + get_swr(); if(SWR==0) return; + if(SWR>=min_SWR) { Delay_ms(10); get_swr(); } + if(SWR>=min_SWR) { Delay_ms(10); get_swr(); } + if(SWR < min_SWR) { + min_SWR = SWR; + cap = count; + if(SWR<120) break; + } + else break; + } + set_cap(cap); + return; +} + +void sharp_ind() { + char range, count, max_range, min_range; + int min_SWR; + range = step_ind * L_mult; + // + max_range = ind + range; + if(max_range>32*L_mult-1) max_range = 32*L_mult-1; + if(ind>range) min_range = ind - range; else min_range = 0; + ind = min_range; + set_ind(ind); + get_swr(); if(SWR==0) return; + min_SWR = SWR; + for(count=min_range+L_mult; count<=max_range; count+=L_mult) { + set_ind(count); + get_swr(); if(SWR==0) return; + if(SWR>=min_SWR) { Delay_ms(10); get_swr(); } + if(SWR>=min_SWR) { Delay_ms(10); get_swr(); } + if(SWR < min_SWR) { + min_SWR = SWR; + ind = count; + if(SWR<120) break; + } + else break; + } + set_ind(ind); + return; +} + + +void sub_tune () { + int swr_mem, ind_mem, cap_mem; + // + swr_mem = SWR; + coarse_tune(); if(SWR==0) {atu_reset(); return;} + get_swr(); if(SWR<120) return; + sharp_ind(); if(SWR==0) {atu_reset(); return;} + get_swr(); if(SWR<120) return; + sharp_cap(); if(SWR==0) {atu_reset(); return;} + get_swr(); if(SWR<120) return; + // + if(SWR<200 & SWR100) return; + swr_mem = SWR; + ind_mem = ind; + cap_mem = cap; + // + if(SW==1) SW = 0; else SW = 1; + atu_reset(); + set_sw(SW); + Delay_ms(50); + get_swr(); if(SWR<120) return; + // + coarse_tune(); if(SWR==0) {atu_reset(); return;} + get_swr(); if(SWR<120) return; + sharp_ind(); if(SWR==0) {atu_reset(); return;} + get_swr(); if(SWR<120) return; + sharp_cap(); if(SWR==0) {atu_reset(); return;} + get_swr(); if(SWR<120) return; + // + if(SWR>swr_mem) { + if(SW==1) SW = 0; else SW = 1; + set_sw(SW); + ind = ind_mem; + cap = cap_mem; + set_ind(ind); + set_cap(cap); + SWR = swr_mem; + } + // + asm CLRWDT; + return; +} + + + +void tune() { + //int swr_mem, ind_mem, cap_mem, sw_mem; + asm CLRWDT; + // + p_cnt = 0; + P_max = 0; + // + rready = 0; + get_swr(); + if(SWR<110) return; + atu_reset(); + if(Loss_ind==0) lcd_ind(); + Delay_ms(50); + get_swr(); + swr_a = SWR; + if(SWR<110) return; + if(max_swr>110 & SWR>max_swr) return; + // + sub_tune(); if(SWR==0) {atu_reset(); return;} + if(SWR<120) return; + if(C_q==5 & L_q==5) return; + + if(L_q>5) { + step_ind = L_mult; + L_mult = 1; + sharp_ind(); + } + if(SWR<120) return; + if(C_q>5) { + step_cap = C_mult; // = C_mult + C_mult = 1; + sharp_cap(); + } + if(L_q==5)L_mult = 1; + else if(L_q==6) L_mult = 2; + else if(L_q==7) L_mult = 4; + if(C_q==5) C_mult =1; + else if(C_q==6) C_mult = 2; + else if(C_q==7) C_mult = 4; + asm CLRWDT; + return; +} \ No newline at end of file diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.h.ini b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.h.ini new file mode 100644 index 0000000..b27302e --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.h.ini @@ -0,0 +1,9 @@ +[Bookmarks] +Count=0 +[Position] +Line=168 +Column=27 +[BreakPoints] +Count=0 +[FoldedLines] +Count=0 diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.ini b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.ini new file mode 100644 index 0000000..f98081c --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.ini @@ -0,0 +1,9 @@ +[Bookmarks] +Count=0 +[Position] +Line=42 +Column=34 +[BreakPoints] +Count=0 +[FoldedLines] +Count=0 diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.mcl b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main.mcl new file mode 100644 index 0000000000000000000000000000000000000000..f739dec8c096c83787d64cc9c51e4f0be8511056 GIT binary patch literal 266691 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 literal 0 HcmV?d00001 diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main_main.h b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main_main.h new file mode 100644 index 0000000..907ddcb --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/main_main.h @@ -0,0 +1,521 @@ +// Main.h +// David Fainitski +// ATU-100 project 2016 + +// +static char ind = 0, cap = 0, SW = 0, step_cap = 0, step_ind = 0, L_linear = 0, C_linear = 0, L_q = 7, C_q = 7, D_correction = 1; +static int Rel_Del, min_for_start, max_for_start, max_swr; +int SWR, PWR; +char rready = 0; +// +void btn_push(void); +void lcd_prep(void); +void lcd_prep_short(void); +void lcd_swr(int, int); +void lcd_pwr(void); +void lcd_ind(void); +void crypto(void); +void show_reset(void); +void cells_init(void); +void test_init(void); +void button_proc(void); +void button_proc_test(void); +// +void atu_reset(void); +int get_reverse(void); +int get_forward(void); +int correction(int); +int get_swr(void); +void get_pwr(void); +void set_sw(char); +void coarse_cap(); +void sharp_cap(); +void sharp_ind(); +void coarse_tune(); +void tune(void); +// + +int correction(int input) { + input *= 3; // Devider compensation + + if(input <= 80) return 0; + if(input <= 171) input += 244; + else if(input <= 328) input += 254; + else if(input <= 582) input += 280; + else if(input <= 820) input += 297; + else if(input <= 1100) input += 310; + else if(input <= 2181) input += 430; + else if(input <= 3322) input += 484; + else if(input <= 4623) input += 530; + else if(input <= 5862) input += 648; + else if(input <= 7146) input += 743; + else if(input <= 8502) input += 800; + else if(input <= 10500) input += 820; + else input += 850; + // + + return input; +} + +// + +int get_reverse() { + int Reverse; + FVRCON = 0b10000001; // ADC 1024 vmV Vref + while(FVRCON.B6 == 0); + Reverse = ADC_Get_Sample(0); + if(Reverse <= 1000) return Reverse; + FVRCON = 0b10000010; // ADC 2048 vmV Vref + while(FVRCON.B6 == 0); + Reverse = ADC_Get_Sample(0); + if(Reverse <= 1000) return Reverse * 2; + FVRCON = 0b10000011; // ADC 4096 vmV Vref + while(FVRCON.B6 == 0); + Reverse = ADC_Get_Sample(0); + return Reverse * 4; +} +// + +int get_forward() { + int Forward; + FVRCON = 0b10000001; // ADC 1024 vmV Vref + while(FVRCON.B6 == 0); + Forward = ADC_Get_Sample(1); + if(Forward <= 1000) return Forward; + FVRCON = 0b10000010; // ADC 2048 vmV Vref + while(FVRCON.B6 == 0); + Forward = ADC_Get_Sample(1); + if(Forward <= 1000) return Forward * 2; + FVRCON = 0b10000011; // ADC 4096 vmV Vref + while(FVRCON.B6 == 0); + Forward = ADC_Get_Sample(1); + return Forward * 4; +} + +void get_pwr() { + long Forward, Reverse; + float p; + asm CLRWDT; + // + Forward = get_forward(); + Reverse = get_reverse(); + if(D_correction==1) p = correction(Forward); + else p = Forward; + // + if(Reverse >= Forward) + Forward = 999; + else { + Forward = ((Forward + Reverse) * 100) / (Forward - Reverse); + if(Forward>999) Forward = 999; + } + // + p = p * 10 / 1000; // mV to Volts + p = p / 1.414; + p = p * p / 5; + p = p + 0.5; // rounding to 0.1 W + PWR = p; // 0 - 1510 (151.0 Watts) + SWR = Forward; +} + +int get_swr() { + get_pwr(); + while((PWR<=min_for_start | (PWR> max_for_start & max_for_start>0))) { // waiting for good power + asm CLRWDT; + get_pwr(); + if(Button(&PORTB, 0, 5, 1)) rready = 1; + if(rready==1 & Button(&PORTB, 0, 5, 0)) { // press button Tune + show_reset(); + SWR = 0; + return SWR; + } + } // good power + return SWR; +} + +void set_ind(char Ind) { // 0 - 31 + // + Ind_005 = Ind.B0; + Ind_011 = Ind.B1; + Ind_022 = Ind.B2; + Ind_045 = Ind.B3; + Ind_1 = Ind.B4; + Ind_22 = Ind.B5; + Ind_45 = Ind.B6; + // + Vdelay_ms(Rel_Del); +} + +void set_cap(char Cap) { // 0 - 31 + Cap_10 = Cap.B0; + Cap_22 = Cap.B1; + Cap_47 = Cap.B2; + Cap_100 = Cap.B3; + Cap_220 = Cap.B4; + Cap_470 = Cap.B5; + Cap_1000 = Cap.B6; + // + Vdelay_ms(Rel_Del); +} + +void set_sw(char SW) { // 0 - IN, 1 - OUT + Cap_sw = SW; + Vdelay_ms(Rel_Del); +} + +void atu_reset() { + ind = 0; + cap = 0; + set_ind(ind); + set_cap(cap); + Vdelay_ms(Rel_Del); +} +/* +void coarse_cap() { + char step = 3; + char count, max_count = 1; + int min_swr; + + for(count==C_q; count>0; count--) max_count *= 2; + max_count -= 1; + cap = 0; + set_cap(cap); + SWR = get_swr(); + if(SWR==0 | SWR<120) return; + min_swr = SWR + SWR/20; + for(count=step; count<=max_count;) { + set_cap(count); + SWR = get_swr(); + if(SWR==0) return; + if(SWR=40) {step = count/10; count += step;} + else count += step; + } + } + else break; + } + set_cap(cap); + return; +} + +void coarse_tune() { + char step = 3; + char count, max_count = 1; + char mem_cap, mem_step_cap; + int min_swr; + + for(count==L_q; count>0; count--) max_count *= 2; + max_count -= 1; + mem_cap = 0; + step_ind = step; + mem_step_cap = 3; + min_swr = SWR + SWR/20; + for(count=step; count<=max_count;) { + set_ind(count); + coarse_cap(); + if(SWR==0) return; + SWR = get_swr(); + if(SWR==0) return; + if(SWR999) count = count * 2; + else if(count>=70) {step = count/10; count += step;} + else count += step; + } + } + else break; + } + cap = mem_cap; + set_ind(ind); + set_cap(cap); + step_cap = mem_step_cap; + Delay_ms(10); + return; +} +*/ + +void coarse_cap() { + char step = 2; + char count; + int min_swr; + + cap = 0; + set_cap(cap); + SWR = get_swr(); + min_swr = SWR + SWR/20; + for(count=step; count<=127; count+=step) { + set_cap(count); + SWR = get_swr(); + if(SWR300) step = 5; else step = 3; + if(count>=30) step = count/10; + if(SWR<120) break; + } + else break; + } + set_cap(cap); + return; +} + +void coarse_tune() { + char step = 4; + char count; + char mem_cap, mem_step_cap; + int min_swr; + + mem_cap = 0; + step_ind = step; + mem_step_cap = 2; + min_swr = SWR + SWR/20; + for(count=step; count<=127; count+=step) { + set_ind(count); + coarse_cap(); + SWR = get_swr(); + if(SWR=50) step = count/10; + if(SWR<120) break; + } + else break; // ?? Brute Force (no) + } + cap = mem_cap; + set_ind(ind); + set_cap(cap); + step_cap = mem_step_cap; + Delay_ms(10); + return; +} + + + +void sharp_cap() { + char range, count, max_range, min_range, max_count = 1; + int min_swr; + range = step_cap; + // + for(count==C_q; count>0; count-- )max_count *= 2; + max_count -= 1; + max_range = cap + range; + if(max_range>max_count) max_range = max_count; + if(cap>range) min_range = cap - range; else min_range = 0; + cap = min_range; + set_cap(cap); + SWR = get_swr(); + if(SWR==0) return; + min_SWR = SWR; + for(count=min_range+1; count<=max_range; count++) { + set_cap(count); + SWR = get_swr(); + if(SWR==0) return; + if(SWR>=min_SWR) { Delay_ms(10); SWR = get_swr(); } + if(SWR>=min_SWR) { Delay_ms(10); SWR = get_swr(); } + if(SWR < min_SWR) { + min_SWR = SWR; + cap = count; + if(SWR<120) break; + } + else break; + } + set_cap(cap); + return; +} + +void sharp_ind() { + char range, count, max_range, min_range, max_count = 1; + int min_SWR; + range = step_ind; + // + for(count==L_q; count>0; count--) max_count *= 2; + max_count -= 1; + max_range = ind + range; + if(max_range>max_count) max_range = max_count; + if(ind>range) min_range = ind - range; else min_range = 0; + ind = min_range; + set_ind(ind); + SWR = get_swr(); + if(SWR==0) return; + min_SWR = SWR; + for(count=min_range+1; count<=max_range; count++) { + set_ind(count); + SWR = get_swr(); + if(SWR==0) return; + if(SWR>=min_SWR) { Delay_ms(10); SWR = get_swr(); } + if(SWR>=min_SWR) { Delay_ms(10); SWR = get_swr(); } + if(SWR < min_SWR) { + min_SWR = SWR; + ind = count; + if(SWR<120) break; + } + else break; + } + set_ind(ind); + return; +} + +/* +void tune() { + int swr_mem, ind_mem, cap_mem; + asm CLRWDT; + rready = 0; + SWR = get_swr(); + if(SWR==0) {atu_reset(); return;} + if(SWR<110) return; + atu_reset(); + Delay_ms(10); + SWR = get_swr(); + if(SWR==0) {atu_reset(); return;} + if(max_swr>110 & SWR>max_swr) return; + // + swr_mem = SWR; + coarse_tune(); + if(SWR==0) {atu_reset(); return;} + SWR = get_swr(); + if(SWR==0) {atu_reset(); return;} + if(SWR<120) return; + sharp_ind(); + if(SWR==0) {atu_reset(); return;} + SWR = get_swr(); + if(SWR==0) {atu_reset(); return;} + if(SWR<120) return; + sharp_cap(); + if(SWR==0) {atu_reset(); return;} + SWR = get_swr(); + if(SWR==0) {atu_reset(); return;} + if(SWR<120) return; + if(SWR<200 & SWR100) return; + swr_mem = SWR; + ind_mem = ind; + cap_mem = cap; + // + if(SW==1) SW = 0; else SW = 1; + atu_reset(); + set_sw(SW); + Delay_ms(10); + SWR = get_swr(); + if(SWR==0) {atu_reset(); return;} + // + coarse_tune(); + if(SWR==0) {atu_reset(); return;} + SWR = get_swr(); + if(SWR==0) {atu_reset(); return;} + if(SWR<120) return; + sharp_ind(); + if(SWR==0) {atu_reset(); return;} + SWR = get_swr(); + if(SWR==0) {atu_reset(); return;} + if(SWR<120) return; + sharp_cap(); + if(SWR==0) {atu_reset(); return;} + // + SWR = get_swr(); + if(SWR==0) {atu_reset(); return;} + if(SWR<120) return; + // + if(SWR>swr_mem) { + if(SW==1) SW = 0; else SW = 1; + set_sw(SW); + ind = ind_mem; + cap = cap_mem; + set_ind(ind); + set_cap(cap); + } + // + asm CLRWDT; + return; +} */ + + void tune() { + int swr_mem, ind_mem, cap_mem; + asm CLRWDT; + rready = 0; + SWR - get_swr(); + if(SWR<110) return; + atu_reset(); + Delay_ms(10); + SWR = get_swr(); + if(max_swr>110 & SWR>max_swr) return; + // + swr_mem = SWR; + coarse_tune(); + SWR = get_swr(); + if(SWR<120) return; + sharp_ind(); + SWR = get_swr(); + if(SWR<120) return; + sharp_cap(); + SWR = get_swr(); + if(SWR<120) return; + if(SWR<200 & SWR100) return; + swr_mem = SWR; + ind_mem = ind; + cap_mem = cap; + // + if(SW==1) SW = 0; else SW = 1; + atu_reset(); + set_sw(SW); + Delay_ms(10); + SWR = get_swr(); + // + coarse_tune(); + SWR = get_swr(); + if(SWR<120) return; + sharp_ind(); + SWR = get_swr(); + if(SWR<120) return; + sharp_cap(); + + SWR = get_swr(); + if(SWR<120) return; + // + if(SWR>swr_mem) { + if(SW==1) SW = 0; else SW = 1; + set_sw(SW); + ind = ind_mem; + cap = cap_mem; + set_ind(ind); + set_cap(cap); + } + // + asm CLRWDT; + return; +} \ No newline at end of file diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.c b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.c new file mode 100644 index 0000000..6a629bb --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.c @@ -0,0 +1,407 @@ + +#include "oled_control.h" +#include "font5x8.h" +// + +void led_send (char nible) { + char sdata; + sdata = 0; + RW = 0; E = 1; + sdata = sdata + nible; + sdata = sdata << 4; + if(LED) sdata = sdata + 8; + if(E) sdata = sdata + 4; + if(RW) sdata = sdata + 2; + if(RS) sdata = sdata + 1; + // + Soft_I2C_Start(); + Soft_I2C_Write(led_addr); // device addres + Soft_I2C_Write(sdata); // + Soft_I2C_Stop(); + delay_ms(1); + sdata = sdata - 4; // E = 0 + Soft_I2C_Start(); + Soft_I2C_Write(led_addr); // device addres + Soft_I2C_Write(sdata); // + Soft_I2C_Stop(); + delay_ms(1); +} +// +void led_init (void) { + shift_line = EEPROM_read(7); + oled_shift = EEPROM_read(8); + if(led_type>1) oled_init(); // OLED + else if(led_type==1) { // 1602 LCD display init + LED = 1; + RS = 0; // Command + // + led_send(3); + delay_ms(5); + led_send(3); + delay_ms(1); + led_send(3); + led_send(2); + // + led_send(2); + led_send(8); // + // + led_send(0); + led_send(8); // LCD OFF + // + led_send(0); + led_send(1); // LCD clear + delay_ms(5); + // + led_send(0); + led_send(4 + 2); // I/D, S + // + led_send(0); + led_send(8 + 4 + 0 + 0); // LCD ON, Cursor, Blink Cursor + } +} + +void dysp_on() { + if(led_type > 1) send_command(0xAF); // display ON + else if(led_type==1) { + LED = 1; + RS = 0; + led_send(0); + led_send(0); + } +} + +void dysp_off() { + if(led_type > 1) send_command(0xAE); // display OFF + else if(led_type==1) { + LED = 0; + RS = 0; + led_send(0); + led_send(0); + } +} + + + void oled_init (void) { // OLED init + char i, r; + Soft_I2C_Start(); + Soft_I2C_Write(led_addr); // device addres + Soft_I2C_Write(0); // 0 - continious mode, command; 64 - Co, data + Soft_I2C_Write (0xAE); // display OFF + // + if(led_type==2 | led_type==3) { // 128*32 OLED + Soft_I2C_Write (0xD5); // clock division + Soft_I2C_Write (0x80); // ratio + // + Soft_I2C_Write (0xA8); // multiplexer + Soft_I2C_Write (0x3f); // + // + Soft_I2C_Write (0xD3); // offset + if(led_type==2) Soft_I2C_Write (0 + shift_line); // column shift + else Soft_I2C_Write (31 + shift_line); // column shift + // + Soft_I2C_Write (0x40); // set line, line = 0 + // + Soft_I2C_Write (0x8D); // charge pump + Soft_I2C_Write (0x14); // 0x10 - external, 0x14 - internal + // + Soft_I2C_Write (0x81); // contrast + Soft_I2C_Write (180); // 0-255 + // + Soft_I2C_Write (0xD9); // pre-charge + Soft_I2C_Write (0x22); // 0x22 - external, 0xF1 - internal + // + Soft_I2C_Write (0x20); // memory addressing mode + Soft_I2C_Write (0x02); // page addressing mode + // + Soft_I2C_Write (0x21); // set column range + Soft_I2C_Write (0); // column start + Soft_I2C_Write (127); // column stop + // + Soft_I2C_Write (0x2E); // stop scrolling + // + if(led_type==2) { + Soft_I2C_Write (0xA0); // segment re-map, A0 - normal, A1 - remapped + // + Soft_I2C_Write (0xC0); // scan direction, C0 - normal, C8 - remapped + } + else { + Soft_I2C_Write (0xA1); // segment re-map, A0 - normal, A1 - remapped + // + Soft_I2C_Write (0xC8); // scan direction, C0 - normal, C8 - remapped + } + // + Soft_I2C_Write (0xDA); // COM pins configure + Soft_I2C_Write (0x02); // 12 for x64 + // + Soft_I2C_Write (0xDB); // V-COM detect + Soft_I2C_Write (0x40); // + // + } + else { // 128*64 OLED + Soft_I2C_Write (0xD5); // clock division + Soft_I2C_Write (0x80); // ratio + // + Soft_I2C_Write (0xA8); // multiplexer + Soft_I2C_Write (63); // + // + Soft_I2C_Write (0xD3); // offset + Soft_I2C_Write (shift_line); // no offset for x64 ! + // + Soft_I2C_Write (0x40); // set line, line = 0 + // + Soft_I2C_Write (0x8D); // charge pump + Soft_I2C_Write (0x14); // 0x10 - external, 0x14 - internal + // + Soft_I2C_Write (0x81); // contrast + Soft_I2C_Write (255); // 0-255 + // + Soft_I2C_Write (0xD9); // pre-charge + Soft_I2C_Write (0xf1); // 0x22 - external, 0xF1 - internal + // + Soft_I2C_Write (0x20); // memory addressing mode + Soft_I2C_Write (0x02); // page addressing mode 02 + // + Soft_I2C_Write (0x21); // set column range + Soft_I2C_Write (0); // column start + Soft_I2C_Write (127); // column stop + // + Soft_I2C_Write (0x2E); // stop scrolling + // + if(led_type==4) { + Soft_I2C_Write (0xA0); // segment re-map, A0 - normal, A1 - remapped + // + Soft_I2C_Write (0xC0); // scan direction, C0 - normal, C8 - remapped + } + else { + Soft_I2C_Write (0xA1); // segment re-map, A0 - normal, A1 - remapped + // + Soft_I2C_Write (0xC8); // scan direction, C0 - normal, C8 - remapped + } + // + Soft_I2C_Write (0xDA); // COM pins configure + Soft_I2C_Write (0x12); // 12 for x64 + // + Soft_I2C_Write (0xDB); // V-COM detect + Soft_I2C_Write (0x40); // + } + Soft_I2C_Write (0xA4); // display entire ON + // + Soft_I2C_Write (0xA6); // 0xA6 - normal, 0xA7 - inverse + // + Soft_I2C_Stop (); + // + // ********clear OLED*********** + // + Delay_ms(100); + Soft_I2C_Start(); + Soft_I2C_Write(led_addr); // device addres + Soft_I2C_Write(64); // 0 - continious mode, command; 64 - Co, data + // + if(led_type==2 | led_type==3) { // 128*32 OLED + for (r = 0; r <=3; r++) { + set_addressing (r, 0); // clear all 4 pages + for (i = 0; i < 128; i++, Soft_I2C_Write(0)); // clear one page pixels + } + } + else { // 128*64 OLED + for (r = 0; r <=7; r++) { + set_addressing (r, 0); // clear all 8 pages + for (i = 0; i < 128; i++, Soft_I2C_Write(0x00)); // clear one page pixels + } + + } + // + Soft_I2C_Stop (); + send_command (0xAF); // display ON + // + +} + + + +void send_command (char oled_command) { + Soft_I2C_Start(); + Soft_I2C_Write(led_addr); // device addres + Soft_I2C_Write(128); // 128 - command, 192 - data + Soft_I2C_Write(oled_command); + Soft_I2C_Stop(); +} + +void set_addressing (char pagenum, char c_start) { + char a, b, c; + c = c_start + oled_shift; + Soft_I2C_Start(); + Soft_I2C_Write(led_addr); // device addres + Soft_I2C_Write(0); // 0 - continious mode, command; 64 - Co, data + Soft_I2C_Write(0xB0 + pagenum); // set page number + // + if (c <= 15) { a = c; b = 0; } + else { b = c / 16; a = c - b * 16; } + Soft_I2C_Write (a); // set lower nibble of start address + Soft_I2C_Write (0x10 + b); // set higher nibble of start address + // + Soft_I2C_Start(); + Soft_I2C_Write(led_addr); // device addres + Soft_I2C_Write(64); // 0 - continious mode, command; 64 - Co, data + } +// + + +void led_wr_str (char col, char pos, char str[], char leng ) { // + char i; + if(led_type==4 | led_type==5) oled_wr_str(pos, col, str, leng); // 128*64 OLED display + else if(led_type==2 | led_type==3) oled_wr_str(7*pos+4, col*2, str, leng); // 128*32 OLED display + else { // 1602 LCD + // Set address + RS = 0; + led_send(8 + col*4); + led_send(pos); + // + RS = 1; + for (i = 0; i < leng; i++) { // write string + // write letter + led_send(str[i] >> 4); + led_send(str[i]); + } + + } +} +// + +void oled_wr_str (char col, char page, char str[], char leng ) { // 128*32 or 128*64 OLED + char i, h, g, w1, w2; + Soft_I2C_Start(); + Soft_I2C_Write(led_addr); // device addres + Soft_I2C_Write(64); // 0 - continious mode, command; 64 - Co, data + // + set_addressing (page, col); + // + for (i = 0; i < leng; i++) { // write string + if (str[i] == 0) g = 0; else g = str[i] - 32; // NULL detection + for (h = 0; h <= 4; h++) { // write letter + w1 = font5x8[g*5+h]; + if(page!=2 & page!=4 & page!=6) { + w2.B7 = w1.B3; + w2.B6 = w1.B3; + w2.B5 = w1.B2; + w2.B4 = w1.B2; + w2.B3 = w1.B1; + w2.B2 = w1.B1; + w2.B1 = w1.B0; + w2.B0 = w1.B0; + } + else { + w2.B7 = w1.B2; + w2.B6 = w1.B2; + w2.B5 = w1.B1; + w2.B4 = w1.B1; + w2.B3 = w1.B0; + w2.B2 = w1.B0; + w2.B1 = 0; + w2.B0 = 0; + } + Soft_I2C_Write(w2); + if(led_type==4 | led_type==5) Soft_I2C_Write(w2); // 128*64 + } + Soft_I2C_Write (0); + Soft_I2C_Write (0); + } + set_addressing (page+1, col); + // + for (i = 0; i < leng; i++) { // write string + if (str[i] == 0) g = 0; else g = str[i] - 32; // NULL detection + for (h = 0; h <= 4; h++) { // write letter + w1 = font5x8[g*5+h]; + if(page!=2 & page!=4 & page!=6) { + w2.B7 = w1.B7; + w2.B6 = w1.B7; + w2.B5 = w1.B6; + w2.B4 = w1.B6; + w2.B3 = w1.B5; + w2.B2 = w1.B5; + w2.B1 = w1.B4; + w2.B0 = w1.B4; } + else { + w2.B7 = w1.B6; + w2.B6 = w1.B6; + w2.B5 = w1.B5; + w2.B4 = w1.B5; + w2.B3 = w1.B4; + w2.B2 = w1.B4; + w2.B1 = w1.B3; + w2.B0 = w1.B3; + } + Soft_I2C_Write(w2); + if(led_type==4 | led_type==5) Soft_I2C_Write(w2); // 128*64 + } + Soft_I2C_Write (0); + Soft_I2C_Write (0); + //if(led_type==2 | led_type==3) Soft_I2C_Write (0); // 128*32 + } + Soft_I2C_Stop (); +} + + + + void Soft_I2C_Init () { + led_addr = EEPROM_read(0); // 4E,7E for 1602 or 78, 7A for OLED + led_type = EEPROM_read(1); + if(led_type==0) { + Soft_I2C_Scl_Direction = 0; + Soft_I2C_Sda_Direction = 0; + LATB.B6 = 1; + LATB.B7 = 1; + } + else { + Soft_I2C_Scl_Direction = 1; + Soft_I2C_Sda_Direction = 1; + Soft_I2C_Scl = 0; + Soft_I2C_Sda = 0; + } + } + + void Soft_I2C_Start () { + if(led_type!=0) { + Soft_I2C_Scl_Direction = 1; + Delay_us(5); + Soft_I2C_Sda_Direction = 1; + Delay_us(5); + Soft_I2C_Sda_Direction = 0; + Delay_us(5); + Soft_I2C_Scl_Direction = 0; + Delay_us(5); + } + } + +void Soft_I2C_Write (char d) { + char i; + if(led_type!=0) { + for(i=0; i<=7; i++) { + if(d.B7==0) Soft_I2C_Sda_Direction = 0; else Soft_I2C_Sda_Direction = 1; + Delay_us(5); + Soft_I2C_Scl_Direction = 1; + Delay_us(5); + Soft_I2C_Scl_Direction = 0; + Delay_us(5); + d = d << 1; + } + // + Soft_I2C_Sda_Direction = 1; //ACK + Delay_us(5); + Soft_I2C_Scl_Direction = 1; + Delay_us(5); + Soft_I2C_Scl_Direction = 0; + Delay_us(5); + } +} + +void Soft_I2C_Stop () { + if(led_type!=0) { + Soft_I2C_Sda_Direction = 0; + Delay_us(5); + Soft_I2C_Scl_Direction = 1; + Delay_us(5); + Soft_I2C_Sda_Direction = 1; + Delay_us(5); + } +} \ No newline at end of file diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.c.ini b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.c.ini new file mode 100644 index 0000000..ed705b6 --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.c.ini @@ -0,0 +1,9 @@ +[Bookmarks] +Count=0 +[Position] +Line=30 +Column=1 +[BreakPoints] +Count=0 +[FoldedLines] +Count=0 diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.h b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.h new file mode 100644 index 0000000..3102c74 --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.h @@ -0,0 +1,30 @@ +// Software I2C connections +// +sbit Soft_I2C_Scl at LATB6_bit; +sbit Soft_I2C_Sda at LATB7_bit; +sbit Soft_I2C_Scl_Direction at TRISB6_bit; +sbit Soft_I2C_Sda_Direction at TRISB7_bit; +// +static char RS, RW, E, LED, nible; + +static char led_addr, led_type; +static char shift_line; + +static char oled_shift; +// +void set_addressing (char, char); +void led_send (char); +void led_init (void); +void oled_init (void); +void send_command (char); +void set_addressing (char, char); +void led_wr_str (char, char, char*, char); +void oled_wr_str (char, char, char*, char); +void dysp_on(void); +void dysp_off(void); +// + +void Soft_I2C_Init (void); +void Soft_I2C_Start (void); +void Soft_I2C_Write (char); +void Soft_I2C_Stop (void); \ No newline at end of file diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.h.ini b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.h.ini new file mode 100644 index 0000000..c00befe --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.h.ini @@ -0,0 +1,9 @@ +[Bookmarks] +Count=0 +[Position] +Line=17 +Column=93 +[BreakPoints] +Count=0 +[FoldedLines] +Count=0 diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.mcl b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/oled_control.mcl new file mode 100644 index 0000000000000000000000000000000000000000..b2e6a8a51d327c75f206223e60feebbb8669fc9c GIT binary patch literal 48659 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 literal 0 HcmV?d00001 diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.c b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.c new file mode 100644 index 0000000..996db5a --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.c @@ -0,0 +1,48 @@ +// pic_init unit for Micro C PRO +// David Fainitski for ATU-100 project +// PIC1938 Microchip + + +void pic_init (void) { + asm CLRWDT; + WDTCON.B5 = 0; + WDTCON.B4 = 1; + WDTCON.B3 = 0; // 1 sec WDT + WDTCON.B2 = 1; + WDTCON.B1 = 0; + asm CLRWDT; + + ANSELA = 0; + ANSA0_bit = 1; // analog inputs + ANSA1_bit = 1; + ANSELB = 0; // all as digital + + C1ON_bit = 0; // Disable comparators + C2ON_bit = 0; + + OSCCON = 0b01111000; // 16 MHz oscillator + + PORTA = 0; + PORTB = 0; + PORTC = 0; + LATA = 0b01000000; // PORT6 /Tx_req to 1 + LATB = 0; + LATC = 0; + TRISA = 0b00000011; + TRISB = 0b00000111; + TRISC = 0b00000000; // + // + ADC_Init(); + // + + ADCON1.B0 = 1; // ADC with the internal reference + ADCON1.B1 = 1; + // + OPTION_REG.B7 = 0; + WPUB.B0 = 1; // PORTB0 Pull-up resistor + WPUB.B1 = 1; // PORTB1 Pull-up resistor + WPUB.B2 = 1; // PORTB2 Pull-up resistor + //interrupt setting + GIE_bit = 0; + +} \ No newline at end of file diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.c.ini b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.c.ini new file mode 100644 index 0000000..6141643 --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.c.ini @@ -0,0 +1,9 @@ +[Bookmarks] +Count=0 +[Position] +Line=28 +Column=45 +[BreakPoints] +Count=0 +[FoldedLines] +Count=0 diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.h b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.h new file mode 100644 index 0000000..52f8eea --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.h @@ -0,0 +1,27 @@ +// Connections +// +sbit n_Tx at LATA6_bit; +sbit p_Tx at LATA7_bit; +// +//sbit Button at RB0_bit; +//sbit BYP_button at RB2_bit; +//sbit Auto_button at RB1_bit; +// +sbit Cap_10 at LATC7_bit; +sbit Cap_22 at LATC3_bit; +sbit Cap_47 at LATC6_bit; +sbit Cap_100 at LATC2_bit; +sbit Cap_220 at LATC5_bit; +sbit Cap_470 at LATC1_bit; +sbit Cap_1000 at LATC4_bit; +sbit Cap_sw at LATC0_bit; +// +sbit Ind_005 at LATB3_bit; +sbit Ind_011 at LATA2_bit; +sbit Ind_022 at LATB4_bit; +sbit Ind_045 at LATA3_bit; +sbit Ind_1 at LATB5_bit; +sbit Ind_22 at LATA5_bit; +sbit Ind_45 at LATA4_bit; +// +void pic_init (void); diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.h.ini b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.h.ini new file mode 100644 index 0000000..f428cbb --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.h.ini @@ -0,0 +1,9 @@ +[Bookmarks] +Count=0 +[Position] +Line=27 +Column=1 +[BreakPoints] +Count=0 +[FoldedLines] +Count=0 diff --git a/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.mcl b/ATU_100_EXT_board/FirmWare_PIC16F1938/1938_EXT_board_sources_V_3.2/pic_init.mcl new file mode 100644 index 0000000000000000000000000000000000000000..007d7d30ca106a56736f51501cab79d73bbfcea8 GIT binary patch literal 3445 zcmZvfS#KOw5QWb;BqV_(20_doP*_Ajk=srj`;D0%J05A68TCx$7o?F0JoqJmln3Ph zlpn!AAc3&&`@V;;2$DKgefv(O(sJK>`m1x7?!I-W{cPF46~IK!xfbx;Ep~1l5Wr(p ztZWo(%d3ze@bdQA>Grwp^T*F(?!qgNRoF$kv$KQU8sE!HJ#I^4rk-hyIpM8C*QDH| zj%)RiJeW3$@k4Ubp<|PKoeqCm= zsbo_eoWFPqD;h_kZKTXZ+Z3BM+3HTp;Q)1IuJ&NO-fyF>?hq$<(O#TBzkPm2`ONo`0eqLIH^ zFQHmWdKuMn(kD=zNctqIlS!|jT1om8s#8g?qFPOQ4b@uGg$yib8ks{kV;3^GoGB*5 z7tQ#EOhC>QlPMHw4x>`u+9v9XnF&ng=)Tn3C{@)GIH*A>K5ufjLH|eeUqt^#^iM>e zMf7PzpG5R=L?1=;VMHH9^nOI|Mf7e&??m)=L~liOIifcsdLyDs5nYVv^@Lio&D%De z-lzOpB%~X^^5)h4of_r^@K;1vBl(eDxc7SXQ}{Swj75&aa=j}iS4(f1L3 z7tyy7eI3zP5q%la7Y&j(cH>KPzkn8Wh@S$-y7ERTW)J7$ul(V*6!vq^x4m1<&b3d_ z0$mgUUGi}uhjZ;0pnXx8OTQ_+i(eDkmwi^SFIj(bxV~-|pnXwTU$!`%ix+y2jtX?w z+}8H6we4?t`8wCU7#3cWf&$=*wpHz1{6SF{1;9ma3*EWyl#q@{0pxY>Tz5(6Fh`^S zmJ1j$-Ye7Os_}nS%%Zc>?-nOBfL$2YyV$i8l06DFk>%Qco0CJ`| z*Zs*w0p#R!t_LKfQ>6f&(XyVZp`4+>>{)7>?ESX|nWA}5zNG?X_5*YFW>>+C6jyiYjSQ3*ZDmqr2DXDyZG0hJs~nE71} zDfjFCabcQi6hPjF+=x#k7lpYv{tY?wqyWuF3V{2U?JKUYV-nI4DS*7CIoDIkMPaU+ zjQDhNQJCu{`^0exX?9Qm+%av}bR+VkNuQbty^=!j#Ur$AV@npP`_mWCy^#O=$V&f< Fxelr05`h2! literal 0 HcmV?d00001