Last active
August 6, 2018 20:11
-
-
Save pingud98/b6325db238625b693ec72945fe1142a1 to your computer and use it in GitHub Desktop.
Simulate inputs and outputs for Cosmic Pi V2.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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