commit 6886cdc54e4ff4ecfbf7410c0773bf5b74ec585a Author: James Devine Date: Mon Aug 6 22:00:20 2018 +0200 diff --git a/CosmicPiV2Simulator.ino b/CosmicPiV2Simulator.ino new file mode 100644 index 0000000..df7dc9d --- /dev/null +++ b/CosmicPiV2Simulator.ino @@ -0,0 +1,286 @@ +//Cosmic Pi V2 Simulator for Arduino DUE +//functions provided: +//outputs +//Analogue Out 0 -> Simulated PSU Voltage FB (open loop) +//Analogue Out 1 -> Simulated Events (SlowOutA/SlowOutB) +//GPS PPS Output -> 1 Hz +//Trigout -> 5Hz, randomomised +//Strig A out -> 10Hz, sync with trigout +//Strig B out -> 10Hz, sync with trigout +//inputs - to check detection is working +//Flag 0 +//Flag 1 +//Flag 2 + +//Serial output at 115200 + + +//variables +int evt0; +int evt1; +int evt2; +int evt3; +int evt4; +int filler0; +int filler1; +int filler2; +int filler3; +int filler4; + +//Now 5 more events for ChA and 5 more for ChB +int evt0A; +int evt1A; +int evt2A; +int evt3A; +int evt4A; +int filler0A; +int filler1A; +int filler2A; +int filler3A; +int filler4A; + +int evt0B; +int evt1B; +int evt2B; +int evt3B; +int evt4B; +int filler0B; +int filler1B; +int filler2B; +int filler3B; +int filler4B; + + + +//pinouts +int GPSPPS=13; +int TRIG=12; +int STRIGA=11; +int STRIGB=10; + +int eventpeak = 700; +int AnalogQPoint = 600; +int duration = 0; + +//PSU wobble criteria +int psuupdown=0; +int psuupdownnext=0; +int wobble = 50; +int psusetpoint = 255; + +//timer +int start_time = 0; +int stop_time = 0; + +void setup() { + // put your setup code here, to run once: +analogWrite(DAC0, 255); //set the DC value for the PSU + +analogWrite(DAC1, AnalogQPoint); //set the DC value for the analogue detector signal +pinMode(LED_BUILTIN, OUTPUT); //lets use pin 13 as the PPS + + +//init outputs +digitalWrite(GPSPPS,0); +digitalWrite(TRIG,0); +digitalWrite(STRIGA,0); +digitalWrite(STRIGB,0); + + Serial.begin(115200); +} + +void loop() { + // put your main code here, to run repeatedly: +start_time = micros(); + +//each loop we'll have 5 events. Here are the times of each of them +evt0=random(0,80); +evt1=random(0,80); +evt2=random(0,80); +evt3=random(0,80); +evt4=random(0,80); +filler0= 80-evt0; +filler1= 80-evt1; +filler2= 80-evt2; +filler3= 80-evt3; +filler4= 80-evt4; + +//Now 5 more events for ChA and 5 more for ChB +evt0A=random(0,40); +evt1A=random(0,40); +evt2A=random(0,40); +evt3A=random(0,40); +evt4A=random(0,40); +filler0A= 40-evt0A; +filler1A= 40-evt1A; +filler2A= 40-evt2A; +filler3A= 40-evt3A; +filler4A= 40-evt4A; + +evt0B=random(0,40); +evt1B=random(0,40); +evt2B=random(0,40); +evt3B=random(0,40); +evt4B=random(0,40); +filler0B= 40-evt0B; +filler1B= 40-evt1B; +filler2B= 40-evt2B; +filler3B= 40-evt3B; +filler4B= 40-evt4B; + +//set 1 +delay(10); +delay(evt0); +analogWrite(DAC1, eventpeak); +//delay(5); +digitalWrite(TRIG,1); +digitalWrite(STRIGA,1); +digitalWrite(STRIGB,1); +delay(5); +analogWrite(DAC1, (eventpeak-50)); +delay(5); +digitalWrite(TRIG,0); +digitalWrite(STRIGA,0); +digitalWrite(STRIGB,0); +analogWrite(DAC1, AnalogQPoint); +delay(filler0); +delay(evt0A); +digitalWrite(STRIGA,1); +delay(10); +digitalWrite(STRIGA,0); +delay(filler0A); +delay(evt0B); +digitalWrite(STRIGB,1); +delay(10); +digitalWrite(STRIGB,0); +delay(filler0B); + +//set 2 +delay(evt1); +analogWrite(DAC1, eventpeak); +//delay(5); +digitalWrite(TRIG,1); +digitalWrite(STRIGA,1); +digitalWrite(STRIGB,1); +delay(5); +analogWrite(DAC1, (eventpeak-50)); +delay(5); +digitalWrite(TRIG,0); +digitalWrite(STRIGA,0); +digitalWrite(STRIGB,0); +analogWrite(DAC1, AnalogQPoint); +delay(filler1); +delay(evt1A); +digitalWrite(STRIGA,1); +delay(10); +digitalWrite(STRIGA,0); +delay(filler1A); +delay(evt1B); +digitalWrite(STRIGB,1); +delay(10); +digitalWrite(STRIGB,0); +delay(filler1B); + +//set 3 +delay(evt2); +analogWrite(DAC1, eventpeak); +//delay(5); +digitalWrite(TRIG,1); +digitalWrite(STRIGA,1); +digitalWrite(STRIGB,1); +delay(5); +analogWrite(DAC1, (eventpeak-50)); +delay(5); +digitalWrite(TRIG,0); +digitalWrite(STRIGA,0); +digitalWrite(STRIGB,0); +analogWrite(DAC1, AnalogQPoint); +delay(filler2); +delay(evt2A); +digitalWrite(STRIGA,1); +delay(10); +digitalWrite(STRIGA,0); +delay(filler2A); +delay(evt2B); +digitalWrite(STRIGB,1); +delay(10); +digitalWrite(STRIGB,0); +delay(filler2B); + +//set 4 +delay(evt3); +analogWrite(DAC1, eventpeak); +//delay(5); +digitalWrite(TRIG,1); +digitalWrite(STRIGA,1); +digitalWrite(STRIGB,1); +delay(5); +analogWrite(DAC1, (eventpeak-50)); +delay(5); +digitalWrite(TRIG,0); +digitalWrite(STRIGA,0); +digitalWrite(STRIGB,0); +analogWrite(DAC1, AnalogQPoint); +delay(filler3); +delay(evt3A); +digitalWrite(STRIGA,1); +delay(10); +digitalWrite(STRIGA,0); +delay(filler3A); +delay(evt3B); +digitalWrite(STRIGB,1); +delay(10); +digitalWrite(STRIGB,0); +delay(filler3B); + +//set 5 +delay(evt4); +analogWrite(DAC1, eventpeak); +//delay(5); +digitalWrite(TRIG,1); +digitalWrite(STRIGA,1); +digitalWrite(STRIGB,1); +delay(5); +analogWrite(DAC1, (eventpeak-50)); +delay(5); +digitalWrite(TRIG,0); +digitalWrite(STRIGA,0); +digitalWrite(STRIGB,0); +analogWrite(DAC1, AnalogQPoint); +delay(filler4); +delay(evt4A); +digitalWrite(STRIGA,1); +delay(10); +digitalWrite(STRIGA,0); +delay(filler4A); +delay(evt4B); +digitalWrite(STRIGB,1); +delay(10); +digitalWrite(STRIGB,0); +delay(filler4B); + +//pulse the pps +digitalWrite(GPSPPS,1); +delay(40); +digitalWrite(GPSPPS,0); + +//let's wobble the PSU output every second; +if (psuupdown==0) +{ + psusetpoint = psusetpoint + wobble; + psuupdownnext=1; +} +if (psuupdown==1) +{ + psusetpoint = psusetpoint - wobble; + psuupdownnext=0; +} +psuupdown = psuupdownnext; +analogWrite(DAC0, psusetpoint); + +Serial.print("The loop took "); +Serial.println(duration); + +stop_time = micros(); +duration = stop_time - start_time; +} \ No newline at end of file