Last active
December 31, 2016 01:09
-
-
Save pingud98/15066f2836d420f93d5e13ce63ca0852 to your computer and use it in GitHub Desktop.
Cosmic Pi voltage scanner and ADC histogram production in CSV format.
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 histogram program | |
//this compiles histograms from the ADC for different HV Bias levels | |
//it is used to profile the detection of muons and noise | |
//updated to give horizontal row output rather than columns, easier to process | |
//only prints values from 500 to 1500 | |
//the first set of samples seem to be noisy for some reason (?) | |
unsigned long start_time; | |
unsigned long stop_time; | |
unsigned int values[2000]; | |
unsigned long histograma[4096]; | |
unsigned long histogramb[4096]; | |
const int SS_pin = 42; //tbc | |
const int SCK_pin = 44; | |
const int MISO_pin = 22; | |
const int MOSI_pin = 43; | |
String intextbuf; | |
String extextbuf; | |
byte sendValue = 0xFF; // Value we are going to send | |
byte returnValue = 0; // Where we will store the value sent by the slave | |
int cyclecounter = 0; | |
int hvset = 0; | |
void setup() { | |
digitalWrite(SS, HIGH); // Start with SS high | |
pinMode(SS_pin, OUTPUT); | |
pinMode(SCK_pin, OUTPUT); | |
pinMode(MISO_pin, INPUT); //this is the avalanche pin, not implemented yet | |
pinMode(MOSI_pin, OUTPUT); | |
Serial.begin(115200); | |
REG_ADC_MR = 0x10380080; // Free run as fast as you can | |
REG_ADC_CHER = 3; // Channels 0 and 1 | |
REG_ADC_CR = 2; // Start | |
Serial.print("Alive"); | |
sendValue = 0x60; | |
Serial.println("Histogram for channels A and B, voltage scan"); | |
Serial.println("1000 samples per round"); | |
Serial.println("100,000 sets of samples"); | |
Serial.println("100,000,000 samples per output"); | |
returnValue = bitBang(sendValue); // Transmit data | |
for (int i = 0; i < 4096; i++) { | |
histograma[i] = 0; | |
histogramb[i] = 0; | |
} | |
Serial.print("hvset"); | |
Serial.print("; "); | |
Serial.print("sample"); | |
Serial.print("; "); | |
Serial.print("channel a"); | |
Serial.print("; "); | |
Serial.println("channel b"); | |
} | |
void loop() { | |
//reads in on channel 0 | |
Serial.print("index"); | |
Serial.print("; Ch A & B; "); | |
for (int i = 500; i < 1500; i++) { | |
//Serial.print(i); | |
Serial.print(i); | |
Serial.print("; "); | |
//Serial.println(histogramb[i]); | |
//Serial.print("; "); | |
} | |
Serial.println(); | |
for (hvset = 0x70; hvset > 0x50; hvset--) { | |
returnValue = bitBang(hvset); // Transmit data | |
for (int i = 0; i < 4096; i++) { | |
histograma[i] = 0; | |
histogramb[i] = 0; | |
} | |
for (int j = 0; j < 100000; j++) { | |
for (int i = 0; i < 1000; i++) { | |
while ((ADC->ADC_ISR & 0x01) == 0);; // wait for conversion | |
values[i] = ADC->ADC_CDR[0]; //reads ch 0 only | |
while ((ADC->ADC_ISR & 0x02) == 0); | |
values[i + 1000] = ADC->ADC_CDR[1]; //get values | |
} | |
for (int i = 0; i < 1000; i++) { | |
//Serial.println(i); | |
//Serial.print(values[i]); | |
histograma[int(values[i])]++; | |
//Serial.print(" "); | |
//Serial.println(values[i+1000]); | |
histogramb[int(values[i + 1000])]++; | |
} | |
} | |
Serial.print(hvset); | |
Serial.print("; Ch A; "); | |
for (int i = 500; i < 1500; i++) { | |
//Serial.print(i); | |
Serial.print(histograma[i]); | |
Serial.print("; "); | |
//Serial.println(histogramb[i]); | |
//Serial.print("; "); | |
} | |
Serial.println(); | |
Serial.print(hvset); | |
Serial.print("; Ch B; "); | |
for (int i = 500; i < 1500; i++) { | |
//Serial.print(i); | |
//Serial.print(histograma[i]); | |
//Serial.print("; "); | |
Serial.print(histogramb[i]); | |
Serial.print("; "); | |
} | |
Serial.println(); | |
//Serial.println(cyclecounter); | |
// delay(2000); | |
// cyclecounter++; | |
// for(int i=0;i<4096;i++) { | |
// Serial.print(i); | |
// Serial.print(" "); | |
// Serial.print(histograma[i]); | |
// Serial.print(" "); | |
// Serial.println(histogramb[i]); | |
//histogramb[i]=0; | |
} | |
} | |
byte bitBang(byte _send) // This function is what bitbangs the data | |
{ | |
//reception isn't implemented in this version. | |
byte _receive = 0; | |
digitalWrite(SS_pin, LOW); // SS low | |
for (int i = 0; i < 8; i++) // There are 8 bits in a byte | |
{ | |
digitalWrite(MOSI_pin, bitRead(_send, 7 - i)); // Set MOSI | |
//delay(1); | |
digitalWrite(SCK_pin, HIGH); // SCK high | |
//bitWrite(_receive, i, digitalRead(MISO_pin)); // Capture MISO | |
digitalWrite(SCK_pin, LOW); // SCK low | |
//digitalWrite(MOSI_pin, LOW); // Set MOSI | |
} | |
digitalWrite(SS_pin, HIGH); // SS high again | |
//return _receive; // Return the received data | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment