- Προετοιμασία για προγραμματισμό:
- Δημιουργία νέου έργου χρησιμοποιώντας το MPLAB-X:
- Γνωριμία με τα μητρώα διαμόρφωσης:
- Ρύθμιση των bit διαμόρφωσης σε MPLAB-X:
- Προγραμματισμός PIC για να αναβοσβήνει ένα LED:
- Διάγραμμα κυκλώματος και προσομοίωση πρωτεϊνών:
Αυτό είναι το δεύτερο σεμινάριο της σειράς μαθημάτων PIC. Στο προηγούμενο σεμινάριό μας Ξεκινώντας με τον PIC Microcontroller: Εισαγωγή στα PIC και MPLABX, μάθαμε τα βασικά πράγματα για τον PIC microcontroller, εγκαταστήσαμε επίσης το απαιτούμενο λογισμικό και αγοράσαμε έναν νέο προγραμματιστή PicKit 3, τον οποίο θα χρησιμοποιήσουμε σύντομα. Τώρα είμαστε έτοιμοι να ξεκινήσουμε με το Πρώτο πρόγραμμα LED που αναβοσβήνει χρησιμοποιώντας το PIC16F877A. Σε αυτό το σεμινάριο θα μάθουμε επίσης για τα μητρώα διαμόρφωσης.
Αυτό το σεμινάριο αναμένει ότι έχετε εγκαταστήσει το απαιτούμενο λογισμικό στον υπολογιστή σας και γνωρίζετε κάποια αξιοπρεπή βασικά στοιχεία για το PIC MCU. Εάν όχι, επιστρέψτε στο προηγούμενο σεμινάριο και ξεκινήστε από εκεί.
Προετοιμασία για προγραμματισμό:
Εφόσον αποφασίσαμε να χρησιμοποιήσουμε το PIC16F877A, με τον μεταγλωττιστή XC8 ας ξεκινήσουμε με το δελτίο δεδομένων τους. Συνιστώ σε όλους να κατεβάσουν το φύλλο δεδομένων PIC16F877A και το εγχειρίδιο XC8 Compiler, καθώς θα αναφερόμαστε συχνά σε αυτά καθώς προχωράμε στο μάθημα. Είναι πάντα καλή πρακτική να διαβάζετε το πλήρες φύλλο δεδομένων οποιουδήποτε MCU προτού ξεκινήσουμε τον προγραμματισμό με αυτό.
Τώρα, προτού ανοίξουμε το MPLAB-X και ξεκινήσουμε τον προγραμματισμό, υπάρχουν λίγα βασικά πράγματα που πρέπει να γνωρίζετε. Τέλος πάντων, δεδομένου ότι αυτό είναι το πρώτο μας πρόγραμμα, δεν θέλω να σας παρενοχλήσω άτομα με πολλές θεωρίες, αλλά θα σταματήσουμε εδώ και εκεί καθώς προγραμματίζουμε και θα σας εξηγήσω τα πράγματα ως τέτοια. Εάν δεν έχετε αρκετό χρόνο για να διαβάσετε όλα αυτά, απλώς ρίξτε μια ματιά και μεταβείτε στο βίντεο στο κάτω μέρος της σελίδας.
Δημιουργία νέου έργου χρησιμοποιώντας το MPLAB-X:
Βήμα 1: Εκκινήστε το MPLAB-X IDE που εγκαταστήσαμε στην προηγούμενη τάξη, μόλις φορτωθεί θα πρέπει να μοιάζει με αυτό.
Βήμα 2: Κάντε κλικ στο Files -> New Project ή χρησιμοποιήστε το πλήκτρο πρόσβασης Ctrl + Shift + N. Θα λάβετε το ακόλουθο POP-UP, από το οποίο πρέπει να επιλέξετε αυτόνομο έργο και κάντε κλικ στο κουμπί Επόμενο.
Βήμα 3: Τώρα πρέπει να επιλέξουμε τη συσκευή μας για το έργο. Πληκτρολογήστε λοιπόν ως PIC16F877A πάνω από την αναπτυσσόμενη ενότητα Επιλογή συσκευής . Μόλις το κάνετε θα πρέπει να είναι έτσι και στη συνέχεια κάντε κλικ στο Επόμενο
Βήμα 4: Η επόμενη σελίδα θα μας επιτρέψει να επιλέξουμε το εργαλείο για το έργο μας. Αυτό θα ήταν το PicKit 3 για το έργο μας. Επιλέξτε PicKit 3 και κάντε κλικ στο επόμενο
Βήμα 5: Η επόμενη σελίδα θα σας ζητήσει να επιλέξετε το μεταγλωττιστή, να επιλέξετε το XC8 Compiler και να κάνετε κλικ στο επόμενο.
Βήμα 6: Σε αυτήν τη σελίδα πρέπει να ονομάσουμε το έργο μας και να επιλέξουμε τη θέση όπου πρέπει να αποθηκευτεί το έργο. Έχω ονομάσει αυτό το έργο ως Blink και το έχω αποθηκεύσει στην επιφάνεια εργασίας μου. Μπορείτε να το ονομάσετε και να το αποθηκεύσετε με τον προτιμώμενο τρόπο σας. Το έργο μας θα αποθηκευτεί ως φάκελος με την επέκταση .X, ο οποίος μπορεί να ξεκινήσει απευθείας από το MAPLB-X. Κάντε κλικ στο Τέλος μόλις τελειώσετε.
Βήμα 7: Αυτό είναι !!! Το έργο μας δημιουργήθηκε. Το πιο αριστερό παράθυρο θα εμφανίσει το όνομα του έργου (Here Blink), κάντε κλικ σε αυτό, ώστε να μπορούμε να δούμε όλους τους καταλόγους μέσα σε αυτό.
Προκειμένου να ξεκινήσουμε τον προγραμματισμό, πρέπει να προσθέσουμε ένα C Main αρχείο, μέσα στον κατάλογο αρχείων Source Για να το κάνετε αυτό απλά κάντε δεξί κλικ στο αρχείο προέλευσης και επιλέξτε Νέο -> Κύριο αρχείο, όπως φαίνεται στην παρακάτω εικόνα.
Βήμα 8: Θα εμφανιστεί το ακόλουθο παράθυρο διαλόγου στο οποίο πρέπει να αναφέρεται το όνομα του αρχείου C. Έχω ονομάσει ξανά στο Blink, αλλά η επιλογή σας αφήνει. Ονομάστε το στη στήλη Όνομα αρχείου και κάντε κλικ στο φινίρισμα.
Βήμα 9: Μόλις δημιουργηθεί το κύριο αρχείο C, το IDE θα το ανοίξει για εμάς με ορισμένους προεπιλεγμένους κωδικούς, όπως φαίνεται παρακάτω.
Βήμα 10: Αυτό είναι τώρα που μπορούμε να ξεκινήσουμε τον προγραμματισμό του κώδικα μας στο C-main File. Ο προεπιλεγμένος κωδικός δεν θα χρησιμοποιηθεί στα μαθήματά μας. Ας τα διαγράψουμε εντελώς.
Γνωριμία με τα μητρώα διαμόρφωσης:
Πριν ξεκινήσουμε να προγραμματίζουμε οποιονδήποτε Μικροελεγκτή πρέπει να γνωρίζουμε σχετικά με τους καταχωρητές διαμόρφωσης.
Ποια είναι λοιπόν αυτά τα μητρώα διαμόρφωσης, πώς και γιατί πρέπει να τα ρυθμίσουμε;
Οι συσκευές PIC έχουν διάφορες τοποθεσίες που περιέχουν τα bit ή ασφάλειες διαμόρφωσης. Αυτά τα bit καθορίζουν τη βασική λειτουργία της συσκευής, όπως τη λειτουργία ταλαντωτή, το χρονόμετρο παρακολούθησης, τη λειτουργία προγραμματισμού και την προστασία κώδικα. Αυτά τα bits πρέπει να ρυθμιστούν σωστά για να εκτελεστεί ο κώδικας, διαφορετικά έχουμε συσκευή που δεν λειτουργεί . Επομένως, είναι πολύ σημαντικό να γνωρίζουμε αυτά τα μητρώα διαμόρφωσης πριν ακόμη ξεκινήσουμε με το πρόγραμμα Blink.
Για να χρησιμοποιήσουμε αυτούς τους καταχωρητές διαμόρφωσης πρέπει να διαβάσουμε το φύλλο δεδομένων και να κατανοήσουμε ποιοι είναι οι διαφορετικοί τύποι bit διαμόρφωσης και οι λειτουργίες τους. Αυτά τα bits μπορούν να ρυθμιστούν ή να επαναρυθμιστούν με βάση τις απαιτήσεις προγραμματισμού μας χρησιμοποιώντας ένα pragma διαμόρφωσης.
Το πραγματικό έχει τις ακόλουθες μορφές.
#pragma config setting = state-value #pragma config register = τιμή
όπου η ρύθμιση είναι μια περιγραφή παραμέτρων ρύθμισης παραμέτρων, π.χ. WDT και η κατάσταση είναι μια περιγραφή κειμένου της επιθυμητής κατάστασης, π.χ., OFF. Εξετάστε τα ακόλουθα παραδείγματα.
#pragma config WDT = ON // ενεργοποιήστε το χρονόμετρο παρακολούθησης #pragma config WDTPS = 0x1A // καθορίστε την τιμή κλίμακας του χρονοδιακόπτη
ΧΑΛΑΡΩΣΤΕ!!….. RELAX !!…. RELAX !!…...
Ξέρω ότι έχει πάει πάρα πολύ στο μυαλό μας και η ρύθμιση αυτών των bit διαμόρφωσης μπορεί να φαίνεται λίγο δύσκολη για έναν αρχάριο !! Όμως, προφανώς δεν συμβαίνει με το MPLAB-X μας.
Ρύθμιση των bit διαμόρφωσης σε MPLAB-X:
Η Microchip έχει κάνει αυτή τη διαδικασία κουραστικής πολύ πιο εύκολη χρησιμοποιώντας γραφικές αναπαραστάσεις των διαφόρων τύπων bit διαμόρφωσης. Τώρα λοιπόν για να τα ρυθμίσουμε απλά πρέπει να ακολουθήσουμε τα παρακάτω βήματα.
Βήμα 1: Κάντε κλικ στο Παράθυρο -> Προβολή μνήμης PIC -> Bits διαμόρφωσης. Οπως φαίνεται παρακάτω.
Βήμα 2: Αυτό θα πρέπει να ανοίξει το παράθυρο Configuration Bits στο κάτω μέρος του IDE μας, όπως φαίνεται παρακάτω. Αυτό είναι το μέρος όπου μπορούμε να ορίσουμε κάθε ένα από τα bit διαμόρφωσης σύμφωνα με τις ανάγκες μας. Θα εξηγήσω κάθε κομμάτι και τον σκοπό του καθώς προχωράμε στα βήματα.
Βήμα 3: Το πρώτο Bit είναι το bit επιλογής ταλαντωτή.
Το PIC16F87XA μπορεί να λειτουργήσει σε τέσσερις διαφορετικές λειτουργίες ταλαντωτών. Αυτές οι τέσσερις λειτουργίες μπορούν να επιλεγούν προγραμματίζοντας δύο bit διαμόρφωσης (FOSC1 και FOSC0):
- Κρύσταλλο χαμηλής ισχύος LP
- XT Crystal / αντηχείο
- HS υψηλής ταχύτητας κρύσταλλο / αντηχείο
- Αντίσταση / πυκνωτής RC
Για τα έργα μας χρησιμοποιούμε 20Mhz Osc, ως εκ τούτου πρέπει να επιλέξουμε το HS από το αναπτυσσόμενο πλαίσιο.
Βήμα 4: Το επόμενο bit θα είναι το χρονόμετρο παρακολούθησης Ενεργοποίηση Bit.
Ο χρονοδιακόπτης Watchdog είναι ένας ταλαντωτής RC ελεύθερης λειτουργίας, που δεν απαιτεί εξωτερικά εξαρτήματα. Αυτός ο ταλαντωτής RC είναι ξεχωριστός από τον ταλαντωτή RC του πείρου OSC1 / CLKI. Αυτό σημαίνει ότι το WDT θα εκτελεστεί ακόμα και αν έχει σταματήσει το ρολόι στις ακίδες OSC1 / CLKI και OSC2 / CLKO της συσκευής. Κατά τη διάρκεια της κανονικής λειτουργίας, ένα χρονικό όριο WDT δημιουργεί επαναφορά συσκευής (Watchdog Timer Reset). Το bit TO στον καταχωρητή κατάστασης θα διαγραφεί μετά από ένα χρονικό όριο χρονισμού. Εάν ο χρονοδιακόπτης δεν διαγραφεί στην κωδικοποίηση λογισμικού μας, τότε ολόκληρο το MCU θα επαναφερθεί σε κάθε υπερχείλιση χρονοδιακόπτη WDT. Το WDT μπορεί να απενεργοποιηθεί οριστικά διαγράφοντας το bit διαμόρφωσης.
Δεν χρησιμοποιούμε το WDT στο πρόγραμμά μας, οπότε ας το καθαρίσουμε, επιλέγοντας OFF από το αναπτυσσόμενο πλαίσιο.
Βήμα 5: Το επόμενο bit θα είναι το Power-up timer Bit.
Ο Χρονοδιακόπτης Ενεργοποίησης παρέχει ένα σταθερό ονομαστικό χρονικό όριο 72 ms κατά την ενεργοποίηση μόνο από το POR. Το Powerup Timer λειτουργεί σε έναν εσωτερικό ταλαντωτή RC. Το τσιπ διατηρείται στο Reset όσο το PWRT είναι ενεργό. Η χρονική καθυστέρηση του PWRT επιτρέπει στο VDD να ανέβει σε αποδεκτό επίπεδο. Παρέχεται ένα bit διαμόρφωσης για ενεργοποίηση ή απενεργοποίηση του PWRT
Δεν θα χρειαζόμαστε τέτοιες καθυστερήσεις στο πρόγραμμά μας, οπότε ας το απενεργοποιήσουμε επίσης.
Βήμα 6: Το επόμενο bit θα είναι ο προγραμματισμός χαμηλής τάσης.
Το bit LVP της λέξης διαμόρφωσης επιτρέπει τον προγραμματισμό ICSP χαμηλής τάσης. Αυτή η λειτουργία επιτρέπει στον μικροελεγκτή να προγραμματιστεί μέσω ICSP χρησιμοποιώντας μια πηγή VDD στο εύρος τάσης λειτουργίας. Αυτό σημαίνει μόνο ότι το VPP δεν πρέπει να μεταφερθεί στο VIHH αλλά μπορεί να παραμείνει στην κανονική τάση λειτουργίας. Σε αυτήν τη λειτουργία, ο πείρος RB3 / PGM είναι αφιερωμένος στη λειτουργία προγραμματισμού και παύει να είναι ένας πείρος γενικής χρήσης I / O Κατά τον προγραμματισμό, το VDD εφαρμόζεται στον πείρο MCLR. Για να μπείτε στη λειτουργία προγραμματισμού, πρέπει να εφαρμοστεί το VDD στο RB3 / PGM με την προϋπόθεση ότι έχει ρυθμιστεί το bit LVP.
Ας απενεργοποιήσουμε το LVP έτσι ώστε να μπορούμε να χρησιμοποιήσουμε το RB3 ως πείρο εισόδου / εξόδου. Για να το κάνετε αυτό, απλά ενεργοποιήστε αυτή OFF χρησιμοποιώντας το αναπτυσσόμενο παράθυρο.
Βήμα 7: Τα επόμενα bit θα είναι EEPROM και bits Προστασίας μνήμης προγράμματος. Εάν αυτό το bit είναι ενεργοποιημένο, μόλις προγραμματιστεί το MCU, κανείς δεν θα ανακτήσει το πρόγραμμά μας από το υλικό. Αλλά προς το παρόν ας αφήσουμε και τα τρία κλειστά.
Μόλις οι ρυθμίσεις γίνουν σύμφωνα με τις οδηγίες, το πλαίσιο διαλόγου θα πρέπει να μοιάζει με αυτό.
Βήμα 8: Τώρα κάντε κλικ στο Δημιουργία πηγαίου κώδικα για έξοδο, ο κώδικας μας θα δημιουργηθεί τώρα απλώς αντιγράψτε τον μαζί με το αρχείο κεφαλίδας και επικολλήστε το στο Blink.c C-File, όπως φαίνεται παρακάτω.
Αυτό είναι το έργο διαμόρφωσης που έχει γίνει. Μπορούμε να έχουμε αυτήν τη διαμόρφωση για όλα τα έργα μας. Αλλά αν σας ενδιαφέρει, μπορείτε να τα χάσετε αργότερα.
Προγραμματισμός PIC για να αναβοσβήνει ένα LED:
Σε αυτό το πρόγραμμα θα χρησιμοποιήσουμε τον μικροελεγκτή PIC για να αναβοσβήνει ένα LED που είναι συνδεδεμένο σε έναν πείρο I / O Ας ρίξουμε μια ματιά στις διάφορες καρφίτσες εισόδου / εξόδου που διατίθενται στο PIC16F877A μας.
Όπως φαίνεται παραπάνω, το PIC16F877 έχει 5 βασικές θύρες εισόδου / εξόδου. Συνήθως συμβολίζονται με PORT A (RA), PORT B (RB), PORT C (RC), PORT D (RD) και PORT E (RE). Αυτές οι θύρες χρησιμοποιούνται για διασύνδεση εισόδου / εξόδου. Σε αυτόν τον ελεγκτή, το "PORT A" έχει πλάτος μόνο 6 bit (RA-0 έως RA-5), "PORT B", "PORT C", "PORT D" έχουν πλάτος μόνο 8 bit (RB-0 έως RB-7, RC-0 έως RC-7, RD-0 έως RD-7), το "PORT E" έχει πλάτος μόνο 3 bit (RE-0 έως RE-2).
Όλες αυτές οι θύρες είναι αμφίδρομες. Η κατεύθυνση της θύρας ελέγχεται χρησιμοποιώντας τους καταχωρητές TRIS (X) (TRIS A χρησιμοποιείται για τον καθορισμό της κατεύθυνσης του PORT-A, το TRIS B χρησιμοποιείται για τον καθορισμό της κατεύθυνσης για το PORT-B, κ.λπ.). Η ρύθμιση ενός bit TRIS (X) '1' θα ορίσει το αντίστοιχο bit PORT (X) ως είσοδο. Η εκκαθάριση ενός bit TRIS (X) '0' θα ορίσει το αντίστοιχο bit PORT (X) ως έξοδο.
Για το έργο μας πρέπει να κάνουμε τον ακροδέκτη RB3 του PORT B ως έξοδο έτσι ώστε το LED μας να μπορεί να συνδεθεί σε αυτό. Εδώ είναι ο κωδικός για το LED που αναβοσβήνει με μικροελεγκτή PIC:
#περιλαμβάνω
Αρχικά, καθορίσαμε την εξωτερική συχνότητα Crystal χρησιμοποιώντας το #define _XTAL_FREQ 20000000. Στη συνέχεια, στη λειτουργία κενής () λειτουργίας, ενημερώσαμε το MCU ότι θα χρησιμοποιήσουμε το RB3 ως έξοδο (TRISB = 0X00;) . Στη συνέχεια, χρησιμοποιείται άπειρος βρόχος ενώ το LED που αναβοσβήνει συνεχίζει για πάντα. Για να αναβοσβήνει μια λυχνία LED πρέπει απλώς να την ενεργοποιήσετε και να απενεργοποιήσετε με αξιοσημείωτη καθυστέρηση.
Μόλις ολοκληρωθεί η κωδικοποίηση, δημιουργήστε το έργο χρησιμοποιώντας την εντολή Run -> Build Main Project. Αυτό θα πρέπει να μεταγλωττίσει το πρόγραμμά σας. Εάν όλα είναι καλά (Όπως θα έπρεπε), μια κονσόλα εξόδου στο κάτω μέρος της οθόνης θα εμφανίσει ένα μήνυμα ΔΟΜΗΣΗΣ ΕΠΙΤΥΧΙΑΣ, όπως φαίνεται στην παρακάτω εικόνα.
Διάγραμμα κυκλώματος και προσομοίωση πρωτεϊνών:
Μόλις φτιάξουμε ένα Έργο και αν το Build είναι επιτυχές, ένα αρχείο HEX θα είχε δημιουργηθεί στο παρασκήνιο του IDE μας. Αυτό το αρχείο HEX βρίσκεται στον παρακάτω κατάλογο
Μπορεί να διαφέρει για εσάς εάν έχετε αποθηκεύσει σε κάποια άλλη τοποθεσία.
Τώρα, ας ανοίξουμε γρήγορα το Proteus που έχουμε εγκαταστήσει νωρίτερα και να δημιουργήσουμε σχήματα για αυτό το έργο. Δεν πρόκειται να εξηγήσουμε πώς να το κάνουμε αυτό, εκτός του πεδίου αυτού του έργου. Αλλά να μην ανησυχείτε, εξηγείται στο παρακάτω βίντεο. Μόλις ακολουθήσετε τις οδηγίες και δημιουργήσετε τα σχήματα, θα πρέπει να μοιάζει με αυτό
Για να προσομοιώσετε την έξοδο, κάντε κλικ στο κουμπί αναπαραγωγής στην κάτω αριστερή γωνία της οθόνης μετά τη φόρτωση του αρχείου Hex. Θα πρέπει να αναβοσβήνει το LED που είναι συνδεδεμένο στο RB3 του MCU. Εάν έχετε κάποιο πρόβλημα σε αυτό, παρακαλώ παρακολουθήστε το βίντεο, εάν εξακολουθεί να μην έχει επιλυθεί, χρησιμοποιήστε την ενότητα σχολίων για βοήθεια.
Τώρα έχουμε κάνει το πρώτο μας έργο με μικροελεγκτή PIC και επαληθεύσαμε την έξοδο χρησιμοποιώντας λογισμικό προσομοίωσης. Πηγαίνετε και τρυπήστε με το πρόγραμμα και παρατηρήστε τα αποτελέσματα. Μέχρι να συναντηθούμε στο επόμενο έργο μας.
Ω περιμένετε !!
Στο επόμενο έργο μας θα μάθουμε πώς να το κάνουμε αυτό σε ένα πραγματικό υλικό. Για αυτό θα χρειαζόμαστε τα ακόλουθα εργαλεία να τα κρατήσουν έτοιμα. Μέχρι τότε ΚΑΛΗ ΜΑΘΗΣΗ !!
- PicKit 3
- PIC16F877A IC
- Υποδοχή IC 40 ακίδων
- Διοικητικό Συμβούλιο Perf
- 20Mhz Crystal OSC
- Γυναικείες και αρσενικές καρφίτσες Bergstick
- Πυκνωτής 33pf - 2Nos
- Αντίσταση 680 ohm
- LED οποιουδήποτε χρώματος
- Σετ συγκόλλησης.