From 83b276137d5aebfc4e1ce487a3e4ddb64c953658 Mon Sep 17 00:00:00 2001 From: David Fainitski Date: Sun, 7 Nov 2021 12:29:14 -0800 Subject: [PATCH] Add files via upload --- .../2550_mini_board_sources_V_3.2/2520.cfgsch | 146 + .../atu_100_fw_00.cfg | 42 + .../atu_100_fw_00.ihex | 18 + .../atu_100_fw_00.log | 15 + .../atu_100_fw_00.mcppi | 68 + .../atu_100_fw_00.mcppi_callertable.txt | 3048 ++++++++++++++++ .../atu_100_fw_00_callertable.txt | 3160 +++++++++++++++++ .../2550_mini_board_sources_V_3.2/backup.c | 2 + .../backup.c.ini | 9 + .../2550_mini_board_sources_V_3.2/backup.mcl | Bin 0 -> 931 bytes .../2550_mini_board_sources_V_3.2/font5x8.h | 100 + .../font5x8.h.ini | 9 + .../2550_mini_board_sources_V_3.2/main.c | 902 +++++ .../2550_mini_board_sources_V_3.2/main.c.ini | 9 + .../2550_mini_board_sources_V_3.2/main.h | 351 ++ .../2550_mini_board_sources_V_3.2/main.h.ini | 9 + .../2550_mini_board_sources_V_3.2/main.ini | 9 + .../2550_mini_board_sources_V_3.2/main.mcl | Bin 0 -> 251841 bytes .../oled_control.c | 406 +++ .../oled_control.c.ini | 9 + .../oled_control.h | 31 + .../oled_control.h.ini | 9 + .../oled_control.mcl | Bin 0 -> 49899 bytes .../2550_mini_board_sources_V_3.2/pic_init.c | 31 + .../pic_init.c.ini | 9 + .../2550_mini_board_sources_V_3.2/pic_init.h | 26 + .../pic_init.h.ini | 9 + .../pic_init.mcl | Bin 0 -> 2709 bytes 28 files changed, 8427 insertions(+) create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/2520.cfgsch create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.cfg create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.ihex create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.log create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.mcppi create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.mcppi_callertable.txt create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00_callertable.txt create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/backup.c create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/backup.c.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/backup.mcl create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/font5x8.h create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/font5x8.h.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.c create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.c.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.h create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.h.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.mcl create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.c create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.c.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.h create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.h.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.mcl create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/pic_init.c create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/pic_init.c.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/pic_init.h create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/pic_init.h.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/pic_init.mcl diff --git a/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/2520.cfgsch b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/2520.cfgsch new file mode 100644 index 0000000..2f42b33 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/2520.cfgsch @@ -0,0 +1,146 @@ + + + + P18F2520 + 16 + + 34 + + Oscillator Selection + Internal oscillator block, port function on RA6 and RA7 + + + Fail-Safe Clock Monitor + Disabled + + + Internal/External Oscillator Switchover + Disabled + + + Power-up Timer + Enabled + + + Brown-out Reset + Enabled + + + Brown Out Reset Voltage + Minimum setting + + + Watchdog Timer + Enabled + + + Watchdog Timer Postscale + 1:256 + + + CCP2 MUX bit + CCP2 input/output is multiplexed with RC1 + + + PORTB A/D + Disabled + + + Low-Power Timer1 Oscillator + Disabled + + + MCLR Pin + Enabled + + + Stack Full/Underflow Reset + Enabled + + + Low Voltage Program + Disabled + + + Extended Instruction Set + Disabled + + + Background Debug + Disabled + + + Code Protection (Block 0) + Block 0 (000800-001FFFh) is not code-protected + + + Code Protection (Block 1) + Block 1 (002000-003FFFh) is not code-protected + + + Code Protection (Block 2) + Block 2 (004000-005FFFh) is not code-protected + + + Code Protection (Block 3) + Block 3 (006000-007FFFh) is not code-protected + + + Boot Block Code Protection + Disabled + + + Data EEPROM Code Protection + Disabled + + + Write Protection (Block 0) + Block 0 (000800-001FFFh) or (001000-001FFFh) is not write-protected + + + Write Protection (Block 1) + Block 1 (002000-003FFFh) is not write-protected + + + Write Protection (Block 2) + Block 2 (004000-005FFFh) is not write-protected + + + Write Protection (Block 3) + Block 3 (006000-007FFFh) is not write-protected + + + Configuration Register Write Protection + Disabled + + + Boot Block Write Protection + Disabled + + + Data EEPROM Write Protection + Disabled + + + Table Read Protection (Block 0) + Block 0 (000800-001FFFh) is not protected from table reads executed in other blocks + + + Table Read Protection (Block 1) + Block 1 (002000-003FFFh) is not protected from table reads executed in other blocks + + + Table Read Protection (Block 2) + Block 2 (004000-005FFFh) not protected from table reads executed in other blocks + + + Table Read Protection bi (Block 3) + Block 3 (006000-007FFFh) not protected from table reads executed in other blocks + + + Boot Block Table Read Protection + Disabled + + + + diff --git a/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.cfg b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.cfg new file mode 100644 index 0000000..1401434 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.cfg @@ -0,0 +1,42 @@ + + + + P18F2520 + + 11 + + $300001:$0008 + + + $300002:$001A + + + $300003:$0011 + + + $300005:$0081 + + + $300006:$0081 + + + $300008:$000F + + + $300009:$00C0 + + + $30000A:$000F + + + $30000B:$00E0 + + + $30000C:$000F + + + $30000D:$0040 + + + + diff --git a/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.ihex b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.ihex new file mode 100644 index 0000000..9d3a6c3 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.ihex @@ -0,0 +1,18 @@ +:0200000400F00A +:100000004E01001513050001020010FFFFFFFFFF66 +:1000100001100220045010002200FFFFFFFFFFFF2D +:1000200000100022004701000220FFFFFFFFFFFF3A +:10003000000100FFFFFFFFFFFFFFFFFFFFFFFFFFCC +:10004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:10005000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:10006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:10007000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:10008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:10009000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:1000A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:1000B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:1000D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:1000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:1000F000FFFFFFFFFFFFFFFFFFFFFFFFFF0100000C +:00000001FF diff --git a/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.log b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.log new file mode 100644 index 0000000..6e65d6b --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.log @@ -0,0 +1,15 @@ +0 1 mikroCPIC1618.exe -MSF -DBG -pP18F2520 -DL -O11111114 -fo16 -EH"D:\Projects\ATU-100\fw_mini\2550_mini_board_sources_V_3.2\atu_100_fw_00.ihex" -N"D:\Projects\ATU-100\fw_mini\2550_mini_board_sources_V_3.2\atu_100_fw_00.mcppi" -SP"C:\Program Files (x86)\mikroC PRO for PIC\Defs\" -SP"C:\Program Files (x86)\mikroC PRO for PIC\uses\P18\" -SP"D:\Projects\ATU-100\fw_mini\2550_mini_board_sources_V_3.2\" -IP"C:\Program Files (x86)\mikroC PRO for PIC\uses\P18\" "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_A_D.mcl" "__Lib_EEPROM_256.mcl" +hint: 0 1139 Available RAM: 1515 [bytes], Available ROM: 32768 [bytes] +diagnostics: 0 122 Compilation Started pic_init.c +diagnostics: 31 123 Compiled Successfully pic_init.c +diagnostics: 0 122 Compilation Started oled_control.h +diagnostics: 406 123 Compiled Successfully oled_control.c +diagnostics: 0 122 Compilation Started oled_control.h +diagnostics: 902 123 Compiled Successfully main.c +diagnostics: 0 127 All files Compiled in 218 ms +hint: 0 1144 Used RAM (bytes): 803 (53%) Free RAM (bytes): 712 (47%) Used RAM (bytes): 803 (53%) Free RAM (bytes): 712 (47%) +hint: 0 1144 Used ROM (bytes): 25103 (77%) Free ROM (bytes): 7665 (23%) Used ROM (bytes): 25103 (77%) Free ROM (bytes): 7665 (23%) +diagnostics: 0 125 Project Linked Successfully atu_100_fw_00.mcppi +diagnostics: 0 128 Linked in 63 ms +diagnostics: 0 129 Project 'atu_100_fw_00.mcppi' completed: 297 ms +diagnostics: 0 103 Finished successfully: 07 Nov 2021, 12:25:20 atu_100_fw_00.mcppi diff --git a/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.mcppi b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.mcppi new file mode 100644 index 0000000..e02231a --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.mcppi @@ -0,0 +1,68 @@ +[DEVICE] +Name=P18F2520 +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 +126=EEPROM +162=FLASH +Count=6 diff --git a/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.mcppi_callertable.txt b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.mcppi_callertable.txt new file mode 100644 index 0000000..ac12c82 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00.mcppi_callertable.txt @@ -0,0 +1,3048 @@ +main + __CC2DW + pic_init + ADC_Init + cells_init + EEPROM_Read + Bcd2Dec + Soft_I2C_Init + EEPROM_Read + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + 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 + Soft_I2C_Stop + 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 + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + tune + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + 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 + Soft_I2C_Stop + 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 + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + coarse_tune + Div_16x16_S + Div_16x16_S_L + 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 + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + 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 + Soft_I2C_Stop + 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 + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + Div_16x16_S + Div_16x16_S_L + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + 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 + Soft_I2C_Stop + 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 + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_cap + VDelay_ms + Mul_32x32_U + sharp_ind + set_ind + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + 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 + Soft_I2C_Stop + 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 + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + sharp_cap + set_cap + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + 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 + Soft_I2C_Stop + 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 + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + 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 + Soft_I2C_Stop + 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 + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + 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 + Soft_I2C_Stop + 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 + 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 + Soft_I2C_Stop + 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 + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00_callertable.txt b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00_callertable.txt new file mode 100644 index 0000000..a0fa74a --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/atu_100_fw_00_callertable.txt @@ -0,0 +1,3160 @@ +main + __CC2DW + pic_init + ADC_Init + cells_init + EEPROM_Read + Bcd2Dec + Soft_I2C_Init + EEPROM_Read + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + button_proc + Button + Delay_500us + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + 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 + 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 + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + tune + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + coarse_tune + Div_16x16_S + Div_16x16_S_L + 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 + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + Div_16x16_S + Div_16x16_S_L + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_cap + VDelay_ms + Mul_32x32_U + sharp_ind + set_ind + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + sharp_cap + set_cap + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + 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 + Soft_I2C_Stop + 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 + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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 + 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 + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + get_reverse + ADC_Get_Sample + Delay_22us + word2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + Soft_I2C_Stop + 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 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + SETFOV32 + byte2double + NRM4032 + SETFUN32 + FIXSIGN32 + SETFOV32 + RES032 + 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 + Soft_I2C_Stop + 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_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/backup.c b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/backup.c new file mode 100644 index 0000000..99a8091 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/backup.c @@ -0,0 +1,2 @@ + + diff --git a/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/backup.c.ini b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/backup.c.ini new file mode 100644 index 0000000..226e6ad --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_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_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/backup.mcl b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_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_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/font5x8.h.ini b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/font5x8.h.ini new file mode 100644 index 0000000..2879890 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_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_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.c b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.c new file mode 100644 index 0000000..1562310 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.c @@ -0,0 +1,902 @@ +// ATU-100 project + // David Fainitski + // 2016 + +#include "oled_control.h" +#include "pic_init.h" +#include "main.h" + + +// Variables + int SWR_fixed = 0, SWR_fixed_old = 0, Power, work_int; + char work_char, work_str[7], work_str_2[7]; + float Forward; + int Power_old = 10000; + int SWR_old = 10000; + char m_nibble = 0, l_nibble = 0; + 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; + int Ind1, Ind2, Ind3, Ind4, Ind5; + 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(RCON.B3==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; + } + else if(type==6){ + LATB.B6 = 0; + LATB.B7 = 0; + } + Low = 0; + Mid = 0; + High = 0; + dysp_cnt = Dysp_delay * dysp_cnt_mult; + // + Delay_ms(300); + asm CLRWDT; + if(PORTB.B4==0 & PORTB.B5==0) { // Test mode + Test = 1; + Auto = 0; + } + + 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.B4==0 & PORTB.B5==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); + set_ind(255); + 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(0x32)); + show_loss(); + // + while(1) { + if(Button(&PORTB, 5, 50, 0)){ // BYP button + if(Fid_loss<99) { + Fid_loss ++; + show_loss(); + EEPROM_Write(0x32, Dec2Bcd(Fid_loss)); + } + while(Button(&PORTB, 5, 50, 0)) asm CLRWDT; + } + // + if(Button(&PORTB, 4, 50, 0)){ // AUTO button + if(Fid_loss>0) { + Fid_loss --; + show_loss(); + EEPROM_Write(0x32, Dec2Bcd(Fid_loss)); + } + while(Button(&PORTB, 4, 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 & type!=6) // 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 & type !=6) // 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, 5, 50, 0)){ // BYP button + asm CLRWDT; + while(PORTB.B5==0) { + if(L & ind<31) { + ind ++; + set_ind(ind); + } + else if(!L & cap<31) { + cap ++; + set_cap(cap); + } + lcd_ind(); + lcd_pwr(); + Delay_ms(30); + asm CLRWDT; + } + } // end of BYP button + // + if(Button(&PORTB, 4, 50, 0) & Bypas==0){ // Auto button + asm CLRWDT; + while(PORTB.B4==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){ + if(dysp==0) { // dysplay ON + if(Relay_off==1){ set_ind(ind); set_cap(cap); set_SW(SW); } + dysp = 1; + dysp_on(); + dysp_cnt = Dysp_delay * dysp_cnt_mult; + return; + } + 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, 5, 50, 0)){ // BYP button + if(dysp==0) { // dysplay ON + if(Relay_off==1){ set_ind(ind); set_cap(cap); set_SW(SW); } + dysp = 1; + dysp_on(); + dysp_cnt = Dysp_delay * dysp_cnt_mult; + return; + } + 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; + 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 & type!=6) { // 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); + } + while(Button(&PORTB, 5, 50, 0)) {lcd_pwr(); asm CLRWDT; } + } + // + if(Button(&PORTB, 4, 50, 0) & Bypas==0){ // Auto button + if(dysp==0) { // dysplay ON + if(Relay_off==1){ set_ind(ind); set_cap(cap); set_SW(SW); } + dysp = 1; + dysp_on(); + dysp_cnt = Dysp_delay * dysp_cnt_mult; + return; + } + 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 & type!=6) { // 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); + } + while(Button(&PORTB, 4, 50, 0)) {lcd_pwr(); asm CLRWDT; } + } + return; +} + +void show_reset() { + asm CLRWDT; + 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 & type!=6) {// 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; + } + Low = 0; + Mid = 0; + High = 0; + 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 & type!=6) { // 1602 LCD & 128*32 OLED + led_wr_str (1, 4, "TUNE", 4); + } + else { + LATB.B6 = 1; + LATB.B7 = 1; + } + Low = 0; + Mid = 0; + High = 0; + 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(type==6){ + if(swr<=150) { LATB.B6 = 1; LATB.B7 = 0; } // Green + else if(swr<=250) {PORTB.B6 = 1; PORTB.B7 = 1;} // Orange + else { PORTB.B6 = 0; PORTB.B7 = 1; } // Red + } + else if(Loss_mode==0 | Loss_ind==0) lcd_ind(); + if(SWR<=150) Low = 1; + else if(SWR<=250) Mid = 1; + else High = 1; + 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, 4, "mini board", 10); + 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); + 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 & type!=6) { // 1602 LCD & 128*32 OLED + if(lcd_prep_short==0) { + led_wr_str (0, 4, "ATU-100", 7); + led_wr_str (1, 3, "mini board", 10); + 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); + 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; + } + Low = 0; + Mid = 0; + High = 0; + 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 + } + if(SWR<=150) {Low = 1; Mid = 0; High = 0;} + else if(SWR<=250) {Low = 0; Mid = 1; High = 0;} + else {Low = 0; Mid = 0; High = 1; } + } + } + asm CLRWDT; + return; +} + +void button_delay() { + if((Button(&PORTB, 0, 25, 0)) | (Button(&PORTB, 4, 25, 0)) | (Button(&PORTB, 5, 25, 0))) { + but = 1; + } + return; +} + +void show_pwr(int Power, int SWR) { + float a, b; + int p_ant, eff; + 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 + 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 + led_wr_str (0, 9, "ANT=0.0W", 8); + led_wr_str (1, 9, "EFF= 0%", 8); + } + else if(type==1) { // 1602 LCD + 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(1) { + 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'; + } + } + if(type==4 | type==5) led_wr_str (0, 16+4*12, work_str_2, 4); // 128*64 OLED + else if(type!=0 & type!=6) led_wr_str (0, 4, work_str_2, 4); // 1602 & 128*32 + // + // 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(1) { + 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'; + } + } + 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==1) 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 = 1; + 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.B4==0 | PORTB.B5==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; + 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.B4==0 | PORTB.B5==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.B4==0 | PORTB.B5==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); + 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(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 & type!=6) { // 1602 & 128*32// 1602 + led_wr_str (1, 0, " ", 8); + delay_ms(100); + 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(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(type==1) { // 1602 LCD + if(work_int>9999) { // more then 9999 nH + work_int += 500; // round + IntToStr(work_int, work_str); + work_str_2[0] = ' '; + work_str_2[1] = work_str[1]; + work_str_2[2] = work_str[2]; + } + else { + work_int += 50; // Round + 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'; + } + } + else 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==1) { + if(SW==1) column = 0; else column = 1; + led_wr_str (column, 9, "L=", 2); + led_wr_str (column, 14, "uH", 2); + led_wr_str (column, 11, work_str_2, 3); + } + else 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); + } + } + 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(type==4 | type==5) { // 128*64 OLED + 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(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 + 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(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 + IntToStr(work_int, work_str); + work_str_2[0] = work_str[3]; + work_str_2[1] = work_str[4]; + work_str_2[2] = work_str[5]; + if(SW==1) column = 1; else column = 0; + led_wr_str (column, 9, "C=", 2); + led_wr_str (column, 14, "pF", 2); + led_wr_str (column, 11, work_str_2, 3); + } + } + 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 & type!=6) // 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 & type!=6) // 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 & type!=6) // 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; // min_for_start + max_for_start = Bcd2Dec(EEPROM_Read(6)) * 10; // max_for_start + max_swr = Bcd2Dec(EEPROM_Read(9)) * 10; // Max SWR + K_Mult = Bcd2Dec(EEPROM_Read(10)); // Tandem Match rate + // + 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 + // + 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 + // + Dysp_delay = Bcd2Dec(EEPROM_Read(0x30)); // Dysplay ON delay + Loss_ind = EEPROM_Read(0x31); + Fid_loss = Bcd2Dec(EEPROM_Read(0x32)); + Relay_off = Bcd2Dec(EEPROM_Read(0x33)); + 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_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.c.ini b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.c.ini new file mode 100644 index 0000000..1f605d0 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.c.ini @@ -0,0 +1,9 @@ +[Bookmarks] +Count=0 +[Position] +Line=36 +Column=31 +[BreakPoints] +Count=0 +[FoldedLines] +Count=0 diff --git a/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.h b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.h new file mode 100644 index 0000000..3dd1b42 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.h @@ -0,0 +1,351 @@ +// Main.h +// David Fainitski +// ATU-100 project 2016 + +// +static char ind = 0, cap = 0, SW = 0, step_cap = 0, step_ind = 0, Overload = 0, Loss_ind = 0, K_mult = 10, Relay_off = 0; +static int Rel_Del, min_for_start, max_for_start, max_swr; +int SWR, PWR, P_max = 0, 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 lcd_ind(void); +void crypto(void); +void show_reset(void); +void show_pwr(int, int); +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); +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 += 820; + else if(input <= 10500) input += 900; + else input += 850; + // + + return input; +} + +// + + int get_reverse() { + return ADC_Get_Sample(1) * 4.883; +} +// + +int get_forward() { + int Forward; + Forward = ADC_Get_Sample(0); + if(Forward > 1000) Overload = 1; + else Overload = 0; + return Forward * 4.883; +} + +void get_pwr() { + long Forward, Reverse; + float p; + asm CLRWDT; + // + Forward = get_forward(); + Reverse = get_reverse(); + p = correction(Forward); + // + if(Reverse >= Forward) + Forward = 999; + else { + Forward = ((Forward + Reverse) * 100) / (Forward - Reverse); + if(Forward>999) Forward = 999; + } + // + p = p * K_mult / 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) + if(PWR<10) SWR = 1; + else if(Forward<100) SWR = 999; + else SWR = Forward; + return; +} + +int 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 SWR; + } + } // good power + return SWR; +} + +void set_ind(char Ind) { // 0 - 31 + // + Ind_011 = Ind.B0; + Ind_022 = Ind.B1; + Ind_045 = Ind.B2; + Ind_1 = Ind.B3; + Ind_22 = Ind.B4; + // + 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; + // + 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); + SWR = get_swr(); + min_swr = SWR + SWR/20; + for(count=step; count<=31;) { + set_cap(count); + SWR = get_swr(); + if(SWR < min_swr) { + min_swr = SWR + SWR/20; + cap = count; + step_cap = step; + if(SWR<120) break; + count += step; + if(count==9) count = 8; + else if(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); + coarse_cap(); + SWR = get_swr(); + if(SWR < min_swr) { + min_swr = SWR + SWR/20; + ind = count; + mem_cap = cap; + step_ind = step; + mem_step_cap = step_cap; + if(SWR<120) break; + count += step; + if(count==9) count = 8; + else if(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; + // + max_range = cap + range; + if(max_range>31) max_range = 31; + 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; + int min_SWR; + range = step_ind; + // + max_range = ind + range; + if(max_range>31) max_range = 31; + 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; + P_max = 0; + p_cnt = 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; + // + 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; +} \ No newline at end of file diff --git a/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.h.ini b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.h.ini new file mode 100644 index 0000000..3a0450d --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.h.ini @@ -0,0 +1,9 @@ +[Bookmarks] +Count=0 +[Position] +Line=6 +Column=121 +[BreakPoints] +Count=0 +[FoldedLines] +Count=0 diff --git a/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.ini b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.ini new file mode 100644 index 0000000..f98081c --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_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_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.mcl b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/main.mcl new file mode 100644 index 0000000000000000000000000000000000000000..6cf5b6696780c59f91e229722ebe33642f296cc2 GIT binary patch literal 251841 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 literal 0 HcmV?d00001 diff --git a/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.c b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.c new file mode 100644 index 0000000..7f51db9 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.c @@ -0,0 +1,406 @@ + +#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) { + led_type = EEPROM_read(1); + shift_line = EEPROM_read(7); + oled_shift = EEPROM_read(8); + if(led_type!=1) oled_init(); // OLED + else{ // 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 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 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 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); + //if(led_type==2 | led_type==3) Soft_I2C_Write (0); // 128*32 + } + 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); + //led = 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_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.c.ini b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.c.ini new file mode 100644 index 0000000..9b3eb12 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.c.ini @@ -0,0 +1,9 @@ +[Bookmarks] +Count=0 +[Position] +Line=218 +Column=2 +[BreakPoints] +Count=0 +[FoldedLines] +Count=0 diff --git a/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.h b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.h new file mode 100644 index 0000000..60762e0 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.h @@ -0,0 +1,31 @@ +// 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; +static char 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 dysp_on (void); +void dysp_off (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 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_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.h.ini b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.h.ini new file mode 100644 index 0000000..3c84e93 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.h.ini @@ -0,0 +1,9 @@ +[Bookmarks] +Count=0 +[Position] +Line=21 +Column=8 +[BreakPoints] +Count=0 +[FoldedLines] +Count=0 diff --git a/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.mcl b/ATU_100_mini_board/FirmWare_PIC18F2520/2550_mini_board_sources_V_3.2/oled_control.mcl new file mode 100644 index 0000000000000000000000000000000000000000..7c1e508d5314d0a042011a57bb3a3d0be2d591eb GIT binary patch literal 49899 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