PDA

View Full Version : Inviare/Ricevere dati dalla porta parallela


idt_winchip
10-04-2005, 18:23
Ho bisogno di poter utilizzare la porta parallela per comunicare con un dispositivo da me costruito.
So che su windows (soprattutto NT) ci sono dei problemi per comunicare con la porta parallela.

Il fatto è questo: devo sviluppare un applicazione in borland c++ builder che possa settare e acquisire il valore dei pin della porta parallela.
Mi sono informato un po e credo di aver capito che le cose si complicano se voglio utilizzare più di 4 bit del registro dati.
Per l'appunto io devo poter lavorare su 5 pin:muro: , di cui 4 devono inviare alla periferica i valori da me voluti e devo poter essere in grado di leggere il valore del bit che ritorna.

Avrei intenzione di collegare i primi 4 dal pin 2 al pin 5 (D0-D3) e il quinto....in qualche parte dove sia possibile leggere il contenuto...si..ma dove!

E se me ne infischio di windows e dentro il sorgente C metto un codice in assembler con istruzioni di in/out funziona o windows mi impedisce di fare una cosa del genere anche a livello di assembler?

help....mi serve per il progetto d'esame:cry:

cionci
11-04-2005, 01:48
Originariamente inviato da idt_winchip
E se me ne infischio di windows e dentro il sorgente C metto un codice in assembler con istruzioni di in/out funziona o windows mi impedisce di fare una cosa del genere anche a livello di assembler?
Te lo impedisce... In Win NT/2k/XP non puoi utilizzare IN e OUT, ma devi passare solo attraverso le API...

C'è l'API Set/GetCommState...anche se mi sembra progettata più per la seriale...

In teoria le linee aggiuntive per l'handshake sulla parallela ci sono...ti basterebbe leggere quelle e lasciare la parallela con 8 bit in uscita...

idt_winchip
12-04-2005, 20:52
Te lo impedisce... In Win NT/2k/XP non puoi utilizzare IN e OUT, ma devi passare solo attraverso le API...

C'è l'API Set/GetCommState...anche se mi sembra progettata più per la seriale...

In teoria le linee aggiuntive per l'handshake sulla parallela ci sono...ti basterebbe leggere quelle e lasciare la parallela con 8 bit in uscita...

Scusa ma non ho capito l'ultima frase.
Ti stavi riferendo al fatto di poter trasferire 8 bit invece che 4 o alla possibilità di comunicare con quelle API? :help:

vici_1
12-04-2005, 22:27
Non so se ti puo' essere utile , oppure se ne eri gia' a conoscenza, ma su questo sito molto interessante per programmare in assembler hanno scritto dei driver per utilizzare le porte parallele e seriali sotto gli SO win NT,2000,XP.
Infatti come dice cionci l'accesso tramite in,out sotto questi SO non e' possibile.
Prova a vedere se c'e' qualche cosa o qualc'uno che puo' esserti d'aiuto.
ecco il link alla pagina specifica : http://www.giobe2000.it/Consigli/Scarica_VediLPT_XP.htm

e per ulteriori informazioni dalla pagina che ti ho segnalato, vai al link dove nel riquadro c'e' scritto :

Consulta le istruzioni per installare
il Driver che consente
l'accesso all' I/O in ambiente
Win2000, WinNT& WinXP

Brigante
13-04-2005, 00:01
Sulla rivista n° 221 (la penultima) di Nuova Elettronica c'è un progettino per testare la porta parallela, e con esso un programmino dimostrativo, scritto in VB6 che utilizza una dll che si chiama io.dll, con la quale si gestisce appunto la porta parallela sotto Windows 2000 e XP senza alcun problema.

cionci
13-04-2005, 01:34
Consulta le istruzioni per installare
il Driver che consente
l'accesso all' I/O in ambiente
Win2000, WinNT& WinXP
Se volete ce l'ho anche io un driver che permette di usare IN e OUT sotto NT/2K/XP, ma mi sembra un po' come ammazzare un uccellino con un colpo di cannone... Quello che ho io si chiama giveio.sys...

71104
13-04-2005, 13:36
ma aprirla con una stupidissima CreateFile no, eh? :D

cionci
13-04-2005, 17:44
Con la CreateFile la parallela viene configurata in amniera diversa da come serve a lui...

71104
13-04-2005, 20:39
hmmm... perché? :mbe:
non è sufficiente scrivere e basta?
se non gli interessa scrivere solo su certi bit basta che invia un byte in cui in corrispondenza di quei bit c'è 0
mi pare difficile che da user mode non si possa controllare la parallela...

Brigante
13-04-2005, 21:45
C'è l'apposita dll che risolve tutto, non vedo perchè complicarsi la vita!
:)

sirus
13-04-2005, 21:56
usare le funzioni che mette a disposizione il C (che vanno direttamente sul bios) per la comunicazione?! :mbe: mi sembra la soluzione + veloce :p

71104
13-04-2005, 23:43
eeeeeeeeeehhhhh???????? cosa fanno queste funziooooooooni??? :eek:

cionci
14-04-2005, 08:39
usare le funzioni che mette a disposizione il C (che vanno direttamente sul bios) per la comunicazione?! :mbe: mi sembra la soluzione + veloce :p
Parli delle funzioni bios* del Turbo C ? Funzionano solo se fai un programma a 16 bit... In altri ambienti non funzionano...

cionci
14-04-2005, 08:41
C'è l'apposita dll che risolve tutto, non vedo perchè complicarsi la vita!
:)
Secondo me quella DLL non è mai una buona scelta...perchè permette a qualsiasi programma di accedere direttamente all'hardware... Sinceramente io non metterei mai una DLL del genere in un software di produzione... Se si tratta di una programma di prova ben venga...

Brigante
14-04-2005, 08:52
Secondo me quella DLL non è mai una buona scelta...perchè permette a qualsiasi programma di accedere direttamente all'hardware... Sinceramente io non metterei mai una DLL del genere in un software di produzione... Se si tratta di una programma di prova ben venga...

:confused: Bè, anche se non c'è una dll posso fare un programma che accede all'hardware, utlizzando magari le stesse istruzioni che usa la dll al suo interno, no? Quindi...

cionci
14-04-2005, 08:53
hmmm... perché? :mbe:
non è sufficiente scrivere e basta?
se non gli interessa scrivere solo su certi bit basta che invia un byte in cui in corrispondenza di quei bit c'è 0
mi pare difficile che da user mode non si possa controllare la parallela...
"Avrei intenzione di collegare i primi 4 dal pin 2 al pin 5 (D0-D3) e il quinto....in qualche parte dove sia possibile leggere il contenuto...si..ma dove!"
Vuole 4 bit in uscita ed uno in ingresso...
Se guardi qui: http://support.microsoft.com/default.aspx?scid=kb;en-us;823179&Product=vb6
C'è scritto you cannot read dato from parallel port...

Ripeto...c'è la funzione GetCommState da cui credo che si possa leggere anche lo stato delle linee aggiuntive... Tutto sta nel vedere a quale linea corrispondono...

cionci
14-04-2005, 08:54
:confused: Bè, anche se non c'è una dll posso fare un programma che accede all'hardware, utlizzando magari le stesse istruzioni che usa la dll al suo interno, no? Quindi...
No...perchè quella dll si basa su un driver che va installato con i privilegi di amminsitratore...

cionci
14-04-2005, 09:15
Se guardi qui: http://digilander.libero.it/toniobruno/LPT%20Control.htm
I pin utilizzabili per l'input in modalità SPP (cioè non ECP o EPP in cui le linee sono bidirezionali) sono dall'11 al 15... Tutto sta ora vedere se con GetCommState puoi leggerne lo stato... Ma come vedi quel programma non funziona su Windows 2k/XP...

http://www.risorsehitech.it/elettronica/proj/16_ntc_to_parallel/2.php
Sopra si può vedere che il pin usato per il busy...quindi un pin di ingresso è il pin 11 (che anche quello usato per l'handshake con la parallela)... Ora si tratta di vedere come si può leggerne lo stato...

Attenzione non dico di programmare l'interfaccia con handshake (cosa possibile con SetCommState), che renderebbe tutto più complicato, anche se comunque fattibile implementando un protocollo di timing fra il raise del busy (dopo ad esempio aver mandato un particolare dato in uscita) e il suo rilascio...ma di lasciare tutto senza handshake e monitorare costantemente il livello di queste linee...

idt_winchip
14-04-2005, 15:47
innanzitutto vi ringrazio per le molteplici risposte ricevute...scusate se rispondo solo ora ma nn son potuto accedere al pc per un po..

Avete parlato di due file: io.dll e giveio.sys.
Come funzionano?
La cosa ideale che sospetto non troverò mai sarebbe una funzione che permette di settare e ricevere il bit del pin del bit voluto.
Trovai una funzione in c tempo fa, ma purtroppo era per linux e io ho la necessità di sviluppare il prog con il builder c++.
Mi fareste un grande favore se mi potreste dire dove trovare il file io.dll e giveio.sys :)

cionci
14-04-2005, 16:38
Qui ci sono i link per il download...e nel file di test in C puoi vedere come usarlo...
http://www.physik.rwth-aachen.de/group/IIIphys/CMS/tracker/en/silicon/arcs_nt.html

cionci
14-04-2005, 16:40
Per leggere i pin di input dev fare un accesso all'indirizzo 379...
Qui puoi vedere la posizione dei vari bit nel byte che leggi con inpb o inportb (il Borland dovrebbe avere il secondo)...

idt_winchip
14-04-2005, 17:06
Qui ci sono i link per il download...e nel file di test in C puoi vedere come usarlo...
http://www.physik.rwth-aachen.de/group/IIIphys/CMS/tracker/en/silicon/arcs_nt.html

thanks! ;)

idt_winchip
14-04-2005, 21:30
Ah! un ultima cosa se ritenga troppo difficile far tornare la cosa! Nel caso decida di utilizzare windows 98, questo mi consente di utilizzare le istruzioni assembler in e out...vero? :mbe:
In quel caso parte un altra domanda... esiste un server IIS per windows98? So che dal punto di vista della sicurezza è scandaloso ma tanto lavora in locale, è solo per una prova dimostrativa. :D

cionci
14-04-2005, 21:57
Un eseguibile che apre il driver giveio con CreateFile (guarda il codice dimostrativo) può usare in e out (l'istruzione inportb o inpb non è altro che una IN assembly) anche su Windows 2K/XP...

Comunque per Win98 c'è lo scandaloso PWS...altrimenti puoi usare Apache...