Newsgroup: it.comp.lang.visual-basic
Titolo: acquisizione dati parallelo + serie dalla LPT

Salve,
 
dovrei acquisire attraverso una porta parallela un segnale proveniente da 
uno strumento.
Il problema è questo:
la grandezza che devo acquisire consiste in un numero composto di 5 cifre 
decimali ognuna delle quali è presentata come 4 bit paralleli. Per ottenere 
il numero completo viene quindi inviata una sequenza in serie dei quattro 
bit per 5 volte.
I pin a disposizione nella uscita dello strumento sono:
4 per i dati (OUT)
1 per il clock (OUT)
1 per fine dato (OUT)
1 print (IN)
1 busy (IN)
 
Vorrei un chiarimento su come è possibile gestire questo tipo di segnale 
parallelo+seriale, e in particolare come posso sincronizzare i dati dello 
strumento con la porta parallela del PC.
Utilizzarei ovviamente una DLL per poter accedere alla porta.
 
Grazie
 


servono piu' informazioni sul protocollo usato dallo strumento, a naso 
direi che lo strumento emette i dati in maniera autonoma usando il clock 
come segnale di sincronismo e fine dato per indicare che e' l'ultima 
cifra decimale i due segnali d'ingresso potrebbero essere di comando da 
parte dall'unita'che deve/vuole ricevere i dati.
 
senza informazioni sulle effettiva tempificazioni poco si puo' dire/fare
probabilmente il clock puo' essere collegato all' ACK della parallela in 
quanto quella linea e' in grado di generare un interrupt ed a quel punto 
   dovresti leggere dalla parallela i dati ed il "fine dato" sperando di 
farcela in tempo, tieni conto pero' che la parallela e' del pc e' 
piuttosto lenta,
per fare cio'  hai bisogno di 6 linee d'ingresso ottenibili solo un 
parallele di tipo bidirezionali ( vabbe', ormai tutte quelle dei pc di 
classe 486/pentium!)
 
SE dovessi realizzare io un progetto del genere userei un 
microcontrollore come interfaccia lasciando a lui il compito di 
smazzarsi il protocollo verso lo strumento e facendolo poi comunicare 
col PC tramite seriale o USB ( in emulazione seriale )


 col PC tramite seriale o USB ( in emulazione seriale )
Se possibile preferirei non usare hardware aggiuntivo


>> Utilizzarei ovviamente una DLL per poter accedere alla porta.
 
Allora, se utilizzi una DLL, è quest'ultima che si dovrebbe sobbarcare il lavoro
a basso livello della gestione degli I/O e fornire un dato valido come ritorno
della funzione.
 
Per fare una DLL del genere bisogna lavorare in C++ e a basso livello,
probabilmente ti conviene chiedere in ng più orientati a Windows e al C++.
 
 
Sono invece d'accordo con 'mmm' sulla convenienza di usare un hardware dedicato.
 
Imho con un µC da 1E come un AtTimy2313 ce la fai tranquillamente e poi invii il
dato alla porta seriale con un convertitore da 5E.
 
Tuttavia se non hai pratica con basette prototipali millefori o cose del genere
puoi sempre usare una scheda  Arduino, costa poco e ha un hardware sufficiente
per il tuo scopo, tra l'altro ha la USB a bordo.
 
Se hai dimestichezza col C è un lavoro da poco tempo preparare un'interfaccia
come quella che ti serve.
 
http://www.arduino.cc/
 
 
 
--
ciao
  Stefano

 Sono invece d'accordo con 'mmm' sulla convenienza di usare un hardware dedicato.
[cut]
 
Ciao,
in realtà non dovrebbe esser necessario se si utilizzasse il DMA del pc 
linkato alla porta parallela. C'entra poco con il VB ma:
 
 
http://www.computerhope.com/irqs.htm
 

Potrebbe esser utile anche questo link:
 
http://www.fimee.ugto.mx/profesores/dohernandez/documentos/Parallel_Port_Complete_Programming,_Interfacing_and_Using_the_PCs_Parallel_Printer_Port.pdf
 


http://www.fimee.ugto.mx/profesores/dohernandez/documentos/Parallel_Port_Complete_Programming,_Interfacing_and_Using_the_PCs_Parallel_Printer_Port.pdf
 
 
Qui si parla dll'accesso e programmazione delle uscite che si poteva fare ai
tempi del DOS, da W2000 in poi si deve passare attraverso un driver altrimenti
si ottengono dei GPF.(General Protection Fault)
 
 
--
ciao
  Stefano

 si ottengono dei GPF.(General Protection Fault)
Grazie per l'informazione ;-) Evidentemente mi sono lasciato traviare 
dalla frase dell'OP:
"dovrei acquisire attraverso una porta parallela un segnale proveniente 
da uno strumento"
... e che le informazioni gli servissero per scrivere un driver. Se cos� 
non �, la modalit� di trasmissione che ha descritto � di tipo "nibble" 
e, una volta configurata correttamente la porta, il resto del lavoro lo 
far� il driver. Evidentemente non mi � chiara la domanda e mi ritiro in 
buon ordine.
Saluti a tutti.

farà il driver. 
 
Questo è vero, il problema semmai è che non è semplice scrivere un driver per
Windows, occorre che sia fatto correttamente:
 
http://it.wikipedia.org/wiki/Windows_Driver_Model
 
 
qui un esempio di WDM con delle strutture in C:
 
http://quequero.org/Il_Nostro_Primo_Driver
 
 
Io tra la complessità di un driver per Win e la semplicità di un programma per
µC esterno non avrei esitazioni, però sono un hardwarista e il mio punto di
vista è un po' di parte.
 
 
--
ciao
  Stefano


 
Grazie per il link, interessante. Non mi è mai capitato di scrivere 
driver per win ma ho potuto notare che non è molto dissimile dalla 
scrittura per unix o per il dos. Comprende sempre una table-entry e le 
solite funzioni di sistema (open, close, read, write, ioctl e le 
eventuali librerie di interfaccia). Quello che però ho risposto nel post 
precedente in modo, forse, un po' troppo stringato è che il problema non 
necessita della scrittura di un driver ne di hardware aggiuntivo perché 
la modalità di trasmissione descritta dall'OP è una di quelle standard 
per le porte parallele e quindi tra quelle che sicuramente i driver 
standard di win possono gestire; quindi tutto risulterà trasparente e 
l'OP non dovrà occuparsi di ricomporre i dati che pervengono ma 
semplicemente configurare il tutto per gestire la modalità nibble per 
poi leggere e scrivere. Varrebbe, ad esempio, anche per l'accesso 
diretto ai dischi, per i quali, sotto win, non è più necessario 
selezionare tracce, settori e cilindri ma è sufficiente, come per un 
qualsiasi file, eseguire delle seek a passi proporzionali alla 
dimensione dei settori.
 
Sperando di esser riuscito a risultare più chiaro, ti saluto.


Driver per la parallela ce n'è a bizzeffe; questo è un punto di partenza
 
http://www.lvr.com/parport.htm
 
 
Generalmente questi driver forniscono una dll che consente le operazioni 
di INP e OUT sulla porta.
 
Ti metti in polling ed aspetti i segnali.
Quando arrivano aspetti il fine dati poi li ricomponi.
Tutti qui, semplice come due piselli nel loro baccello.
 
Al massimo ci possono essere dei problemi di sincronia (se l'apparato 
non trasmette un segnale di START ed uno di END puoi non capire cosa 
stai ricevendo), ma questo non riguarda il tuo programma ma il 
protocollo implementato nell'apparecchio.
 
-- 
-> GbC|
www.chiappori.com