// Version fuer Koinzidenz bool digin1; bool digin2; String meld; int messk; int iana; int messv[3]; int bmessv[3]; int ihoch; // Wichtige Parameter --------------- // vorher 2000 bzw. 6000 (mit Myonen 20 60) int imo1=50; int imo2=150; int pink = 8; // Pin fuer Koinzidenzmessung (digital) // normale Variante int Pin = 4; // Pin fuer Digitalpuls zur Ausloesung einer Messung int Pin2 = 2; // Pin zweiter Kanal int akanal=0; // Analog-Pin fuer Pulshoehen-Verhaeltnis (Dig. 4) int akan2=1; // Analog-Pin K2 fuer Pulshoehen-Verhaeltnis (Dig. 2) // // umgekehrte Variante //int Pin = 2; // Pin fuer Digitalpuls zur Ausloesung einer Messung //int Pin2 = 4; // Pin zweiter Kanal //int akanal=1; // Analog-Pin fuer Pulshoehen-Verhaeltnis (Dig. 4) //int akan2=0; // Analog-Pin K2 fuer Pulshoehen-Verhaeltnis (Dig. 2) // // Pulsbreite (fuer Berechnung der zufaelligen Koinzidenzrate) float fensk=8.0e-6; float fenskfs=fensk*1.0e6; int iverhm=10; // Anzahl Messungen fuer mittl. Verhaeltnis (meist 100) int mik1=50; // Bei Compton eher 100 bis 400 int mak1=400; int mik2=50; // Bei Compton eher 50 bis 200 int mak2=400; // Prescaler siehe Beginn von setup // ---------------------------------- unsigned long zeit1; unsigned long zeit2; unsigned long zeit3; unsigned long iges; int ibma; int nbma; int irest; int ires2; int akoi; int ipri; int ipri2; float verh; float verh1=1.15; float verh2=1.45; float bverh; float bverh1=1.15; float bverh2=1.45; int messc; int messb; int iverh; float verhs; float zufkr; // // ADCSRA |= bit (ADPS0); // 2 // ADCSRA |= bit (ADPS1); // 4 // ADCSRA |= bit (ADPS0) | bit (ADPS1); // 8 // ADCSRA |= bit (ADPS2); // 16 // ADCSRA |= bit (ADPS0) | bit (ADPS2); // 32 // ADCSRA |= bit (ADPS1) | bit (ADPS2); // 64 // Defaultist prescaler 128 void setup(){ ADCSRA &= ~(bit (ADPS0) | bit (ADPS1) | bit (ADPS2)); // clear prescaler bits // ADCSRA |= bit (ADPS2); // 16 ca. 12 micro-s pro Messung // ADCSRA |= bit (ADPS0) | bit (ADPS2); // 32 ca. 30 micro-s pro Messung // Normale Variante 64 ADCSRA |= bit (ADPS1) | bit (ADPS2); // 64 ca. 56 micro-s pro MessungMessungen // Prescaler 32 bringt fuer Koinzidenz nichts, Rate wird nicht hoeher // Serial.begin(38400); iges=0; akoi=0; char data; delay(100); for (int i = 0; i < 4; i++) { delay(100); Serial.println(" Bereit ");} //Befehl von Python empfangen ipri=0; while (ipri==0) { if (Serial.available() > 0) //Waiting for request {meld = Serial.readString();} // Serial.println(meld); Serial.println(" Steuercode auf Arduino empfangen: "+meld); ipri=1; } delay(200); iana=1; messk=meld.length(); if (meld.charAt(0)=='2') {iana=2;} // Serial.println(" Neue Koinzidenzmessung "); delay(800); Serial.println(" Alles Null gesetzt "); pinMode(Pin, INPUT); pinMode(pink, INPUT); //Versuch Messung der RC-Abnahme (1. Kanal A0, D4) iverh=0; verhs=0.; while (iverh1.05 && verh<1.5 && messv[1]1.05 && verh<1.5 && messv[1]2 statt >5 for (int i = 0; i < 3; i++) { if (digitalRead(pink)==HIGH) {ihoch++;} } // zeit2=micros(); zeit3=millis(); // bmessv[0]=0; if (ihoch>4) { for (int i = 0; i < iana; i++) { bmessv[i]=analogRead(akan2);} } // // Einschalten fuer Analyse if (iana==2) { if (verh > verh1 && verh < verh2 && messc > 120 && messc < 600) { bverh=0; if (ihoch>5) { bverh=float(bmessv[0])/float(bmessv[1]);} delay(50); for (int i = 0; i < 3; i++) { Serial.println((String)messv[i]);} Serial.println(" Verh. 1 zu 2 Kan. A "+(String)verh+" "); delay(50); for (int i = 0; i < 2; i++) { Serial.println((String)bmessv[i]);} Serial.println(" Verh. 1 zu 2 Kan. B "+(String)bverh+" "); Serial.println(" Nr "+(String)iges+" Zeitpunkt "+(String)zeit3+" in milli-s "); Serial.println(" ihoch "+(String)ihoch+" Anz. Koinz. "+(String)akoi+" "); bmessv[1]=0; delay(50);}} // // Laenge des Koinzidenzpulses ca. 750 micro-sec // // Besser nur bei guter Pulshoehe und verh zu iges zaehlen // Ev. Peakpos. enger vorher 120 bis 600, Kan. A1 >100 // verh1=0.99; // als Test (gut fuer Myonen) if (verh > verh1 && verh < verh2 && messc > mik1 && messc < mak1) { iges++; if (ihoch>4 && bmessv[0]>mik2 && bmessv[0]5) { // Serial.println(" K "+(String)iges+" v "+(String)verh+" "+(String)messc+" "+(String)bmessv[0]+" "+(String)akoi+" t "+(String)zeit3);} // irest=iges%imo1; ires2=iges%imo2; if (iges==0) {ires2=1;} if (iges==0) {irest=1;} if (irest==0 && ipri==1) { zeit3=millis(); Serial.println(" Anzahl Messungen "+(String)iges+" Koinzidenzen "+(String)akoi+" Zeit in ms "+(String)zeit3+" "); ipri=0; delay(50);} // if (ires2==0&& ipri2==1) { Serial.println(" Totale Anzahl Messungen "+(String)iges+" Koinzidenzen "+(String)akoi+" "+(String)zeit3+" ms "); zeit3=millis(); Serial.println(" Zeit "+(String)zeit3+" ms "); delay(10); zufkr=float(iges)/float(zeit3)*1000.0; Serial.println(" Rate pro s "+(String)zufkr); delay(10); zufkr=zufkr*fensk*zufkr*60.0; Serial.println(" Zufällige Koinzidenz-Rate pro min "+(String)zufkr+" mit Pulsbreite in micro-s "+(String)fenskfs+" "); delay(10); zufkr=float(akoi)/float(zeit3)*1000.0*60.0; Serial.println(" Gemessene Koinzidenz-Rate pro min "+(String)zufkr); Serial.println(" Koinzidenz Anzahl "+(String)akoi); ipri2=0; delay(70);} } }