t2d board

Dependencies:   DebounceIn PinDetect SI570 Si5351A mbed

Fork of mbed_blinky by Mbed

Files at this revision

API Documentation at this revision

Comitter:
davcordova
Date:
Thu Feb 01 12:26:02 2018 +0000
Parent:
18:1fe1cb83472f
Commit message:
v1

Changed in this revision

DebounceIn.lib Show annotated file Show diff for this revision Revisions of this file
PinDetect.lib Show annotated file Show diff for this revision Revisions of this file
SI570.lib Show annotated file Show diff for this revision Revisions of this file
Si5351A.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 1fe1cb83472f -r 7f10a8469c31 DebounceIn.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DebounceIn.lib	Thu Feb 01 12:26:02 2018 +0000
@@ -0,0 +1,1 @@
+http://os.mbed.com/users/AjK/code/DebounceIn/#31ae5cfb44a4
diff -r 1fe1cb83472f -r 7f10a8469c31 PinDetect.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PinDetect.lib	Thu Feb 01 12:26:02 2018 +0000
@@ -0,0 +1,1 @@
+http://os.mbed.com/users/AjK/code/PinDetect/#cb3afc45028b
diff -r 1fe1cb83472f -r 7f10a8469c31 SI570.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SI570.lib	Thu Feb 01 12:26:02 2018 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/soldeerridder/code/SI570/#dae1bf95c49e
diff -r 1fe1cb83472f -r 7f10a8469c31 Si5351A.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Si5351A.lib	Thu Feb 01 12:26:02 2018 +0000
@@ -0,0 +1,1 @@
+http://os.mbed.com/users/kenjiArai/code/Si5351A/#8c63d15c8c2e
diff -r 1fe1cb83472f -r 7f10a8469c31 main.cpp
--- a/main.cpp	Thu Oct 12 04:41:05 2017 +0000
+++ b/main.cpp	Thu Feb 01 12:26:02 2018 +0000
@@ -1,12 +1,209 @@
+
 #include "mbed.h"
+#include "si5351a.h"
+    
+    InterruptIn button(p18); // Interrupt on digital pushbutton input p18
+    Timer debounce; // define debounce timer
+    Ticker data_out;            // periodic interrupt routines
+    Ticker clock_out;
+    DigitalOut data(p16);
+    DigitalOut clk(p17);
+    DigitalOut swon(p21);
+    DigitalOut swled(LED1);
+    
+    uint16_t divider, mode;
+    uint32_t ref0,ref1,ref2;
+    uint16_t *div_bin; // pointer
+    int count_data,count_clk;
 
-DigitalOut myled(LED1);
+    I2C i2c(p28, p27);       // communication with Si5351A I2C_SDA=p28 & I2C_SCL=p27
+    SI5351A ckref(i2c, 25000000UL);     // Base clock = 25MHz
+    Serial pc(USBTX,USBRX); // setup terminal link
+    LocalFileSystem local("local"); // define local file system
+    
+     uint16_t read_data (int );   
+     uint16_t * set_dec2bin (uint16_t);
+     void send_data (void);
+     void send_clk (void);
+     void toggle(void); // function prototype
+
+        uint16_t read_data (int  mode) 
+        {              
+ //       char bitmode[10];
+  //      char div[10];
+ //       char reads[10], readc[10];
+  //      char writes[10];
+    //  char writec[10];
+        uint16_t value;
+        int i,j;
+        char text[10][10]; // when the file exist and have data
+        char line[10];     // it reads line by line
 
-int main() {
-    while(1) {
-        myled = 1;
-        wait(0.2);
-        myled = 0;
-        wait(0.2);
+        for(i=0; i<10; i++)
+        for(j=0; j<10; j++)
+        text[i][j] = '\0';  // initializing the vector with null
+        for(i=0; i<10; i++)
+        line[i] = '\0';
+               
+                FILE* fp = fopen ("/local/div_prog.txt","r"); // open file for reading               
+                if (fp!=NULL) 
+                {
+                        fseek (fp, 0, SEEK_END);
+                        int  size = ftell(fp);
+                            if (size==0) 
+                            {
+                            pc.printf("File is empty\n");
+                            }
+                            else
+                            {
+                            rewind (fp); // restore pointer to the begin of the file
+                            i=0;
+                                    while ( fgets ( line, sizeof line, fp ) != NULL ) /* read a line */
+                                    {
+                                    strcpy(text[i], line);
+                                    printf("array ----> %s ", text[i]);
+                                    i++;
+                                    }
+                                    fclose(fp); // close file
+                            
+                                    if(mode==0)
+                                    {
+                                    value=atoi(text[mode]);
+                                    pc.printf("Divider value = %d \n",value); // display read data value
+                                    }
+                                    if(mode==1)
+                                    {
+                                    value=atoi(text[mode]);
+                                                if (value==0)
+                                                pc.printf("LSB Mode \n"); //
+                                                if (value==1)
+                                                pc.printf("MSB Mode \n"); //        
+                                    }                             
+                            }
+                    }
+                
+                else
+                {
+                int num;    
+                pc.printf("File does no exist \n");
+                pc.printf("Enter the divider value \n: ");
+                pc.printf("Byte to send LSB(0) or MSB(1)\n: ");
+                
+                  for(i=0; i<2; i++)  //just read to save to lines 
+                  {
+                      pc.scanf("%s", text[i]);
+                      while (!(sscanf(text[i], "%d", &num)))
+                            {
+                            printf("Invalid input '%s'\n", text[i]);
+                            pc.scanf("%s", text[i]);
+                            }     
+                  }                
+ 
+                   
+                }
+                    
+        //        FILE* fp2 = fopen("/local/div_prog.txt","w"); // open file
+        //        memcpy(writes, div, sizeof writes);
+        //        fputs(writes, fp2); // put char (data value) into file
+        //        fclose(fp2); // close file
+        //        value=atoi(writes);
+        //        pc.printf("Divider valuec = %d \n",value); // display read data value
+          
+                return value;
+        }
+    
+    uint16_t * set_dec2bin (uint16_t read_div) {
+    int i;
+     static uint16_t  r[12];
+       /* for loop execution */
+   for( i = 0; i < 12; i++ ){
+      r[i]= read_div >> i & 1;
+       pc.printf("%d",r[i]); // display read data value
+   }
+     pc.printf("\n"); 
+     return r;
     }
-}
+        
+               
+    void send_data (void) {    
+    if(count_data<12) {
+        if(mode==0){
+        data= *(div_bin+count_data);
+        pc.printf("%d",*(div_bin+count_data));
+        count_data=count_data+1;
+        }
+        if(mode==1) {
+        data= *(div_bin+11-count_data);
+        pc.printf("%d",*(div_bin+11-count_data));
+        count_data=count_data+1;
+        }
+ 
+    }
+    else {
+    data=0;
+  //  count_data=0;
+   // pc.printf("\n");
+    }
+    
+    }
+    
+    void send_clk (void){
+          if(count_clk<24) {
+              clk=!clk;
+   //     pc.printf("d%d",clk);
+        count_clk=count_clk+1;
+        }
+          else {
+    clk=0;
+  //  count_clk=0;
+  //  pc.printf("\n");
+    }
+        
+        }
+
+    int main ()
+    {
+    ref0=read_data(2);
+    ref1=read_data(3);
+    ref2=read_data(4);  
+    //ckref.set_frequency(SI5351_CLK0, ref0*1000000);   // CLK0=48MHz
+    //ckref.set_frequency(SI5351_CLK1, ref1*1000000);   // CLK0=50MHz
+    //ckref.set_frequency(SI5351_CLK2, ref2*1000000);   // CLK0=45MHz
+ //   ckref.set_frequency(SI5351_CLK0, 40000000);   // CLK0=48MHz
+    ckref.set_frequency(SI5351_CLK1, 4800000);   // CLK0=50MHz
+  //  ckref.set_frequency(SI5351_CLK2, 49000000);   // CLK0=45MHz
+
+    data=0;
+    clk=0;
+    divider= read_data(0);
+    div_bin= set_dec2bin(divider);
+    mode= read_data(1);
+ 
+    debounce.start();
+    button.rise(&toggle); // attach the address of the toggle
+    swon=1;
+    swled=1;
+    wait(1);
+    swon=0;
+    swled=0;
+    while(1) { //begin while
+            wait(1);
+        }  // end while
+     
+    }
+    
+    void toggle() {
+    if (debounce.read_ms()>200) // only allow toggle if debounce timer
+    data_out.attach(&send_data, 0.01); 
+    wait(0.005);
+    clock_out.attach(&send_clk, 0.005);
+    debounce.reset(); // restart timer when the toggle is performed
+    count_data=0;
+    count_clk=0;
+     swon=1;
+    swled=1;
+    wait(1);
+    swon=0;
+    swled=0;
+}   
+   
\ No newline at end of file