Test for mike
Dependencies: mbed DevInterfaces MCP4728 MCP4728setaddr I2Cinterfaces
main.cpp
- Committer:
- kstokely
- Date:
- 2019-03-22
- Revision:
- 9:2d70aa45f16e
- Parent:
- 8:abdd660056fb
- Child:
- 10:bf195171d850
File content as of revision 9:2d70aa45f16e:
/** example program for the use of the MCP4728 class and DACInterface.h classes * * V 1.0 : tested on the KL05z but without the MCP4728 connected \ * (C) Wim Beaumont Universiteit Antwerpen 2016 */ #define MCP4728EXAMPLEVER "2.04" #define TARGET_MBED 1 #include "mbed.h" #include <string> #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) PinName const SDA = PTE25; PinName const SCL = PTE24; #elif defined (TARGET_KL05Z) PinName const SDA = PTB4; PinName const SCL = PTB3; #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 #include "I2C.h" #include "I2CInterface.h" #include "MBEDI2CInterface.h" #include "DACInterface.h" #include "dev_interface_def.h" #include "MCP4728setaddr.h" #include "mcp4728.h" #include "shutter.h" MBEDI2CInterface mbedi2c( SDA, SCL); MBEDI2CInterface* mbedi2cp= &mbedi2c ; I2CInterface* i2cdev= mbedi2cp; const float Vdd = 4.97; 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); DigitalOut mRefShutters(p5); bool Shut1 = 0; bool Shut2 = 0; bool Shut3 = 0; bool Shut4 = 0; int DACSetChannel( int chan, MCP4728* dac) { int ret = 0; char z; int voltCount = 0; string instr; //printf("\n\rEnter Voltage \n\r"); while (ret == 0) { z = pc.getc(); if( z == 13 ) { voltCount = atoi( instr.c_str() ); if( voltCount > 4095 || voltCount < 0) { //////pc.printf("\n\r Voltage Entered Higher than Vdd Setting Voltage to Maximum\n\r"); dac->setDACvalue(4095,chan); } else { if ( dac->setDACvalue(voltCount,chan) ) { //printf("failed to set dac value %f for channel %d\n\r",voltCount,chan); } ////////pc.printf("Voltage set to %3fV\n\r", voltage); if( dac->update() ) { //printf("\n\rfailed to readback channel info \n\r"); } else { (void)dac->getDACvalue(voltCount,chan);//no need to test done with updat //printf(" CH%d %d Counts",chan,voltCount); //printf("\n\r"); } } instr.clear(); ret = 1; } else { ////pc.printf("%c",z); instr.push_back(z); } } return 1; } int main(void) { // get the version of getVersion getVersion gv; int 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); int cnt=0; mRefShutters = 1; //pc.printf("Agiltron Serial Control Program\n\r"); //pc.printf("'[' 4x4 Swtiching \n\r"); //pc.printf("']' 4x5 Swtiching\n\r"); //pc.printf("1, 2, 3, 4 Toggle Single Shutters\n\r"); //pc.printf("'o' Opens all Shutters\n\r"); //pc.printf("'r' Closes all Shutters \n\r"); //pc.printf("',' 4 Channel DAC Control \n\r"); //pc.printf("'.' Single Channel DAC Control \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 ); 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 initial state m4x5TTL1 = 1; m4x4TTL1 = 1; float voltage = 0; int voltCount = 0; string instr; while(1) { char c = pc.getc(); if( c == '1') //Toggle Shutter 1 { Shut1 = !Shut1; SH.writeShutters(Shut1,Shut2,Shut3,Shut4); if(Shut1) { ////pc.printf("Shutter 1 Closed\n\r"); } else { ////pc.printf("Shutter 1 Opened\n\r"); } } else if( c == '2') //Toggle Shutter 2 { Shut2 = !Shut2; SH.writeShutters(Shut1,Shut2,Shut3,Shut4); if(Shut2) { ////pc.printf("Shutter 2 Closed\n\r"); } else { ////pc.printf("Shutter 2 Opened\n\r"); } } else if( c == '3') //Toggle Shutter 3 { Shut3 = !Shut3; SH.writeShutters(Shut1,Shut2,Shut3,Shut4); if(Shut3) { ////pc.printf("Shutter 3 Closed\n\r"); } else { ////pc.printf("Shutter 3 Opened\n\r"); } } else if( c == '4') //Toggle Shutter 4 { Shut4 = !Shut4; SH.writeShutters(Shut1,Shut2,Shut3,Shut4); if(Shut4) { ////pc.printf("Shutter 4 Closed\n\r"); } else { ////pc.printf("Shutter 4 Opened\n\r"); } } else if( c == 'u') { mRefShutters = 0; ////pc.printf("Referenced Shutters Opened\n\r"); } else if( c == 'y') { mRefShutters = 1; ////pc.printf("Reference Shutters Closed\n\r"); } else if(c == 'o') //Open All Shutters { Shut1 = 1; Shut2 = 1; Shut3 = 1; Shut4 = 1; SH.writeShutters(1,1,1,1); ////pc.printf("All Shutters Opened\n\r"); } else if(c == 'r') //Close All Shutters { Shut1 = 0; Shut2 = 0; Shut3 = 0; Shut4 = 0; SH.writeShutters(0,0,0,0); ////pc.printf("All Shutters Closed\n\r"); } else if( c == 91 ) //Left square bracket [ 4x4 Control { //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++; } } 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 ] 4x5 Control { //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 == 'd') { int CH1cnt; int CH2cnt; int CH3cnt; int CH4cnt; //Print State of DAC if( dac.update() == 0) { (void)dac.getDACvalue(CH1cnt,0); (void)dac.getDACvalue(CH2cnt,1); (void)dac.getDACvalue(CH3cnt,2); (void)dac.getDACvalue(CH4cnt,3); pc.printf("CH1:%4d CH2:%4d CH3:%4d CH4:%4d\n\r",CH1cnt,CH2cnt,CH3cnt,CH4cnt); } else { pc.printf("Error: No readback from DAC\n\r"); } } else if( c == 'a') { //Print State of Shutters pc.printf("SH1:%d SH2:%d SH3:%d SH4:%d SHRef:%d\n\r",Shut1,Shut2,Shut3,Shut4,mRefShutters.read()); } else if( c == ',' ) //4 Channel DAC Control { ////pc.printf("4 Channel DAC Control Enter voltage and Press Enter\n\r"); int ret = 0; int chan = 0; while( ret ==0 && chan < 4) { char z = pc.getc(); if( z == 13 ) { voltCount = atoi( instr.c_str() ); if( voltCount < 0 || voltCount > 4095 ) { //////pc.printf("ERROR\n\r"); } else { if ( dac.setDACvalue(voltCount,chan) ) { //printf("failed to set dac value %d for channel %d\n\r",voltCount,chan); } //////////pc.printf("Voltage set to %3fV\n\r", voltage); chan++; /* if( dac.update() ) { printf("\n\rfailed to readback channel info \n\r"); } else { (void)dac.getVoltage(voltage,chan);//no need to test done with updat printf(" CH%d %f[V]",chan,voltage); printf("\n\r"); chan++; } */ } if( chan == 4) { ret = 1; wait_ms(100); } instr.clear(); } else if( z == ']')//Sets all channels to full voltage { for ( int cc =0 ; cc <4 ; cc++) { if ( dac.setDACvalue(3333,cc) ) { //printf("failed to set dac value %d for channel %d\n\r",cnt,cc); } } //printf("All Channels Set to 5V \n\r"); ret = 1; } else if( z == '[')//Sets all channels to 0 voltage { for ( int cc =0 ; cc <4 ; cc++) { if ( dac.setDACvalue(1000,cc) ) { // printf("failed to set dac value %d for channel %d\n\r",cnt,cc); } } //printf("All Channels Set to 0V \n\r"); ret = 1; } else { //////pc.printf("%c",z); instr.push_back(z); } } } else if( c == '.' ) //Single Channel DAC Control { ////pc.printf("Single Channel DAC Control Press Channel Number\n\r"); char z = pc.getc(); if( z == '1' || z== '2' || z == '3' || z == '0' ) { //////////pc.printf("Channel %c Selected",z); DACSetChannel( atoi(&z) , &dac); } else { ////pc.printf("ERROR"); } } } //Never Reach This return 1; }