Διαφήμιση
Σήμερα θα προσπαθήσω να σας διδάξω λίγο για τους Shift Registers. Αυτά είναι ένα αρκετά σημαντικό κομμάτι του προγραμματισμού Arduino, βασικά επειδή επεκτείνουν τον αριθμό των εξόδων που μπορείτε να χρησιμοποιήσετε, σε αντάλλαγμα μόνο για 3 ακίδες ελέγχου. Μπορείτε επίσης να καταχωρήσετε τους καταχωρητές μετατόπισης αλυσίδας daisy ώστε να αποκτήσετε ακόμη περισσότερες αποδόσεις.
Αυτό είναι ένα σημαντικό άλμα στη δυσκολία από τα προηγούμενα μαθήματα εν τούτοις, και σας προτείνω να έχετε ένα πολύ καλή κατανόηση του προηγούμενου υλικού (συνδέσεις στο τέλος αυτού του άρθρου), καθώς και κατανόηση ο τα βασικά του δυαδικού Τι είναι δυαδικό; [Τεχνολογία εξηγείται]Δεδομένου ότι το δυαδικό είναι τόσο απολύτως θεμελιώδες για την ύπαρξη ηλεκτρονικών υπολογιστών, φαίνεται περίεργο ότι ποτέ δεν έχουμε αντιμετωπίσει ποτέ το θέμα πριν - έτσι σήμερα είχα σκεφτεί ότι θα έκανα μια σύντομη επισκόπηση του δυαδικού ... Διαβάστε περισσότερα που έγραψα τελευταία φορά.
Τι είναι ένα μητρώο μετατόπισης;
Ένας καταχωρητής μετατόπισης εξόδου, τεχνικά μιλώντας, λαμβάνει δεδομένα σε σειρά και εκπέμπει παράλληλα. Στην πράξη, αυτό σημαίνει ότι μπορούμε να στείλουμε γρήγορα μια δέσμη εντολών εξόδου στο τσιπ, να την πούμε να ενεργοποιηθεί και οι έξοδοι θα σταλούν στις αντίστοιχες ακίδες. Αντί να μεταφέρουμε κάθε πείρο, απλά στέλνουμε την έξοδο που απαιτείται για όλες τις ακίδες ταυτόχρονα, ως ένα μόνο byte ή περισσότερες πληροφορίες.
Εάν σας βοηθάει να καταλάβετε, μπορείτε να σκεφτείτε ένα μητρώο μετατόπισης ως μια «σειρά» ψηφιακών εξόδων, αλλά μπορούμε να παραλείψουμε τις συνήθεις εντολές digitalWrite και απλά να στείλουμε μια σειρά από μπιτς για να τις ενεργοποιήσουμε ή μακριά από.
Πώς λειτουργεί?
Ο καταχωρητής μετατόπισης που θα χρησιμοποιήσουμε - το 74HC595N που περιλαμβάνεται στο κιτ εκκίνησης Oomlout - χρειάζεται μόνο 3 ακίδες ελέγχου. Το πρώτο είναι ένα ρολόι - δεν χρειάζεται να ανησυχείτε πάρα πολύ για αυτό, όπως οι σειριακές βιβλιοθήκες Arduino ελέγχουν αυτό - αλλά ένα ρολόι είναι βασικά μόνο ένας ηλεκτρικός παλμός on / off που ρυθμίζει το ρυθμό για το σήμα δεδομένων.
Ο ακροδέκτης μανδάλωσης χρησιμοποιείται για να δηλώσει τον καταχωρητή ολίσθησης όταν πρέπει να ενεργοποιήσει και να απενεργοποιήσει τις εξόδους του σύμφωνα με τα κομμάτια που μόλις τον έστειλα - δηλαδή, να τα ασφαλίσει στη θέση του.
Τέλος, ο δίαυλος δεδομένων είναι εκεί που στέλναμε τα πραγματικά σειριακά δεδομένα με τα δυαδικά ψηφία για να καθορίσουμε την κατάσταση ενεργοποίησης / απενεργοποίησης των εξόδων του καταχωρητή μετατόπισης.
Η όλη διαδικασία μπορεί να περιγραφεί σε 4 βήματα:
- Ρυθμίστε τον ακροδέκτη δεδομένων σε υψηλή ή χαμηλή για τον πρώτο πείρο εξόδου στο μηχάνημα αλλαγής ταχυτήτων.
- Ρυθμίστε το ρολόι για να μετακινήσετε τα δεδομένα στο μητρώο.
- Συνεχίστε να ρυθμίζετε τα δεδομένα και να παλίζετε το ρολόι μέχρι να ρυθμίσετε την απαιτούμενη κατάσταση για όλες τις ακίδες εξόδου.
- Τραβήξτε τον πείρο ασφάλισης για να ενεργοποιήσετε την ακολουθία εξόδου.
Εκτέλεση
Χρειάζεστε τα παρακάτω στοιχεία για αυτό το έργο:
- 7HC595N τσιπ καταχωρητή μετατόπισης
- 8 LED και κατάλληλες αντιστάσεις, ή ό, τι θέλετε να εξάγετε
- Το συνηθισμένο breadboard, συνδετήρες, και ένα βασικό Arduino
Εάν διαθέτετε το κιτ εκκίνησης Oomlout, μπορείτε να κάνετε λήψη της διάταξης breadboard από εδώ.
Ακολουθεί το βίντεο συναρμολόγησης:
Η διάταξη του σκάφους:

Και η συναρμολογημένη μου έκδοση:

Έχω τροποποιήσει τον αρχικό κώδικα που παρέχεται από την Ooolmout, αλλά εάν θέλετε να το δοκιμάσετε, μπορείτε να το κατεβάσετε πλήρως εδώ. Περιλαμβάνεται εξήγηση του κώδικα, οπότε αντιγράψτε και επικολλήστε το όλο θέμα από κάτω ή pastebin για να διαβάσετε μια εξήγηση του κώδικα.
/ * * | Shift Register Tutorial, βασισμένο σε | * | Σετ πειραματισμού Arduino CIRC-05 | * |.: 8 Περισσότερες λυχνίες LED:. (Μητρώο μετατόπισης 74HC595) * * | | Τροποποιήθηκε από τον James @ MakeUseOf.com | * * / // Ορισμοί ακίδων. // 7HC595N έχει τρεις ακίδες. δεδομένα int = 2. // όπου στέλνουμε τα bits για να ελέγξουμε τις εξόδους int clock = 3; // διατηρεί τα δεδομένα σε συγχρονισμό. int latch = 4; // δηλώνει τον καταχωρητή μετατόπισης όταν ενεργοποιείται η ακολουθία εξόδου void setup () {// ορίστε τους τρεις ακροδέκτες ελέγχου στην έξοδο pinMode (δεδομένα, OUTPUT). pinMode (ρολόι, OUTPUT); pinMode (κλείδωμα, OUTPUT); Serial.begin (9600); // ώστε να μπορούμε να στείλουμε μηνύματα εντοπισμού σφαλμάτων στη σειριακή οθόνη. } void loop () {outputBytes (); // τη βασική έξοδο που γράφει 8-bit για να δείξει πώς λειτουργεί ένας καταχωρητής μετατόπισης. //outputIntegers(); // στέλνει μια ακέραια τιμή ως δεδομένα αντί για bytes, πράγματι μετρώντας σε δυαδικά. } άκυρη έξοδοςIntegers () {για (int i = 0; i <256; i ++) {digitalWrite (μανδάλωση, LOW); Serial.println (i); // Debug, στέλνοντας έξοδο στην σειριακή οθόνη shiftOut (δεδομένα, ρολόι, MSBFIRST, i); digitalWrite (μανδάλωση, HIGH); καθυστέρηση (100). }} άκυρη outputBytes () {/ * Bytes, ή 8-bit, αντιπροσωπεύονται από ένα Β ακολουθούμενο από 8 0 ή 1s. Σε αυτή την περίπτωση, θεωρήστε ότι αυτό είναι σαν μια διάταξη που θα χρησιμοποιήσουμε για να ελέγξουμε τα 8 LED. Εδώ έχω ξεκινήσει την τιμή byte ως 00000001 * / byte dataValues = B00000001; // Αλλάξτε το για να ρυθμίσετε το μοτίβο εκκίνησης / * Στον βρόχο for, ξεκινάμε τραβώντας το κλείστρο χαμηλά, χρησιμοποιώντας τη λειτουργία shiftOut Arduino μιλήστε στο μητρώο μετατόπισης, στέλνοντας το byte των δεδομένων δεδομένων που αντιπροσωπεύουν την κατάσταση των λυχνιών LED και στη συνέχεια τραβήξτε το κλείστρο ψηλά για να τους κλειδώσετε θέση. Τέλος, μεταφέρουμε τα bits ένα μέρος προς τα αριστερά, που σημαίνει ότι η επόμενη επανάληψη θα ενεργοποιήσει το επόμενο LED της σειράς. Για να δείτε την ακριβή δυαδική τιμή που αποστέλλεται, ελέγξτε τη σειριακή οθόνη. * / για (int i = 0; i <8; i ++) {digitalWrite (μανδάλωση, LOW); Serial.println (δεδομέναValues, BIN); // Debug, αποστολή εξόδου στην σειριακή οθόνη shiftOut (δεδομένα, ρολόι, MSBFIRST, dataValues); digitalWrite (μανδάλωση, HIGH); dataValues = δεδομέναValues << 1; // Μετακινήστε τα bits ένα μέρος προς τα αριστερά - αλλάξτε σε >> για να ρυθμίσετε την καθυστέρηση κατεύθυνσης (100). } }
Λειτουργία bit-shifting (λειτουργία OutputBytes)
Στο παράδειγμα του πρώτου βρόχου - outputBytes () - ο κώδικας χρησιμοποιεί μια ακολουθία 8-bit (ένα byte), η οποία στη συνέχεια μετακινεί αριστερά κάθε επανάληψη του βρόχου for. Είναι σημαντικό να σημειώσετε ότι εάν μετακινηθείτε περισσότερο από όσο είναι δυνατόν, το κομμάτι χάθηκε απλά.
Η μετατόπιση bit γίνεται με << ή >> ακολουθούμενη από τον αριθμό των bit που θέλετε να αλλάξετε.
Ελέγξτε το παρακάτω παράδειγμα και σιγουρευτείτε ότι καταλαβαίνετε τι συμβαίνει:
byte val = B00011010. val = val << 3 // B11010000. val = val << 2 // B01000000, χάσαμε αυτά τα άλλα bits! val = val >> 5 // B00000010.
Αποστολή Ακέρων Αντ 'αυτού (Λειτουργία OutputIntegers)
Αν στείλετε έναν ακέραιο αριθμό στον καταχωρητή μετατόπισης αντί για ένα byte, θα μετατρέψει απλά τον αριθμό σε δυαδική ακολουθία byte. Σε αυτή τη συνάρτηση (αποσυνδεθείτε στο βρόχο και μεταφορτώστε το για να δείτε το αποτέλεσμα), έχουμε ένα βρόχο για το οποίο υπολογίζεται από 0-255 (ο υψηλότερος ακέραιος που μπορούμε να αντιπροσωπεύουμε με ένα byte), και στέλνει αυτό αντί. Βασικά μετρά σε δυαδικό, έτσι ώστε η ακολουθία μπορεί να φανεί λίγο τυχαία, εκτός αν τα LED σας είναι γραμμένα σε μακρά γραμμή.
Για παράδειγμα, αν διαβάσετε το δυαδικό εξηγούμενο άρθρο, θα γνωρίζετε ότι ο αριθμός 44 θα αντιπροσωπεύεται ως 00101100, έτσι οι λυχνίες LED 3,5,6 θα ανάψουν στο σημείο αυτό της ακολουθίας.

Μαργαρίτα αλυσιδωτά περισσότερα από ένα shift Shift
Το αξιοσημείωτο πράγμα για τους Shift Registers είναι ότι εάν τους δοθούν περισσότερα από 8-bit πληροφορίας (ή όσο μεγάλο είναι το μητρώο τους), θα μεταφέρουν και πάλι τα άλλα πρόσθετα bits. Αυτό σημαίνει ότι μπορείτε να συνδέσετε μια σειρά από αυτά μαζί, να σπρώξετε μια μακρά αλυσίδα ψηφίων και να τα διανείμετε σε κάθε μητρώο χωριστά, όλα χωρίς πρόσθετη κωδικοποίηση από την πλευρά σας.
Παρόλο που δεν θα περιγράψουμε λεπτομερώς τη διαδικασία ή τα σχήματα εδώ, εάν έχετε περισσότερους από έναν καταχωρητές βάρδιας, μπορείτε να δοκιμάσετε το έργο από τον επίσημο ιστότοπο Arduino εδώ.
Άλλα άρθρα της σειράς:
- Τι είναι το Arduino και τι μπορείτε να κάνετε με αυτό Τι είναι το Arduino και τι μπορείτε να κάνετε με αυτό;Το Arduino είναι μια αξιοσημείωτη μικρή ηλεκτρονική συσκευή, αλλά αν δεν έχετε χρησιμοποιήσει ποτέ πριν, τι ακριβώς είναι και τι μπορείτε να κάνετε με ένα; Διαβάστε περισσότερα ?
- Τι είναι το κιτ εκκίνησης Arduino και τι περιέχει; Τι περιλαμβάνεται σε ένα κιτ εκκίνησης Arduino; [Επεξηγήσεις MakeUseOf]Έχω προηγουμένως παρουσιάσει το υλικό ανοικτού κώδικα Arduino εδώ στο MakeUseOf, αλλά θα χρειαστείτε κάτι περισσότερο από το πραγματικό Arduino για να χτίσετε κάτι από αυτό και να αρχίσετε πραγματικά. Arduino "εκκίνησης kit" είναι ... Διαβάστε περισσότερα
- Περισσότερα δροσερά εξαρτήματα για να αγοράσετε με το κιτ εκκίνησης 8 Περισσότερα δροσερά εξαρτήματα για τα έργα ArduinoΣκεφτείτε λοιπόν να πάρετε ένα κιτ εκκίνησης Arduino, αλλά αναρωτιέστε αν κάποια βασικά LED και αντιστάσεις θα είναι αρκετά για να σας κρατήσουν απασχολημένους για το Σαββατοκύριακο; Πιθανώς όχι. Εδώ είναι άλλες 8 ... Διαβάστε περισσότερα
- Ξεκινώντας με το κιτ εκκίνησης Arduino; Εγκατάσταση προγραμμάτων οδήγησης & ρύθμιση της πλακέτας & της θύρας Ξεκινώντας με το κιτ εκκίνησης Arduino - Εγκατάσταση προγραμμάτων οδήγησης & Εγκατάσταση του πίνακα & της θύραςΈτσι, έχετε αγοράσει τον εαυτό σας ένα κιτ εκκίνησης Arduino, και ίσως μερικά άλλα τυχαία δροσερά εξαρτήματα - τώρα τι; Πώς ξεκινάτε πραγματικά να προγραμματίζετε αυτό το πράγμα Arduino; Πώς το ρυθμίζετε ... Διαβάστε περισσότερα
- Fritzing, ένα δωρεάν εργαλείο για την κατάρτιση διαγραμμάτων κυκλωμάτων Fritzing - το τελευταίο εργαλείο για τη σχεδίαση ηλεκτρονικών έργων [Cross Platform]Παρά το ότι ακούγεται σαν αλκοόπιο, ο Fritzing είναι πραγματικά ένα απίστευτο κομμάτι του ελεύθερου λογισμικού που μπορείτε να χρησιμοποιήσετε για να δημιουργήσετε διαγράμματα κυκλωμάτων και εξαρτημάτων για χρήση με ηλεκτρονικές πλακέτες ταχείας προβολής, όπως η φανταστική ανοιχτή πηγή Άρντινο ... Διαβάστε περισσότερα
- Μια πιο προσεκτική ματιά στη δομή μιας εφαρμογής Arduino και του προγράμματος Blink Παράδειγμα Πρώτα βήματα με το Arduino: Μια πιο προσεκτική ματιά στο κύκλωμα και η δομή ενός προγράμματοςΤην τελευταία φορά σας άφησα να έχετε ρυθμίσει το Arduino σας για να δουλέψετε με Mac ή Windows και έχετε ανεβάσει μια απλή εφαρμογή δοκιμής που αναβοσβήνει το ενσωματωμένο LED. Σήμερα θα εξηγήσω τον κώδικα ... Διαβάστε περισσότερα
- Το έργο Arduino Xmas tree lights Ένα έργο Arduino: Πώς να φτιάξετε φανταχτερά στολίδια ΧριστουγέννωνΑυτό είναι το επόμενο κομμάτι της σειράς μάθησης Arduino και αυτή τη φορά θα μαθαίνουμε και θα χρησιμοποιούμε Arrays για να κάνουμε ένα μικρό στολίδι χριστουγεννιάτικων δέντρων με διάφορες αναλαμπές ακολουθίες. Αυτό θα ήταν ... Διαβάστε περισσότερα (Εκμάθηση AKA για συστοιχίες)
- Τι είναι δυαδικό; Τι είναι δυαδικό; [Τεχνολογία εξηγείται]Δεδομένου ότι το δυαδικό είναι τόσο απολύτως θεμελιώδες για την ύπαρξη ηλεκτρονικών υπολογιστών, φαίνεται περίεργο ότι ποτέ δεν έχουμε αντιμετωπίσει ποτέ το θέμα πριν - έτσι σήμερα είχα σκεφτεί ότι θα έκανα μια σύντομη επισκόπηση του δυαδικού ... Διαβάστε περισσότερα
Αυτό συμβαίνει μέχρι σήμερα, καθώς νομίζω ότι καλύψαμε πολλά. Όπως πάντα, θα σας ενθάρρυνα να παίξετε και να προσαρμόσετε τον κώδικα και να είστε ελεύθεροι να ρωτήσετε οποιεσδήποτε ερωτήσεις που μπορείτε να έχετε στα σχόλια ή ακόμα και να μοιραστείτε ένα σύνδεσμο με το φοβερό σας project με βάση το shift register.
Ο James έχει πτυχίο στην Τεχνητή Νοημοσύνη και είναι πιστοποιημένος με CompTIA A + και Network +. Είναι ο κύριος προγραμματιστής της MakeUseOf, και ξοδεύει τον ελεύθερο χρόνο του παίζοντας VR paintball και boardgames. Κατασκευάζει υπολογιστές από τότε που ήταν παιδί.