***********************************************
EMULATORE DI OSCILLOSCOPIO TDS1002 

Attilio Andreazza
Università degli Studi di Milano
Maggio 2003
***********************************************



INTRODUZIONE
------------
Questo programma costituisce un emulatore parziale di un oscilloscopo
modello TDS 1002 della Tektronix, da utilizzarsi per lo svolgimento della
parte di laboratorio del corso Laboratorio di Calcolo 2 del Corso di Laura
in Fisica dell'Università degli studi di Milano. 

L'emulatore usa la porta COM2 di un personal computer per comunicare con 
l'esterno (un altro PC oppure la porta COM1 dello stesso PC) usando cavi 
laplink (detti anche incrociati o null-modem). 

Le letture dell'oscilloscopio sono ottenute supponendo il canale 1 collegato 
ad un generatore di funzione d'onda ed il canale 2 collegato ai capi di una
capacità all'interno di un circuito RC, LC oppure RLC. Il segnale di ingresso 
sul canale 2 è ottenuto integrando le equazioni differenzial che regolano 
il comportamento del circuito.

Sono state implementate tutte le funzionalità necessarie per lo svolgimento
degli esercizi del corso.

Alcuni funzionalità di carattere generale (protocollo seriale, 
parsing dei comandi, integrazione di equazioni differenziali) sono state 
implementate in modo da facilitare il riutilizzo del codice in altri 
progetti.



COMPONENTI
----------
TDS1002.h/.c

Questi file contengono il grosso della simulazione dell'oscilloscopio, con 
l'interprete dei comandi.

TDS1002_main.c

Questo file contiene la funzione main che fa girare l'ocilloscopio. 
Si occupa di interpretare le opzioni da riga di comando, inizializza 
il generatore di funzione d'onda cui è collegato l'oscilloscopio e la 
sua frequenza, dopo di ché fa partire l'emulatore sulla porta seriale 
COM2 (/dev/ttyS1).

RS232Parser.h/.c

L'interprete dei comandi dell'oscilloscopio permette qualche libertà nella
forma dell'input: sono possibili abbreviazioni, concatenazione di comandi
e l'interprete è case-insensitive. La simulazione di queste proprietà, che 
sono comuni degli interpreti di diversi strumenti, e' stata separata in questi
due file, per permetterne il facile riutilizzo in altri programmi.

serial.h/.c

Funzioni di alto livello per la trasmissione di dati tramite la porta 
seriale. Siccome sono funzioni mlto generali sono state separate per 
renderne più facile la trasportabilità.

source.h/.c

Contiene una serie di funzioni d'onda e circuiti da dare come input ai 
canali 1 e 2 dell'oscilloscopio.

RungeKutta.h/.c

Integratore con metodo Runge-Kutta, con la possibilità di avere un 
adattamento automatico del passo di integrazione per mantenere una 
precisione minima fissata.



COMPILAZIONE
------------
Per creare l'eseguibile dovrebbe essere sufficiente dare il comando:

make TDS1002



UTILIZZO
--------
Il programma viene invocato da linea di comando con

./TDS1002 circuito frequenza

dove circuito è una stringa che descrive a quale circuito l'oscilloscopio
è connesso:
 - SINCOS
   canale 1 = sinusoide, 
   canale 2 = cosinusoide.
 - RCSINUSOID 
   canale 1 = sinusoide, 
   canale 2 = risposta ai capi della capacità in un circuito RC.
 - RCSQUARE 
   canale 1 = onda quadra, 
   canale 2 = risposta ai capi della capacità in un circuito RC.
 - LCSINUSOID 
   canale 1 = sinusoide, 
   canale 2 = risposta ai capi della capacità in un circuito LC.
 - LCSQUARE 
   canale 1 = onda quadra, 
   canale 2 = risposta ai capi della capacità in un circuito LC.
 - RLCSINUSOID 
   canale 1 = sinusoide, 
   canale 2 = risposta ai capi della capacità in un circuito RLC.
 - RLCSQUARE 
   canale 1 = onda quadra, 
   canale 2 = risposta ai capi della capacità in un circuito RLC.

Frequenza è la frequenza della forzante connessa al canale 1, se non 
specificata il valore di default è di 100 kHz.

Il programma accetta comandi ed invia il suo output alla porta seriale,
tranne nel caso in cui incontri errori di decodifica dei comandi, nel
qual caso stampa un messaggio di errore sullo standard output. 

Un comando speciale, che non esiste sull'oscilloscopio reale, è EXIT
che fa terminare l'esecuzione dell'emulatore.

Gli altri comandi che al momento sono implementati (si veda il manuale 
di programmazione dell'oscilloscopio Tektronix TDS 1002 per una descrizione
dettagliata) sono:
CH1?		CH2?
CH1:SCALe	CH2:SCALe
CH1:VOLTs	CH2:VOLTs
CH1:POSition	CH2:POSition
CURVe?
DATa
DATa:SOUrce
DATa:STOP
DATa:WIDth
HEADer
HORizontal?
HORizontal:RECOrdlength
HORizontal:MAIn?
HORizontal:MAIn:SCAle
HORizontal:MAIn:SECdiv
ID?
*IDN?
TRIGger?
TRIGger:MAIn?
TRIGger:MAIn:EDGE?
TRIGger:MAIn:EDGE:SLOpe
TRIGger:MAIn:EDGE:SOUrce
TRIGger:MAIn:LEVel
WAVFrm?
WFMPre?
WFMPre:BIT_Nr
WFMPre:BYT_Nr
WFMPre:NR_Pt
WFMPre:WFId?
WFMPre:XINcr?
WFMPre:XUNit?
WFMPre:XZEro?
WFMPre:YMUlt?
WFMPre:YOFf?
WFMPre:YUNit?
WFMPre:YZero?
