English  Español  Português  Français  Italiano  Deutsch  Nederlands  Svenska  Dansk  Suomi  Norsk  Русский  Polski  Română  Български  Hrvatski  Česky  中国  中國  日本語  한국어  Ελληνική  हिन्दी  العربية 
PS2 ποντίκι του υπολογιστή και BASIC Stamp
Colin Fahey

1. Εισαγωγή

Αυτό το άρθρο περιγράφει τον τρόπο με τον οποίο PS/2 ποντίκι μπορεί να αποτελέσει παράδειγμα προς μίμηση από BASIC Stamp υπολογιστή. 

Αυτή η εξερεύνηση είναι άτυπη. 
ps2_mouse_interior.jpg
Το εσωτερικό ενός παλαιού τύπου (που διακινούνται μπάλα) το ποντίκι του υπολογιστή: το "Microsoft Intellimouse"  (I αντικαθίσταται η οπτικών αισθητήρων με μακρά σύρματα.)
Ένα ποντίκι έχει δύο άξονες: "X" και "Y".  Όταν το ποντίκι μετακινείται "σε οριζόντια θέση," η "X" τροχός περιστρέφεται στο εσωτερικό του ποντικιού.  Όταν το ποντίκι μετακινείται "κατακόρυφα" (μετά από μία επιφάνεια), το "Y" τροχός περιστρέφεται στο εσωτερικό του ποντικιού.  Για αυθαίρετη κίνηση του ποντικιού, οι "X" και "Y" τροχούς κινηθούν σύμφωνα με τις "οριζόντιες" και "κάθετες" συνιστώσες της κίνησης του ποντικιού. 
ps2_mouse_interruptor_wheels.jpg
Optical interruptor τροχών στο εσωτερικό του ποντικιού
Ανακοίνωση για τις τρύπες στο εσωτερικό των τροχών το ποντίκι.  Όταν ο τροχός περιστρέφεται, το υπέρυθρο φως που εκπέμπεται (IR) από IR Φως διόδων φωτοεκπομπής (LED) διακόπτεται επανειλημμένα, σε ποσοστό ανάλογο με το ρυθμό περιστροφής του τροχού.  Έτσι, το ποντίκι γνωρίζει πόσοι "προσαυξήσεις" (που αποκαλείται επίσης και "κρότωνες)" το ποντίκι άξονας έχει μετακινηθεί σε μια συγκεκριμένη χρονική περίοδο. 

Τον καθορισμό της κατεύθυνσης της κυκλοφορίας συνεπάγεται η χρήση των 2 αισθητήρες φωτός, που βρίσκεται πολύ κοντά, μαζί έναν άξονα παράλληλο προς την κίνηση του τιμονιού.  (Και οι δύο αισθητήρες σε ένα ενιαίο 3-pin συστατικό φαίνεται παρακάτω.) 
mouse_sensor01.jpg
Mouse IR light sensor (έχει δύο IR ανιχνευτές σε ένα ενιαίο πακέτο)
Το κέντρο το pin του πακέτου είναι η θετική τάση συλλέκτη? 
Η αριστερή και δεξιά καρφίτσες είναι η αριστερή και δεξιά έξοδο του αισθητήρα εκπομπής. 

Ας το όνομα των δύο αισθητήρων στην "A" και "B" πακέτο.  Ας υποθέσουμε ότι ο τροχός είναι αρχικά σε μια τέτοια γωνία περιστροφής IR ότι το φως είναι αποκλεισμένη από την επίτευξη δύο αισθητήρες. 

Καθώς ο τροχός περιστρέφεται, το IR φως από την πηγή εκπομπής τελικά θα είναι σε θέση να περνούν από μια τρύπα στον τροχό και να εκπληρώσουμε έναν από τους δύο αισθητήρες, όπως αισθητήρες "A".  Εάν το τιμόνι συνεχίζει περιστρέφονται προς την ίδια κατεύθυνση, τελικά το δεύτερο αισθητήρα, "B", θα είναι σε θέση να λάβει IR φως.  Εάν το τιμόνι συνεχίζει περιστρέφονται προς την ίδια κατεύθυνση, τελικά το φως IR θα μπλοκαριστεί από την επίτευξη του αισθητήρα "A".  Εάν το τιμόνι συνεχίζει περιστρέφονται προς την ίδια κατεύθυνση, τελικά το φως IR θα μπλοκαριστεί από την επίτευξη του αισθητήρα "B". 

Έτσι, η σειρά είναι: 
(A,B):   ..., (0,0), (1,0), (1,1), (0,1), ...
Εάν ο τροχός περιστρέφεται προς την αντίθετη κατεύθυνση, το 4-όρος ακολουθία φαίνεται από τα παραπάνω, θα αντιστραφεί, αρχής γενομένης από το σημερινό καθεστώς.
Με αυτά τα δύο σήματα αισθητήρων θα μπορεί να καθορίσει ποσοστό της εκ περιτροπής, και η κατεύθυνση.
ps2_mouse_circuit_board.jpg
Το κύκλωμα του σκάφους του Microsoft Intellimouse
Για να κατανοήσει περισσότερα για το πώς το ποντίκι κυκλώματος ερμηνεύει το φως των αισθητήρων και επικοινωνεί με το προσωπικό υπολογιστή (PC) (μέσω PS/2 σημάτων), θα μελετηθεί το κύκλωμα του σκάφους. 

Το μικροτσίπ έχει το ακόλουθο όνομα τυπωμένο επάνω σ 'αυτό: SPCP05A. 

Μια αναζήτηση στο Διαδίκτυο για τη λέξη "SPCP05A" δείχνει ότι το τσιπ κατασκευάζεται από μια εταιρεία που ονομάζεται "Sunplus Technology Co.".  Πληροφορίες για το "SPCP05A" μικροτσίπ μπορεί να αποκτηθεί από την εν λόγω εταιρεία. 

Εδώ υπάρχουν οι τεχνικές προδιαγραφές του "SPCP05A" μικροτσίπ: 
sunplus_ps2_3dmouse_datasheet.pdf
(Τεχνικές προδιαγραφές του "SPCP05A" μικροτσίπ)
1125022 bytes
MD5: 359a9210275e021cc19a5e2391499dc5
Η ακόλουθη εικόνα δείχνει τα σήματα των pins του "SPCP05A (PS/2 3D mouse)" μικροτσίπ.
spcp05a_chip_signals_bmp01.jpg
Σήματα των pins του "SPCP05A (PS/2 3D mouse)" μικροτσίπ
Η "SPCP05A" είναι πράγματι ένα μικροσκοπικό υπολογιστή!  Έχει μια εντολή που έχει, και RAM, και ROM, εσωτερική και χρονομετρητές, κλπ.  Στην πραγματικότητα, η περιγραφή των "SPCP05A" μικροτσίπ στις πληροφορίες που παρέχονται από Sunplus Co.  ελάχιστα αναφέρεται στη συγκεκριμένη χρήση του μικροτσίπ για το "ποντίκι του υπολογιστή" κυκλώματα.  Αυτό το chip είναι ένα πολυδύναμο μικροελεγκτή. 

Έχω σπουδάσει τα ίχνη κυκλώματος για το κύκλωμα του σκάφους του Microsoft Intellimouse να σχηματίσει την ακόλουθη σχηματική προσέγγιση:
ps2_mouse_my_schematic.jpg
Πιθανή σχηματικό του Microsoft Intellimouse  (Είμαι λείπουν μερικά πυκνωτές, αλλά αυτό το σχήμα είναι σχεδόν τέλεια.)
Bui Van Chu, στην Αυστραλία, διαβάστε το άρθρο μου και να μου στείλει ένα πιο πλήρες σχήμα, το οποίο εμφανίζεται στην παρακάτω εικόνα.
ms_ps2_mouse_schematic.jpg
Το ποντίκι PS/2 σχηματικό, που μου έστειλε από Bui Van Chu από την Αυστραλία
Το κύκλωμα είναι πολύ απλό. 

Το ποντίκι κουμπιά (αριστερά, μέση, δεξιά) να κατευθυνθεί απευθείας σε εισροές για το μικροτσίπ. 

Τα τρία ζευγάρια αισθητήρων φωτός, (("X", "Y", "Z"), (οριζόντια μετακίνηση, κάθετη διακίνηση, και μεσαίο ποντίκι τροχό)) αποστείλει μηνύματα απευθείας σε άλλες εισηγήσεις πάνω στο τσιπ. 

Η PS/2 σήματα DATA και CLK (ρολόι) αντιστοιχούν επίσης να I/O σήματα σχετικά με το τσιπ. 

Κατάλαβα το σχηματικό μόλις τελειώσει I επεξεργασία (ακολουθώντας τα ίχνη σχετικά με το κύκλωμα του σκάφους). 

Ένα πράγμα εγώ δεν καταλαβαίνω αρχικά ήταν ο τρόπος με τον οποίο η IR LEDs είχαν συνδεθεί με το μικροτσίπ (το pin 16: "PB1"), αντί των αρνητικών τους τερματικούς σταθμούς (κάθοδος) απλά να συνδεθεί απευθείας στο έδαφος.  Αυτό είναι σημαντικό!

2. Η πρώτη μου προσπάθεια ελέγχου κίνηση του ποντικιού

Οι ακόλουθες παρατηρήσεις αναφέρονται σε μια ενιαία κίνηση κατά μήκος του άξονα (όπως η "X", ή οριζόντιες, άξονα). 

Το πρώτο πράγμα που προσπάθησε ήταν ένα αντικείμενο που διακινούνται μεταξύ των IR LED και το ζεύγος αισθητήρων - για να προσομοιώσουν την επίδραση των τροχών που περιστρέφονται στο εσωτερικό του ποντικιού.  Αυτό λειτούργησε.  Θα μπορούσα να προκαλέσει ο δείκτης του ποντικιού να κινηθούν γύρω από την οθόνη απλά ένα εμπόδιο που διακινούνται μέσω του IR φωτεινή δέσμη επανειλημμένα, στην ίδια κατεύθυνση. 

Ακολούθως, θα αφαιρείται το 3-pin μέρος του αισθητήρα από το ποντίκι του κυκλώματος του σκάφους, καθώς και τα σύρματα που επισυνάπτεται στην κύκλωμα του σκάφους σε αντικατάσταση του αισθητήρα.  I χέρι ένα καλώδιο που συνδέεται με την θετική τάση για την προσομοίωση του αισθητήρα δραστηριότητα.  Ι συνδέονται τα δύο μηνύματα στην εξουσία, σύμφωνα με το ακόλουθο σχήμα (π.χ.  ότι "0" αντιπροσωπεύει "off," και αντιπροσωπεύει "για" "1"):
(0,0), (1,0), (1,1), (0,1), ...
Αυτό λειτούργησε.  Θα μπορούσα να μετακινήσετε το δείκτη του ποντικιού στην οθόνη από αυτήν την επίπονη και αποσυνδέοντας τη σύνδεση των συρμάτων στο μοντέλο φαίνεται από τα παραπάνω.  Αντιστροφή του τρόπου διεξαγωγής από την τρέχουσα κατάσταση στην ακολουθία θα μετακινήσετε το δρομέα προς την αντίθετη κατεύθυνση. 

Επειδή τα πράγματα πήγαιναν τόσο καλά, αποφάσισα να συνδέσετε τα καλώδια να ηλεκτρονόμοι (που ελέγχεται από RS-232).  Αυτό ουσιαστικά θα μου επιτρέψετε να κάνουμε ακριβώς ό, τι έκανα και με χαλαρά τα σύρματα: συνδέσετε το σήμα του αισθητήρα με την εξουσία τερματικό στην κατάλληλη ακολουθία.  Η μόνη διαφορά είναι το γεγονός ότι το ανθρώπινο (μου) δεν θα πρέπει να κάνουμε την σύνδεση και αποσύνδεση κουραστική. 

...  Όμως δεν είχε δουλειά! 

Μετά από αρκετή προσαρμογή των αντιστάσεων και πυκνωτών, κτλ, έκανα μια περίεργη ανακάλυψη: Αν ήμουν συγκινητικό ορισμένα τερματικά στο κύκλωμα, που λειτουργεί τέλεια!  Η λύση σε αυτό το μυστήριο φαίνεται στο επόμενο κεφάλαιο. 

3. Το υπέρυθρο φως (IR) πρέπει να διαφοροποιούνται

Μετά από κάποια πειράματα απογοητευτικό είχα ένα νέο σκέψης: Η IR φως μπορεί να pulsing σε υψηλή συχνότητα, και το chip μπορεί να αναμένουν να λάβουν αυτή τη συχνότητα.  Constant φως (ή προσομοιωμένα σταθερή μου αισθητήρα εξόδου) θα μπορούσε να απορριφθεί.  Ήμουν κάπως σαστισμένος από το γεγονός ότι το ατμοσφαιρικό φως ενός λαμπτήρα αλογόνου δάπεδο ήταν αποδεκτό, αλλά ήξερα ότι ακόμα και λαμπτήρες πυρακτώσεως έχουν ανιχνεύσιμη διαφοροποίηση. 

Προσπάθησα pulsing μια IR LED στις υψηλές συχνότητες και το κλείδωμα των αισθητήρων, σύμφωνα με τον αναμενόμενο ρυθμό.  Δούλεψε! 

Αυτό ήταν!  Η IR LEDs το ποντίκι στο κύκλωμα του σκάφους, πρέπει να αναβοσβήνει με μεγάλη ταχύτητα, και το μικροτσίπ πρέπει να αναμένουμε και σε αυτό το φλασάρισμα Εκτός από το σχετικά χαμηλό ποσοστό του φωτός από την εκ περιτροπής διακοπή τροχού (με τρύπες). 

Με pulsing το IR LEDs, και αναμένει αυτό το pulsing σε μία απεμπλοκή του αισθητήρα σήμα εξόδου, το τσιπ μπορεί να απορρίψει οποιοδήποτε ατμοσφαιρικό IR σήματα από σύγκρουση με το ποντίκι λειτουργία.  Για παράδειγμα, το φως από τα άλλα αδέσποτα (σταθερό) IR πηγές δεν θα interefere με το ποντίκι. 

I συνδεδεμένο ένα ακουστικό ενισχυτή στην έξοδο του αισθητήρα, και τότε ας το λάβουν αισθητήρα στον ατμοσφαιρικό ρίχνει φως μου λαμπτήρα αλογόνου όροφο.  Άκουσα μια ξεχωριστή ύφος (60 Hz).  Όταν σβήνει η λάμπα, το ύφος αυξήθηκε ελαφρά, και τελικά σταμάτησε όταν το φως ήταν off.  Έτσι, η εν λόγω αισθητήρα εύκολα παραλαμβάνει το 60 Hz διαφοροποίηση στο πυρακτωμένο Λάμπα δαπέδου του λαμπτήρα αλογόνου μου! 

Κοιτάζοντας, τώρα, μετά το σχηματικό του κυκλώματος PS/2 ποντίκι του σκάφους, τη σημασία της IR LEDs που συνδέεται με μια καρφίτσα με το μικροτσίπ (αντί για το συνεχές ρεύμα) είναι προφανής.  Ο μικροεπεξεργαστής ελέγχει τα λαμπερά της IR LEDs μέσω της I/O pin, και το μικροτσίπ μπορεί να συσχετίζονται με την πρόθεσή της να αναβοσβήνουν τα ID LEDs με τον αισθητήρα που λαμβάνει εισροές και, συνεπώς, να απορρίψει οποιαδήποτε αδέσποτα σήματα (λόγω μη IR φως αναβοσβήνει).  (Ωστόσο, η συσχέτιση αυτή δεν είναι απαραίτητη.  Απλά ανίχνευση ενός ελάχιστου αριθμού αναβοσβήνει μετράει θα μπορούσε να είναι ένα κατώτατο όριο για την αποδοχή του αισθητήρα εισόδου.) 

4. IR αισθητήρες με φίλτρα bandpass

Μπορείτε να βρείτε ειδικές IR αισθητήρες, συσκευασμένη σε τρανζίστορ-like μορφή με τρεις εκκινήσεις, που είναι "συντονισμένοι" σε ειδικά διαμορφωμένων IR φως συχνοτήτων (π.χ., 38 kHz). 
tuned_sensor01.jpg
Συντονισμένοι IR light sensor (μέγιστη ευαισθησία στο φως 38 kHz διαφοροποίηση)
Bandpass κύκλωμα περιέχεται στο εσωτερικό της συσκευής, μαζί με την IR photo-transistors. 

Έτσι, το IR LED μπορεί γενικά να παλμικά με συχνότητα 38 kHz έτσι ώστε ο αισθητήρας θα εμφανιστεί το φως και αφήστε το ηλεκτρικό σήμα μπορείτε να πάτε στην αισθητήρα εξόδους. 

Για να μεταδώσει πληροφορίες, το φως από την IR LED μπορεί να διακοπεί σε ένα σχετικά χαμηλό ποσοστό (π.χ.  1 έως 100 φορές ανά δευτερόλεπτο).  Αυτό το χαμηλής συχνότητας pulsing είναι σε συνδυασμό με την σταθερή υψηλή συχνότητα pulsing?  Δηλαδή, τα χαμηλής συχνότητας pulsing μπορεί να θεωρηθεί ως διαφοροποίηση της υψηλής συχνότητας pulsing.  Η υψηλή συχνότητα pulsing είναι σαν ένα "κύμα μεταφορέα" κατά την οποία οι πληροφορίες σήμα (τα σχετικά χαμηλής συχνότητας διαφοροποίηση) έχει πραγματοποιηθεί. 

Ωστόσο, πιστεύω ότι επαληθεύονται οι IR αισθητήρες στο Microsoft Intellimouse δεν έχουν τέτοια διαφοροποίηση φιλτραρίσματος.  Ωστόσο, το κύκλωμα που απαιτούν την IR φως να διαμορφώνονται σε ορισμένες τρόπο, πέραν της χαμηλής συχνότητας διακοπές του φωτός από τον τροχό, με οπές. 

Το ακόλουθο σχεδιάγραμμα δείχνει τη διαφορά του αισθητήρα για συνεχή σήματα IR LED φως αναβοσβήνει και IR LED φως για τις διάφορες φάσεις του τροχού του ποντικιού καμπή.
ps2_mouse_quadrature_sketch.jpg
Αισθητήρας σήματα εξόδου για τη συνεχή IR φως υπόθεση και τα λαμπερά IR φως υπόθεση.

5. Προσομοιώνουν εισόδου χρησιμοποιώντας ένα ποντίκι υπολογιστή BASIC Stamp

Η "BASIC Stamp 2" υπολογιστής διαθέτει επαρκή προγραμματισμό για την εφαρμογή του πρωτοκόλλου PS/2.  Ως εκ τούτου, η "BASIC Stamp 2" υπολογιστής μπορεί να συνδεθεί άμεσα με την PS/2 λιμάνι του προσωπικού υπολογιστή (PC) και μπορεί PS/2 εξομοίωση ενός ποντικιού ή πληκτρολογίου. 

5.1 Το πρωτόκολλο PS/2

Στα χρόνια 1998 μέσω 2003, η πλειοψηφία των προσωπικών υπολογιστών είχε PS/2 θύρες για το ποντίκι και το πληκτρολόγιο. 

Η PS/2 λιμάνι έχει 4 σήματα: (1) CLOCK?  (2) DATA?  (3) +5V?  (4) GROUND. 

Το λιμάνι PS/2 συσκευές επιτρέπει την αποστολή δεδομένων στον κεντρικό υπολογιστή, και υποδοχής μπορεί να στείλει δεδομένα στις συσκευές.  Όλα τα μέρη σε PS/2 λιμένα (συνήθως μόνο μια συσκευή και υποδοχής) πρέπει να μοιραστεί τα σήματα και πρέπει να ανιχνεύουν αν ένα άλλο κόμμα είναι σήμερα, χρησιμοποιώντας τα σήματα. 

Πώς μπορεί να μοιράζεται μηνύματα;  Ένα μήνυμα (όπως CLOCK ή DATA) αποτελεί συνήθως "επιπλέοντα" υψηλό, που σημαίνει ότι το μήνυμα είναι συνδεδεμένο με μια θετική τάση με μια αντίσταση με υψηλή αντίσταση (π.χ., 4 kilo-Ohms).  Έτσι, το μήνυμα είναι ερμηνευθεί ως λογική "υψηλό" από τις κασέτες μέρη.  Κάθε κόμμα μπορεί να φέρει την χαμηλή γραμμή (μέσω TTL λογική), όταν το κόμμα σκοπεύει να στείλει δεδομένα.  Όταν ένα κόμμα τελειώνει στέλνοντας ένα πακέτο, το αφήνει να πάει των σημάτων επ 'αόριστον, οπότε και πάλι υψηλό float. 

Για να στείλετε δεδομένα από μια συσκευή (π.χ.  το πληκτρολόγιο ή το ποντίκι) για την προσωπική (PC) υπολογιστή, εσείς πρέπει να στείλει δεδομένα σε πακέτα των 11-bit, το οποίο αποτελείται από τα ακόλουθα τμήματα: (1) ξεκινούν λίγο ("0")?  (2) 8 bits δεδομένων (LSB πρώτο)?  (3) parity bit "(παράξενο" parity)?  (4) stop bit "(1)."  Σημειώστε ότι η "ισοτιμία" είναι "παράξενο" όταν ο συνολικός αριθμός των "1" bits δεδομένων σε bits και parity bit συνδυάζονται είναι μονός αριθμός. 

Το ακόλουθο διάγραμμα παρουσιάζει τη διαβίβαση των δεδομένων ενός ενιαίου πακέτου: 
ps2_clock_data_dev2pc01_adj.jpg
PS/2 πρωτόκολλο: συσκευή για να φιλοξενήσει (PC) πακέτου
Η DATA γραμμή θα πρέπει να καθοριστεί με τη σωστή τιμή πριν κινήσει τη γραμμή CLOCK χαμηλό.  Η DATA αξία που θα πρέπει να παραμείνει μέχρι το CLOCK γραμμή επέστρεψε πίσω στο υψηλό.  Όταν η γραμμή αυτή επιβεβαιώνεται CLOCK να είναι υψηλά, το DATA αξία μπορεί να αλλάξει στο επόμενο bit αξία. 

Η τυπική ταχύτητα ρολογιού είναι σχετικά αργή, για 10 kHz να 17 kHz.  Αυτό είναι 100 μικροδευτερόλεπτα ορίζεται σε 70 μικροδευτερόλεπτα για κάθε περίοδο ρολογιού. 

Το σενάριο της υποδοχής (PC) αποστολής δεδομένων σε μια συσκευή είναι όμοια με τη συσκευή στέλνει δεδομένα στον κεντρικό υπολογιστή, αλλά σε όλες τις περιπτώσεις, το σύστημα ελέγχει το CLOCK μήνυμα κατά τη διάρκεια της μετάδοσης δεδομένων.  Επίσης, ένα bit δεδομένων που αποστέλλονται από τον ξενιστή (μετά από συσκευή ρύθμιση CLOCK χαμηλά) θα πρέπει να μάνταλα, όταν η συσκευή επιτρέπει την CLOCK μήνυμα κάνω μια μετάβαση σε υψηλά επίπεδα. 

Μια αναζήτηση στο Internet θα αποκαλύψει πολλές περιγραφές των PS/2 σήματα και λεπτομέρειες σχετικά με το πρωτόκολλο. 

5.2 PS/2 ποντίκι πακέτων δεδομένων

Κατά την εκκίνηση του υπολογιστή, το λειτουργικό σύστημα ξεκινά και τελικά να επικοινωνεί με το ποντίκι για να προσδιοριστεί το είδος ποντικιού.  Εξ 'ορισμού, το ποντίκι Μαη συμπεριφέρονται σαν μια γενική PS/2 ποντίκι.  Ωστόσο, αν το λειτουργικό σύστημα καθορίζει ότι το ποντίκι είναι στην πραγματικότητα ένας "3D PS/2" ποντίκι (π.χ., ένα ποντίκι με τροχό), μπορεί να πει το ποντίκι για να αλλάξετε προς το 3D PS/2 πρωτόκολλο του ποντικιού. 

Όταν μετακινείτε το ποντίκι ή το πλήκτρο απελευθέρωσης του ποντικιού ή κουμπιά, το ποντίκι κύκλωμα στέλνει δεδομένα στον κεντρικό υπολογιστή (PC), αναφέροντας τι κατάσταση έχουν επέλθει μεταβολές από την προηγούμενη κατάσταση ένδειξης. 

Η γενική PS/2 ποντικιού στέλνει τα ακόλουθα τρία πακέτα στον κεντρικό υπολογιστή: 
    ------------------------
    D7 D6 D5 D4 D3 D2 D1 D0  (The D0 bit (LSB) is sent first)
    ------------------------
(1) YV XV YS XS  1  0  R  L  (overflow, sign, buttons)
(2) X7 X6 X5 X4 X3 X2 X1 X0  (X movement; -128 to +127)
(3) Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0  (Y movement; -128 to +127)

L  = Left  Button State (1 = pressed down)
R  = Right Button State (1 = pressed down)
XS = Direction of X movement (1 = LEFT)
YS = Direction of Y movement (1 = UP)
XV = Overflow of X movement value (1 = X overflow occured)
YV = Overflow of Y movement value (1 = Y overflow occured)
X7,...,X0 : X movement; 8-bit 2's-complement signed byte (-128 to +127)
Y7,...,Y0 : Y movement; 8-bit 2's-complement signed byte (-128 to +127)

Here are examples of data sent to the host (PC):
------------------------------------------------
(The least-significant bit of each data byte is sent first.)
Move Left  1 unit    :  0x18, 0xFF, 0x00
Move Right 1 unit    :  0x08, 0x01, 0x00
Move Down  1 unit    :  0x28, 0x00, 0xFF
Move Up    1 unit    :  0x08, 0x00, 0x01
Press   Left  Button :  0x09, 0x00, 0x00
Release Left  Button :  0x08, 0x00, 0x00
Press   Right Button :  0x0C, 0x00, 0x00
Release Right Button :  0x08, 0x00, 0x00
Είναι πολύ συχνό να έχουν "3D PS/2" ποντίκι (π.χ., ένα ποντίκι με τροχό που λειτουργεί επίσης ως μεσαίο κουμπί).  Μια τέτοια ποντικιού στέλνει τεσσερις πακέτων δεδομένων για τον οικοδεσπότη (PC). 
    ------------------------
    D7 D6 D5 D4 D3 D2 D1 D0  (The D0 bit (LSB) is sent first)
    ------------------------
(1) YV XV YS XS  1  M  R  L  (overflow, sign, buttons)
(2) X7 X6 X5 X4 X3 X2 X1 X0  (X movement; -128 to +127)
(3) Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0  (Y movement; -128 to +127)
(4) Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0  (Z movement; -128 to +127)

This is very similar to the generic PS/2 mouse,
with a few additions:

M = Middle Button State (1 = pressed down)
Z7,...,Z0 : Mouse wheel movement; 8-bit 2's-complement signed byte
    (The Z value is forced to a range of -8 to +7)

5.3 Η πρώτη μου για την προσομοίωση του κυκλώματος PS/2 ποντίκι

Το ακόλουθο σχήμα ήταν η πρώτη μου εργασία τεχνική για να μου "BASIC Stamp 2" υπολογιστή να στείλει PS/2 ποντίκι δεδομένα για τον οικοδεσπότη (PC).
2002june03_basicstamp_to_ps2mouse_circuit.jpg
Σχηματική των κυκλωμάτων για να επιτραπεί η BASIC Stamp υπολογιστής να στείλει πακέτα PS/2 στον ξενιστή (PC).
Σημειώστε ότι αυτό το κύκλωμα ηλεκτρικά απομονώσεων BASIC Stamp υπολογιστή μου από το υποδοχής (PC) υπολογιστή.  Επίσης, σημειώστε ότι αυτό το κύκλωμα είναι μόνο για να ικανοποιήσουν τις ηλεκτρικές απαιτήσεις του PS/2 μετάδοσης δεδομένων (από συσκευή σε υποδοχής).  Έτσι, θα μπορούν να στέλνουν μηνύματα χρησιμοποιώντας το πληκτρολόγιο PS/2 αυτό το ίδιο κύκλωμα αν μου να συνδέσετε το πληκτρολόγιο PS/2 θύρα υποδοχής (PC)! 

Δεδομένου ότι δέχεται σήματα είναι γενικά μη επεμβατικές (π.χ., ακούγοντας δεν παρεμβαίνει σε ηλεκτρικά σήματα), το μόνο πράγμα που απαιτείται για να καταστεί δυνατή η "BASIC Stamp" υπολογιστή για να λαμβάνετε το PS/2 CLOCK και DATA σήματα είναι μια απευθείας σύνδεση από σημάτων αυτών σε άλλα BASIC Stamp I/O καρφίτσες (ρυθμιστεί να εισροές).  Εγώ έπαιρνα δοκιμάστε κάποιο είδος buffering - αλλά εγώ σίγουρα δεν μπορεί να χρησιμοποιήσει μια οπτικο-διακόπτη άμεσα, δεδομένου ότι θα τεθεί ένα φορτίο για την "πλωτή" σημάτων (και επομένως το "ναυάγιο" τους!).  Θα μπορούσα να χρησιμοποιήσει την εξουσία +5V σε μια ζώνη, τότε στη συνέχεια χρησιμοποιήστε το buffer εξόδου για την οδήγηση οπτικο-isolators ότι τελικά αποστείλει μηνύματα προς την BASIC Stamp I/O pins (ρυθμιστεί ως εισροές). 

Η ακόλουθη εικόνα δείχνει μου BASIC Stamp 2 υπολογιστή συνδεδεμένο σε ένα κύκλωμα που ταιριάζουν με το παραπάνω σχήμα. 
2002june03_basicstamp_mousecircuit01_adj.jpg
BASIC Stamp 2 υπολογιστή συνδεδεμένο σε ένα ποντίκι PS/2 λιμένα μέσω οπτικο-διακόπτη κυκλώματος.
Οι παρακάτω BASIC Stamp 2 πρόγραμμα, γραμμένο σε γλώσσα προγραμματισμού PBASIC, ήταν η πρώτη μου επιτυχημένη προσπάθεια ελέγχου του PS/2 ποντίκι BASIC Stamp 2 μέσω του υπολογιστή. 

Το πρόγραμμα κάνει απλά το ποντίκι δρομέας περάσουμε μαζί μια μικρή διαγώνιο γραμμή. 
'====================================================================
'{$STAMP  BS2} 'STAMP directive (specifies a BS2)

    DIR0 = %1 'Set pin 0 to OUTPUT
    DIR1 = %1 'Set pin 1 to OUTPUT
    OUT0 = %0 'Set DATA line high (pin low)
    OUT1 = %0 'Set CLOCK line high (pin low)
    tempData    VAR  BYTE
    tempParity  VAR  BYTE

'--------------------------------------------------------------------

MainLoop:

    tempCounter  VAR  WORD

    FOR tempCounter = 0 TO 10
    tempData = $28
    GOSUB TransmitPacket
    tempData = $01
    GOSUB TransmitPacket
    tempData = $ff
    GOSUB TransmitPacket
    tempData = $00
    GOSUB TransmitPacket
    PAUSE 100
    NEXT

    FOR tempCounter = 0 TO 10
    tempData = $18
    GOSUB TransmitPacket
    tempData = $ff
    GOSUB TransmitPacket
    tempData = $01
    GOSUB TransmitPacket
    tempData = $00
    GOSUB TransmitPacket
    PAUSE 100
    NEXT

    GOTO MainLoop

STOP

'--------------------------------------------------------------------

TransmitPacket:

    GOSUB ComputeParity       'First, compute parity

    tempData   = ~tempData    'Invert data bits
    tempParity = ~tempParity  'Invert parity bit

    '==== Start Bit ====
    OUT0 = %1 'Set data line low (output high)
    PULSOUT 1, 25   ' Pulse line 1 for (25*2) = 50 usec

    '==== Data Bits ====
    OUT0 = tempData.BIT0
    PULSOUT 1, 25
    OUT0 = tempData.BIT1
    PULSOUT 1, 25
    OUT0 = tempData.BIT2
    PULSOUT 1, 25
    OUT0 = tempData.BIT3
    PULSOUT 1, 25
    OUT0 = tempData.BIT4
    PULSOUT 1, 25
    OUT0 = tempData.BIT5
    PULSOUT 1, 25
    OUT0 = tempData.BIT6
    PULSOUT 1, 25
    OUT0 = tempData.BIT7
    PULSOUT 1, 25

    '==== Parity Bit ====
    OUT0 = tempParity.BIT0
    PULSOUT 1, 25

    '==== Stop Bit (high) ====
    OUT0 = %0  ' pin low is DATA high
    PULSOUT 1, 25

    PAUSE 1 ' Necessary? Provides 1 msec gap between packets...

RETURN

'--------------------------------------------------------------------

ComputeParity:

    tempParity = $01
    tempParity = tempParity + tempData.BIT0
    tempParity = tempParity + tempData.BIT1
    tempParity = tempParity + tempData.BIT2
    tempParity = tempParity + tempData.BIT3
    tempParity = tempParity + tempData.BIT4
    tempParity = tempParity + tempData.BIT5
    tempParity = tempParity + tempData.BIT6
    tempParity = tempParity + tempData.BIT7
    tempParity = tempParity & $01

RETURN

'====================================================================
Αυτό το πρόγραμμα δουλεύει τέλεια.  I αφήστε το να τρέξει για ώρες, και αυτό flawlessly γίνει ο δείκτης του ποντικιού μετακινηθεί μεταξύ δύο ακριβείς τοποθεσίες στην οθόνη.  Είναι αυτό που έψαχνε για: ακριβή έλεγχο του ποντικιού ώστε να μπορέσω να αλληλεπιδρούν με το λογισμικό. 

Μετά από αναζήτηση στο Internet, ανακάλυψα ότι κάποιος άλλος χρησιμοποίησε έναν υπολογιστή για να BASIC Stamp interface PS/2 (προσομοίωση ένα πληκτρολόγιο).  Αυτό το πρόσωπο που χρησιμοποίησε την PBASIC διδασκαλίας SHIFTOUT να χειριστεί την CLOCK και DATA σήματα, τα οποία είναι πραγματικά μεγάλη.  Αυτό θα καταστήσει μου "TransmitPacket" subroutine πολύ μικρότερο, ίσως και 5 γραμμές κώδικα συνολικά! 

Είδα επίσης ότι οι άλλοι άνθρωποι που χρησιμοποιείται TTL buffers, με εισροές που συνδέονται άμεσα από PS/2 σήματα (CLOCK και DATA), και εκροές που συνδέονται άμεσα με τις καρφίτσες σε μικροϋπολογιστικά chip.  Στο ίδιο κύκλωμα, από τις γραμμές παραγωγής μικροϋπολογιστικά πήγε κατευθείαν στη βάση καρφίτσες για τρανζίστορ που είχε τους συλλέκτες που συνδέονται άμεσα με την PS/2 σημάτων.  Όλη αυτή η άμεση σύζευξη διαφορετικών κυκλωμάτων μοιάζει κακή ιδέα, για μένα, είναι έτοιμο ένα κύκλωμα τηγανίζουμε το άλλο.  Δεν ξέρω τι θα κάνουμε αν εγώ έπαιρνα το τηγανητό PS/2 θύρα μου PC.  Αγοράστε μια νέα μητρική πλακέτα, υποθέτω!  Μια δικαιολογία για αναβάθμιση.  Δεν νομίζετε ότι μια μητρική πλακέτα PS/2 λιμάνι τήξη είναι πιθανό, αλλά το έκανα αμέσως τερματισμού λειτουργίας υπολογιστή μου όταν κάνω λάθος μικρής circuited το +5V και GROUND σήματα θα PS/2 το ποντίκι.  Ίσως είναι ένα χαρακτηριστικό!  Θα μπορούσα να προσθέσω ένα νέο κουμπί στο ποντίκι ότι μόνο βραχυπρόθεσμες κυκλώματα της εξουσίας ποντίκι για στιγμιαία παύση της λειτουργίας του PC.  ;-) 

Ακολουθεί η σύνδεση με τις πληροφορίες σχετικά με τη χρήση των SHIFTOUT για την PS/2 πρωτόκολλο:
http://ourworld.compuserve.com/homepages/steve_lawther/keybinfo.htm
Δείτε για τον παρακάτω σύνδεσμο:
KEYBTST.ZIP   gives a very basic program for the parallax
-----------
BASIC stamp II, to send key-codes to the PC's keyboard port.
It also gives a write-up of the XT and AT keyboard interfaces
(although IMO some details could be wrong / different to the
keyboards I've looked at).
Τοπικά αποθηκευμένο αντίγραφο του αρχείου:
keybtst.zip

10655 bytes
MD5: c5667557f96db53fb878bd11bfbe4f74
Οι παρακάτω σύνδεσμο παρέχει περισσότερες πληροφορίες σχετικά PS/2 ποντίκι που διασυνδέουν:
http://panda.cs.ndsu.nodak.edu/ ~ achapwes/PICmicro/PS2/ps2.htm
colinfahey.com
επικοινωνία
English  Español  Português  Français  Italiano  Deutsch  Nederlands  Svenska  Dansk  Suomi  Norsk  Русский  Polski  Română  Български  Hrvatski  Česky  中国  中國  日本語  한국어  Ελληνική  हिन्दी  العربية