Ho un paio di contatori geiger realizzati con circuiti diversi che permettono di contare gli impulsi prodotti tramite un PC. Adesso sto costruendo un data-logger per poter fare conteggi su tempi lunghi senza tenere il PC collegato.
Sto usando Arduino UNO con il data-logger shield della Adafruit.
Per contare gli impulsi che escono dai circuiti TTL dei contatori geiger uso un Digital input di Arduino "collegato" alla funzione attachInterrupt(...). Il programma è listato qui sotto. Il conteggio non avviene però nello stesso modo per i due geiger, infatti quello dei due che emette un impulso di durata 100 microsec. (misurata con un'oscilloscopio) produce un conteggio sempre superiore alla realtà. Il secondo geiger, con un impulso di durata 1500 microsec. invece produce un conteggio giusto. A questo punto mi sono chiesto se può dipendere dal fatto che l'impulso è troppo breve e crea qualche casino nella gestione dell'interrupt, anche se la frequenza degli impulsi è bassa. Ma il problema potrebbe essere anche altrove. Qualcuno che ha usato gli interrupt potrebbe aiutarmi?
grazie
int pin = 13;
volatile int state = LOW;
int conta=0;
float intervallo=60000;
float time=0;
float time0=0;
float diff=0;
void setup()
{
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, CHANGE);
Serial.begin(9600);
}
void loop()
{
digitalWrite(pin, state);
time=millis();
diff=time-time0;
if(diff > intervallo){
Serial.print(" ");
Serial.println(conta);
conta=0;
time0=millis();
}
}
void blink()
{
if(state == HIGH){
Serial.print("X ");
conta=conta+1;
}
state = !state;
}