Introduzione |
Porta parallela
L'esercizio consiste nell'attivare otto linee digitali (ciascuna associata ad un led)
attraverso la scrittura, nel device associato alla porta parallela, di un intero a 8 bit
(= 1 byte = char).
int main() { int fd; fd = open("/dev/parport0",O_WRONLY); // apertura if (fd == -1){ ... // messaggio di errore return 1; } if (ioctl(fd,PPCLAIM)){ // accesso alla porta ... // messaggio di errore return 1; } unsigned char ch=...; ioctl(fd,...,...); // scrittura close(fd) ... }Per vedere in esadecimale il valore di un numero intero:
cout << hex << i << endl;Provate diverse sequenze di accensione e spegnimento dei led (da sinistra a destra e viceversa) utilizzando gli operatori bitwise di shift (<< e >>).
Porta seriale
Dopo aver collegato il multimetro digitale alla porta seriale si imposti la misura
(comando composto dalla lettera d+invio) e si legga il risultato
(il multimetro risponde inviando la misura effettuata all'istante del comando
e quelle nei tre secondi precedenti):
-01234567890123- TT 7.3451 uu 7.3441 7.3441 7.3441dove TT identifica il tipo di misura (OH=resistenza DC=misure in corrente continua) e uu l'unità di misura.
int main(){ int fd; fd = open("/dev/ttyS0",O_RDWR); // apertura if (fd<0){ ... // messaggio di errore return 1; } init_metex(fd); // set della modalita' di comunicazione string command="d\n"; // definizione del comando di misura write(fd,...,...); // invio del comando di misura char buf[14]; for (int i=0;i<4;i++){ read(fd,...,...); // lettura dei dati if (i==0){ string sbuf(buf,14); //... lettura del risultato... } } close(fd); ... }Per la funzione init_metex potete scaricare il modello (da completare) discusso a lezione per il METEX.
Dopo aver verificato di leggere correttamente il risultato del multimetro (ad esempio stampando il contenuto della stringa sbuf), create una funzione che esegua una singola lettura dello strumento
double get_metex(int fd, string tipo_misura);La funzione get_metex sarà molto utile per le prossime due esercitazioni: vi consigliamo quindi di realizzarla e provarla con cura per risparmiare tempo.
Facoltativo (ma utile): calcolo automatico dell'errore; la funzione misura diventa:
void get_metex(int fd, string tipo, double &mis, double& err);Per la definizione dell'errore fate riferimento al manuale dello strumento.