Salta la barra di navigazione [1] - Vai alla barra di navigazione [3] - Scrivimi una mail [4]

Le funzioni di VVIO.dll

Sommario - Novità - Tutorial - Progetti - Risorse - Non solo elettronica - EN -

VVIO.dll è una libreria dinamica per macchine Windows destinata a facilitare il supporto di vari dispositivi hardware, permettendo la scrittura di programmi in qualunque linguaggio che supporti DLL a 32 bit, inclusi quelli che, come Microsoft Visual Basic e Borland Delphi non hanno istruzioni di ingresso / uscita. 

Questa pagina è parte del progetto VVIO: una libreria per l'I/O

I destinatari di questo software sono sostanzialmente appartenenti a due categorie:


Il funzionamento è possibile in due modalità profondamente differenti, una adatta per tutti i sistemi Windows ed una specifica per i sistemi operativi Microsoft derivati da WinNT, fino a WindowsXP. Le funzionalità e l'interfaccia verso il codice ad alto livello rimangono comunque identici.

Windows (tutte le versioni)

Il "driver" nella sua modalità "generica" è utilizzabile da tutte le macchine Windows, da Windows95 a WindowsXP e si appoggia sul meccanismo di I/O messo a disposizione da LabWindows/CVI; la contropartita è in alcuni casi, la relativa lentezza.

Per l'uso della DLL in questa modalità non è necessaria di alcuna installazione, è sufficiente copiarla dove risiede il programma oppure nella cartella di sistema (windows\system32 oppure winnt\system32). Questa modalità è quella predefinita e non è necessaria alcuna operazione di attivazione. E' necessario installare prima il run time engine di LW/CVI.

Windows NT, 2000, XP

Su macchine windows derivate da WinNT l'accesso ai dispositivi può essere fatto anche attraverso il device driver VVIO.SYS. Con esso è in alcuni casi possibile un grosso aumento di prestazioni pur preservando tutte le funzionalità della DLL in modalità "generica".

Per utilizzare questa modalità occorre preventivamente installare il device driver VVIO.sys e invocare, all'inizio del proprio codice, la funzione di attivazione.


La DLL è scritta utilizzando LabWindows/CVI, un compilatore ANSI C nato per il controllo della strumentazione elettronica ma utilizzabile anche per usi generici. Per utilizzarla è necessario installare sul proprio computer il RTE.

Come sempre nel link al fondo della pagina troverete sia gli eseguibili che il codice sorgente, gratuitamente ma con condizioni di utilizzo che vi prego di leggere con attenzione.


Di seguito, utilizzando la sintassi C, riporto una breve descrizione  delle funzioni rese disponibili da VVIO.dll. Gli utenti VB troveranno anche il file VVIO.bas che riporta i nomi delle  stesse funzioni con sintassi di VisualBasic.

L'elenco dei codici di errore ritornato dalle funzioni è disponibile nel file errorVVIO.h ed è caratterizzato dall'essere, in caso di errore, sempre minore di zero.

VVIO.dll: funzioni globali

void VVIO_SetNtMode(void)

Attiva la modalità di funzionamento specifica per windows NT/2000/Xp. Se non si invoca questa funzione la DLL è comunque utilizzabile seppur con un qualche calo di prestazioni, a volte consistente, a volte irrilevante.

La funzione non ritorna alcun valore e, nell'impossibilità di caricare VVIO.sys (sistema operativo non compatibile, driver non installato, errore nel driver...), semplicemente prosegue l'esecuzione del programma nella modalità  "generica" previa segnalazione.

void VVIO_SlowDown (short int slow)

Rallenta le funzioni di scrittura sull'hardware, permettendo l'utilizzo di dispositivi particolarmente lenti con parallele particolarmente veloci.

I parametri:

Nota: l'effetto è globale, cioè vale per tutte le operazione di I/O. E' permesso invocare la funzione più volte durante l'esecuzione del programma per adattarsi alle varie periferiche.

VVIO.dll: le funzioni generiche di input /output

short int VVIO_in (int addr)

Legge un byte dal dispositivo con indirizzo addr. L'uso casuale di questa funzione potrebbe causare danni al sistema se usato senza la dovuta attenzione, anche se si tratta di un'ipotesi piuttosto remota, trattandosi di un'operazione di lettura.

I parametri:

Ritorna il byte letto (0-255)

void VVIO_out (int addr, short int data)

Scrive il byte data all'indirizzo addr. Non viene effettuato alcun controllo sull'esistenza di un dispositivo con questo indirizzo e/o sugli eventuali effetti diretti o indiretti. L'uso potrebbe anche causare danni al sistema se usato senza la dovuta attenzione (per esempio la scrittura di un dato casuale sull'indirizzo del controller dei dischi potrebbe causare il blocco della macchina ed addirittura alla perdita di dati)

I parametri:

VVIO.dll: le funzioni relative alla porta parallela

short int VVIO_LPT_GetNumberFromBios (short int *lpt1, short int *lpt2, short int *lpt3)

Ritorna il numero di porte parallele individuate dal BIOS del PC ed i relativi indirizzi. In genere sono comprese le sole porte con indirizzo minore di 0x400 presenti sulla scheda madre o su schede ISA. In genere sono invece escluse quelle su bus PCI.

I parametri

Ritorna il numero di parallele individuate (0... 3). Un codice di ritorno negativo indica un errore.

short int VVIO_LPT_Lock (short int lpt)

Questa funzione blocca l'utilizzo della porta parallela ad altre applicazioni. Ho grossi dubbi sul corretto funzionamento di questa funzione per tutte le versioni di windows, anche se usarla sicuramente male non fa.

I parametri:

short int VVIO_LPT_Inizialize (short int lptnum, int lptaddr)

Inizializza alcune variabili interne per l'uso della porta parallela. E' necessario usarla prima delle funzioni VVIO_LPT_xxx() di seguito descritte.

I parametri:

short int VVIO_LPT_GetStatus (short int lpt)

Legge cinque bit dal registro status.

I parametri:

Ritornata  una parola di 16 bit di cui sono significativi solo 5 bit:
 0, 0 , 0 , 0, 0, 0 , 0 , 0 busy, ack, paper_out, select, error, 0, 0, 0.

Si noti che tali bit sono significativi solo se il valore ritornato è positivo, altrimenti si tratta di un codice di errore.

Si noti inoltre che per ciascun bit è ritornato 1 se la tensione al pin esterno è alta, "correggendo" l'eventuale inversione effettuata dall'hardware della porta parallela.

short int VVIO_LPT_WriteData(short int lpt, short int data)

Scrive il valore data (8 bit) sulla porta lpt   

I parametri

short int VVIO_LPT_WriteControl (short int lpt, short int strobe, short int linefeed, short int inizialize, short int select)

Scrive 4 bit nel registro control di lpt

I parametri

VVIO.dll: le funzioni relative al circuito mini-datalogger

short int VVIO_MAX147_Inizialize(short int lptnum, short int lptaddr)

Alimenta il circuito del mini- datalogger collegato ad una porta parallela e inizializza alcune variabili interne. Il tempo di esecuzione è abbastanza lungo (centinaia di ms) in quanto viene inserito un ritardo per permettere lo stabilizzarsi delle tensioni. Occorre invocare questa funzione solo una volta, all'inizio del proprio programma.

I parametri:

short int VVIO_MAX147_GetVolt (short int lptnum, short int ch, double *volt) 

Legge la tensione presente su uno dei canali del datalogger; si tratta della tensione all'ingresso del multiplexer, l'effetto dovuto ad eventuali partitori presenti deve essere calcolato a parte dal programma utente. Prima di questa funzione è necessario richiamare VVIO_MAX147_Inizialize()

I parametri:

short int VVIO_MAX147_GetSamples (short int lptnum, double volt[]) 

Legge la tensione presente su tutti i canali del datalogger; si tratta delle tensioni all'ingresso del multiplexer, l'effetto dovuto ad eventuali partitori partitori presenti deve essere calcolato dal programma utente. Prima di questa funzione è necessario richiamare VVIO_MAX147_Inizialize().

I parametri:

VVIO.dll: le funzioni relative a circuiti basati su iso-buffer

short int VVIO_CD4094_Inizialize(short int LPT, short int lptAddr) 

Inizializza l'hardware relativo ad un generico circuito basato su iso-buffer.

I parametri:

short int VVIO_CD4094_Write(short int LPT, short int ch, short int data, short int immediate)

Scrive un dato su un canale di un generico circuito basato su iso-buffer.

Parametri:

short int VVIO_CD4094_18245 (short int LPT, short int ch, short int dacInput1, short int dacInput2, short int immediate)

Scrive dati su un circuito basato sull'integrato LMD18245. Si veda motori passo-passo a micro-passi per un esempio concreto.

Parametri:

short int VVIO_CD4094_NextStepBipolar(short int LPT, short int ch, short int microstep, short int immediate) 

Fa compiere ad uno dei motori passo-passo bipolari una singola rotazione, pari a uno o più  "micropassi" (micro-step). Per la rotazione continua del motore è necessario invocare questa funzione ad intervalli regolari.

Si veda il circuito motori passo-passo a micro-passi ed il tutorial sui motori passo-passo per maggiori dettagli.

Parametri:

short int VVIO_CD4094_NextStepUnipolar (short int LPT, short int ch, short int motor, short int step, short int immediate)

Fa compiere ad uno dei motori passo-passo unipolari una rotazione, di un passo o di mezzo passo. Per la rotazione continua del motore è necessario invocare questa funzione ad intervalli regolari.

Si veda il circuito step-driver ed il tutorial sui motori passo-passo per maggiori dettagli.

Parametri:

Tutti i file appartenenti al progetto VVIO sono contenuti nel file compresso VVIO.tgz

licenza La licenza d'uso che ho utilizzato
basicVVxx.x Il codice sorgente delle librerie
DLL\ La DLL per l'ambiente Windows
SYS\ Il device driver per WindowsNT/2000/Xp e relativi file di supporto

Scarica il file VVIO.tgz

I circuiti supportati dal progetto VVIO sono:

La documentazione è disponibile alle seguenti pagine:


EN - Pagina principale - Sommario - Accessibilità - Note legali e privacy policy - Posta elettronica

XHTML 1.0 Strict - CSS 3