First Programm.HF Lo Band VFO with LPC1114 and AD9851 module.Built in ELEKEY.Using ACM1602NI.

Dependencies:   mbed QEI

Revision:
0:5cdf1a556e60
Child:
1:ee890adf56ea
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Nov 13 14:54:43 2016 +0000
@@ -0,0 +1,596 @@
+#include "mbed.h"
+#include "I2cLCD.h"
+
+DigitalOut DATA(dp9);
+DigitalOut W_CLK(dp17);
+DigitalOut FQ_UD(dp11);
+DigitalOut RESET(dp26); //previously known as dp26
+DigitalOut LED(dp14);
+DigitalOut PTT_OUT(dp18);
+DigitalIn PTT_ON(dp1);
+DigitalIn DOT(dp4);
+DigitalIn BAR(dp6);
+DigitalOut KEY(dp13);
+DigitalIn BAND_SW(dp10);
+DigitalIn JOG_1(dp2);
+DigitalIn JOG_2(dp28);   //previously known as dp28
+DigitalIn JOG_3(dp25);
+DigitalIn JOG_4(dp16);
+
+double FQX;
+double FQD;
+
+double FQD_18 = 1810000;
+double FQD_19 = 1907500;
+double FQD_351 = 3500000;
+double FQD_352 = 3599000;
+double FQD_353 = 3680000;
+double FQD_381 = 3702000;
+double FQD_382 = 3745000;
+double FQD_383 = 3791000;
+double FQD_4 = 4630000;
+double FQD_7 = 7000000;
+double FQD_10 = 10100000;
+
+double FQ;
+
+double FQ_18 = 43191352;
+double FQ_19 = 45517913;
+double FQ_351 = 83519190.5;
+double FQ_352 = 85881750;
+double FQ_353 = 87814470;
+double FQ_381 = 88339811;
+double FQ_382 = 89365820;
+double FQ_383 = 90463357;
+double FQ_4 = 110484088;
+double FQ_7 = 167038250;
+double FQ_10 = 241012230;
+
+double f1 = 7000000;
+double f2 = 7200000;
+double f1_CW = 7000000;
+double f2_CW = 7045000;
+int BAND;
+double IF;
+double STEPD;
+double STEP = 2.386;
+float wt = 0.1;
+const int a=1;
+int s;
+
+Ticker deley;
+float del = 0.1;
+
+void DDS(void);
+void DDS_U(void);
+void DDS_D(void);
+void DDS_T(void);
+void GET_LCD_DATA(void);
+void STEPS(void);
+void QSY(void);
+void STEPSS(void);
+void JOG(void);
+void DDS_CW(void);
+void PTT_OFF(void);
+
+I2cLCD lcd(dp5, dp27);
+
+int main() {
+
+    KEY = 0;
+    STEPD = 10;
+    BAND = 7;
+    FQD = FQD_7;
+    FQ = FQ_7;
+
+    IF = 10857458;//IF 455KHz
+//    IF = 255329316.50856;// IF 10.7MHz  
+//    lcd.locate(1,1);
+//    lcd.printf("455K");
+//    lcd.locate(0,1);
+//    lcd.printf("10.7M");
+  
+
+    LED = 0;
+    s = 1;    
+    
+    RESET=0;
+    RESET=1;
+    wait_us(100);
+    RESET=0;
+    DATA=0;
+    FQ_UD=0;
+    W_CLK=0;
+    
+    W_CLK=1;
+    wait_us(100);
+    W_CLK=0;
+    FQ_UD=1;
+    wait_us(100);
+    FQ_UD=0;
+    wait_us(100);
+    GET_LCD_DATA();
+
+    FQX = FQ + IF;    
+    DDS(); 
+    DDS();
+    lcd.locate(8,0);
+    lcd.printf("0MHz");
+    lcd.locate(12,1);
+    lcd.printf("1KHz");
+    lcd.locate(14,0);
+    lcd.printf("RX");
+    lcd.locate(0,1);
+    lcd.printf("Mode:"); 
+
+    while(1) {
+        if (PTT_ON==0) {DDS_T();}
+//        if (FQ_UP==0) {DDS_U();}
+//        if (FQ_DOWN==0) {DDS_D();}
+//        if (FSTEP==0) {STEPS();}
+        if (DOT==0) {DDS_CW();}
+        if (BAR==0) {DDS_CW();}
+        if (BAND_SW==0) {QSY();}
+        if (JOG_1==1) {JOG();}
+    }
+}
+
+void DDS(void) {
+
+    unsigned long int DDS_DATA;  
+    unsigned long int BIT_DATA;
+
+    int i = 0;
+
+    DDS_DATA = FQX;
+    
+    for (i=0; i<32; i++) {
+        BIT_DATA = DDS_DATA & 1;
+        if(BIT_DATA==1) {
+            DATA = 1;
+        } else {
+            DATA = 0;
+        }
+        W_CLK = 1;
+        DDS_DATA = DDS_DATA >> 1;
+        wait_us(10);
+        W_CLK = 0;
+        wait_us(10);
+    } 
+    
+    DDS_DATA = a;
+    
+    for (i=0; i<8; i++) {
+        BIT_DATA = DDS_DATA & 1;
+        if(BIT_DATA==1) {
+            DATA = 1;
+        } else {
+            DATA = 0;
+        }
+        W_CLK = 1;
+        DDS_DATA = DDS_DATA >> 1;
+        wait_us(10);
+        W_CLK = 0;
+        wait_us(10);
+    }
+    FQ_UD = 1;
+    wait_us(10);
+    FQ_UD = 0;
+    wait_us(10);
+}
+
+void DDS_U(void) {
+    
+//    if (FQD <= f1 && FQD <= f2) {
+        if (s==0) {
+            if ((FQD + STEPD) <= f2) {
+                FQD = FQD + STEPD;
+                FQ = FQ + STEP * 100; 
+            }    
+        }else{
+            if ((FQD + STEPD * 100) <= f2) {
+                FQD = FQD + STEPD * 100;
+                FQ = FQ + STEP * 10000;
+            }
+        }
+//    }        
+    GET_LCD_DATA();
+    FQX = FQ + IF;
+    DDS();
+    wait(wt);
+}
+
+void DDS_D(void) {
+    
+//    if (FQD <= f1 && FQD <= f2) {
+        if (s==0) {
+            if ((FQD - STEPD) >= f1) {
+                FQD = FQD - STEPD;
+                FQ = FQ - STEP * 100;
+            }
+        }else{
+            if ((FQD - STEPD * 100) >= f1) {
+                FQD = FQD - STEPD * 100;
+                FQ = FQ - STEP * 10000;
+            }
+        }
+//    }
+    GET_LCD_DATA();
+    FQX = FQ + IF;
+    DDS();
+    wait(wt);
+}
+    
+void DDS_T(void) {
+
+    deley.detach();
+      
+    if (FQD > f1 && FQD < f2) {
+        GET_LCD_DATA();
+        lcd.locate( 14, 0 );
+        lcd.printf( "T" );
+
+        FQX = FQ;
+        DDS();
+        LED = 1;
+        PTT_OUT = 1;
+        while( PTT_ON == 0) {}
+        PTT_OUT = 0;
+        LED = 0;
+        FQX = FQ + IF;
+        DDS();
+    }else{
+        LED=1;
+        wait(0.2);
+        LED=0;
+        wait(0.2);
+    }
+    GET_LCD_DATA();
+    lcd.locate( 14,0 );
+    lcd.printf( "R" );     
+}
+
+void GET_LCD_DATA(void) {
+
+    char f[9];
+    
+    sprintf(f,"%8.5lf",FQD / 1000000);    
+    lcd.locate( 0,0 );
+    lcd.printf( f );
+    if (FQD >= f1_CW && FQD < f2_CW) {
+        lcd.locate( 5,1 );
+        lcd.printf("CW   ");
+    }else{
+        if(FQD >= f2_CW && FQD < f2 ) {
+            lcd.locate( 5,1 );
+            lcd.printf("Phone");
+    }else{
+        lcd.locate( 5,1 );
+        lcd.printf("none ");
+        }
+    }
+}
+
+void STEPS( void ) {
+    if (s==1) {
+        s = 0;
+        lcd.locate(13,1);
+        lcd.printf("0");
+    }else{
+        s = 1;
+        lcd.locate(13,1);
+        lcd.printf("K");
+    }    
+    wait(0.3);
+}
+
+void QSY(void) {
+     switch (BAND) {
+     case 7:
+        BAND = 10;
+        FQD_7 = FQD;
+        FQD = FQD_10;
+        FQ_7 = FQ;
+        FQ = FQ_10;
+        f1 = 10100000;
+        f2 = 10150000;
+        f1_CW = 10100000;
+        f2_CW = 10150000;
+        break;
+        
+    case 10:
+        BAND = 18;
+        FQD_10 = FQD;
+        FQD = FQD_18;
+        FQ_10 = FQ;
+        FQ = FQ_18;
+        f1 = 1810000;
+        f2 = 1825000;
+        f1_CW = 1810000;
+        f2_CW = 1825000;
+        break;
+        
+    case 18:
+        BAND = 19;
+        FQD_18 = FQD;
+        FQD = FQD_19;
+        FQ_18 = FQ;
+        FQ = FQ_19;
+        f1 = 1907500;
+        f2 = 1912500;
+        f1_CW = 1907500;
+        f2_CW = 1912500;
+        break;
+
+    case 19:
+        BAND = 351;
+        FQD_19 = FQD;
+        FQD = FQD_351;
+        FQ_19 = FQ;
+        FQ = FQ_351;
+        f1 = 3500000;
+        f2 = 3575000;
+        f1_CW = 3500000;
+        f2_CW = 3535000;
+        break;
+        
+    case 351:
+        BAND = 352;
+        FQD_351 = FQD;
+        FQD = FQD_352;
+        FQ_351 = FQ;
+        FQ = FQ_352;
+        f1 = 3599000;
+        f2 = 3612000;
+        f1_CW = 3599000;
+        f2_CW = 3599000;
+        break;
+
+    case 352:  
+        BAND = 353;
+        FQD_352 = FQD;
+        FQD = FQD_353;
+        FQ_352 = FQ;
+        FQ = FQ_353;
+        f1 = 3680000;
+        f2 = 3687000;
+        f1_CW = 3680000;
+        f2_CW = 3680000;
+        break;
+        
+    case 353:
+        BAND = 381;
+        FQD_353 = FQD;
+        FQD = FQD_381;
+        FQ_353 = FQ;
+        FQ = FQ_381;
+        f1 = 3702000;
+        f2 = 3716000;
+        f1_CW = 3702000;
+        f2_CW = 3702000;
+        break;
+
+    case 381:
+        BAND = 382;
+        FQD_381 = FQD;
+        FQD = FQD_382;
+        FQ_381 = FQ;
+        FQ = FQ_382;
+        f1 = 3745000;
+        f2 = 3770000;
+        f1_CW = 3745000;
+        f2_CW = 3745000;
+        break;
+
+    case 382:
+        BAND = 383;
+        FQD_382 = FQD;
+        FQD = FQD_383;
+        FQ_382 = FQ;
+        FQ = FQ_383;
+        f1 = 3791000;
+        f2 = 3805000;
+        f1_CW = 3791000;
+        f2_CW = 3791000;
+        break;
+
+    case 383:
+        BAND = 4;
+        FQD_383 = FQD;
+        FQD = FQD_4;
+        FQ_383 = FQ;
+        FQ = FQ_4;
+        f1 = 4629999;
+        f2 = 4630001;
+        f1_CW = 4630000;
+        f2_CW = 4630001;
+        break;
+
+    case 4:
+        BAND = 7;
+        FQD_4 = FQD;
+        FQD = FQD_7;
+        FQ_4 = FQ;
+        FQ = FQ_7;
+        f1 = 7000000;
+        f2 = 7200000;
+        f1_CW = 7000000;
+        f2_CW = 7045000;
+        break;
+        
+    default:
+        BAND = 7;
+        FQD = FQD_7;
+        FQ = FQ_7;
+        break;
+    }
+    GET_LCD_DATA();
+    FQX = FQ + IF;
+    DDS();
+    wait(0.3);
+}
+
+void STEPSS( void ) {
+    if (s==0) {
+        lcd.locate(13,1);
+        lcd.printf("0");
+    }else{
+        lcd.locate(13,1);
+        lcd.printf("K");
+    }    
+//    wait(0.3);
+}
+
+void JOG( void ) {
+ 
+    int jog;
+    deley.detach();
+
+    jog = JOG_2 * 4 +JOG_3 * 2 + JOG_4 * 1;
+    
+    switch( jog ) {
+        
+        case 2:
+            wt = 0.3;
+            s  = 0;
+            lcd.locate(12,0);
+            lcd.printf("> ");
+            STEPSS();
+            DDS_U();
+            lcd.locate(12,0);
+            lcd.printf("  ");
+            break;
+        
+        case 6:
+            wt = 0.05;
+            s  = 0;
+            lcd.locate(12,0);
+            lcd.printf(">>");
+            STEPSS();
+            DDS_U();
+            lcd.locate(12,0);
+            lcd.printf("  ");
+            break;
+            
+        case 4:
+            wt = 0.3;
+            s  =1;
+            lcd.locate(12,0);
+            lcd.printf("> ");
+            STEPSS();
+            DDS_U();
+            lcd.locate(12,0);
+            lcd.printf("  ");
+            break;
+
+        case 0:
+            wt = 0.05;
+            s  =1;
+            lcd.locate(12,0);
+            lcd.printf(">>");
+            STEPSS();
+            DDS_U();
+            lcd.locate(12,0);
+            lcd.printf("  ");
+            break;                
+
+
+        case 3:
+            wt = 0.3;
+            s  = 0;
+            lcd.locate(12,0);
+            lcd.printf(" <");
+            STEPSS();
+            DDS_D();
+            lcd.locate(12,0);
+            lcd.printf("  ");
+            break;
+        
+        case 7:
+            wt = 0.05;
+            s  = 0;
+            lcd.locate(12,0);
+            lcd.printf("<<");
+            STEPSS();
+            DDS_D();
+            lcd.locate(12,0);
+            lcd.printf("  ");
+            break;
+            
+        case 5:
+            wt = 0.3;
+            s  =1;
+            lcd.locate(12,0);
+            lcd.printf(" <");
+            STEPSS();
+            DDS_D();
+            lcd.locate(12,0);
+            lcd.printf("  ");
+            break;
+
+        case 1:
+            wt = 0.05;
+            s  =1;
+            lcd.locate(12,0);
+            lcd.printf("<<");
+            STEPSS();
+            DDS_D();
+            lcd.locate(12,0);
+            lcd.printf("  ");
+            break;                
+
+        
+        default:
+            wt = 0.05;
+            s  =1;
+            STEPSS();
+            DDS_D();
+            lcd.locate(12,0);
+            lcd.printf("  ");
+            break; 
+    }
+}
+
+void DDS_CW(void) {
+    if (FQD > f1 && FQD < f2) {
+        deley.detach();
+        GET_LCD_DATA();
+        lcd.locate( 14, 0 );
+        lcd.printf( "T" );
+
+        FQX = FQ;
+        DDS();
+        LED = 1;
+        PTT_OUT = 1;
+        KEY = 1;
+        if (BAR==0) {
+            wait(3.5*del);
+            KEY = 0;
+            wait(del);
+        }else{
+            if (DOT==0) {
+                wait(del);
+                KEY = 0;
+                wait(del);
+            }
+        }   
+        deley.attach(&PTT_OFF,4*del);
+    }else{
+        LED=1;
+        wait(0.2);
+        LED=0;
+        wait(0.2);
+    }
+
+}
+
+void PTT_OFF(void) {
+    PTT_OUT = 0;
+    LED = 0;
+    KEY = 0;
+    FQX = FQ + IF;
+    DDS();
+    GET_LCD_DATA();
+    lcd.locate( 14,0 );
+    lcd.printf( "R" );  
+}
\ No newline at end of file