/////////////////////////////////////////////////////////////// // SWR meter // // OZ1OP // // OKT-DEC 2017 // // progrm ver: 1.1.1 build 64 op // // // /////////////////////////////////////////////////////////////// // // // version: a.b.c.d // // a: 1 = version med 2 x 16 karakterer display // // 2 = versiob med 4 x 20 karakterer display // // b.c = versiosnummer // // d = build nummer // // // /////////////////////////////////////////////////////////////// // // // Hardware: arduino mega // // LCD display 16 x 2 karakterer // // // /////////////////////////////////////////////////////////////// const int program_build_nr = 64; //------------------------------------------------------------ //def pinnumre //------------------------------------------------------------ const int nWrPinFwd = A1; //input: DC signal fra S&H, Forward const int nWrPinReturn = A0; //input: DC signal fra S&H, Return const int shPin = 9; //output: Clocksigna til sampel and hold. HIGH=open, LOW=hold const int meterPin=10; //output: signal til analog meter const int ledBlaaPin = 39; //output: DC til LED, blå (LOW = dioden lyser) const int ledGroenPin= 37; //output: DC til LED, groen (LOW = dioden lyser) const int ledRoedPin = 35; //input: DC til LED, roed (LOW = dioden lyser) const int Cal_kontaktPin = 6; //input: kontakt, aktiv naar LOW const int Displ_kontaktPin = 8; //input: kontakt, aktiv naar LOW const int Cfg_kontaktPin = 7; //input: kontakt, aktiv naar LOW const int Exec_kontaktPin = A2; //input: kontakt, aktiv naar LOW //----------------------------------------------------------- //def variable //----------------------------------------------------------- int i; int att=0; //(koblingsgrad i dB) float swr; float dBm_PEP_fwd; float dBm_PEP_rtn; float dBm_AEP_fwd; float dBm_AEP_rtn; float sampel_fwd[10]; float sampel_rtn[10]; float in_fwd=0; float in_rtn=0; float in_fwd_0dBm; float in_fwd_40dBm; float in_rtn_0dBm; float in_rtn_40dBm; float tal=0; float peak_dBm=0; float watt=0; long switch_time=0; int dBmCounter =1; int wattCounter = 1; int enhed = 1; // 1:enhed dBm, 2:disp int mode =1 ; // 1:mode: PEP. 2 :mode: AEP //-------------------------------------------- // def karakterer //--------------------------------------------- byte peak[8]= { B11111, B00111, B00111, B00111, B00111, B00111, B00111, B11111}; byte bar[8]= { B11111, B01110, B01110, B01110, B01110, B01110, B01110, B11111}; byte skala[8]= { B11111, B00000, B00000, B00000, B00000, B00000, B00000, B11111}; //..............variable til eeprom funktioner int d_plads=10; int e_plads=20; int f_plads=30; int g_plads=40; int att_plads=50; float korr_fwd55_plads =60; float korr_rtn55_plads =62; float korr_fwd144_plads =64; float korr_rtn144_plads =66; float korr_fwd300_plads =68; float korr_rtn300_plads =70; float korr_fwd470_plads =72; float korr_rtn470_plads =74; int hiByte=0; int loByte=0; int d_int=0; int e_int=0; int f_int=0; int g_int=0; int int_tal=0; int display_counter=1; int antal_cifre=0; int peakTal=0; int peakCounter=0; boolean eeprom_flag = false; boolean swr_flag= true; //---------------------------------------------------------- //def konstanter //---------------------------------------------------------- const int a=10; //antal målinger pr samplingsæt (må max sætes til 200) const int debounceDelay =10; //---------------------------------------------------------- //omsætningsfaktorer og korrektioner //---------------------------------------------------------- float default_d=0.096; float default_e=-86.087; float d = 0; //omsætningsfaktor dBm_fwd = d*in_fvd +e float e = 0; //.......................................................... float default_f=0.095; float default_g=-85.499; float f = 0; // omsætningsfaktor dBm_rtn = e*in_rtn + g float g = 0; //.......................................................... float korr_fwd55 =0; float korr_rtn55 =0; float korr_fwd144 =0; float korr_rtn144 =0; float korr_fwd300 =0; float korr_rtn300 =0; float korr_fwd470 =0; float korr_rtn470 =0; float default_korr_fwd55 =0.38; float default_korr_rtn55 =0.47; float default_korr_fwd144 =0.57; float default_korr_rtn144 =0.85; float default_korr_fwd300 =-0.48; float default_korr_rtn300 =0.64; float default_korr_fwd470 =0.04; float default_korr_rtn470 =2.08; float korr_fwd; float korr_rtn; //--------------------------------------------------------- // include library code: //--------------------------------------------------------- #include LiquidCrystal lcd(12, 11, 5, 4, 3, 2); #include //mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm void setup()//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm //mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm { analogReference(EXTERNAL); pinMode(A0, INPUT); pinMode(A1, INPUT); pinMode(A2, INPUT); pinMode(shPin, OUTPUT); pinMode(ledGroenPin,OUTPUT); pinMode(ledRoedPin,OUTPUT); pinMode(ledBlaaPin,OUTPUT); pinMode(Cal_kontaktPin,INPUT_PULLUP); pinMode(Displ_kontaktPin,INPUT_PULLUP); pinMode(Cfg_kontaktPin,INPUT_PULLUP); pinMode(Exec_kontaktPin,INPUT_PULLUP); pinMode(meterPin,OUTPUT); //---------------------------------------------------------- //initialiserer LCD skaerm og seriel I/O funkt //---------------------------------------------------------- lcd.begin(16, 2); Serial.begin(9600); //------------------------------------------------------------- //laes eeprom //------------------------------------------------------------ //.............................................................. //indlaes kalibrerings data eeprom_flag=true; hiByte=EEPROM.read(d_plads); loByte=EEPROM.read(d_plads+1); d_int=word(hiByte, loByte); d=d_int; d=d/10000; if(d<0.001){eeprom_flag=false;} if(d>1){eeprom_flag=false;} hiByte=EEPROM.read(e_plads); loByte=EEPROM.read(e_plads+1); e_int=word(hiByte, loByte); e=e_int-60000; e=e/1000; if(e<-100){eeprom_flag=false;} if(e>-70){eeprom_flag=false;} hiByte=EEPROM.read(f_plads); loByte=EEPROM.read(f_plads+1); f_int=word(hiByte, loByte); f=f_int; f=f/10000; if(f<0.001){eeprom_flag=false;} if(f>1){eeprom_flag=false;} hiByte=EEPROM.read(g_plads); loByte=EEPROM.read(g_plads+1); g_int=word(hiByte, loByte); g=g_int-60000; g=g/1000; if(g<-100){eeprom_flag=false;} if(g>-70){eeprom_flag=false;} if(eeprom_flag==false){ lcd.setCursor(0,0); lcd.print("cal data mngler"); lcd.setCursor(0,1); lcd.print("default anv. "); d=default_d; e=default_e; f=default_f; g=default_g; } lcd.createChar(1,peak); lcd.createChar(2,bar); lcd.createChar(3,skala); //,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, //indlaes config data att=EEPROM.read(att_plads); if(att <0){att=0;} if(att>60){att=0;} //............................................................ //indlaes korr data hiByte=EEPROM.read(korr_fwd55_plads); loByte=EEPROM.read(korr_fwd55_plads+1); tal=word(hiByte,loByte); korr_fwd55 = (tal/100)-10; //................................................ hiByte=EEPROM.read(korr_rtn55_plads); loByte=EEPROM.read(korr_rtn55_plads+1); tal=word(hiByte,loByte); korr_rtn55 = (tal/100)-10; //................................................ hiByte=EEPROM.read(korr_fwd144_plads); loByte=EEPROM.read(korr_fwd144_plads+1); tal=word(hiByte,loByte); korr_fwd144 = (tal/100)-10; //...................................................... hiByte=EEPROM.read(korr_rtn144_plads); loByte=EEPROM.read(korr_rtn144_plads+1); tal=word(hiByte,loByte); korr_rtn144 = (tal/100)-10; //................................................... hiByte=EEPROM.read(korr_fwd300_plads); loByte=EEPROM.read(korr_fwd300_plads+1); tal=word(hiByte,loByte); korr_fwd300 = (tal/100)-10; //................................................... hiByte=EEPROM.read(korr_rtn300_plads); loByte=EEPROM.read(korr_rtn300_plads+1); tal=word(hiByte,loByte); korr_rtn300 = (tal/100)-10; //................................................... hiByte=EEPROM.read(korr_fwd470_plads); loByte=EEPROM.read(korr_fwd470_plads+1); tal=word(hiByte,loByte); korr_fwd470 = (tal/100)-10; //.................................................... hiByte=EEPROM.read(korr_rtn470_plads); loByte=EEPROM.read(korr_rtn470_plads+1); tal=word(hiByte,loByte); korr_rtn470 = (tal/100)-10; for(i=0;iin_fwd){ in_fwd=sampel_fwd[i];} if(sampel_rtn[i]>in_rtn){ in_rtn=sampel_rtn[i];} } dBm_PEP_fwd=d*in_fwd+e; dBm_PEP_rtn=f*in_rtn+g; //...........advarsel ved overload........... if(dBm_PEP_fwd >10 || dBm_PEP_rtn>10){ do{lcd.setCursor(0,0); lcd.print(" OVERLOAD "); lcd.setCursor(0,1);lcd.print(" "); digitalWrite(ledRoedPin,LOW);digitalWrite(ledBlaaPin,HIGH); digitalWrite(ledGroenPin,HIGH); delay(100); digitalWrite(ledRoedPin,HIGH);digitalWrite(ledBlaaPin,LOW); digitalWrite(ledGroenPin,HIGH); delay(100); digitalWrite(ledRoedPin,HIGH);digitalWrite(ledBlaaPin,HIGH); digitalWrite(ledGroenPin,LOW); delay(100); if(debounce(Exec_kontaktPin)==true){break;} }while(1==1); } //............advarsel overload slut.......... } //---------------------------------------------------------- void udregn_AEP_dBm() //----------------------------------- //---------------------------------------------------------- { in_fwd=0; in_rtn=0; for(i=0;i-60){digitalWrite(ledGroenPin,LOW); digitalWrite(ledBlaaPin,HIGH);digitalWrite(ledRoedPin,HIGH);} if(swr>2.5 && dBm_PEP_fwd>-60){digitalWrite(ledGroenPin,HIGH); digitalWrite(ledBlaaPin,HIGH);digitalWrite(ledRoedPin,LOW);} if(dBm_PEP_fwd<-60){digitalWrite(ledGroenPin,HIGH); digitalWrite(ledBlaaPin,LOW);digitalWrite(ledRoedPin,HIGH);} } //******************************************************** // kontakt rutiner //*********************************** //******************************************************** //-------------------------------------------------------- void laes_Displ_kontakt() // ---------------------------- //-------------------------------------------------------- { // mode 1 = angivelse i PEP, mode 2 = angivelse i AEP if(display_counter==1){ print_watt_fwd(0,true); print_pow_bar(1); } //-------------------------------------------------------- if(display_counter==2){ print_watt_fwd(0,false); print_pow_bar(1); } //-------------------------------------------------------- if(display_counter==3 && mode==1){ print_dBm_PEP_fwd(0,true); print_pow_bar(1); } //------------------------------------------------------ if(display_counter==3 && mode==2){ print_dBm_AEP_fwd(0); print_pow_bar(1); } //-------------------------------------------------------- if(display_counter==4 && mode==1){ print_dBm_PEP_fwd(0,false); print_pow_bar(1); } //------------------------------------------------------- if(display_counter==4 && mode==2){ print_dBm_AEP_fwd(0); print_pow_bar(1); } //-------------------------------------------------------- if(display_counter==5){ print_watt_fwd(0,false); print_SWR(1); } //........................................................ if(display_counter==6 && mode==1){ print_dBm_PEP_fwd(0,false); print_SWR(1); } //......................................................... if(display_counter==6 && mode==2){ print_dBm_AEP_fwd(0); print_SWR(1); } //......................................................... if(display_counter==7){ print_dBm_PEP_fwd(0,false); print_dBm_AEP_fwd(1); } //.......................................................... if(display_counter==8) { print_SWR(0); print_swr_bar(1); } //.......................................................... if(display_counter==9){ print_watt_fwd(0,false); print_watt_rtn(1); } //---------------------------------------------------------- if(display_counter==10 && mode==1){ print_dBm_PEP_fwd(0,false); print_dBm_PEP_rtn(1); } //--------------------------------------------------------- if(display_counter==10 && mode==2){ print_dBm_AEP_fwd(0); print_dBm_AEP_rtn(1); } //--------------------------------------------------------- if(display_counter==11){ print_swr_bar(0); print_pow_bar(1); } //--------------------------------------------------------- if(display_counter==12){ print_dBm_AEP_fwd(0); print_dBm_AEP_rtn(1); } //----------------------------------------------------------- if(debounce(Displ_kontaktPin)) {display_counter=display_counter+1; if(display_counter>11){display_counter=1;} lcd.setCursor(0,0); lcd.print("Display menu "); lcd.setCursor(0,1); if(display_counter<12){lcd.print(" ");} lcd.print(display_counter); lcd.print("/11 "); delay(700); } } //------------------------------------------------------------ //------------------------------------------------------------ void laes_Cfg_kontakt() // config --------------------------- //------------------------------------------------------------ {boolean knap=false; if(debounce(Cfg_kontaktPin)==true){knap=true;} if(knap==true && switch_time<2000){config_menu();} if(knap==true && switch_time>2000){test_menu();} } //------------------------------------------------------------ void laes_Cal_kontakt() // kalibreting --------------------- //------------------------------------------------------------ { boolean knap=false; if(debounce(Cal_kontaktPin)==true){knap=true;} if(knap==true && switch_time<2000){vaelg_frekvens();} if(knap==true && switch_time>2000){kalibrering_menu();} } //************************************************************ // fuktionsrutiner //************************************************************ //------------------------------------------------------------ void vaelg_frekvens() // ------------------------------------ //------------------------------------------------------------ { int counter=1; switch_time=0; lcd.setCursor(0,0); lcd.print ("freq menu /6"); do{ //................................................... if(counter==1){ // HF 1 15 MHz lcd.setCursor(13,0); lcd.print(counter); lcd.setCursor(0,1); lcd.print("HF 1-30 MHz "); } //.................................................... if(counter==2){ // HF 2 55 MHz lcd.setCursor(13,0); lcd.print(counter); lcd.setCursor(0,1); lcd.print("HF 30-70 MHz "); } //..................................................... if(counter==3){ // VHF 1 144 MHz lcd.setCursor(13,0); lcd.print(counter); lcd.setCursor(0,1); lcd.print ("VHF 50-200 MHz "); } //..................................................... if(counter==4){ // UHF 300 MHz lcd.setCursor(13,0); lcd.print(counter); lcd.setCursor(0,1); lcd.print("UHF 200-400 MHz "); } //.................................................... if(counter==5){ // UHF 470 MHz lcd.setCursor(13,0); lcd.print(counter); lcd.setCursor(0,1); lcd.print("UHF 400-500 MHz "); } //................................................... if(counter==6){ lcd.setCursor(13,0); lcd.print(counter); lcd.setCursor(0,1); lcd.print("EXIT Menu "); } // ============== execute frekvens valg //================ //............................................................. if(counter == 1 && digitalRead(Exec_kontaktPin)==LOW){ // HF 1 1-30 MHz korr_fwd=0; korr_rtn=0; lcd.setCursor(0,1); lcd.print("fwd=0"); lcd.print(" rtn=0"); delay(1000); break; } //.............................................................. if(counter == 2 && digitalRead(Exec_kontaktPin)==LOW){ //HF 2 30-70 korr_fwd=korr_fwd55; korr_rtn=korr_rtn55; lcd.setCursor(0,1); lcd.print("rtn="); lcd.print(korr_fwd,1); lcd.print(" rtn="); lcd.print(korr_rtn,1); delay(1000); break;; } //................................................................ if(counter == 3 && digitalRead(Exec_kontaktPin)==LOW){ //VHF 1 70-200 MHz korr_fwd=korr_fwd144; korr_rtn=korr_rtn144; lcd.setCursor(0,1); lcd.print("rtn="); lcd.print(korr_fwd,1); lcd.print(" rtn="); lcd.print(korr_rtn,1); delay(1000); break; } //................................................................. if(counter == 4 && digitalRead(Exec_kontaktPin)==LOW){ // VHF 2 200-400 MHz korr_fwd=korr_fwd300; korr_rtn=korr_rtn300; lcd.setCursor(0,1); lcd.print("rtn="); lcd.print(korr_fwd,1); lcd.print(" rtn="); lcd.print(korr_rtn,1); delay(1000); break; } //................................................................. if(counter == 5 && digitalRead(Exec_kontaktPin)==LOW){ //UHF 400- 500 MHz korr_fwd=korr_fwd470; korr_rtn=korr_rtn470; lcd.setCursor(0,1); lcd.print("fwd="); lcd.print(korr_fwd,1); lcd.print(" rtn="); lcd.print(korr_rtn,1); delay(1000); break; } //............................................................... if(counter >5 && digitalRead(Exec_kontaktPin)==LOW){ // exit menu break;} //................................................................. if(debounce(Cal_kontaktPin)){counter=counter+1;} if(counter>7){counter=1;} } while(1==1); } //------------------------------------------------------------------ void config_menu() //----------------------------------------------- //------------------------------------------------------------------ { int counter=1; do{ if(counter==1){ lcd.setCursor(0,0); lcd.print("cfg menu 1/11"); lcd.setCursor(0,1); lcd.print("default "); } //................................................................... if(counter==2){ lcd.setCursor(0,0); lcd.print("cfg menu 2/11"); lcd.setCursor(0,1); lcd.print("att. 0 dB "); if(att==0){ lcd.setCursor(13,1);lcd.print("**");} else{lcd.setCursor(13,1);lcd.print(" "); } } //................................................................. if(counter==3){ lcd.setCursor(0,0); lcd.print("cfg menu 3/11"); lcd.setCursor(0,1); lcd.print("att. 10 dB "); if(att==10){ lcd.setCursor(13,1);lcd.print("**");} else{lcd.setCursor(13,1);lcd.print(" "); } } //................................................................. if(counter==4){ lcd.setCursor(0,0); lcd.print("cfg menu 4/11"); lcd.setCursor(0,1); lcd.print("att. 20 dB "); if(att==20){ lcd.setCursor(13,1);lcd.print("**");} else{lcd.setCursor(13,1);lcd.print(" "); } } //.................................................................. if(counter==5){ lcd.setCursor(0,0); lcd.print("cfg menu 5/11"); lcd.setCursor(0,1); lcd.print("att. 30 dB "); if(att==30){ lcd.setCursor(13,1);lcd.print("**");} else{lcd.setCursor(13,1);lcd.print(" "); } } //................................................................... if(counter==6){ lcd.setCursor(0,0); lcd.print("cfg menu 6/11"); lcd.setCursor(0,1); lcd.print("att. 40 dB "); if(att==40){ lcd.setCursor(13,1);lcd.print("**");} else{lcd.setCursor(13,1);lcd.print(" "); } } //.................................................................... if(counter==7){ lcd.setCursor(0,0); lcd.print("cfg menu 7/11"); lcd.setCursor(0,1); lcd.print("att. 50 dB "); if(att==50){ lcd.setCursor(13,1);lcd.print("**");} else{lcd.setCursor(13,1);lcd.print(" "); } } //.................................................................... if(counter==8){ lcd.setCursor(0,0); lcd.print("cfg menu 8/11"); lcd.setCursor(0,1); lcd.print("att. 60 dB "); if(att==60){ lcd.setCursor(13,1);lcd.print("**");} else{lcd.setCursor(13,1);lcd.print(" "); } } //..................................................................... if(counter==9){ lcd.setCursor(0,0); lcd.print("cfg menu 9/11"); lcd.setCursor(0,1); lcd.print("vis PEP "); if(mode==1){ lcd.setCursor(13,1);lcd.print("**");} else{lcd.setCursor(13,1);lcd.print(" "); } } //..................................................................... if(counter==10){ lcd.setCursor(0,0); lcd.print("cfg menu 10/11"); lcd.setCursor(0,1); lcd.print("vis AEP "); if(mode==2){ lcd.setCursor(13,1);lcd.print("**");} else{lcd.setCursor(13,1);lcd.print(" "); } } //...................................................................... if(counter==11){ lcd.setCursor(0,0); lcd.print("cfg menu 11/11"); lcd.setCursor(0,1); lcd.print("exit menu "); lcd.setCursor(11,0); lcd.print(counter);} //=======exec cfg menu================================================= if(digitalRead(Exec_kontaktPin)==LOW && counter==1){config_reset();} if(digitalRead(Exec_kontaktPin)==LOW&& counter==2){ att=0; EEPROM.write(att_plads,att);} if(digitalRead(Exec_kontaktPin)==LOW&& counter==3){ att=10; EEPROM.write(att_plads,att);} if(digitalRead(Exec_kontaktPin)==LOW&& counter==4){ att=20; EEPROM.write(att_plads,att);} if(digitalRead(Exec_kontaktPin)==LOW&& counter==5){ att=30; EEPROM.write(att_plads,att);} if(digitalRead(Exec_kontaktPin)==LOW && counter==6){ att=40; EEPROM.write(att_plads,att); } if(digitalRead(Exec_kontaktPin)==LOW && counter==7){ att=50; EEPROM.write(att_plads,att);} if(digitalRead(Exec_kontaktPin)==LOW && counter==8){ att=60; EEPROM.write(att_plads,att);} if(digitalRead(Exec_kontaktPin)==LOW&& counter==9){mode=1;} if(digitalRead(Exec_kontaktPin)==LOW && counter==10){mode=2;} if(digitalRead(Exec_kontaktPin)==LOW && counter==11){break;} //------------------------------------------------------------------ // opdater config counter if(debounce(Cfg_kontaktPin)){counter=counter+1;} if(counter>11){counter=1;} } while(1==1); } //****************************************************************** // print rutiner *********************************************** //****************************************************************** //------------------------------------------------------------------ void print_dBm_PEP_fwd(int a, boolean forsinkelse) //-------------- //------------------------------------------------------------------ { tal=dBm_PEP_fwd+korr_fwd+att; if(forsinkelse==false){peak_dBm=tal;lcd.setCursor(0,a);lcd.print("PEP F");} if(forsinkelse==true){lcd.setCursor(0,a); lcd.print("PEP*F"); if(peak_dBm<=tal){peak_dBm=tal;dBmCounter=1;} if(peak_dBm>tal){ dBmCounter=dBmCounter+1; if(dBmCounter>25){ peak_dBm=peak_dBm-1;} } } antal_digit(peak_dBm); for(i=5;i<9-antal_cifre;i++){ lcd.setCursor(i,a); lcd.print(" ");} lcd.setCursor(9-antal_cifre,a); if(dBm_PEP_fwd<-60){lcd.print(" <-60");} else{lcd.print(peak_dBm,1); } lcd.print(" dBm"); } //--------------------------------------------------------------- void print_dBm_AEP_fwd(int a) //-------------------------------- //--------------------------------------------------------------- { tal=dBm_AEP_fwd+korr_fwd+att; antal_digit(tal); lcd.setCursor(0,a); lcd.print("AEP F"); for(i=5;i<9-antal_cifre;i++){ lcd.setCursor(i,a); lcd.print(" ");} lcd.setCursor(9-antal_cifre,a); if(dBm_AEP_fwd<-60){lcd.print(" <-60");} else{lcd.print(tal,1); } lcd.print(" dBm"); } //---------------------------------------------------------------- void print_dBm_PEP_rtn(int a) //---------------------------------- //---------------------------------------------------------------- { tal=dBm_PEP_rtn+korr_rtn+att; antal_digit(tal); lcd.setCursor(0,a); lcd.print("PEP R"); for(i=5;i<9-antal_cifre;i++){ lcd.setCursor(i,a); lcd.print(" ");} lcd.setCursor(9-antal_cifre,a); if(dBm_PEP_rtn<-60){lcd.print(" <-60");} else{lcd.print(tal,1); } lcd.print(" dBm"); } //--------------------------------------------------------------- void print_dBm_AEP_rtn(int a) //-------------------------------- //--------------------------------------------------------------- { tal=dBm_AEP_rtn+korr_rtn+att; antal_digit(tal); lcd.setCursor(0,a); lcd.print("AEP R"); for(i=5;i<9-antal_cifre;i++){ lcd.setCursor(i,a); lcd.print(" ");} lcd.setCursor(9-antal_cifre,a); if(dBm_AEP_rtn<-60){lcd.print(" <-60");} else{lcd.print(tal,1); } lcd.print(" dBm"); } //-------------------------------------------------------------- void print_SWR(int a) //---------------------------------------- //-------------------------------------------------------------- { antal_digit(swr); lcd.setCursor(0,a); lcd.print("SWR "); if(swr_flag==true){ for(i=5;i<9-antal_cifre;i++){ lcd.setCursor(i,a); lcd.print(" ");} lcd.setCursor(9-antal_cifre,a); lcd.print(swr,1); lcd.print(" ");} else{ lcd.print("N/A "); } } //-------------------------------------------------------------- void print_watt_fwd(int a, boolean forsinkelse) //------------- //-------------------------------------------------------------- { tal=dBm_PEP_fwd+att+korr_fwd; if(forsinkelse==false){peak_dBm=tal;lcd.setCursor(0,a);lcd.print("PEP F");} if(forsinkelse==true){lcd.setCursor(0,a); lcd.print("PEP*F"); if(peak_dBm<=tal){peak_dBm=tal;dBmCounter=1;} if(peak_dBm>tal){ dBmCounter=dBmCounter+1; if(dBmCounter>25){peak_dBm=peak_dBm-1;}}} watt=pow(10,peak_dBm/10); if(dBm_PEP_fwd<-60){watt=0;} if(peak_dBm<-30){ if(watt*1000000>=0 && watt*1000000<9){lcd.print(" ");} if(watt*1000000>=9 && watt*1000000<99){lcd.print(" ");} if(watt*1000000>=99 && watt*1000000<999){lcd.print(" ");} if(watt*1000000>=999){lcd.print(" ");} lcd.print(watt*1000000,0); lcd.print(" nW"); } if(peak_dBm >= -30 && peak_dBm<0){ if(watt*1000>=0 && watt*1000<9){lcd.print(" ");} if(watt*1000>=9 && watt*1000<99){lcd.print(" ");} if(watt*1000>=99 && watt*1000<999){lcd.print(" ");} if(watt*1000>=999){lcd.print(" ");} lcd.print(watt*1000,0); lcd.print(" uW"); } if(peak_dBm >=0 && peak_dBm<30){ if(watt>=0 && watt<9){lcd.print(" ");} if(watt>=9 && watt<99){lcd.print(" ");} if(watt>=99 && watt<999){lcd.print(" ");} if(watt>=999){lcd.print(" ");} lcd.print(watt,0); lcd.print(" mW"); } if(peak_dBm >=30){ if(watt/1000>=0 && watt/1000<9){lcd.print(" ");} if(watt/1000>=9 && watt/1000<99){lcd.print(" ");} if(watt/1000>=99 && watt/1000<999){lcd.print(" ");} if(watt/1000>=999){lcd.print(" ");} lcd.print(watt/1000,0); lcd.print(" W"); } } //---------------------------------------------------------------- void print_watt_rtn(int a) //----------------------------------- //---------------------------------------------------------------- { tal=dBm_PEP_rtn+att+korr_rtn; watt=pow(10,tal/10); if(dBm_PEP_rtn<=-60){watt=0;} if(tal<-30){ lcd.setCursor(0,a); lcd.print("PEP R"); if(watt*1000000>=0 && watt*1000000<9){lcd.print(" ");} if(watt*1000000>=9 && watt*1000000<99){lcd.print(" ");} if(watt*1000000>=99 && watt*1000000<999){lcd.print(" ");} if(watt*1000000>=999){lcd.print(" ");} lcd.print(watt*1000000,0); lcd.print(" nW"); } if(tal >= -30 && tal<0){ lcd.setCursor(0,a); lcd.print("PEP R"); if(watt*1000>=0 && watt*1000<9){lcd.print(" ");} if(watt*1000>=9 && watt*1000<99){lcd.print(" ");} if(watt*1000>=99 && watt*1000<999){lcd.print(" ");} if(watt*1000>=999){lcd.print(" ");} lcd.print(watt*1000,0); lcd.print(" uW"); } if(tal >=0 && tal<30){ lcd.setCursor(0,a); lcd.print("PEP R"); if(watt>=0 && watt<9){lcd.print(" ");} if(watt>=9 && watt<99){lcd.print(" ");} if(watt>=99 && watt<999){lcd.print(" ");} if(watt>=999){lcd.print(" ");} lcd.print(watt,0); lcd.print(" mW"); } if(tal >=30){ lcd.setCursor(0,a); lcd.print("PEP R"); if(watt/1000>=0 && watt/1000<9){lcd.print(" ");} if(watt/1000>=9 && watt/1000<99){lcd.print(" ");} if(watt/1000>=99 && watt/1000<999){lcd.print(" ");} if(watt/1000>=999){lcd.print(" ");} lcd.print(watt/1000,0); lcd.print(" W"); } } //---------------------------------------------------------------- void print_swr_bar(int a) //---------------------------------- //---------------------------------------------------------------- { if(swr<=2,5){ tal=int(10*swr-10); if (tal>15){tal=15;} if(tal<0){tal=0;} if(dBm_PEP_fwd<-60){tal=0;} lcd.setCursor(0,a); for(i=0;i2.5){ tal=int(0.625*swr-0.62557); if (tal>15){tal=15;} if(tal<0){tal=0;} if(dBm_PEP_fwd<-60){tal=0;} lcd.setCursor(0,a); for(i=0;i15){tal=15;} if(tal<0){tal=0;} for(i=0;ipeakTal){peakTal=tal;} if(peakTal>tal){ peakCounter=peakCounter+1; if(peakCounter>25){peakTal=peakTal-1;} } if(tal==peakTal){peakCounter=1;} lcd.setCursor(peakTal,a); lcd.write(2); } //--------------------------------------------------------- void analog_meter() //------------------------------------ //--------------------------------------------------------- { float meter_vaerdi; if(dBm_PEP_fwd>-60&& dBm_PEP_rtn>-60){ if(swr<=2.5){ meter_vaerdi=170*swr-170; if (meter_vaerdi>255){meter_vaerdi=255;} analogWrite(meterPin,meter_vaerdi); } if(swr>2.5){ meter_vaerdi=10.63*swr -10.63; if (meter_vaerdi>255){meter_vaerdi=255;} analogWrite(meterPin,meter_vaerdi); } } else{ analogWrite(meterPin,0); } } //************************************************************ // funktions rutiner ***************************************** //************************************************************ void antal_digit(float a) { if(a<=-100 && a>-999.999){antal_cifre= 4;} if(a<=-10 && a>-99.999){antal_cifre=3;} if(a<0 && a>=-9.999){antal_cifre= 2;} if(a>=0 && a <9.999){antal_cifre =1;} if(a>=10 && a<99.999){antal_cifre =2;} if(a>=100 && a<999.999){antal_cifre =3;} if(a>=1000 && a<999.999){antal_cifre= 4;} } //----------------------------------------------------------- boolean debounce(int pin) //-------------------------------- //----------------------------------------------------------- { boolean state; boolean previosState; previosState=digitalRead(pin); for(int counter=0;counter7){counter=1;} if(digitalRead(Exec_kontaktPin)==LOW && counter==7){break;} } while (1==1); } //-------------------------------------------------------------------- void PC_display()//......DEBUG........................................ //-------------------------------------------------------------------- { Serial.println(" STATUS "); Serial.println(); Serial.print("korr_fwd55 = ");Serial.print(korr_fwd55); Serial.print(" ");Serial.print("default_corr_fwd55 = ");Serial.println(default_korr_fwd55); Serial.print("korr_rtn55 = ");Serial.print(korr_rtn55); Serial.print(" ");Serial.print("default_corr_rtn55 = ");Serial.println(default_korr_rtn55); Serial.print("korr_fwd144 = ");Serial.print(korr_fwd144); Serial.print(" ");Serial.print("default_corr_fwd144 = ");Serial.println(default_korr_fwd144); Serial.print("korr_rtn144 = ");Serial.print(korr_rtn144); Serial.print(" ");Serial.print("default_corr_rtn144 = ");Serial.println(default_korr_rtn144); Serial.print("korr_fwd300 = ");Serial.print(korr_fwd300); Serial.print(" ");Serial.print("default_corr_fwd300 = ");Serial.println(default_korr_fwd300); Serial.print("korr_rtn300 = ");Serial.print(korr_rtn300); Serial.print(" ");Serial.print("default_corr_rtn300 = ");Serial.println(default_korr_rtn300); Serial.print("korr_fwd470 = ");Serial.print(korr_fwd470); Serial.print(" ");Serial.print("default_corr_fwd470 = ");Serial.println(default_korr_fwd470); Serial.print("korr_rtn470 = ");Serial.print(korr_rtn470); Serial.print(" ");Serial.print("default_corr_rtn470 = ");Serial.println(default_korr_rtn470); Serial.println(); Serial.print("d = ");Serial.print(d,3);Serial.print(" ");Serial.print("default_d = ");Serial.println(default_d,3); Serial.print("e = ");Serial.print(e,3);Serial.print(" ");Serial.print("default_e = ");Serial.println(default_e,3); Serial.print("f = ");Serial.print(f,3);Serial.print(" ");Serial.print("default_f = ");Serial.println(default_f,3); Serial.print("g = ");Serial.print(g,3);Serial.print(" ");Serial.print("default_g = ");Serial.println(default_g,3); }