Introduzione |
Prima di iniziare la misura dovrete verificare che i collegamenti
sulla basetta siano corretti, e dovrete voi stessi collegare e regolare
le alimentazioni.
Struttura del programma
Il main dovrà chiamare una funzione diversa a seconda dell'opzione fornita dall'utente
(calibrazione, misura (e eventualmente fit)).
Il circuito richiede una alimentazione positiva di +5V
ed una negativa di -9V (e naturalmente un riferimento a 0V).
Fate attenzione a non sbagliare i collegamenti, perché
potreste distruggere i componenti.
I data sheets completi dei due dispositivi sono disponibili di seguito
Amp-op (741)
DAC
Inizializzazione
Calibrazione di V
Misura di I vs V
(opzionale) Fit di V vs I (determinazione di R)
Chiusura
int main(){
// calibrazione o misura ? (ad es. lcalib true/false)
...
// inizializza porta seriale e parallela, apre il file di I/O opportuno
init(lcalib);
...
if (lcalib){
Calibrazione();
} else {
Misura();
}
...
// chiude porta seriale e parallela ed il file di I/O opportuno
end(lcalib);
...
return 0;
}
Dove
void Calibrazione(){
double tensione;
for (unsigned char ch=0; ch<256;ch++){
ioctl(fd_parallela,...,...); // scrive sulla linea DATA
sleep(2); // diamo il tempo al circuito di assestarsi
tensione = get_metex(...); // legge V dal multimetro
// scrive numero e tensione nel file
// (opzionale) grafico V vs numero
}
}
e
void Misura(){
double corrente,tensione;
double vtun[256];
// legge 256 valori dal file di calibrazione --> vtun[256];
for (unsigned char buf=,...,...){ // numeri scelti
// (=valori di tensione)
ioctl(fd_parallela,...,...); // setta il valore di tensione
sleep(2);
corrente = get_metex(...); // lettura corrente
tensione = vtun[buf];
// scrittura di corrente e tensione nel file di misure
// grafico in tempo reale di I vs V
}
}
Opzionalmente Misura può essere predisposta in modo che
si possa selezionare direttamente la tensione (e non un numero tra 0 e 255).
int get_closest_int(double V, double Vref){
// restituisce i tale che i*Vref/255 sia vicino a V
}
void Misura(){
double corrente,tensione;
double vtun[256];
// legge 256 valori dal file di calibrazione --> vtun[256];
double V[n]={...,...}; // puo' essere impostato dall'utente
for (int i=0;i<n;i++){ // numero di valori di tensione
unsigned char buf = get_closest_int(V[i],Vref);
ioctl(fd_parallela,...,...); // setta il valore di tensione
sleep(2);
corrente = get_metex(...); // lettura corrente
tensione = vtun[buf];
// scrittura di corrente e tensione nel file di misure
// grafico in tempo reale di I vs V
}
}