Test for mike

Dependencies:   mbed DevInterfaces MCP4728 MCP4728setaddr I2Cinterfaces

Files at this revision

API Documentation at this revision

Comitter:
kstokely
Date:
Mon Feb 04 14:24:10 2019 +0000
Parent:
6:d1e569f370ac
Child:
8:abdd660056fb
Commit message:
Before changing to 4 channel separation

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
shutter.cpp Show annotated file Show diff for this revision Revisions of this file
shutter.h Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Fri Jan 13 14:02:39 2017 +0000
+++ b/main.cpp	Mon Feb 04 14:24:10 2019 +0000
@@ -5,8 +5,10 @@
  */ 
 
 #define MCP4728EXAMPLEVER "2.04"
+#define TARGET_MBED 1
 
 #include "mbed.h"
+#include <string>
 
 #if   defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
   PinName const SDA = PTE25;
@@ -17,6 +19,9 @@
 #elif defined (TARGET_K20D50M)
   PinName const SDA = PTB1;
   PinName const SCL = PTB0;
+#elif defined (TARGET_MBED)
+  PinName const SDA = p28;
+  PinName const SCL = p27;
 #else
   #error TARGET NOT DEFINED
 #endif
@@ -30,116 +35,249 @@
 #include "MCP4728setaddr.h"
 #include "mcp4728.h"
 
+#include "shutter.h"
+
 MBEDI2CInterface mbedi2c( SDA, SCL); 
 MBEDI2CInterface* mbedi2cp=  &mbedi2c ;
 I2CInterface* i2cdev= mbedi2cp;
-const float Vdd=4.5;
+const float Vdd = 4.97;
 
-DigitalOut LDAC(PTA6);
-DigitalOut CntPin(PTA7);
+DigitalOut LDAC(p5);
+DigitalOut CntPin(p6);
+
 
 
 Serial pc(USBTX, USBRX);
 
+
+//Pins for 4x4 Module
+
+DigitalOut m4x4TTL1(p21);
+DigitalOut m4x4TTL2(p22);
+DigitalOut m4x4TTL3(p23);
+DigitalOut m4x4TTL4(p24);
+DigitalOut m4x4TTL5(p25);
+
+DigitalOut m4x4CLK(p26); //CLk for triggering after new input
+
+
+//Pins for 4x5 Module
+
+DigitalOut m4x5TTL1(p7);
+DigitalOut m4x5TTL2(p8);
+DigitalOut m4x5TTL3(p9);
+DigitalOut m4x5TTL4(p10);
+DigitalOut m4x5TTL5(p11);
+
+//Shutter Pins
+DigitalOut SH1_1(p12);
+DigitalOut SH1_2(p13);
+DigitalOut SH2_1(p14);
+DigitalOut SH2_2(p15);
+DigitalOut SH3_1(p16);
+DigitalOut SH3_2(p17);
+DigitalOut SH4_1(p18);
+DigitalOut SH4_2(p19);
+
+DigitalOut m4x5CLK(p20);
+
+
+
+
+
+
 int main(void) {
   
    // get the version of getVersion 
    getVersion gv;
    int addr;
-   printf("MCP4728 example program version %s, compile date %s time %s\n\r",MCP4728EXAMPLEVER,__DATE__,__TIME__);
-   printf("getVersion :%s\n\r ",gv.getversioninfo());
-   printf("\n\rMCP4728 set address program date : %s  time :%s\n\r",__DATE__,__TIME__); 
-   printf("give new addr ");
-   scanf("%d",&addr);
-    if ( addr < 8) {
-        LDAC=1;
-        char oldaddr, eeaddr, regaddr, newaddr= 2;
-        int newaddrint;
-        // Set addr part 
-        MPC4728_address_set mpc4728(PTB0,&LDAC,i2cdev, &CntPin);
-        int i2cresult =mpc4728.readaddress(oldaddr, eeaddr, regaddr);
-        if ( i2cresult ) {
-            printf("failed to read current address error code: %d , scl cnt = %d  \n", i2cresult,mpc4728.getsclcnt() );
-        }
-        else { 
-            printf( " current address = %d ,eeaddr %d , regaddr %d  sclcnt= %d  give new address :  ", (int) oldaddr,(int) eeaddr, (int)regaddr, mpc4728.getsclcnt());  
-            scanf( "%d",&newaddrint);
-            printf("\n\r");
-            if ( newaddrint >= 0 && newaddrint <= 8 ) {
-                newaddr= (char) newaddrint;
-                i2cresult=mpc4728.setaddress(eeaddr,newaddr);
-                if ( i2cresult ) printf("failed to set address to %d error : %d , sclcnt= %d  \n",newaddr, i2cresult,mpc4728.getsclcnt());
-                else {
-                     printf("set new  address \n");
 
-                    i2cresult =mpc4728.readaddress(oldaddr, eeaddr, regaddr);
-
-                    if ( i2cresult ) printf("failed to read (new)  address error : %d  \n", i2cresult);
-                    else     printf( "new address = %d ,eeaddr %d , regaddr %d  sclcnt= %d  \n\r", (int) oldaddr,(int) eeaddr, (int)regaddr, mpc4728.getsclcnt());  printf( " new address = %d \n", (int) oldaddr);
-                }
-            }    
-            else {
-                printf( " new address %d is not valid reset the up to restart the program \n", (int)newaddr );
-            }
-        }
-  } // if add < 16 
-  printf("give test addr ");
-  scanf("%d",&addr);
- 
+  addr = 0;
    MCP4728  dac( i2cdev ,addr, Vdd);  // assuming the address  of the MCP4728 is set to 0 factory default 
    printf("\n\raddr %d MCP4728 :%s\n\r",addr,dac.getversioninfo());
    wait(1);
-   float voltage=0;
+
    int cnt=0;
-   while(cnt < 4096){
-           // first set the 4 channels 
-           for ( int cc =0 ; cc <4 ; cc++) { 
-               if ( dac.setDACvalue(cnt,cc) )
-                   printf("failed to set dac value %d for channel %d\n\r",cnt,cc);
+
+
+
+
+pc.printf("\n\rEnter Voltage and Press Enter\n\r");
+pc.printf("Agiltron Serial Control Program\n\r");
+pc.printf("Left Square Bracket to control 4x4 Swtiching [\n\r");
+pc.printf("Right Square Bracket to control 4x5 Swtiching ]\n\r");
+pc.printf("1, 2, 3, 4 Control Shutters on 4x5 Module\n\r");
+pc.printf("DAC control press Comma\n\r");
+
+//Set up dac for external voltage
+dac.setRefExtern();
+dac.update();
+
+//Intialize shutters
+    Shutter SH;
+    SH.init( &SH1_1, &SH1_2, &SH2_1, &SH2_2, &SH3_1, &SH3_2, &SH4_1, &SH4_2 );
+    bool Shut1 = 0;
+    bool Shut2 = 0;
+    bool Shut3 = 0;
+    bool Shut4 = 0;
+    SH.writeShutters(Shut1,Shut2,Shut3,Shut4);
+    
+    
+    //TTL pin arrays
+    DigitalOut* Arr_4x4[5] = {&m4x4TTL1, &m4x4TTL2, &m4x4TTL3, &m4x4TTL4, &m4x4TTL5 };
+    DigitalOut* Arr_4x5[5] = {&m4x5TTL1, &m4x5TTL2, &m4x5TTL3, &m4x5TTL4, &m4x5TTL5 };
+    
+    
+    //Set straight pipes intial state
+    m4x5TTL1 = 1;
+    
+    m4x4TTL1 = 1;
+    float voltage = 0;
+    string instr;
+
+while(1) 
+{
+         char c = pc.getc();
+        
+        if( c == '1') //Toggle Shutter 1
+        {
+            Shut1 = !Shut1;
+            SH.writeShutters(Shut1,Shut2,Shut3,Shut4);
+        }
+        
+        else if( c == '2') //Toggle Shutter 2
+        {
+            Shut2 = !Shut2;
+            SH.writeShutters(Shut1,Shut2,Shut3,Shut4);
+        }
+        
+        else if( c == '3') //Toggle Shutter 3
+        {
+            Shut3 = !Shut3;
+            SH.writeShutters(Shut1,Shut2,Shut3,Shut4);
+        }
+        
+        else if( c == '4') //Toggle Shutter 4
+        {
+            Shut4 = !Shut4;
+            SH.writeShutters(Shut1,Shut2,Shut3,Shut4);
+        }
+        
+        
+        else if( c == 91 ) //Left square bracket [
+        {
+            //Get 5 1's or 0's for binary number
+            int count = 0;
+            pc.printf("4x4 Control: Enter 5 digit binary number\n\r");
+            while ( count < 5 )
+            {
+                c = pc.getc();
+                
+                if( c == '1' || c=='0' )
+                {
+                    *Arr_4x4[count] = atoi(&c);
+                    count++;
+                }
             }
-            printf("set to %d result ",cnt);
-               // no else read anyway even if set fails 
-            if(dac.update()) printf("\n\rfailed to readback channel info \n\r");
+            
+            for( int k = 0; k<5; k++) //Trigger clocking to change values
+            {
+                m4x4CLK = 1;
+                wait(0.1); 
+                m4x4CLK = 0;
+            }
+            
+            pc.printf("Optical Path set to : %d%d%d%d%d\n\r", m4x4TTL1.read(), m4x4TTL2.read(), m4x4TTL3.read(), m4x4TTL4.read(), m4x4TTL5.read() ); //Confirm the correct output is set
+        }
+        
+        
+        
+        else if( c == 93 ) //Right square bracket ]
+        {
+            //Get 5 1's or 0's for binary number
+            int count = 0;
+            pc.printf("4x5 Control: Enter 5 digit binary number\n\r");
+            while ( count < 5 )
+            {
+                c = pc.getc();
+                
+                if( c == '1' || c=='0' )
+                {
+                    *Arr_4x5[count] = atoi(&c);
+                    count++;
+                }
+            }
+            
+            for( int k = 0; k<5; k++) //Trigger clocking to change values
+            {
+                m4x5CLK = 1;
+                wait(0.1); 
+                m4x5CLK = 0;
+            }
+            
+            pc.printf("Optical Path set to : %d%d%d%d%d\n\r", m4x5TTL1.read(), m4x5TTL2.read(), m4x5TTL3.read(), m4x5TTL4.read(), m4x5TTL5.read() ); //Confirm the correct output is set
+        }
+        
+else if( c == ',' )        
+{
+        pc.printf("4 Channel DAC Control Enter voltage and Press Enter\n\r");
+        int ret = 0;
+    while( ret == 0 )
+    {
+        char z = pc.getc();
+        
+        if( z == 13 )
+        {
+            voltage = atof( instr.c_str() );
+            
+            if( voltage == 0 || voltage > 5.0 )
+            {
+                pc.printf("ERROR\n\r");
+            }
+            else
+            {
+                for ( int cc =0 ; cc <4 ; cc++) { 
+                    if ( dac.setVoltage(voltage,cc) )
+                        printf("failed to set dac value %d for channel %d\n\r",cnt,cc);
+                    }
+                //pc.printf("Voltage set to %3fV\n\r", voltage);
+                 if(dac.update()) printf("\n\rfailed to readback channel info \n\r");
             else {
                 for ( int cc =0 ; cc <4 ; cc++) { 
                  (void)dac.getVoltage(voltage,cc);//no need to test done with updat 
                   printf(" CH%d %f[V]",cc,voltage);
                 }
                 printf("\n\r");
+                
             }
-             cnt++;
-             cnt=cnt % 4096;     
-             wait_ms(1200);
-
-  }
-
-  // now the same with the DAC interface 
-  DACInterface* di = &dac;
-  cnt=0;
-  while(1){
-           // first set the 4 channels 
-           for ( int cc =0 ; cc <4 ; cc++) { 
-               if ( di->setDACvalue(cnt,cc) )
-                   printf("failed to set dac value %d for channel %d\n\r",cnt,cc);
-            }
-            printf("set DAC value  to %d result in",cnt);
-               // no else read anyway even if set fails 
-            if(di->update()) printf("\n\rfailed to readback channel info \n\r");
-            else {
-                for ( int cc =0 ; cc <4 ; cc++) { 
-                 (void)di->getVoltage(voltage,cc);// no need to test done with update
-                  printf(" CH%d %f[V]",cc,voltage);
-                }
-                printf("\n\r");
             }
             
-             cnt++;
-             cnt=cnt % 4096;     
-             wait_ms(200);
+            instr.clear();
+            wait_ms(1200);
+            ret = 1;
+            
+        }
+        
+        else if( z == ']')
+        {
+             for ( int cc =0 ; cc <4 ; cc++) { 
+               if ( dac.setDACvalue(4095,cc) )
+                   printf("failed to set dac value %d for channel %d\n\r",cnt,cc);
+                }
+                ret = 1;
+        }
+        
+        else
+        {
+            pc.printf("%c",z);
+            instr.push_back(z);
+        }
+    }
+    }
 
-  }
-  
     
     // never reach this   
-    return 1;
-}   
+}
+
+ return 1;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shutter.cpp	Mon Feb 04 14:24:10 2019 +0000
@@ -0,0 +1,94 @@
+#include "shutter.h"
+
+//Constructor
+Shutter::Shutter()
+{
+}
+
+
+void Shutter::init( DigitalOut* SH1_1, DigitalOut* SH1_2, DigitalOut* SH2_1, DigitalOut* SH2_2, DigitalOut* SH3_1, DigitalOut* SH3_2, DigitalOut* SH4_1, DigitalOut* SH4_2 )
+{
+    SH_ARR[0] = SH1_1;
+    SH_ARR[1] = SH1_2;
+    SH_ARR[2] = SH2_1;
+    SH_ARR[3] = SH2_2;
+    SH_ARR[4] = SH3_1;
+    SH_ARR[5] = SH3_2;
+    SH_ARR[6] = SH4_1;
+    SH_ARR[7] = SH4_2;
+    
+    writeShutters( 0, 0, 0, 0 ); //intial State
+}
+
+void Shutter::toggleShutter( int SHnum )
+{
+    if (SHnum < 8 && SHnum > 0)
+    {
+        int a1 = *SH_ARR[ SHnum - 1];
+        int a2 = *SH_ARR[ SHnum ];
+        
+        if ( a1 == 1 && a2 == 0 )
+        {
+            *SH_ARR[ SHnum - 1] = 0;
+            *SH_ARR[ SHnum ] = 1;
+        }
+        
+        else if( a1 == 0 && a2 == 1)
+        {
+            *SH_ARR[ SHnum - 1] = 1;
+            *SH_ARR[ SHnum ] = 0;
+        }
+    }
+}
+
+
+void Shutter::writeShutters(bool SH1, bool SH2, bool SH3, bool SH4)
+{
+    //Shutter 1
+    if( SH1)
+    {
+        *SH_ARR[0] = 1;
+        *SH_ARR[1] = 0;   
+    }
+    else
+    {
+        *SH_ARR[0] = 0;
+        *SH_ARR[1] = 1;
+    }
+    
+    //Shutter 2
+    if( SH2)
+    {
+        *SH_ARR[2] = 1;
+        *SH_ARR[3] = 0; 
+    }
+    else
+    {
+        *SH_ARR[2] = 0;
+        *SH_ARR[3] = 1;
+    }
+    
+    //Shutter 3
+    if( SH3)
+    {
+        *SH_ARR[4] = 1;
+        *SH_ARR[5] = 0;   
+    }
+    else
+    {
+        *SH_ARR[4] = 0;
+        *SH_ARR[5] = 1;
+    }
+    
+    //Shutter 4
+    if( SH4)
+    {
+        *SH_ARR[6] = 1;
+        *SH_ARR[7] = 0;  
+    }
+    else
+    {
+        *SH_ARR[6] = 0;
+        *SH_ARR[7] = 1;
+    }    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shutter.h	Mon Feb 04 14:24:10 2019 +0000
@@ -0,0 +1,21 @@
+#include "mbed.h"
+
+class Shutter
+{
+    public:
+    //Public functions
+
+    Shutter( );
+    
+    void init( DigitalOut* SH1_1, DigitalOut* SH1_2, DigitalOut* SH2_1, DigitalOut* SH2_2, DigitalOut* SH3_1, DigitalOut* SH3_2, DigitalOut* SH4_1, DigitalOut* SH4_2 );
+    void toggleShutter( int SHnum );
+    
+    void writeShutters( bool SH1, bool SH2, bool SH3, bool SH4 );
+    
+    //Public variables
+    private:
+    DigitalOut* SH_ARR[8];
+    //Private funtions
+    
+    //Private variables
+};
\ No newline at end of file