//drive the dac channels /* Crude code to get the Cosmic Pi up and running, spits out events (coincidence on both channels, after setting the HV to about 28V and the DAC to 22F (whatever that is). Makes the light blink (it's not very bright) and prints the event number. Rate on the test unit seems reasonable, we'll test this against a proper setup over the next few weeks To be re-written using interrupts for production code. */ // the setup function runs once when you press reset or power the board byte smallpart; byte bigpart; int x = 0; //cosmic counter #include int HVVal = 0xFE; void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(PA6, OUTPUT); pinMode(PA4, OUTPUT); pinMode(PA5, OUTPUT); Serial.begin(9600); //config SPI pins pinMode(PC7, OUTPUT); pinMode(PC8, OUTPUT); pinMode(PC3, OUTPUT); pinMode(PB13, OUTPUT); //set input pins pinMode(PC12, INPUT); pinMode(PC11, INPUT); pinMode(PB10, INPUT); digitalWrite(PC7, LOW); setHV(0xAD); digitalWrite(PC7, HIGH); digitalWrite(PC8, LOW); setHV(0xAD); digitalWrite(PC8, HIGH); HVVal= HVVal+10; Wire.setSDA(PB7); Wire.setSCL(PB8); Wire.begin(); smallpart = 0x2F; //the lsb part bigpart = 0x02; // the msb part of the dac value Serial.write("Hello "); // Serial.write(HVVal); //digitalWrite(PA5, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(PA5, LOW); // turn the LED off by making the voltage LOW //delay(10000); int address = 0x60; Wire.beginTransmission(address); Wire.write(B00001000); // sends five bytes Wire.write(bigpart); // sends one byte Wire.write(smallpart); Wire.endTransmission(); Wire.beginTransmission(address); Wire.write(B00000000); // sends five bytes Wire.write(bigpart); // sends one byte Wire.write(smallpart); Wire.endTransmission(); Serial.write("transmitted "); Serial.write(" looping "); } // the loop function runs over and over again forever void loop() { //debounce loop if (digitalRead(PB10) == 0) { //Serial.write("0"); if (digitalRead(PB10) == 1) { //low to high print x //Serial.write("x"); Serial.println(x); x++; digitalWrite(PA5, HIGH); delay(200); digitalWrite(PA5, LOW); } } /*if PC11 == LOW { Serial.write("1"); if PC11 == HIGH { //low to high print x Serial.write("y"); } } */ //smallpart--; } // set the two HV supplies byte setHV(byte _send) // This function is what bitbangs the data { for(int i=0; i<8; i++) // There are 8 bits in a byte { digitalWrite(PC3, bitRead(_send, 7-i)); // Set MOSI //delay(1); digitalWrite(PB13, HIGH); // SCK high //bitWrite(_receive, i, digitalRead(MISO_pin)); // Capture MISO digitalWrite(PB13, LOW); // SCK low //digitalWrite(MOSI_pin, LOW); // Set MOSI } //digitalWrite(SS_pin[j], HIGH); // SS high again } //return _receive; // Return the received data