- Απαιτούμενο υλικό:
- Διάγραμμα κυκλώματος:
- Επεξήγηση προγραμματισμού:
- Ρύθμιση υλικού για ακολουθία LED που αναβοσβήνει:
- Μεταφόρτωση και εργασία:
Αυτό είναι το δεύτερο σεμινάριο μιας ακολουθίας σεμιναρίου στο οποίο μαθαίνουμε το MSP430G2 LaunchPad από την Texas Instruments χρησιμοποιώντας το Energia IDE. Στο τελευταίο εκπαιδευτικό μάθημα Blinky LED, παρουσιάσαμε τον εαυτό μας στο LaunchPad Development Board και το Energia IDE, ανεβάσαμε επίσης το πρώτο μας πρόγραμμα που είναι να αναβοσβήνει το ενσωματωμένο LED σε κανονικό διάστημα.
Σε αυτό το σεμινάριο θα μάθουμε πώς να χρησιμοποιούμε την επιλογή Ψηφιακή ανάγνωση και ψηφιακή εγγραφή για να διαβάσουμε την κατάσταση μιας συσκευής εισόδου όπως ένας διακόπτης και να ελέγξουμε πολλαπλές εξόδους όπως οι LED Στο τέλος αυτού του σεμιναρίου θα έχετε μάθει να εργάζεστε με ψηφιακές εισόδους και εξόδους, οι οποίες μπορούν να χρησιμοποιηθούν για τη διασύνδεση πολλών ψηφιακών αισθητήρων όπως αισθητήρας IR, αισθητήρας PIR κ.λπ. και επίσης για ενεργοποίηση ή απενεργοποίηση εξόδων όπως LED, Buzzer κ.λπ. Ακούγεται ενδιαφέρον σωστά!!? Ας αρχίσουμε.
Απαιτούμενο υλικό:
- MSP430G2 LaunchPad
- LED οποιουδήποτε χρώματος - 8
- Διακόπτης - 2
- 1k Αντίσταση - 8
- Σύνδεση καλωδίων
Διάγραμμα κυκλώματος:
Στο προηγούμενο σεμινάριό μας, παρατηρήσαμε ότι το ίδιο το ταμπλό εκκίνησης έρχεται με δύο LED και έναν διακόπτη στον πίνακα. Αλλά σε αυτό το σεμινάριο θα χρειαζόμαστε περισσότερα από αυτό, καθώς σχεδιάζουμε να ανάβουμε οκτώ λυχνίες LED σε μια σειρά όταν πατηθεί ένα κουμπί. Θα αλλάξουμε επίσης την ακολουθία όταν πατηθεί άλλο κουμπί για να το κάνουμε ενδιαφέρον. Πρέπει λοιπόν να δημιουργήσουμε ένα κύκλωμα με 8 φώτα LED και δύο διακόπτες, το πλήρες διάγραμμα κυκλώματος βρίσκεται παρακάτω.
Εδώ τα 8 LED είναι οι έξοδοι και οι δύο διακόπτες είναι οι είσοδοι. Μπορούμε να τα συνδέσουμε σε οποιονδήποτε ακροδέκτη I / O στον πίνακα, αλλά έχω συνδέσει τους LRD από τον πείρο P1.0 έως P2.1 και τους διακόπτες 1 και 2 στον πείρο P2.4 και P2.3 αντίστοιχα όπως φαίνεται παραπάνω.
Όλες οι ακίδες καθόδου του LED είναι συνδεδεμένες στη γείωση και ο πείρος ανόδου συνδέεται με τους πείρους εισόδου / εξόδου μέσω μιας αντίστασης. Αυτή η αντίσταση ονομάζεται αντίσταση περιορισμού ρεύματος, αυτή η αντίσταση δεν είναι υποχρεωτική για ένα MSP430 επειδή το μέγιστο ρεύμα που μπορεί να τροφοδοτήσει ο ακροδέκτης I / O είναι μόνο 6mA και η τάση στον ακροδέκτη είναι μόνο 3.6V. Ωστόσο, είναι καλή πρακτική να τα χρησιμοποιείτε. Όταν κάποια από αυτές τις ψηφιακές καρφίτσες ανεβεί, το αντίστοιχο LED θα ανάψει. Εάν μπορείτε να θυμηθείτε τα τελευταία προγράμματα εκμάθησης LED, τότε θα θυμάστε ότι το digitalWrite (LED_pin_name, HIGH) θα κάνει το LED να ανάβει και το digitalWrite (LED_pin_name, LOW) θα γυρίσει το LED.
Οι διακόπτες είναι η συσκευή εισόδου, το ένα άκρο του διακόπτη συνδέεται στον ακροδέκτη γείωσης και το άλλο συνδέεται με ψηφιακές ακίδες P2.3 και P2.4. Αυτό σημαίνει ότι κάθε φορά που πατάμε το διακόπτη, ο πείρος I / O (2.3 ή 2.4) θα γειωθεί και θα παραμείνει ελεύθερος εάν δεν πατηθεί το κουμπί. Ας δούμε πώς μπορούμε να χρησιμοποιήσουμε αυτήν τη ρύθμιση κατά τον προγραμματισμό.
Επεξήγηση προγραμματισμού:
Το πρόγραμμα πρέπει να γραφτεί για τον έλεγχο του 8 LED κατά τρόπο ακολουθίας όταν πατηθεί ο διακόπτης 1 και μετά όταν πατηθεί ο διακόπτης 2, η ακολουθία πρέπει να αλλάξει. Το πλήρες πρόγραμμα και το βίντεο επίδειξης βρίσκονται στο κάτω μέρος αυτής της σελίδας. Παρακάτω θα εξηγήσω το πρόγραμμα γραμμή προς γραμμή, ώστε να μπορείτε να το καταλάβετε εύκολα.
Όπως πάντα θα πρέπει να ξεκινήσουμε με τη λειτουργία κενής ρύθμισης () μέσα στην οποία θα δηλώναμε ότι οι ακίδες που χρησιμοποιούμε είναι ακροδέκτης εισόδου ή εξόδου. Στο πρόγραμμά μας οι 8 ακίδες LED εξάγονται και οι 2 διακόπτες είναι είσοδοι. Αυτά τα 8 LED συνδέονται από P1.0 έως P2.1 που είναι ο αριθμός pin 2 έως 9 στην πλακέτα. Στη συνέχεια, οι διακόπτες συνδέονται με τον ακροδέκτη P2.3 και τον ακροδέκτη 2.4 που είναι ο αριθμός ακίδων 11 και 12 αντίστοιχα. Έτσι, δηλώσαμε τα ακόλουθα σε άκυρη ρύθμιση ()
άκυρη ρύθμιση () {για (int i = 2; i <= 9; i ++) {pinMode (i, OUTPUT); } για (int i = 2; i <= 9; i ++) {digitalWrite (i, LOW); } pinMode (11, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); }
Όπως γνωρίζουμε, η συνάρτηση pinMode () δηλώνει ότι ο ακροδέκτης είναι έξοδος ή είσοδος και η λειτουργία digitalWrite () την καθιστά υψηλή (ON) ή χαμηλή (OFF). Χρησιμοποιήσαμε ένα βρόχο για να κάνουμε αυτήν τη δήλωση για να μειώσουμε τον αριθμό των γραμμών. Η μεταβλητή "i" θα αυξηθεί από 2 έως 9 στο for loop και για κάθε αύξηση η λειτουργία μέσα θα εκτελεστεί. Ένα άλλο πράγμα που μπορεί να σας μπερδέψει είναι ο όρος " INPUT_PULLUP ". Ένας ακροδέκτης μπορεί να δηλωθεί ως είσοδος απλά καλώντας τη λειτουργία pinMode (Pin_name, INPUT), αλλά εδώ έχουμε χρησιμοποιήσει ένα INPUT_PULLUP αντί για ένα INPUT και και οι δύο έχουν μια αξιοσημείωτη αλλαγή.
Όταν χρησιμοποιούμε ακροδέκτες μικροελεγκτή, ο πείρος πρέπει είτε να είναι συνδεδεμένος στο χαμηλό είτε στο υψηλό. Σε αυτήν την περίπτωση οι πείροι 11 και 12 συνδέονται με το διακόπτη που θα συνδεθεί με τη γείωση όταν πατηθεί. Αλλά όταν δεν πατηθεί ο διακόπτης, ο πείρος δεν είναι συνδεδεμένος με τίποτα, αυτή η κατάσταση ονομάζεται πλωτή καρφίτσα και είναι κακό για τους μικροελεγκτές. Έτσι, για να το αποφύγουμε αυτό, είτε χρησιμοποιούμε μια αντίσταση pull-up ή pull-down για να κρατήσουμε τον πείρο σε μια κατάσταση όταν φτάνει σε αιωρούμενο. Στο MSP430G2553 Μικροελεγκτή, οι ακίδες I / O έχουν ενσωματωμένη αντίσταση pull-up. Για να το χρησιμοποιήσουμε αυτό, το μόνο που πρέπει να κάνουμε είναι να καλέσουμε INPUT_PULLUP αντί για INPUT κατά τη δήλωση όπως ακριβώς κάναμε παραπάνω.
Τώρα ας περάσουμε στη συνάρτηση void loop () . Ό, τι είναι γραμμένο σε αυτήν τη λειτουργία θα εκτελεστεί για πάντα. Το πρώτο βήμα στο πρόγραμμά μας είναι να ελέγξουμε εάν ο διακόπτης είναι πατημένος και αν πατηθεί θα πρέπει να αρχίσουμε να αναβοσβήνουμε τα LED με τη σειρά. Για να ελέγξετε εάν πατηθεί το κουμπί χρησιμοποιείται η ακόλουθη γραμμή
εάν (digitalRead (12) == ΧΑΜΗΛΗ)
Εδώ η νέα συνάρτηση είναι η συνάρτηση digitalRead () , αυτή η συνάρτηση θα διαβάσει την κατάσταση ενός ψηφιακού πείρου και θα επιστρέψει HIGH (1) όταν ο πείρος έχει κάποια τάση και θα επιστρέψει χαμηλό LOW (0) όταν ο πείρος είναι γειωμένος. Στο υλικό μας, ο πείρος θα γειωθεί μόνο όταν πατάμε το κουμπί διαφορετικά θα είναι υψηλός αφού έχουμε χρησιμοποιήσει μια αντίσταση pull-up. Χρησιμοποιούμε λοιπόν τη δήλωση if για να ελέγξουμε εάν πατήθηκε το κουμπί.
Μόλις πατηθεί το κουμπί μπαίνουμε στον ατελείωτο βρόχο (1) . Εδώ αρχίζουμε να αναβοσβήνουμε τα LED στη σειρά. Ένας άπειρος βρόχος ενώ εμφανίζεται παρακάτω και ό, τι γράφεται μέσα στον βρόχο θα τρέχει για πάντα μέχρι ένα διάλειμμα χρησιμοποιείται η δήλωση.
whiel (1) {}
Μέσα στο άπειρο ενώ ελέγχουμε για την κατάσταση του δεύτερου διακόπτη που είναι συνδεδεμένος στον ακροδέκτη 11.
Εάν πατηθεί αυτός ο διακόπτης, αναβοσβήνουμε το LED με μια συγκεκριμένη ακολουθία αλλιώς θα το αναβοσβήνει με άλλη σειρά.
if (digitalRead (11) == LOW) {για (int i = 2; i <= 9; i ++) {digitalWrite (i, HIGH); καθυστέρηση (100); } για (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Για να αναβοσβήνει η λυχνία LED στη σειρά χρησιμοποιούμε ξανά το βρόχο για , αλλά αυτή τη φορά χρησιμοποιούμε μια μικρή καθυστέρηση 100 χιλιοστών του δευτερολέπτου χρησιμοποιώντας τη λειτουργία καθυστέρησης (100) , ώστε να παρατηρήσουμε ότι η λυχνία LED αυξάνεται. Για να κάνουμε μόνο μία λάμψη LED κάθε φορά, χρησιμοποιούμε επίσης ένα άλλο για βρόχο για να σβήσουμε όλα τα LED. Ενεργοποιούμε λοιπόν μια αναμονή LED για κάποιο χρονικό διάστημα και μετά απενεργοποιούμε όλες τις λυχνίες LED και στη συνέχεια αυξάνουμε τη σειρά αναμονής για την αναμονή LED για λίγο και ο κύκλος συνεχίζεται. Αλλά όλα αυτά θα συμβούν όσο δεν πατηθεί ο δεύτερος διακόπτης.
Εάν πατηθεί ο δεύτερος διακόπτης, τότε αλλάξουμε την ακολουθία, το πρόγραμμα θα είναι λίγο πολύ το ίδιο αναμενόμενο για την ακολουθία της οποίας είναι ενεργοποιημένη η LED. Οι γραμμές που εμφανίζονται παρακάτω δοκιμάστε να ρίξετε μια ματιά και να καταλάβετε τι έχει αλλάξει.
αλλιώς {για (int i = 9; i> = 2; i--) {digitalWrite (i, HIGH); καθυστέρηση (100); } για (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Ναι, το for for loop έχει αλλάξει. Προηγουμένως κάναμε το LED να ανάβει από τον αριθμό 2 και μέχρι το 9. Ωστόσο τώρα πρόκειται να ξεκινήσουμε από τον αριθμό 9 και να μειώσουμε μέχρι το 2. Ο τρόπος αυτός μπορούμε να παρατηρήσουμε εάν ο διακόπτης είναι πατημένος ή όχι.
Ρύθμιση υλικού για ακολουθία LED που αναβοσβήνει:
Εντάξει αρκετά από όλη τη θεωρία και το λογισμικό. Ας πάρουμε μερικά στοιχεία και να δούμε πώς φαίνεται αυτό το πρόγραμμα σε δράση. Το κύκλωμα είναι πολύ απλό και ως εκ τούτου μπορεί εύκολα να χτιστεί πάνω σε ένα breadboard. Αλλά έχω κολλήσει το LED και ανάβω τον πίνακα perf για να το κάνω να φαίνεται καθαρό. Ο πίνακας perf που συγκολλήθηκε φαίνεται παρακάτω.
Όπως μπορείτε να δείτε, έχουμε τους ακροδέκτες εξόδου του LED και τον διακόπτη αφαιρούμενο ως ακροδέκτες σύνδεσης. Τώρα έχουμε χρησιμοποιήσει τα θηλυκά προς τα θηλυκά καλώδια σύνδεσης για να συνδέσουμε τις λυχνίες LED και μεταβιβάζουμε την πλακέτα MSP430 LaunchPad όπως φαίνεται στην παρακάτω εικόνα.
Μεταφόρτωση και εργασία:
Μόλις τελειώσετε με το υλικό, απλώς συνδέστε την πλακέτα MSP430 στον υπολογιστή σας και ανοίξτε το Energia IDE και χρησιμοποιήστε το πρόγραμμα που παρέχεται στο τέλος αυτής της σελίδας. Βεβαιωθείτε ότι έχετε επιλέξει τη σωστή θύρα και τη θύρα COM στο Energia IDE και κάντε κλικ στο κουμπί Μεταφόρτωση. Το πρόγραμμα θα πρέπει να μεταγλωττιστεί με επιτυχία και μόλις φορτωθεί θα εμφανιστεί η ένδειξη "Done Uploading".
Τώρα πατήστε το κουμπί 1 στον πίνακα και το LED θα ανάψει διαδοχικά όπως φαίνεται παρακάτω
Μπορείτε επίσης να κρατήσετε πατημένο το δεύτερο κουμπί για να ελέγξετε αν η ακολουθία αλλάζει. Η πλήρης εργασία του έργου φαίνεται στο παρακάτω βίντεο. Εάν είστε ικανοποιημένοι με τα αποτελέσματα, μπορείτε να δοκιμάσετε να κάνετε κάποιες αλλαγές στον κώδικα, όπως να αλλάξετε τον χρόνο καθυστέρησης αλλάζοντας την ακολουθία κ.λπ. Αυτό θα σας βοηθήσει να μάθετε και να κατανοήσετε καλύτερα.
Ελπίζω να έχετε κατανοήσει το μάθημα και να μάθετε κάτι χρήσιμο με αυτό Εάν είχατε αντιμετωπίσει κάποιο πρόβλημα, μη διστάσετε να δημοσιεύσετε την ερώτηση στην ενότητα σχολίων ή να χρησιμοποιήσετε τα φόρουμ. Ας συναντηθούμε σε ένα άλλο σεμινάριο όπου θα μάθουμε πώς να διαβάζουμε αναλογικές τάσεις χρησιμοποιώντας το MSP30 launch pad μας.