- Απαιτούμενο υλικό
- Κατανόηση της ενότητας Joystick:
- Διάγραμμα κυκλώματος:
- Προγραμματισμός για διασύνδεση του Joystick:
- Προβολή προσομοίωσης:
- Υλικό και εργασία:
Οι συσκευές εισόδου διαδραματίζουν ζωτικό ρόλο σε οποιαδήποτε ηλεκτρονικά έργα. Αυτές οι συσκευές εισόδου βοηθούν τον χρήστη να αλληλεπιδράσει με τον ψηφιακό κόσμο. Μια συσκευή εισόδου μπορεί να είναι τόσο απλή όσο ένα κουμπί ή τόσο περίπλοκη όσο μια οθόνη αφής. ποικίλλει ανάλογα με την απαίτηση του έργου. Σε αυτό το σεμινάριο θα μάθουμε πώς να διασυνδέουμε ένα χειριστήριο με τον μικροελεγκτή PIC, ένα χειριστήριο είναι ένας δροσερός τρόπος για να αλληλεπιδράσεις με τον ψηφιακό κόσμο και σχεδόν όλοι θα είχαν χρησιμοποιήσει ένα για να παίξουν βιντεοπαιχνίδια στην εφηβεία τους.
Ένα χειριστήριο μπορεί να φαίνεται να είναι μια εξελιγμένη συσκευή, αλλά στην πραγματικότητα είναι απλώς ένας συνδυασμός δύο ποτενσιόμετρων και ενός μπουτόν. Ως εκ τούτου, είναι επίσης πολύ εύκολο να συνδεθείτε με οποιοδήποτε MCU, εφόσον γνωρίζουμε πώς να χρησιμοποιούμε τη δυνατότητα ADC αυτού του MCU. Έχουμε ήδη μάθει πώς να χρησιμοποιούμε το ADC με PIC, επομένως θα ήταν απλώς μια εργασία για τη διασύνδεση του Joystick Για άτομα που είναι νέοι στο pickit, συνιστάται να μάθουν το παραπάνω έργο ADC καθώς και το LED Blinking Sequence Project για να διευκολύνουν την κατανόηση του έργου.
Απαιτούμενο υλικό
- PicKit 3 για προγραμματισμό
- Ενότητα Joy Stick
- PIC16F877A IC
- 40 - Καρφίτσα IC
- Διοικητικό Συμβούλιο Perf
- 20 MHz Crystal OSC
- Καρφίτσες Bergstik
- Αντίσταση 220ohm
- 5-LED οποιουδήποτε χρώματος
- 1 σετ συγκόλλησης
- IC 7805
- Προσαρμογέας 12V
- Σύνδεση καλωδίων
- Ψωμί
Κατανόηση της ενότητας Joystick:
Τα χειριστήρια διατίθενται σε διάφορα σχήματα και μεγέθη. Μια τυπική μονάδα Joystick φαίνεται στο παρακάτω σχήμα. Το Joystick δεν είναι τίποτα περισσότερο από μερικά ποτενσιόμετρα και μπουτόν τοποθετημένα πάνω σε μια έξυπνη μηχανική διάταξη. Το ποτενσιόμετρο χρησιμοποιείται για να παρακολουθεί την κίνηση Χ και Υ του μοχλού χειριστηρίου και το κουμπί χρησιμοποιείται για την ανίχνευση εάν πατηθεί το χειριστήριο. Και τα δύο ποτενσιόμετρα παράγουν αναλογική τάση που εξαρτάται από τη θέση του μοχλού. Και μπορούμε να πάρουμε την κατεύθυνση της κίνησης ερμηνεύοντας αυτές τις αλλαγές τάσης χρησιμοποιώντας κάποιον μικροελεγκτή. Προηγουμένως διασυνδέσαμε το Joystick με το AVR, το Joystick με το Arduino και το Raspberry Pi.
Πριν από τη διασύνδεση οποιουδήποτε αισθητήρα ή μονάδας με μικροελεγκτή, είναι σημαντικό να γνωρίζετε πώς λειτουργεί. Εδώ το χειριστήριο διαθέτει 5 ακίδες εξόδου από τις οποίες δύο είναι για τροφοδοσία και τρεις για δεδομένα. Η μονάδα θα πρέπει να τροφοδοτείται με + 5V. Οι ακίδες δεδομένων ονομάζονται VRX, VRY και SW.
Ο όρος «VRX» σημαίνει μεταβλητή τάση στον άξονα X και ο όρος «VRY» σημαίνει μεταβλητή τάση στον άξονα Υ και «SW» σημαίνει διακόπτη.
Έτσι, όταν μετακινήσουμε το χειριστήριο προς τα αριστερά ή προς τα δεξιά, η τιμή τάσης στο VRX θα ποικίλει και όταν το αλλάζουμε προς τα πάνω ή προς τα κάτω, το VRY θα διαφέρει. Ομοίως, όταν το μετακινούμε διαγώνια, και οι δύο VRX και VRY θα διαφέρουν. Όταν πατάμε το διακόπτη, ο πείρος SW θα συνδεθεί στη γείωση. Το παρακάτω σχήμα θα σας βοηθήσει να κατανοήσετε πολύ καλύτερα τις τιμές εξόδου
Διάγραμμα κυκλώματος:
Τώρα που γνωρίζουμε πώς λειτουργεί το Joy Stick, μπορούμε να καταλήξουμε στο συμπέρασμα ότι θα χρειαστούμε δύο καρφίτσες ADC και έναν ψηφιακό ακροδέκτη εισόδου για να διαβάσουμε και τις τρεις καρφίτσες δεδομένων της μονάδας Joystick. Το πλήρες διάγραμμα κυκλώματος φαίνεται στην παρακάτω εικόνα
Όπως μπορείτε να δείτε στο διάγραμμα κυκλώματος, αντί για το χειριστήριο χρησιμοποιήσαμε δύο ποτενσιόμετρα RV1 και RV3 ως αναλογικές εισόδους τάσης και λογική είσοδο για το διακόπτη. Θα μπορούσατε να ακολουθήσετε τις ετικέτες γραμμένες σε ιώδες χρώμα για να ταιριάξετε τα ονόματα των καρφιτσών και να κάνετε τις συνδέσεις σας ανάλογα.
Σημειώστε ότι οι αναλογικοί ακροδέκτες είναι συνδεδεμένοι στα κανάλια A0 και A1 και ο ψηφιακός διακόπτης είναι συνδεδεμένος στο RB0. Θα έχουμε επίσης συνδεδεμένα 5 φώτα LED ως έξοδο, ώστε να μπορούμε να ανάβουμε με βάση την κατεύθυνση που κινείται το χειριστήριο. Έτσι, αυτές οι ακίδες εξόδου συνδέονται στο PORT C από το RC0 στο RC4. Αφού μαζέψουμε το διάγραμμα κυκλώματος, μπορούμε να προχωρήσουμε με τον προγραμματισμό, στη συνέχεια να προσομοιώσουμε το πρόγραμμα σε αυτό το κύκλωμα και στη συνέχεια να δημιουργήσουμε το κύκλωμα σε ένα breadboard και στη συνέχεια να φορτώσουμε το πρόγραμμα στο υλικό. Για να σας δώσω μια ιδέα το υλικό μου μετά την πραγματοποίηση των παραπάνω συνδέσεων φαίνεται παρακάτω
Προγραμματισμός για διασύνδεση του Joystick:
Το πρόγραμμα διασύνδεσης του χειριστηρίου με το PIC είναι απλό και απλό. Γνωρίζουμε ήδη σε ποιες καρφίτσες συνδέεται το Joystick και ποια είναι η λειτουργία τους, οπότε απλά πρέπει να διαβάσουμε την αναλογική τάση από τους πείρους και να ελέγξουμε τα LED εξόδου ανάλογα.
Το πλήρες πρόγραμμα για να γίνει αυτό δίνεται στο τέλος αυτού του εγγράφου, αλλά για να εξηγήσω πράγματα παραβιάζω τον κώδικα σε μικρά σημαντικά αποσπάσματα παρακάτω.
Όπως πάντα ξεκινά το πρόγραμμα ρυθμίζοντας τα bits διαμόρφωσης, δεν πρόκειται να συζητήσουμε πολλά για τον ορισμό των bits διαμόρφωσης επειδή το έχουμε ήδη μάθει στο έργο LED Blinking και είναι το ίδιο και για αυτό το έργο. Μόλις οριστούν τα bit διαμορφώσεων, πρέπει να καθορίσουμε τις λειτουργίες ADC για τη χρήση της μονάδας ADC στο PIC μας. Αυτές οι λειτουργίες μάθαιναν επίσης για τον τρόπο χρήσης του ADC με το PIC tutorial. Μετά από αυτό, πρέπει να δηλώσουμε ποιοι ακροδέκτες είναι είσοδοι και ποιοι ακροδέκτες εξόδου. Εδώ το LED είναι συνδεδεμένο στο PORTC έτσι ώστε να είναι ακίδες εξόδου και ο διακόπτης Switch του Joystick είναι ένας ψηφιακός ακροδέκτης εισόδου. Χρησιμοποιούμε λοιπόν τις ακόλουθες γραμμές για να δηλώσουμε το ίδιο:
// ***** Διαμόρφωση I / O **** // TRISC = 0X00; // Το PORT C χρησιμοποιείται ως θύρες εξόδου PORTC = 0X00; // MAke όλες οι ακίδες χαμηλές TRISB0 = 1; // RB0 χρησιμοποιείται ως είσοδος // *** Διαμόρφωση τερματισμού εισόδου / εξόδου ** ///
Οι ακίδες ADC δεν χρειάζεται να οριστούν ως ακροδέκτες εισόδου, επειδή όταν χρησιμοποιούν τη λειτουργία ADC θα εκχωρηθούν ως ακίδες εισόδου. Μόλις οριστούν οι ακίδες, μπορούμε να καλέσουμε τη συνάρτηση ADC_initialize που ορίσαμε νωρίτερα. Αυτή η λειτουργία θα ρυθμίσει τους απαιτούμενους καταχωρητές ADC και θα προετοιμάσει τη μονάδα ADC.
ADC_Initialize (); // Διαμορφώστε τη μονάδα ADC
Τώρα, έχουμε περπατήσει στο άπειρο μας , ενώ βρόχο. Μέσα σε αυτόν τον βρόχο πρέπει να παρακολουθούμε τις τιμές των VRX, VRY και SW και με βάση τις τιμές που πρέπει να ελέγξουμε την έξοδο του led. Μπορούμε να ξεκινήσουμε τη διαδικασία παρακολούθησης διαβάζοντας την αναλογική τάση των VRX και VRY χρησιμοποιώντας τις παρακάτω γραμμές
int joy_X = (ADC_Read (0)); // Διαβάστε το X-Axis του joystick int joy_Y = (ADC_Read (1)); // Διαβάστε τον Υ-άξονα του Joystick
Αυτή η γραμμή θα αποθηκεύσει την τιμή των VRX και VRY στη μεταβλητή joy_X και joy_Y αντίστοιχα. Η συνάρτηση ADC_Read (0) σημαίνει ότι διαβάζουμε την τιμή ADC από το κανάλι 0 που είναι ο πείρος A0. Έχουμε συνδέσει το VRX και το VRY στους ακροδέκτες A0 και A1 και έτσι διαβάζουμε από το 0 και το 1.
Εάν μπορείτε να θυμηθείτε από το σεμινάριο ADC, γνωρίζουμε ότι διαβάζουμε την Αναλογική τάση, όπου το PIC είναι μια ψηφιακή συσκευή που θα το διαβάσει από το 0 έως το 1023. Αυτή η τιμή εξαρτάται από τη θέση της μονάδας χειριστηρίου. Μπορείτε να χρησιμοποιήσετε το παραπάνω διάγραμμα ετικετών για να μάθετε τι αξία μπορείτε να περιμένετε για κάθε θέση του χειριστηρίου.
Εδώ έχω χρησιμοποιήσει την οριακή τιμή 200 ως κατώτερο όριο και μια τιμή 800 ως ανώτερο όριο. Μπορείτε να χρησιμοποιήσετε οτιδήποτε θέλετε. Ας χρησιμοποιήσουμε λοιπόν αυτές τις τιμές και αρχίστε να ανάβουν αντίστοιχα τα LED. Για να γίνει αυτό, πρέπει να συγκρίνουμε την τιμή του joy_X με τις προκαθορισμένες τιμές χρησιμοποιώντας ένα βρόχο IF και να κάνουμε τις ακίδες LED υψηλές ή χαμηλές όπως φαίνεται παρακάτω. Οι γραμμές σχολίων θα σας βοηθήσουν να κατανοήσετε καλύτερα
if (joy_X <200) // Η χαρά ανέβηκε {RC0 = 0; RC1 = 1;} // Λάμψη άνω LED αλλού εάν (joy_X> 800) // Η χαρά μετακινήθηκε προς τα κάτω {RC0 = 1; RC1 = 0;} // Λυχνία χαμηλότερη λυχνία αλλού // Εάν δεν μετακινηθεί {RC0 = 0; RC1 = 0;} // Απενεργοποιήστε και τα δύο led
Μπορούμε επίσης να κάνουμε το ίδιο και για την τιμή του άξονα Υ. Απλώς πρέπει να αντικαταστήσουμε τη μεταβλητή joy_X με joy_Y και επίσης να ελέγξουμε τις επόμενες δύο καρφίτσες LED όπως φαίνεται παρακάτω. Σημειώστε ότι όταν το χειριστήριο δεν κινείται, σβήνουμε και τα δύο φώτα LED.
if (joy_Y <200) // Η χαρά μετακινήθηκε αριστερά {RC2 = 0; RC3 = 1;} // Λάμψη αριστερά LED αλλού εάν (joy_Y> 800) // Η χαρά μετακινήθηκε δεξιά {RC2 = 1; RC3 = 0;} // Λάμψη δεξιά LED άλλο // Εάν δεν μετακινηθεί {RC2 = 0; RC3 = 0;} // Απενεργοποιήστε και τα δύο LED
Τώρα έχουμε ένα ακόμη τελευταίο πράγμα που πρέπει να κάνουμε, πρέπει να ελέγξουμε το διακόπτη εάν πατηθεί. Ο πινέζας του διακόπτη είναι συνδεδεμένος στο RB0, ώστε να μπορούμε να χρησιμοποιήσουμε και πάλι εάν βρόχο και να ελέγξουμε εάν είναι ενεργοποιημένος. Εάν πατηθεί, θα γυρίσουμε το LED για να δείξουμε ότι ο διακόπτης έχει πατηθεί.
if (RB0 == 1) // Εάν πατηθεί το Joy RC4 = 1; // Λάμψη μεσαίου LED αλλού RC4 = 0; // OFF μεσαίο LED
Προβολή προσομοίωσης:
Το πλήρες έργο μπορεί να προσομοιωθεί χρησιμοποιώντας το λογισμικό Proteus. Μόλις γράψετε το πρόγραμμα μεταγλωττίστε τον κωδικό και συνδέστε τον δεκαεξαδικό κώδικα της προσομοίωσης με το κύκλωμα. Τότε θα πρέπει να παρατηρήσετε ότι τα φώτα LED ανάβουν ανάλογα με τη θέση των ποτενσιόμετρων. Η προσομοίωση φαίνεται παρακάτω:
Υλικό και εργασία:
Αφού επαληθεύσουμε τον κωδικό χρησιμοποιώντας την Προσομοίωση, μπορούμε να χτίσουμε το κύκλωμα σε έναν πίνακα ψωμιού. Εάν παρακολουθήσατε τα μαθήματα PIC, θα έχετε παρατηρήσει ότι χρησιμοποιούμε τον ίδιο πίνακα ελέγχου που έχει το συγκολλημένο κύκλωμα PIC και 7805. Εάν ενδιαφέρεστε επίσης να φτιάξετε ένα έτσι ώστε να το χρησιμοποιήσετε με όλα τα έργα PIC σας, τότε κολλήστε το κύκλωμα σε έναν πίνακα επιδόσεων. Ή μπορείτε επίσης να δημιουργήσετε το πλήρες κύκλωμα και σε ένα breadboard. Μόλις ολοκληρωθεί το υλικό θα ήταν κάτι τέτοιο παρακάτω.
Τώρα ανεβάστε τον κωδικό στο μικροελεγκτή PIC χρησιμοποιώντας το PICkit3. Μπορείτε να ανατρέξετε στο έργο LED Blink για οδηγίες. Θα πρέπει να παρατηρήσετε ότι το κίτρινο φως ανεβαίνει αμέσως μόλις φορτωθεί το πρόγραμμα. Τώρα χρησιμοποιήστε το χειριστήριο και αλλάξτε το κουμπί, για κάθε κατεύθυνση του χειριστηρίου θα παρατηρήσετε ότι το αντίστοιχο LED ανεβαίνει ψηλά. Όταν πατηθεί ο διακόπτης στη μέση, θα σβήσει το LED στη μέση.
Αυτή η εργασία είναι απλώς ένα παράδειγμα, μπορείτε να δημιουργήσετε πολλά ενδιαφέροντα έργα πάνω από αυτό. Το πλήρες έργο του έργου μπορεί επίσης να βρεθεί στο βίντεο που δίνεται στο τέλος αυτής της σελίδας.
Ελπίζω ότι καταλάβατε το έργο και σας άρεσε να το φτιάξετε, αν έχετε κάποιο πρόβλημα να το κάνετε, μη διστάσετε να το δημοσιεύσετε στην παρακάτω ενότητα σχολίων ή να το γράψετε στα φόρουμ για βοήθεια.