- Απαιτούμενα υλικά:
- Μνήμη Flash:
- ICSP (In Circuit Serial Programming):
- Κύκλωμα και υλικό:
- Εγγραφή του κώδικα χρησιμοποιώντας MPLAB IPE:
Στα προηγούμενα δύο σεμινάρια που συζητήσαμε για το πώς να ξεκινήσετε με το PIC χρησιμοποιώντας το μεταγλωττιστή MPLABX και XC8, έχουμε κάνει επίσης το πρώτο μας πρόγραμμα αναβοσβήνει LED με PIC και το επαληθεύσαμε με προσομοίωση. Τώρα ήρθε η ώρα να πάρουμε τα χέρια μας στο υλικό. Σε αυτό το σεμινάριο θα χτίσουμε ένα μικρό κύκλωμα σε έναν πίνακα Perf για να αναβοσβήνει το LED χρησιμοποιώντας PIC. Θα σβήσουμε το πρόγραμμα στον μικροελεγκτή PIC και θα επαληθεύσουμε το LED που αναβοσβήνει. Για να προγραμματίσουμε το PIC MCU θα χρησιμοποιήσουμε το MPLAB IPE.
Απαιτούμενα υλικά:
Όπως συζητήθηκε στο προηγούμενο σεμινάριό μας, θα χρειαστούμε το ακόλουθο υλικό:
- PicKit 3
- PIC16F877A IC
- 40 - Καρφίτσα IC
- Διοικητικό Συμβούλιο Perf
- 20 MHz Crystal OSC
- Γυναικείες και αρσενικές καρφίτσες Bergstick
- Πυκνωτής 33pf - 2Nos, 100uf και 10uf cap.
- Αντίσταση 680 ohm, 10K και 560ohm
- LED οποιουδήποτε χρώματος
- 1Κολλητήρι
- IC 7805
- Προσαρμογέας 12V
Τι συμβαίνει όταν «καίμε» έναν μικροελεγκτή !!
Είναι μια συνήθης πρακτική να ανεβάζετε τον κωδικό σε ένα MCU και να το λειτουργείτε μέσα στο MCU.
Για να το καταλάβετε, ας ρίξουμε μια ματιά στο πρόγραμμά μας
Όπως μπορούμε να δούμε, αυτός ο κώδικας είναι γραμμένος σε C-Language και δεν θα έχει νόημα για το MCU μας. Εδώ μπαίνει το μέρος του μεταγλωττιστή μας. Ένας μεταγλωττιστής είναι αυτός που μετατρέπει αυτόν τον κώδικα σε μορφή αναγνώσιμη από μηχανή. Αυτή η αναγνώσιμη από μηχανή φόρμα ονομάζεται κωδικός HEX, κάθε έργο που δημιουργούμε θα έχει έναν κωδικό HEX ο οποίος θα βρίσκεται στον ακόλουθο κατάλογο
** Η τοποθεσία σας ** \ Blink \ Blink.X \ dist \ default \ production \ Blink.X.production.hex
Εάν σας ενδιαφέρει να μάθετε πώς μοιάζει αυτός ο κωδικός HEX, απλώς ανοίξτε τον χρησιμοποιώντας το σημειωματάριο. Για το πρόγραμμα Blink, ο κωδικός HEX θα έχει την εξής μορφή:
: 060000000A128A11FC2F18: 100FAA008316031386018312031386018312031324: 100FBA0086150D30F200AF30F100C130F000F00BB1: 100FCA00E42FF10BE42FF20BE42F0000831203133A: 100FDA0086110D30F200AF30F100C130F000F00B95: 100FEA00F42FF10BF42FF20BF42F0000DB2F830107: 060FFA000A128A11D52F36: 02400E007A3FF7: 00000001FF
Υπάρχουν τρόποι για να διαβάσετε αυτό και πώς να το κατανοήσετε και να το αντιστρέψετε σε γλώσσα Συνέλευσης, αλλά είναι εντελώς εκτός πεδίου αυτού του σεμιναρίου. Έτσι, για να το θέσω απλά με λίγα λόγια. Το HEX είναι το τελικό αποτέλεσμα λογισμικού της κωδικοποίησης μας και αυτό θα αποσταλεί από το MPLAB IPE για την εγγραφή του MCU.
Μνήμη Flash:
Ο κωδικός HEX αποθηκεύεται στο MCU σε ένα μέρος που ονομάζεται μνήμη Flash. Η μνήμη flash είναι ο τόπος όπου το πρόγραμμά μας θα αποθηκευτεί μέσα στο MCU και θα εκτελεστεί από εκεί. Μόλις καταρτίσουμε το πρόγραμμα στο MPLABX μας, θα έχουμε τις ακόλουθες πληροφορίες σχετικά με τον τύπο της μνήμης στην κονσόλα εξόδου
Δεδομένου ότι μόλις συντάξαμε ένα μικρό πρόγραμμα LED που αναβοσβήνει, η περίληψη μνήμης δείχνει ότι μόλις καταναλώσαμε το 0,5% του διαθέσιμου χώρου προγράμματος και το 1,4% του χώρου δεδομένων.
Η μνήμη του μικροελεγκτή PIC16F877 χωρίζεται βασικά σε 3 τύπους:
Μνήμη προγράμματος: Αυτή η μνήμη περιέχει το πρόγραμμα (το οποίο είχαμε γράψει), αφού το κάψαμε. Ως υπενθύμιση, ο Μετρητής Προγράμματος εκτελεί εντολές που είναι αποθηκευμένες στη μνήμη του προγράμματος, η μία μετά την άλλη. Εφόσον έχουμε γράψει ένα πολύ μικρό πρόγραμμα, έχουμε καταναλώσει μόνο το 0,5% του συνολικού χώρου. Αυτή είναι μια μη πτητική μνήμη, σημαίνει ότι τα αποθηκευμένα δεδομένα δεν θα χαθούν μετά την απενεργοποίηση.
Μνήμη δεδομένων: Πρόκειται για έναν τύπο μνήμης RAM, ο οποίος περιέχει ειδικούς καταχωρητές όπως SFR (Special Function Register) που περιλαμβάνει χρονόμετρο Watchdog, Brown out Reset κ.λπ. και GPR (General Purpose Register) που περιλαμβάνει TRIS και PORT κλπ. Οι μεταβλητές που αποθηκεύονται στη μνήμη δεδομένων κατά τη διάρκεια του προγράμματος διαγράφονται αφού απενεργοποιήσουμε το MCU. Κάθε μεταβλητή που δηλώνεται στο πρόγραμμα θα βρίσκεται στη μνήμη δεδομένων. Αυτή είναι επίσης μια πτητική μνήμη.
Δεδομένα EEPROM (Ηλεκτρικά διαγράψιμη προγραμματιζόμενη μνήμη μόνο για ανάγνωση): Μνήμη που επιτρέπει την αποθήκευση των μεταβλητών ως αποτέλεσμα της εγγραφής του γραπτού προγράμματος. Για παράδειγμα, εάν εκχωρήσουμε μια μεταβλητή "a" για να αποθηκεύσουμε μια τιμή 5 σε αυτήν και να την αποθηκεύσουμε στο EEPROM, αυτά τα δεδομένα δεν θα χαθούν ακόμη και αν το Power είναι απενεργοποιημένο. Αυτή είναι μια μη πτητική μνήμη.
Το Memory Program και το EEPROM είναι μη πτητικές μνήμες και ονομάζονται Flash Memory ή EEPROM.
ICSP (In Circuit Serial Programming):
Θα προγραμματίσουμε το PIC16F877A χρησιμοποιώντας την επιλογή ICSP που είναι διαθέσιμη στο MCU μας.
Τώρα, τι είναι το ICSP;
Το ICSP είναι ένας απλός τρόπος που μας βοηθά να προγραμματίσουμε ένα MCU ακόμα και αφού τοποθετηθεί μέσα στην πλακέτα Έργου. Δεν χρειάζεται να υπάρχει ξεχωριστή πλακέτα προγραμματιστή για τον προγραμματισμό του MCU, το μόνο που χρειαζόμαστε είναι 6 συνδέσεις από τον προγραμματιστή PicKit3 στον πίνακα μας ως εξής:
1 |
VPP (ή MCLRn) |
Για να μπείτε στη λειτουργία προγραμματισμού. |
2 |
Vcc |
Power Pin 11 ή 32 |
3 |
GND |
PIN γείωσης 12 ή 31 |
4 |
PGD - Δεδομένα |
RB7. PIN40 |
5 |
PGC - Ρολόι |
RB6. PIN 39 |
6 |
PGM - LVP ενεργοποίηση |
RB3 / RB4. Δεν είναι υποχρεωτικό |
Το ICSP είναι κατάλληλο για όλα τα πακέτα PIC. το μόνο που χρειαζόμαστε είναι να βγάλουμε αυτές τις πέντε ακίδες (το PGM 6ης ακίδας είναι προαιρετικό) από το MCU στο Pickit3, όπως φαίνεται στην παρακάτω εικόνα.
Κύκλωμα και υλικό:
Τώρα, έχουμε τον κωδικό HEX μας έτοιμο και γνωρίζουμε επίσης πώς να συνδέσουμε το PicKit 3 με το PIC MCU χρησιμοποιώντας το ICSP. Ας προχωρήσουμε λοιπόν και κολλήστε το κύκλωμα με τη βοήθεια των παρακάτω σχημάτων:
Στο παραπάνω κύκλωμα έχω χρησιμοποιήσει ένα 7805 για να ρυθμίσω την έξοδο 5V στο PIC MCU μου. Αυτός ο ρυθμιστής θα τροφοδοτείται από έναν προσαρμογέα τοίχου 12V. Το RED Led χρησιμοποιείται για να δείξει εάν το PIC τροφοδοτείται. Ο σύνδεσμος J1 χρησιμοποιείται για προγραμματισμό ICSP. Οι ακίδες συνδέονται όπως συζητείται στον παραπάνω πίνακα.
Το πρώτο pin MCLR πρέπει να διατηρείται ψηλά με τη βοήθεια 10k από προεπιλογή. Αυτό θα αποτρέψει την επαναφορά του MCU. Για να επαναφέρετε το MCU, ο πείρος MCLR πρέπει να κρατηθεί στη γείωση που μπορεί να γίνει με τη βοήθεια του διακόπτη SW1.
Το LED συνδέεται στον πείρο RB3 μέσω μιας αντίστασης αξίας 560 ohms (Βλέπε αριθμομηχανή αντίστασης LED). Εάν όλα είναι σωστά μετά τη μεταφόρτωση του προγράμματος, αυτό το LED θα αναβοσβήνει με βάση το πρόγραμμα. Ολόκληρο το κύκλωμα είναι ενσωματωμένο στο Perfboard κολλώντας όλα τα εξαρτήματα πάνω του, όπως μπορείτε να δείτε στην εικόνα στο πάνω μέρος.
Εγγραφή του κώδικα χρησιμοποιώντας MPLAB IPE:
Για να εγγράψετε τον κώδικα, ακολουθήστε τα παρακάτω βήματα:
- Εκκινήστε το MPLAB IPE.
- Συνδέστε το ένα άκρο του PicKit 3 με τον υπολογιστή σας και το άλλο άκρο με τις καρφίτσες ICSP στην πλακέτα perf.
- Συνδεθείτε στη συσκευή PIC κάνοντας κλικ στο κουμπί σύνδεσης.
- Αναζητήστε το αρχείο Blink HEX και κάντε κλικ στο Πρόγραμμα.
Εάν, όλα πάνε όπως έχει προγραμματιστεί θα πρέπει να εμφανιστεί το μήνυμα επιτυχίας στην οθόνη. Ελέγξτε τον παρακάτω κώδικα και βίντεο για πλήρη επίδειξη και χρησιμοποιήστε την ενότητα σχολίων εάν έχετε οποιαδήποτε αμφιβολία.
Ευχαριστώ!!!
Ας συναντηθούμε στο επόμενο σεμινάριο όπου θα παίξουμε με περισσότερα LED και έναν διακόπτη.