home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca
 
GESTIRE LA PORTA PARALLELA CON XP E VB6 tipo: livello:
POTREMO COMANDARE RELE', LED ,CIRCUITI ELETTRONICI E MOLTO ALTRO ATTRAVERSO IL NOSTRO PC.
 
 




 

GESTIRE LA PARALLELA

Nelle prossime righe spiegherò a grandi linee come gestire la porta parallela attraverso VISUAL BASIC 6.0 e vi faro’ un piccolo esempio per pilotare 8 LED oppure 8 relè 

 

PRIMA DI INIZIARE VOLEVO SPECIFICARE CHE NEL CREARE L'ARTICOLO HO PRESO SPUNTO IN GIRO PER IL WEB.

 

La LPT (porta parallela) consente il collegamento di diverse periferiche con possibilità di trasferire 8 bit in parallelo, ovvero un BYTE. Sul computer la porta è un connettore femmina detto "a vaschetta" o DB25 con 25 pin.

 

 

Su certe stampanti è presente un connettore diverso detto Centronics

 

 Per prima cosa vediamo come è fatta la LPT


     

e la CENTRONICS    

  

 

 

 

 

 

Numero
pin
(DB25)
Numero
pin
(Centronics)
Nome
del
segnale
Direzione Registro-bit Segnale
invertito
dall'hardware
1 1 nStrobe Out Control-0 Si
2 2 Data0 In/Out Data-0  
3 3 Data1 In/Out Data-1  
4 4 Data2 In/Out Data-2  
5 5 Data3 In/Out Data-3  
6 6 Data4 In/Out Data-4  
7 7 Data5 In/Out Data-5  
8 8 Data6 In/Out Data-6  
9 9 Data7 In/Out Data-7  
10 10 nAck In Status-6  
11 11 Busy In Status-7 Si
12 12 Paper-Out In Status-5  
13 13 Select In Status-4  
14 14 nAuto/Linefeed Out Control-1 Si
15 32 nError/nFault In Status-3  
16 31 nInitialize Out Control-2  
17 36 nSelect-Printer/nSelect-In Out Control-3 Si
18-25 19-30 Ground Gnd - -

Note della Tabella:

  • La "n" che precede il nome del segnale indica che è negato quindi attivo basso. Ad esempio nError: se la stampante segnala un errore il segnale diventa basso (la tensione è tra 0 e 0,7 volt circa e il bit 3 dello Status Port verrà letto come 0 dal software) mentre se la stampante funziona correttamente il segnale è alto (la tensione è compresa tra 2,2 e 5 volt e il bit 3 dello Status Port verrà letto come 1 dal software).
  • La colonna "Segnale invertito dall'hardware": se ad esempio il segnale Busy va a livello logico 1 il bit 7 (il bit più significativo dello Status Port) verrà letto come 0 dal software.
  • Il bus dati (Data0, ..., Data7), in origine disponibile solo in modo uscita, è diventato bidirezionale per ampliare la gamma di periferiche collegabile (Standard IEEE 1284).
  • Pin 1 è lo Strobe, attivo basso, nel caso di una stampante, segnala che sul bus dati è presente un dato corretto.
  • Pin 10, Ack, è un ingresso attivo basso; indica al PC che il dato presente sul bus è stato letto e che la stampante è pronta per ricevere altri dati; consente l'abilitazione della richiesta d'interrupt alla CPU (IRQ7 per LPT1 e LPT2; IRQ5 per LPT3).
  • Pin 11, Busy, ingresso, attivo alto; indica che la stampante è occupata e non può ricevere altri dati, il segnale va alto durante le operazioni di trasferimento e ritorna basso appena la stampante è nuovamente disponibile per ricevere altri dati.
  • Pin 12, Paper-Out, ingresso, attivo alto; indica al PC che la stampante è senza carta.
  • Pin 13, Select, ingresso, attivo alto; indica al PC che la stampante è collegata e pronta a funzionare.
  • Pin 14, Auto/Linefeed, uscita, attivo bassa; indica alla stampante la modalità di avanzamento carta; quando è attivo l'avanzamento è generato da 0x0d (carriage return), quando è alto l'avanzamento sarà operato dalla stampante solo in seguito alla ricezione del carattere 0x0a (line feed o newline).
  • Pin 15, Error/Fault, ingresso, attivo basso, comunica al PC che qualcosa non va nella stampante.
  • Pin 16, Initialize, uscita, attivo basso, serve a interrompere un'eventuale stampa in corso svuotando il buffer della stampante e a riportarla allo stato in cui si trovava dopo l'accensione.
  • Pin 17, Select-Printer, uscita, attivo basso, abilita la stampante a ricevere i dati.

 

 

 
Ma per le applicazioni che faremo noi non ci servirà sapere tutto questo, infatti ci interessano solo i bit di data ovvero dal pin 2 al 9 (e logicamente anche quelli di massa 18-25), ma prima di iniziare a fare il circuito bisogna dire che se usiamo come sistema operativo windows xp non riusciremo a comandare la porta parallela, a meno che non la "sblocchiamo" e per sbloccarla bisogna installare un programma che ci creerà dei file .DLL (scaricabile gratutitamente dal sito www.andreatv1991.altervista.org nella sezione programmi, e si chiama "configura lpt1"); ma non è finita qui, infatti, per poter usare questi file attraverso VB bisogna creare un modulo, e chiamarlo "DLPortIO".bas in cui scriverete quanto segue:
 
 
 Public Declare Function DlPortReadPortUchar Lib "dlportio.dll" (ByVal Port As Long) As Byte
Public Declare Function DlPortReadPortUshort Lib "dlportio.dll" (ByVal Port As Long) As Integer
Public Declare Function DlPortReadPortUlong Lib "dlportio.dll" (ByVal Port As Long) As Long

Public Declare Sub DlPortReadPortBufferUchar Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)
Public Declare Sub DlPortReadPortBufferUshort Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)
Public Declare Sub DlPortReadPortBufferUlong Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)

Public Declare Sub DlPortWritePortUchar Lib "dlportio.dll" (ByVal Port As Long, ByVal Value As  Byte)
Public Declare Sub DlPortWritePortUshort Lib "dlportio.dll" (ByVal Port As Long, ByVal Value As Integer)
Public Declare Sub DlPortWritePortUlong Lib "dlportio.dll" (ByVal Port As Long, ByVal Value As Long)

Public Declare Sub DlPortWritePortBufferUchar Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)
Public Declare Sub DlPortWritePortBufferUshort Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)
Public Declare Sub DlPortWritePortBufferUlong Lib "dlportio.dll" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)


 

con questo modulo, potremo andare a scrivere e a leggere BYTE nella parallela. 

 

 

 Adesso siamo pronti per provare a fare un piccolo programma che accenda otto led (guardare schema sotto). Per iniziare carichiamo il modulo "DLPortIO.bas" (a noi servirà solo la settima riga, volendo tutto il resto possiamo eliminarlo) perchè con questa riga possiamo mandare un numero compreso tra 0 e 255 alla porta parallela, poi apriamo il form e creiamo 2 pulsanti uno lo chiameremo "TUTTI_OFF" (e serverà a spegnere tutti i led) e l'altro "TUTTI_ON" (che servirà ad accenderli tutti) poi scriveremo nel code:

 

 

 

 Private Sub TUTTI_OFF_Click()
DlPortWritePortUchar 888, 0
End Sub

Private Sub TUTTI_ON_Click()
DlPortWritePortUchar 888, 255
End Sub

 
 
Adesso proviamo a mandarlo in esecuzione e possiamo notare che tutti gli 8 led collegati alla parallela (guardare schema sotto) si accenderanno.

 
 

Come possiamo vedere il programma va a chiamare la settima riga del modulo "DLportIO"(che serve a mandare in uscita un BYTE che scriveremo in decimale dopo la virgola)poi che c’è un 888, questo numero significa che vogliamo comandare la porta parallela, se noi non lo scriviamo il PC non capirà cosa vogliamo comandare e ci darà errore; guardando il codice, oltre al numero 888 ci sono, nella sub TUTTI_OFF uno 0 e nella sub TUTTI_ON un 255, per capire a cosa servono, basti pensare agli 8 pin come un byte, ovvero così
 

   

 
quindi significa che quando premo il tasto TUTTI_OFF il pc converte il numero decimale 0 in binario, quindi  
 

 

 

 se guardo adesso i led collegati alla parallela li vedo tutti spenti.
 

 

 Quando invece premerò il pulsante TUTTI_ON il pc converte il 255 in binario, quindi

 

 

 se guardo adesso i led collegati alla parallela li vedo tutti accesi.

 
 
Se invece andassimo a cambiare quel 255 in un 3 cosa succederà??? semplice, il pc lo convertirà in binario, quindi

  

 guardando i led collegati alla parallela vedo solo i primi due accesi.
 
 
 e se invece andassimo a cambiare lo 0 con un 127??? il pc lo convertirà in binario, quindi
 

 guardando i led si accenderanno tutti i led tranne l'ultimo

 

 

  

SCHEMA PER PILOTARE 8 LED 
 Volevo chiarire che le resistenze sono tutte da 330 ohm, ma vanno anche benissimo da 220 ohm 390 ohm, cambierà solo la luminosità del led.
 

 

 Per comandare 8 relè al posto dei led basta sostituire al posto dei led + resistenza lo schema qui sotto...

 da notare: +vcc deve essere data da un alimetazione esterna,(naturalmente se è 5 volt anche il relè deve essere da 5 volt), e deve essere assolutamente messo il diodo di ricircolo, altrimenti il transistor si rompe.

 

 

  

Spero di essere stato abbastanza chiaro, ma adesso tocca a voi, con un po' di imaginazione potete creare tutto quello che volete!!!
 

 

 

La tabella qua sotto riassume la pedinatura e le funzioni dei vari segnali sul connettore lpt (per quanto riguarda la centronics cambia solo la pedinatura)





  il parere della community
esprimi il tuo voto approvi questa pagina? promo


  non sei autenticato, per questo non puoi visualizzare i commenti sulla pagina. Se sei registrato accedi oppure registrati.


difficoltà
costo
informazioni
Questa pagina è stata creata da andreatv1991
il 28/02/2009 ore 16:19
ultima modifica del 15/03/2009 ore 20:15
la pagina è stata visitata 43487 volte




Lo staff di www.grix.it non si assume responsabilità sul contenuto di questa pagina.
Se tu sei l'autore originale degli schemi o progetti proposti in questo articolo, e ritieni che siano stati violati i tuoi diritti, contatta lo staff di www.grix.it per segnalarlo.

   
 

 
 
indietro | homepage | torna su copyright © 2004/2020 GRIX.IT - La community dell'elettronica Amatoriale