του Νίκου Αδαμόπουλου, εκπαιδευτικού ΠΕ19
Υπεύθυνου ΚΕ.ΠΛΗ.ΝΕ.Τ. ΔΔΕ Ηλείας
Η παράλληλη θύρα των PC χρησιμοποιείται πάνω από 30 χρόνια, κυρίως για τη σύνδεση εκτυπωτών και σαρωτών, ωστόσο τελεί υπό κατάργηση αφού τη θέση της παίρνει η περισσότερο ευέλικτη θύρα USB. Παρόλα αυτά, αποτελεί μία εύκολη λύση για την έξοδο/είσοδο πολλών ψηφιακών σημάτων παράλληλα.
Η παράλληλη θύρα, ή Centronics, ή IEEE 1284, είναι συνήθως τύπου D female 25 ακροδεκτών:
Οι 8 γραμμές εξόδου (ακροδέκτες 2 έως 9) παρέχουν τάση από 2,4 έως 5,5 Volt για το λογικό 1 και από -0,5 έως 0,4 Volt για το λογικό 0.
Παραδείγματα χρήσης της θύρας αποτελούν τα έργα «Βιονικό Χέρι» και «Τηλερομπότ» του 1ου Τ.Ε.Ε./ΕΠΑ.Λ. Πύργου. Και στα δύο έργα κάποιες ηλεκτρομηχανικές κατασκευές συνδέονται στην παράλληλη θύρα ενός PC ώστε να είναι δυνατός ο έλεγχός τους από κατάλληλο λογισμικό που αναπτύχθηκε σε Visual Basic 6. Για τον έλεγχο της παράλληλης θύρας χρησιμοποιήθηκε το αρχείο βιβλιοθήκης inpout32.dll, το οποίο μπορεί να αναζητήσει κανείς εύκολα από το διαδίκτυο, όπως και τη σχετική τεκμηρίωση για τη χρήση του.
Ακολουθεί η δήλωση της διαδικασίας Out για την έξοδο της τιμής Value (8 bit) στη διεύθυνση PortAddress της παράλληλης θύρας.
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
Παρακάτω φαίνεται ο τρόπος κλήσης της διαδικασίας Out. Η RefreshParallelSettings εφαρμόζει τις κατάλληλες αρχικοποιήσεις και πρέπει να κληθεί πριν από τη δημιουργία σημάτων εξόδου. Η διεύθυνση της παράλληλης θύρας για είσοδο/έξοδο δεδομένων θα είναι κάποια από τις 378, 278 και 3BC (στο δεκαεξαδικό σύστημα) ανάλογα με τον κατασκευαστή.
Dim data As Byte 'CurrentOutput Dim ParallelDataPort As Integer Dim ParallelControlPort As IntegerPrivate Sub RefreshParallelSettings() ParallelDataPort = &H378 ParallelControlPort = ParallelDataPort + 2 Out ParallelControlPort, 0 Out ParallelDataPort, 0 End Sub Private Sub SendToPort(d As Byte) Out ParallelDataPort, d data = d End Sub
Η SendToPort αλλάζει την τιμή και των 8 γραμμών εξόδου της θύρας σύμφωνα με την παράμετρο κλήσης της. Επειδή στις συγκεκριμένες εφαρμογές που προαναφέρθηκαν θα πρέπει να αλλάζουν συγκεκριμένες μόνο γραμμές εξόδου, για αυτό καταχωρείται στη μεταβλητή data η τρέχουσα κατάσταση των εξόδων, ενώ στη συνέχεια γίνεται χρήση τελεστών χειρισμού bit (bitwise operators) ώστε κάθε φορά να μεταβάλλεται ένα μόνο bit της μεταβλητής αυτής.
Οι τελεστές αυτοί χρησιμοποιούνται σπανιότατα, μοιάζουν αρκετά με τους λογικούς τελεστές, όμως εφαρμόζονται σε ακέραιους τελεστέους και λειτουργούν σε επίπεδο bit, θεωρώντας την δυαδική τιμή 1 ως true και την δυαδική τιμή 0 ως false.
Για παράδειγμα, 157 OR 23 = 159 ή στο δυαδικό σύστημα: 10011101 OR 00010111 = 10011111. Επίσης, 157 AND 23 = 21 ή στο δυαδικό σύστημα: 10011101 AND 00010111 = 00010101.
Έτσι, για τον έλεγχο των 8 εξόδων της παράλληλης θύρας εφαρμόζονται αυτοί οι τελεστές στη μεταβλητή data. Παράδειγμα εξόδου λογικού 1 στο D5:
πριν | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
OR | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
μετά | D7 | D6 | 1 | D4 | D3 | D2 | D1 | D0 |
Γενικότερα, αν data είναι η τρέχουσα κατάσταση των 8 ακροδεκτών εξόδου, για να προκύψει λογικό 1 στον ακροδέκτη εξόδου Dn (όπου 0≤n≤7) αρκεί να εκτελεστεί ο υπολογισμός: data OR 2n.
Παράδειγμα εξόδου λογικού 0 στο D5:
πριν | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
AND | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
μετά | D7 | D6 | 0 | D4 | D3 | D2 | D1 | D0 |
Γενικότερα, για να προκύψει λογικό 0 στον ακροδέκτη εξόδου Dn (όπου 0≤n≤7) αρκεί να εκτελεστεί ο υπολογισμός: data AND (255 - 2n).
Παρακάτω φαίνεται η διαδικασία ChangePin που αλλάζει τον N-ιοστό ακροδέκτη εξόδου στο λογικό επίπεδο Lev (όπου 0≤N≤7 και Lev = 0 ή 1).
Private Sub ChangePin(N As Integer, Lev As Integer) If Lev = 1 Then SendToPort data Or CByte(2 ^ N) Else SendToPort data And CByte(255 - 2 ^ N) End If End Sub
Να σημειωθεί ότι για τον έλεγχο της παράλληλης θύρας σε περιβάλλον Visual Basic .NET εφαρμόζονται άλλες μέθοδοι.