//------------------------------------------------------------------------- // TMCC Booster Gain Control System // Authored by Adrian JT (C) AGHR 2019 // // Written Aug 19 2019 //------------------------------------------------------------------------ #define version_code "1.00" //Revision Control Never hurt //--------PIN Configuration to AD5290 -------- int SDO = 2; //3-Wire Digital Data Output on AD5290 int SDI = 3; //3-Wire Digital Data Input on AD5290 int CLK = 4; //3-Wire Digital Clck Input on AD5290 int CS = 5; //3-Wire Digital ChSe Input on AD5290 //--------Analog Booster Monitor Pin -------- int MON=A0; //-----------Control Values-------- int trimval; //Value of the AD5290 trimmer int setpoint=120; //The target of the gain control in ADC LSBs //-----------Initialization-------- void setup() { //Set pin directions pinMode(SDI,OUTPUT); pinMode(SDO,INPUT); pinMode(CLK,OUTPUT); pinMode(CS, OUTPUT); // initialize the serial port for debugging purposes Serial.begin(57600); Serial.println(" "); Serial.print("TMCC Booster Control - FirmW Version: "); Serial.println(version_code); Serial.println(" "); Serial.println("Online>"); } //-----------Continuous Loop-------- void loop() { int analogval; //Analog value from readback (averaged) int analogval0; //Analog value from readback (single-shot) int analogval1; //Analog value from readback (single-shot) int analogval2; //Analog value from readback (single-shot) int analogval3; //Analog value from readback (single-shot) int analogval4; //Analog value from readback (single-shot) int analogval5; //Analog value from readback (single-shot) int analogval6; //Analog value from readback (single-shot) int analogval7; //Analog value from readback (single-shot) int analogval8; //Analog value from readback (single-shot) int analogval9; //Analog value from readback (single-shot) //take 9 measures of the booster output and average them analogval0=analogRead(MON); analogval1=analogRead(MON); analogval2=analogRead(MON); analogval3=analogRead(MON); analogval4=analogRead(MON); analogval5=analogRead(MON); analogval6=analogRead(MON); analogval7=analogRead(MON); analogval8=analogRead(MON); analogval9=analogRead(MON); analogval= (analogval0+analogval1+analogval2+analogval3+analogval4+analogval5+analogval6+analogval7+analogval8+analogval9)/10; //if the signal is too weak turn it up if((analogvalsetpoint) &&(trimval>0)){ trimval=trimval-1; } //update the AD5920 set_trim(trimval); delay(10); //turn the line below on for debugging // Serial.println(analogval,DEC); } // end void loop //-----------Function to set the AD5290-------- int set_trim(int setting){ int P0; int P1; int P2; int P3; int P4; int P5; int P6; int P7; //--------Convert setting to Binary-------- P0 = (setting) & 1; P1 = (setting>>1) & 1; P2 = (setting>>2) & 1; P3 = (setting>>3) & 1; P4 = (setting>>4) & 1; P5 = (setting>>5) & 1; P6 = (setting>>6) & 1; P7 = (setting>>7) & 1; //Chip select low digitalWrite(CS,LOW); digitalWrite(CLK,LOW); //Write bit 7 if(P7==1){digitalWrite(SDI,HIGH);} else {digitalWrite(SDI,LOW);} digitalWrite(CLK,HIGH); digitalWrite(CLK,LOW); //Write bit 6 if(P6==1){digitalWrite(SDI,HIGH);} else {digitalWrite(SDI,LOW);} digitalWrite(CLK,HIGH); digitalWrite(CLK,LOW); //Write bit 5 if(P5==1){digitalWrite(SDI,HIGH);} else {digitalWrite(SDI,LOW);} digitalWrite(CLK,HIGH); digitalWrite(CLK,LOW); //Write bit 4 if(P4==1){digitalWrite(SDI,HIGH);} else {digitalWrite(SDI,LOW);} digitalWrite(CLK,HIGH); digitalWrite(CLK,LOW); //Write bit 3 if(P3==1){digitalWrite(SDI,HIGH);} else {digitalWrite(SDI,LOW);} digitalWrite(CLK,HIGH); digitalWrite(CLK,LOW); //Write bit 2 if(P2==1){digitalWrite(SDI,HIGH);} else {digitalWrite(SDI,LOW);} digitalWrite(CLK,HIGH); digitalWrite(CLK,LOW); //Write bit 1 if(P1==1){digitalWrite(SDI,HIGH);} else {digitalWrite(SDI,LOW);} digitalWrite(CLK,HIGH); digitalWrite(CLK,LOW); //Write bit 0 if(P0==1){digitalWrite(SDI,HIGH);} else {digitalWrite(SDI,LOW);} digitalWrite(CLK,HIGH); digitalWrite(CLK,LOW); //Chip select high for setting to take effect digitalWrite(CS,HIGH); return(0); }