From d9b662b676d6c3ad30bbe5cb39a54b48a94648ff Mon Sep 17 00:00:00 2001 From: David Fainitski Date: Sun, 7 Nov 2021 12:31:56 -0800 Subject: [PATCH] Add files via upload --- .../1938_mini_board_sources_V_3.2/1938.cfgsch | 78 + .../atu_100_fw_00.cfg | 15 + .../atu_100_fw_00.ihex | 34 + .../atu_100_fw_00.log | 15 + .../atu_100_fw_00.mcppi | 68 + .../atu_100_fw_00.mcppi_callertable.txt | 2992 ++++++++++++++++ .../atu_100_fw_00_callertable.txt | 3107 +++++++++++++++++ .../1938_mini_board_sources_V_3.2/backup.c | 2 + .../backup.c.ini | 9 + .../1938_mini_board_sources_V_3.2/backup.mcl | Bin 0 -> 931 bytes .../1938_mini_board_sources_V_3.2/font5x8.h | 100 + .../font5x8.h.ini | 9 + .../1938_mini_board_sources_V_3.2/main.c | 902 +++++ .../1938_mini_board_sources_V_3.2/main.c.ini | 9 + .../1938_mini_board_sources_V_3.2/main.h | 376 ++ .../1938_mini_board_sources_V_3.2/main.h.ini | 9 + .../1938_mini_board_sources_V_3.2/main.ini | 9 + .../1938_mini_board_sources_V_3.2/main.mcl | Bin 0 -> 251327 bytes .../oled_control.c | 406 +++ .../oled_control.c.ini | 9 + .../oled_control.h | 31 + .../oled_control.h.ini | 9 + .../oled_control.mcl | Bin 0 -> 48665 bytes .../1938_mini_board_sources_V_3.2/pic_init.c | 47 + .../pic_init.c.ini | 9 + .../1938_mini_board_sources_V_3.2/pic_init.h | 26 + .../pic_init.h.ini | 9 + .../pic_init.mcl | Bin 0 -> 3407 bytes 28 files changed, 8280 insertions(+) create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/1938.cfgsch create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.cfg create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.ihex create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.log create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.mcppi create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.mcppi_callertable.txt create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00_callertable.txt create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/backup.c create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/backup.c.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/backup.mcl create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/font5x8.h create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/font5x8.h.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.c create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.c.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.h create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.h.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.mcl create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/oled_control.c create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/oled_control.c.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/oled_control.h create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/oled_control.h.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/oled_control.mcl create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/pic_init.c create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/pic_init.c.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/pic_init.h create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/pic_init.h.ini create mode 100644 ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/pic_init.mcl diff --git a/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/1938.cfgsch b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/1938.cfgsch new file mode 100644 index 0000000..68e6520 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/1938.cfgsch @@ -0,0 +1,78 @@ + + + + P16F1938 + 16 + + 17 + + Oscillator Selection + INTOSC oscillator: I/O function on CLKIN pin + + + Watchdog Timer Enable + Enabled + + + Power-up Timer Enable + Enabled + + + MCLR Pin Function Select + Enabled + + + Flash Program Memory Code Protection + Disabled + + + Data Memory Code Protection + Disabled + + + Brown-out Reset Enable + Enabled + + + Clock Out Enable + Disabled + + + Internal/External Switchover + Enabled + + + Fail-Safe Clock Monitor Enable + Enabled + + + Flash Memory Self-Write Protection + Disabled + + + Voltage Regulator Capacitor Enable + Disabled + + + PLL Enable + Disabled + + + Stack Overflow/Underflow Reset Enable + Enabled + + + Brown-out Reset Voltage Selection + Brown-out Reset Voltage (Vbor), high trip point selected. + + + In-Circuit Debugger Mode + Disabled + + + Low-Voltage Programming Enable + Disabled + + + + diff --git a/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.cfg b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.cfg new file mode 100644 index 0000000..8a4a313 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.cfg @@ -0,0 +1,15 @@ + + + + P16F1938 + + 2 + + $008007:$3FDC + + + $008008:$1233 + + + + diff --git a/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.ihex b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.ihex new file mode 100644 index 0000000..28b5103 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.ihex @@ -0,0 +1,34 @@ +:020000040001F9 +:10E000004E00010000001500130005000000010093 +:10E01000020000001000FF00FF00FF00FF00FF00F3 +:10E020000100100002002000040050001000000059 +:10E0300022000000FF00FF00FF00FF00FF00FF00C4 +:10E040000000100000002200000047000100000056 +:10E0500002002000FF00FF00FF00FF00FF00FF00A4 +:10E060000000010000000000FF00FF00FF00FF00B3 +:10E07000FF00FF00FF00FF00FF00FF00FF00FF00A8 +:10E08000FF00FF00FF00FF00FF00FF00FF00FF0098 +:10E09000FF00FF00FF00FF00FF00FF00FF00FF0088 +:10E0A000FF00FF00FF00FF00FF00FF00FF00FF0078 +:10E0B000FF00FF00FF00FF00FF00FF00FF00FF0068 +:10E0C000FF00FF00FF00FF00FF00FF00FF00FF0058 +:10E0D000FF00FF00FF00FF00FF00FF00FF00FF0048 +:10E0E000FF00FF00FF00FF00FF00FF00FF00FF0038 +:10E0F000FF00FF00FF00FF00FF00FF00FF00FF0028 +:10E10000FF00FF00FF00FF00FF00FF00FF00FF0017 +:10E11000FF00FF00FF00FF00FF00FF00FF00FF0007 +:10E12000FF00FF00FF00FF00FF00FF00FF00FF00F7 +:10E13000FF00FF00FF00FF00FF00FF00FF00FF00E7 +:10E14000FF00FF00FF00FF00FF00FF00FF00FF00D7 +:10E15000FF00FF00FF00FF00FF00FF00FF00FF00C7 +:10E16000FF00FF00FF00FF00FF00FF00FF00FF00B7 +:10E17000FF00FF00FF00FF00FF00FF00FF00FF00A7 +:10E18000FF00FF00FF00FF00FF00FF00FF00FF0097 +:10E19000FF00FF00FF00FF00FF00FF00FF00FF0087 +:10E1A000FF00FF00FF00FF00FF00FF00FF00FF0077 +:10E1B000FF00FF00FF00FF00FF00FF00FF00FF0067 +:10E1C000FF00FF00FF00FF00FF00FF00FF00FF0057 +:10E1D000FF00FF00FF00FF00FF00FF00FF00FF0047 +:10E1E000FF00FF00FF00FF00FF00FF00FF00FF0037 +:10E1F000FF00FF00FF00FF00FF0001000000000023 +:00000001FF diff --git a/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.log b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.log new file mode 100644 index 0000000..0e9f330 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.log @@ -0,0 +1,15 @@ +0 1 mikroCPIC1618.exe -MSF -DBG -pP16F1938 -DL -O11111114 -fo16 -EH"D:\Projects\ATU-100\fw_mini\1938_mini_board_sources_V_3.2\atu_100_fw_00.ihex" -N"D:\Projects\ATU-100\fw_mini\1938_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\P16_Enh\" -SP"D:\Projects\ATU-100\fw_mini\1938_mini_board_sources_V_3.2\" -IP"C:\Program Files (x86)\mikroC PRO for PIC\Uses\P16_Enh\" "pic_init.c" "oled_control.c" "main.c" "__Lib_Math.mcl" "__Lib_MathDouble.mcl" "__Lib_System.mcl" "__Lib_Delays.mcl" "__Lib_Conversions.mcl" "__Lib_Button.mcl" "__Lib_ADC.mcl" "__Lib_EEPROM.mcl" +hint: 0 1139 Available RAM: 1016 [bytes], Available ROM: 16384 [bytes] +diagnostics: 0 122 Compilation Started pic_init.c +diagnostics: 47 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 172 ms +hint: 0 1144 Used RAM (bytes): 802 (79%) Free RAM (bytes): 214 (21%) Used RAM (bytes): 802 (79%) Free RAM (bytes): 214 (21%) +hint: 0 1144 Used ROM (program words): 14617 (89%) Free ROM (program words): 1767 (11%) Used ROM (program words): 14617 (89%) Free ROM (program words): 1767 (11%) +diagnostics: 0 125 Project Linked Successfully atu_100_fw_00.mcppi +diagnostics: 0 128 Linked in 47 ms +diagnostics: 0 129 Project 'atu_100_fw_00.mcppi' completed: 234 ms +diagnostics: 0 103 Finished successfully: 07 Nov 2021, 12:22:10 atu_100_fw_00.mcppi diff --git a/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.mcppi b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.mcppi new file mode 100644 index 0000000..6c3ba0d --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.mcppi @@ -0,0 +1,68 @@ +[DEVICE] +Name=P16F1938 +Clock=16000000 +[MEMORY_MODEL] +Value=0 +[BUILD_TYPE] +Value=0 +[ACTIVE_TAB] +Value=main.c +[USE_EEPROM] +Value=1 +[EEPROM_DEFINITION] +Value= +[USE_HEAP] +Value=0 +[HEAP_SIZE] +Value=2000 +[FILES] +File0=pic_init.c +File1=oled_control.c +File2=main.c +Count=3 +[BINARIES] +Count=0 +[IMAGES] +Count=0 +ActiveImageIndex=-1 +[OPENED_FILES] +File0=main.h +File1=oled_control.c +File2=oled_control.h +File3=main.c +File4=pic_init.c +File5=pic_init.h +Count=6 +[EEPROM] +File0=atu_100_fw_00.ihex +Count=1 +[ACTIVE_COMMENTS_FILES] +Count=0 +[OTHER_FILES] +Count=0 +[SEARCH_PATH] +Count=0 +[HEADER_PATH] +Count=0 +[HEADERS] +File0=main.h +File1=oled_control.h +File2=pic_init.h +Count=3 +[PLDS] +Count=0 +[Useses] +File0=ADC +File1=Conversions +File2=Button +File3=EEPROM +Count=4 +[EXPANDED_NODES] +Count=0 +[LIB_EXPANDED_NODES] +0=mikroE Libraries +1=System Libraries +30=Conversions +126=EEPROM +162=FLASH +Count=6 diff --git a/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.mcppi_callertable.txt b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.mcppi_callertable.txt new file mode 100644 index 0000000..3078cd9 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00.mcppi_callertable.txt @@ -0,0 +1,2992 @@ +main + __CC2DW + pic_init + ADC_Init + cells_init + EEPROM_Read + Bcd2Dec + Mul_8X8_U + Mul_8X8_U + Soft_I2C_Init + EEPROM_Read + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + led_init + EEPROM_Read + oled_init + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_addressing + Soft_I2C_Start + Soft_I2C_Write + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_cap + VDelay_ms + Mul_32x32_U + set_ind + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Read + lcd_prep + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + Test_init + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_prep + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + button_proc + Button + Delay_500us + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + btn_push + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + tune + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + 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 + get_reverse + ADC_Get_Sample + Delay_22us + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + Div_16x16_S + Div_16x16_S_L + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_cap + VDelay_ms + Mul_32x32_U + sharp_ind + set_ind + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + sharp_cap + set_cap + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_sw + VDelay_ms + Mul_32x32_U + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + EEPROM_Write + Div_16x16_S + Div_16x16_S_L + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + EEPROM_Write + button_proc_test + Button + Delay_500us + set_sw + VDelay_ms + Mul_32x32_U + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + button_delay + Button + Delay_500us + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + correction + Mul_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + dysp_off + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop diff --git a/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00_callertable.txt b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00_callertable.txt new file mode 100644 index 0000000..284371e --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/atu_100_fw_00_callertable.txt @@ -0,0 +1,3107 @@ +main + __CC2DW + pic_init + ADC_Init + cells_init + EEPROM_Read + Bcd2Dec + Mul_8X8_U + Mul_8X8_U + Soft_I2C_Init + EEPROM_Read + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + led_init + EEPROM_Read + oled_init + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_addressing + Soft_I2C_Start + Soft_I2C_Write + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_cap + VDelay_ms + Mul_32x32_U + set_ind + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + Button + Delay_500us + EEPROM_Read + Bcd2Dec + Mul_8X8_U + show_loss + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + Dec2Bcd + Div_8X8_U + EEPROM_Write + lcd_prep + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + Test_init + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_prep + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + button_proc + Button + Delay_500us + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + 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 + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + btn_push + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + tune + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + 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 + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + Div_16x16_S + Div_16x16_S_L + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_cap + VDelay_ms + Mul_32x32_U + sharp_ind + set_ind + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + sharp_cap + set_cap + VDelay_ms + Mul_32x32_U + get_swr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + Button + Delay_500us + show_reset + atu_reset + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + EEPROM_Write + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_sw + VDelay_ms + Mul_32x32_U + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + EEPROM_Write + Div_16x16_S + Div_16x16_S_L + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + EEPROM_Write + button_proc_test + Button + Delay_500us + set_sw + VDelay_ms + Mul_32x32_U + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_pwr + get_pwr + get_forward + ADC_Get_Sample + Delay_22us + get_reverse + ADC_Get_Sample + Delay_22us + Mul_16X16_U + correction + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Mul_32x32_U + Div_32x32_S + SDIV3232L + COMFREM + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + double2int + SETIOV3224 + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + set_sw + VDelay_ms + Mul_32x32_U + dysp_on + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + double2int + SETIOV3224 + button_delay + Button + Delay_500us + lcd_swr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + show_pwr + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + lcd_ind + IntToStr + WordToStr + Div_16X16_U + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + IntToStr + WordToStr + Div_16X16_U + int2double + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + Div_32x32_FP + SETFDZ32 + RES032 + SETFOV32 + SETFUN32 + Add_32x32_FP + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + NRM3232 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + byte2double + NRM4032 + RES032 + SETFUN32 + FIXSIGN32 + SETFOV32 + Mul_32x32_FP + RES032 + SETFOV32 + SETFUN32 + Compare_Double + double2int + SETIOV3224 + led_wr_str + oled_wr_str + Soft_I2C_Start + Soft_I2C_Write + set_addressing + Soft_I2C_Start + Soft_I2C_Write + Mul_8X8_U + Soft_I2C_Stop + Mul_8X8_U + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + set_ind + VDelay_ms + Mul_32x32_U + set_cap + VDelay_ms + Mul_32x32_U + dysp_off + send_command + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop + led_send + Soft_I2C_Start + Soft_I2C_Write + Soft_I2C_Stop diff --git a/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/backup.c b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/backup.c new file mode 100644 index 0000000..99a8091 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/backup.c @@ -0,0 +1,2 @@ + + diff --git a/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/backup.c.ini b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/backup.c.ini new file mode 100644 index 0000000..226e6ad --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_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_PIC16F1938/1938_mini_board_sources_V_3.2/backup.mcl b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_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_PIC16F1938/1938_mini_board_sources_V_3.2/font5x8.h.ini b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/font5x8.h.ini new file mode 100644 index 0000000..2879890 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_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_PIC16F1938/1938_mini_board_sources_V_3.2/main.c b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.c new file mode 100644 index 0000000..803e41f --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_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(STATUS.B4==0) Restart = 1; + pic_init(); + // + Delay_ms (300); + asm CLRWDT; + cells_init(); + Soft_I2C_Init(); + if(type==0) { // 2-colors led reset + LATB.B6 = 1; + LATB.B7 = 1; + } + 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_PIC16F1938/1938_mini_board_sources_V_3.2/main.c.ini b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.c.ini new file mode 100644 index 0000000..92bf98a --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.c.ini @@ -0,0 +1,9 @@ +[Bookmarks] +Count=0 +[Position] +Line=865 +Column=47 +[BreakPoints] +Count=0 +[FoldedLines] +Count=0 diff --git a/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.h b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.h new file mode 100644 index 0000000..5799766 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.h @@ -0,0 +1,376 @@ +// 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); +void get_swr(void); +void get_pwr(void); +void set_sw(char); +void coarse_cap(); +void sharp_cap(); +void sharp_ind(); +void coarse_tune(); +void tune(void); +// + + int correction(int input) { + // + if(input <= 80) return 0; + if(input <= 171) input += 244; + else if(input <= 328) input += 254; + else if(input <= 582) input += 280; + else if(input <= 820) input += 297; + else if(input <= 1100) input += 310; + else if(input <= 2181) input += 430; + else if(input <= 3322) input += 484; + else if(input <= 4623) input += 530; + else if(input <= 5862) input += 648; + else if(input <= 7146) input += 743; + else if(input <= 8502) input += 800; + else if(input <= 10500) input += 840; + else input += 860; + // + return input; +} + +// + +int get_reverse() { + int Reverse; + FVRCON = 0b10000001; // ADC 1024 vmV Vref + while(FVRCON.B6 == 0); + Reverse = ADC_Get_Sample(1); + if(Reverse <= 1000) return Reverse; + FVRCON = 0b10000010; // ADC 2048 vmV Vref + while(FVRCON.B6 == 0); + Reverse = ADC_Get_Sample(1); + if(Reverse <= 1000) return Reverse * 2; + FVRCON = 0b10000011; // ADC 4096 vmV Vref + while(FVRCON.B6 == 0); + Reverse = ADC_Get_Sample(1); + return Reverse * 4; +} +// + +int get_forward() { + int Forward; + FVRCON = 0b10000001; // ADC 1024 vmV Vref + while(FVRCON.B6 == 0); + Forward = ADC_Get_Sample(0); + if(Forward <= 1000){ + Overload = 0; + return Forward; + } + FVRCON = 0b10000010; // ADC 2048 vmV Vref + while(FVRCON.B6 == 0); + Forward = ADC_Get_Sample(0); + if(Forward <= 1000){ + Overload = 0; + return Forward * 2; + } + FVRCON = 0b10000011; // ADC 4096 vmV Vref + while(FVRCON.B6 == 0); + Forward = ADC_Get_Sample(0); + if(Forward > 1000) Overload = 1; + else Overload = 0; + return Forward * 4; +} + +void get_pwr() { + long Forward, Reverse; + float p; + asm CLRWDT; + // + Forward = get_forward(); + Reverse = get_reverse(); + p = correction(Forward * 3); + // + if(Reverse >= Forward) + Forward = 999; + else { + Forward = ((Forward + Reverse) * 100) / (Forward - Reverse); + if(Forward>999) Forward = 999; + } + // + p = p * K_Mult / 1000.0; // mV to Volts on Input + p = p / 1.414; + p = p * p / 5; // 0 - 1510 (151.0 Watts) + p = p + 0.5; // rounding + // + PWR = p; + if(Forward<100) SWR = 999; + else SWR = Forward; + return; +} + +void get_swr() { + get_pwr(); + if(p_cnt!=100) { + p_cnt += 1; + if(PWR>P_max) P_max = PWR; + } + else { + p_cnt = 0; + show_pwr(P_max, SWR); + P_max = 0; + } + while(PWR max_for_start & max_for_start>0)) { // waiting for good power + asm CLRWDT; + get_pwr(); + if(p_cnt!=100) { + p_cnt += 1; + if(PWR>P_max) P_max = PWR; + } + else { + p_cnt = 0; + show_pwr(P_max, SWR); + P_max = 0; + } + // + if(Button(&PORTB, 0, 5, 1)) rready = 1; + if(rready==1 & Button(&PORTB, 0, 5, 0)) { // press button Tune + show_reset(); + SWR = 0; + return; + } + } // good power + return; +} + +void set_ind(char Ind) { // 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); + get_swr(); + min_swr = SWR + SWR/20; + for(count=step; count<=31;) { + set_cap(count); + 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(); + 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); + get_swr(); + if(SWR==0) return; + min_SWR = SWR; + for(count=min_range+1; count<=max_range; count++) { + set_cap(count); + get_swr(); + if(SWR==0) return; + if(SWR>=min_SWR) { Delay_ms(10); get_swr(); } + if(SWR>=min_SWR) { Delay_ms(10); get_swr(); } + if(SWR < min_SWR) { + min_SWR = SWR; + cap = count; + if(SWR<120) break; + } + else break; + } + set_cap(cap); + return; +} + +void sharp_ind() { + char range, count, max_range, min_range; + int min_SWR; + range = step_ind; + // + 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); + get_swr(); + if(SWR==0) return; + min_SWR = SWR; + for(count=min_range+1; count<=max_range; count++) { + set_ind(count); + get_swr(); + if(SWR==0) return; + if(SWR>=min_SWR) { Delay_ms(10); get_swr(); } + if(SWR>=min_SWR) { Delay_ms(10); get_swr(); } + if(SWR < min_SWR) { + min_SWR = SWR; + ind = count; + if(SWR<120) break; + } + else break; + } + set_ind(ind); + return; +} + + +void 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_PIC16F1938/1938_mini_board_sources_V_3.2/main.h.ini b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.h.ini new file mode 100644 index 0000000..5beb087 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.h.ini @@ -0,0 +1,9 @@ +[Bookmarks] +Count=0 +[Position] +Line=9 +Column=11 +[BreakPoints] +Count=0 +[FoldedLines] +Count=0 diff --git a/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.ini b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.ini new file mode 100644 index 0000000..f98081c --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_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_PIC16F1938/1938_mini_board_sources_V_3.2/main.mcl b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/main.mcl new file mode 100644 index 0000000000000000000000000000000000000000..9754cd78ad7ad02b7d2c21c84251a2b6367cbfe2 GIT binary patch literal 251327 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 C#8*84 literal 0 HcmV?d00001 diff --git a/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/oled_control.c b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/oled_control.c new file mode 100644 index 0000000..7f51db9 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_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_PIC16F1938/1938_mini_board_sources_V_3.2/oled_control.c.ini b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_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_PIC16F1938/1938_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_PIC16F1938/1938_mini_board_sources_V_3.2/oled_control.h b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/oled_control.h new file mode 100644 index 0000000..60762e0 --- /dev/null +++ b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_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_PIC16F1938/1938_mini_board_sources_V_3.2/oled_control.h.ini b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_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_PIC16F1938/1938_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_PIC16F1938/1938_mini_board_sources_V_3.2/oled_control.mcl b/ATU_100_mini_board/FirmWare_PIC16F1938/1938_mini_board_sources_V_3.2/oled_control.mcl new file mode 100644 index 0000000000000000000000000000000000000000..846e3f9c1f7f37468de67d017872e7bc4c2537fc GIT binary patch literal 48665 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 literal 0 HcmV?d00001