
Test for mike
Dependencies: mbed DevInterfaces MCP4728 MCP4728setaddr I2Cinterfaces
Revision 7:e649bb2b6187, committed 2019-02-04
- 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
--- 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