This commit is contained in:
commit
6886cdc54e
1 changed files with 286 additions and 0 deletions
286
CosmicPiV2Simulator.ino
Normal file
286
CosmicPiV2Simulator.ino
Normal file
|
|
@ -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;
|
||||
}
|
||||
Loading…
Reference in a new issue