Scarica Condensatore

Salve a tutti,
devo fare un sistema per la misura della costante di tempo di un circuito RC basato su Arduino che:
Riceve dal SerialMonitor una indicazione della costante di tempo
Seleziona la frequenza adatta e la imposta
Esegue la misura campionando il segnale
Restituisce il valore misurato partendo da due punti
Calcola la regressione lineare e restituisce il risultato
Esegue la misura N volte calcola media e scarto tipo

Questo è quello che ho fatto:

int charging = 13; //pin che mi permette la carica
float Vref =4.6;
void setup()
{
    pinMode(charging,OUTPUT);
    Serial.begin(9600);
    Serial.println("Charging");
  
  }

void loop()
{  
      if (Serial.available())
	{
	             unsigned long dato = Serial.read();
                     unsigned long theoric_tau = dato-48;
                     Serial.println ("tau"); 
                     Serial.println (theoric_tau,DEC); 
                     digitalWrite(charging,HIGH);
                     delay(10); 
                     digitalWrite(charging,LOW);
                     float start=micros();
                     int a=analogRead(A0);
                     float compTime = micros() - start;
                     delay(theoric_tau);
                     float endTime=micros();
                     int b =analogRead (A0);
                     Serial.println(a);
                     Serial.println(b);
                     float v1= ((a*Vref)/1023);
                     float v2= ((b*Vref)/1023);
                     float measured_tau = (float) (endTime - start)/log(v1/v2);
                     Serial.println ("deltat"); 
                     float deltat= endTime - start;
                     Serial.print("\n");
                     Serial.println(deltat);
                     Serial.print("\n");
                                     
                     Serial.print("Measured constant time is: ");
                     Serial.print(measured_tau);
                     Serial.println(" us");
                     
                     
                     Serial.println("Done Displaying");
                     Serial.println(v1,2);
                     Serial.print("\n");
                     Serial.println(v2);
        
     }
}

Il problema è che l’esercizio richiede di usare interrupt e timer per prendere campioni a intervalli definiti e la possibilità di selezionare la frequenza adatta e quindi il prescaler in base al tau previsto. Qualcuno ha un esercizio simile svolto o sarebbe estremamente gentile da darmi una mano dato che è urgente e mi serve per una relazione d’esame.

[EDIT] aggiunto i tag Uwe[/EDIT]

Ciao e benvenuto,
ti invito a leggere il regolamento del forum e in particolare il punto 7 ([REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum) per includere il codice postato negli appositi tag.
Puoi modificare il tuo post premendo il tasto modify a destra sopra il post stesso.

Per quanto riguarda gli interrupt guarda qui --> Arduino Playground - Interrupts e qui --> attachInterrupt() - Arduino Reference
Per i timer e il prescale la faccenda si fa più complessa. Devi studiare a forndo il linguaggio C e wiring (core e lib di Arduino) e il datasheet del micro che stai usando (suppongo sia l'ATmega328P).

Tempo fa un utente a realizzato un frequenzimetro e a pubblicato anche il codice sul forum, potresti partire da li.
Guarda anche le librerie di Leo, che usano spesso e volentieri i timer
--> http://www.leonardomiliani.com/2012/looper-uno-schedulatore-software-per-arduino/comment-page-1/
--> http://www.leonardomiliani.com/2012/leos-un-semplice-so-per-arduino/

EDIT: Forse anche questo può essere un buon punto di partenza --> http://arduino.cc/en/Tutorial/CapacitanceMeter