ΚΕΠΛΗΝΕΤ Ηλείας

Πανελλήνιο Σχολικό Δίκτυο

Το Στέκι των Πληροφορικών

SaferInternet.gr

SafeLine.gr

 

Εφαρμογή Χαρτογράφησης Μονάδων Εκπαίδευσης Ν. Ηλείας

Ενημερωτικό Δελτίο «ΤΠΕ στην Εκπαίδευση» - ΚΕ.ΠΛΗ.ΝΕ.Τ. Ηλείας

25ος Πανελλήνιος Διαγωνισμός Πληροφορικής

2ος Πανελλήνιος Διαγωνισμός Εκπαιδευτικής Ρομποτικής WRO (World Robot Olympiad)

Ημέρα Ασφαλούς Διαδικτύου 2013

Ανακύκλωση Ηλεκτρικών και Ηλεκτρονικών Συσκευών

 

Ιστοσελίδες μονάδων

Αναφορά προβλημάτων

Διαδικτυακά εργαλεία τεχνικού ελέγχου

Δημιουργία σημάτων εξόδου
στην παράλληλη θύρα του PC

του Νίκου Αδαμόπουλου, εκπαιδευτικού ΠΕ19
Υπεύθυνου ΚΕ.ΠΛΗ.ΝΕ.Τ. ΔΔΕ Ηλείας

Η παράλληλη θύρα των PC χρησιμοποιείται πάνω από 30 χρόνια, κυρίως για τη σύνδεση εκτυπωτών και σαρωτών, ωστόσο τελεί υπό κατάργηση αφού τη θέση της παίρνει η περισσότερο ευέλικτη θύρα USB. Παρόλα αυτά, αποτελεί μία εύκολη λύση για την έξοδο/είσοδο πολλών ψηφιακών σημάτων παράλληλα.

Χαρακτηριστικά της παράλληλης θύρας

Η παράλληλη θύρα, ή Centronics, ή IEEE 1284, είναι συνήθως τύπου D female 25 ακροδεκτών:

image

Οι 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

Οι τελεστές αυτοί χρησιμοποιούνται σπανιότατα, μοιάζουν αρκετά με τους λογικούς τελεστές, όμως εφαρμόζονται σε ακέραιους τελεστέους και λειτουργούν σε επίπεδο 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 εφαρμόζονται άλλες μέθοδοι.