From a76f6261914a76e87b74d661a5d14f43f8816d03 Mon Sep 17 00:00:00 2001 From: David Fainitski Date: Sat, 26 Oct 2019 19:41:53 -0700 Subject: [PATCH] Add files via upload --- .../2520_EXT_board_sources_V_3.0/main.h | 396 ++++++++++++++++++ 1 file changed, 396 insertions(+) create mode 100644 ATU_100_EXT_board/FirmWare_PIC18F2520/2520_EXT_board_sources_V_3.0/main.h diff --git a/ATU_100_EXT_board/FirmWare_PIC18F2520/2520_EXT_board_sources_V_3.0/main.h b/ATU_100_EXT_board/FirmWare_PIC18F2520/2520_EXT_board_sources_V_3.0/main.h new file mode 100644 index 0000000..604a0c9 --- /dev/null +++ b/ATU_100_EXT_board/FirmWare_PIC18F2520/2520_EXT_board_sources_V_3.0/main.h @@ -0,0 +1,396 @@ +// Main.h +// David Fainitski +// ATU-100 project 2016 + +// +static char ind = 0, cap = 0, SW = 0, step_cap = 0, step_ind = 0, L_linear = 0, C_linear = 0, L_q = 7, C_q = 7, D_correction = 1, L_invert = 0, L_mult = 1, +C_mult = 1, P_High = 0, K_Mult = 32, Overload = 0, Loss_ind = 0; +static int Rel_Del, min_for_start, max_for_start, max_swr; +int SWR, PWR, P_max, swr_a; +char rready = 0, p_cnt = 0; +// +void btn_push(void); +void lcd_prep(void); +void lcd_swr(int); +void lcd_pwr(void); +void show_pwr(int, int); +void lcd_ind(void); +void crypto(void); +void show_reset(void); +void cells_init(void); +void test_init(void); +void button_proc(void); +void button_proc_test(void); +void button_delay(void); +// +void atu_reset(void); +int get_reverse(void); +int get_forward(void); +int correction(int); +void get_swr(void); +void get_pwr(void); +void set_sw(char); +void coarse_cap(); +void sharp_cap(); +void sharp_ind(); +void coarse_tune(); +void tune(void); +void sub_tune(void); +// + + int correction(int input) { + if(input <= 80) return 0; + if(input <= 171) input += 244; + else if(input <= 328) input += 254; + else if(input <= 582) input += 280; + else if(input <= 820) input += 297; + else if(input <= 1100) input += 310; + else if(input <= 2181) input += 430; + else if(input <= 3322) input += 484; + else if(input <= 4623) input += 530; + else if(input <= 5862) input += 648; + else if(input <= 7146) input += 743; + else if(input <= 8502) input += 800; + else if(input <= 10500) input += 840; + else input += 860; + // + return input; +} + +// + +int get_reverse() { + return ADC_Get_Sample(1) * 4.883; +} +// + +int get_forward() { + int Forward; + Forward = ADC_Get_Sample(0); + if(Forward==1024) Overload = 1; + else Overload = 0; + return Forward * 4.883; +} + +void get_pwr() { + long Forward, Reverse; + float p; + asm CLRWDT; + // + Forward = get_forward(); + Reverse = get_reverse(); + if(D_correction==1) p = correction(Forward * 3); + else p = Forward * 3; + // + if(Reverse >= Forward) + Forward = 999; + else { + Forward = ((Forward + Reverse) * 100) / (Forward - Reverse); + if(Forward>999) Forward = 999; + } + // + p = p * K_Mult / 1000.0; // mV to Volts on Input + p = p / 1.414; + if(P_High==1) p = p * p / 50; // 0 - 1500 ( 1500 Watts) + else p = p * p / 5; // 0 - 1510 (151.0 Watts) + p = p + 0.5; // rounding to 0.1 W + // + PWR = p; + if(PWR<10) SWR = 1; + else 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 + if(L_invert == 0) { + Ind_005 = Ind.B0; + Ind_011 = Ind.B1; + Ind_022 = Ind.B2; + Ind_045 = Ind.B3; + Ind_1 = Ind.B4; + Ind_22 = Ind.B5; + Ind_45 = Ind.B6; + // + } + else { + Ind_005 = ~Ind.B0; + Ind_011 = ~Ind.B1; + Ind_022 = ~Ind.B2; + Ind_045 = ~Ind.B3; + Ind_1 = ~Ind.B4; + Ind_22 = ~Ind.B5; + Ind_45 = ~Ind.B6; + // + } + Vdelay_ms(Rel_Del); +} + +void set_cap(char Cap) { // 0 - 31 + Cap_10 = Cap.B0; + Cap_22 = Cap.B1; + Cap_47 = Cap.B2; + Cap_100 = Cap.B3; + Cap_220 = Cap.B4; + Cap_470 = Cap.B5; + Cap_1000 = Cap.B6; + // + Vdelay_ms(Rel_Del); +} + +void set_sw(char SW) { // 0 - IN, 1 - OUT + Cap_sw = SW; + Vdelay_ms(Rel_Del); +} + +void atu_reset() { + ind = 0; + cap = 0; + set_ind(ind); + set_cap(cap); + Vdelay_ms(Rel_Del); +} + + +void coarse_cap() { + char step = 3; + char count; + int min_swr; + + cap = 0; + set_cap(cap); + step_cap = step; + get_swr(); if(SWR==0) return; + min_swr = SWR + SWR/20; + for(count=step; count<=31;) { + set_cap(count*C_mult); + get_swr(); if(SWR==0) return; + if(SWR < min_swr) { + min_swr = SWR + SWR/20; + cap = count*C_mult; + step_cap = step; + if(SWR<120) break; + count +=step; + if(C_linear==0 & count==9) count = 8; + else if(C_linear==0 & count==17) {count = 16; step = 4;} + } + else break; + } + set_cap(cap); + return; +} + +void coarse_tune() { + char step = 3; + char count; + char mem_cap, mem_step_cap; + int min_swr; + + mem_cap = 0; + step_ind = step; + mem_step_cap = 3; + min_swr = SWR + SWR/20; + for(count=0; count<=31;) { + set_ind(count*L_mult); + coarse_cap(); + get_swr(); if(SWR==0) return; + if(SWR < min_swr) { + min_swr = SWR + SWR/20; + ind = count*L_mult; + mem_cap = cap; + step_ind = step; + mem_step_cap = step_cap; + if(SWR<120) break; + count +=step; + if(L_linear==0 & count==9) count = 8; + else if(L_linear==0 & count==17) {count = 16; step = 4;} + } + else break; + } + cap = mem_cap; + set_ind(ind); + set_cap(cap); + step_cap = mem_step_cap; + Delay_ms(10); + return; +} + +void sharp_cap() { + char range, count, max_range, min_range; + int min_swr; + range = step_cap*C_mult; + // + max_range = cap + range; + if(max_range>32*C_mult-1) max_range = 32*C_mult-1; + if(cap>range) min_range = cap - range; else min_range = 0; + cap = min_range; + set_cap(cap); + get_swr(); if(SWR==0) return; + min_SWR = SWR; + for(count=min_range+C_mult; count<=max_range; count+=C_mult) { + set_cap(count); + get_swr(); if(SWR==0) return; + if(SWR>=min_SWR) { Delay_ms(10); get_swr(); } + if(SWR>=min_SWR) { Delay_ms(10); get_swr(); } + if(SWR < min_SWR) { + min_SWR = SWR; + cap = count; + if(SWR<120) break; + } + else break; + } + set_cap(cap); + return; +} + +void sharp_ind() { + char range, count, max_range, min_range; + int min_SWR; + range = step_ind * L_mult; + // + max_range = ind + range; + if(max_range>32*L_mult-1) max_range = 32*L_mult-1; + if(ind>range) min_range = ind - range; else min_range = 0; + ind = min_range; + set_ind(ind); + get_swr(); if(SWR==0) return; + min_SWR = SWR; + for(count=min_range+L_mult; count<=max_range; count+=L_mult) { + set_ind(count); + get_swr(); if(SWR==0) return; + if(SWR>=min_SWR) { Delay_ms(10); get_swr(); } + if(SWR>=min_SWR) { Delay_ms(10); get_swr(); } + if(SWR < min_SWR) { + min_SWR = SWR; + ind = count; + if(SWR<120) break; + } + else break; + } + set_ind(ind); + return; +} + + +void sub_tune () { + int swr_mem, ind_mem, cap_mem; + // + swr_mem = SWR; + coarse_tune(); if(SWR==0) {atu_reset(); return;} + get_swr(); if(SWR<120) return; + sharp_ind(); if(SWR==0) {atu_reset(); return;} + get_swr(); if(SWR<120) return; + sharp_cap(); if(SWR==0) {atu_reset(); return;} + get_swr(); if(SWR<120) return; + // + if(SWR<200 & SWR100) return; + swr_mem = SWR; + ind_mem = ind; + cap_mem = cap; + // + if(SW==1) SW = 0; else SW = 1; + atu_reset(); + set_sw(SW); + Delay_ms(50); + get_swr(); if(SWR<120) return; + // + coarse_tune(); if(SWR==0) {atu_reset(); return;} + get_swr(); if(SWR<120) return; + sharp_ind(); if(SWR==0) {atu_reset(); return;} + get_swr(); if(SWR<120) return; + sharp_cap(); if(SWR==0) {atu_reset(); return;} + get_swr(); if(SWR<120) return; + // + if(SWR>swr_mem) { + if(SW==1) SW = 0; else SW = 1; + set_sw(SW); + ind = ind_mem; + cap = cap_mem; + set_ind(ind); + set_cap(cap); + SWR = swr_mem; + } + // + asm CLRWDT; + return; +} + + + +void tune() { + //int swr_mem, ind_mem, cap_mem, sw_mem; + asm CLRWDT; + // + p_cnt = 0; + P_max = 0; + // + rready = 0; + get_swr(); + if(SWR<110) return; + atu_reset(); + if(Loss_ind==0) lcd_ind(); + Delay_ms(50); + get_swr(); + swr_a = SWR; + if(SWR<110) return; + if(max_swr>110 & SWR>max_swr) return; + // + + sub_tune(); if(SWR==0) {atu_reset(); return;} + if(SWR<120) return; + if(C_q==5 & L_q==5) return; + + if(L_q>5) { + step_ind = L_mult; + L_mult = 1; + sharp_ind(); + } + if(SWR<120) return; + if(C_q>5) { + step_cap = C_mult; // = C_mult + C_mult = 1; + sharp_cap(); + } + if(L_q==5)L_mult = 1; + else if(L_q==6) L_mult = 2; + else if(L_q==7) L_mult = 4; + if(C_q==5) C_mult =1; + else if(C_q==6) C_mult = 2; + else if(C_q==7) C_mult = 4; + asm CLRWDT; + return; +} \ No newline at end of file