Skip to content

Instantly share code, notes, and snippets.

@pingud98
Last active August 6, 2018 20:11
Show Gist options
  • Save pingud98/b6325db238625b693ec72945fe1142a1 to your computer and use it in GitHub Desktop.
Save pingud98/b6325db238625b693ec72945fe1142a1 to your computer and use it in GitHub Desktop.
Simulate inputs and outputs for Cosmic Pi V2.
//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 - digital pin 3
//Flag 1 - digital pin 4
//Flag 2 - digital pin 5
//Serial output at 115200
//STM32 flag output detection
bool flag0 = false;
bool flag1 = false;
bool flag2 = false;
//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);
//attach interrupts
attachInterrupt(2, Flag0ISR, RISING);
attachInterrupt(3, Flag1ISR, RISING);
attachInterrupt(4, Flag2ISR, RISING);
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);
if (flag0==true) Serial.println("Saw Flag 0");
if (flag1==true) Serial.println("Saw Flag 1");
if (flag2==true) Serial.println("Saw Flag 2");
flag0=false;
flag1=false;
flag2=false;
stop_time = micros();
duration = stop_time - start_time;
}
void Flag0ISR()
{
flag0=true;
}
void Flag1ISR()
{
flag1=true;
}
void Flag2ISR()
{
flag2=true;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment