SPI και Arduino Interface

Πίνακας περιεχομένων:

SPI και Arduino Interface
SPI και Arduino Interface

Βίντεο: SPI και Arduino Interface

Βίντεο: SPI και Arduino Interface
Βίντεο: Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1) 2024, Ενδέχεται
Anonim

Μελετάμε τη διεπαφή SPI και συνδέουμε έναν καταχωρητή shift στο Arduino, στον οποίο θα έχουμε πρόσβαση χρησιμοποιώντας αυτό το πρωτόκολλο για τον έλεγχο των LED.

Διεπαφή SPI
Διεπαφή SPI

Απαραίτητη

  • - Arduino;
  • - καταχωρητής μετατόπισης 74HC595 ·
  • - 8 LED.
  • - 8 αντιστάσεις 220 Ohm.

Οδηγίες

Βήμα 1

SPI - Serial Peripheral Interface ή "Serial Peripheral Interface" είναι ένα σύγχρονο πρωτόκολλο μεταφοράς δεδομένων για τη διασύνδεση μιας κύριας συσκευής με περιφερειακές συσκευές (slave). Ο κύριος είναι συχνά μικροελεγκτής. Η επικοινωνία μεταξύ συσκευών πραγματοποιείται σε τέσσερα καλώδια, και γι 'αυτό το SPI μερικές φορές αναφέρεται ως "διασύνδεση τεσσάρων καλωδίων". Αυτά τα ελαστικά είναι:

MOSI (Master Out Slave In) - γραμμή μετάδοσης δεδομένων από τον κύριο στις υποτελείς συσκευές.

MISO (Master In Slave Out) - γραμμή μετάδοσης από το slave στο master.

SCLK (Serial Clock) - παλμοί ρολογιού συγχρονισμού που παράγονται από τον κύριο.

SS (Slave Select) - γραμμή επιλογής εξαρτημένης συσκευής. όταν στη γραμμή "0", ο σκλάβος "καταλαβαίνει" ότι έχει πρόσβαση.

Υπάρχουν τέσσερις τρόποι μεταφοράς δεδομένων (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), λόγω του συνδυασμού της πολικότητας παλμού ρολογιού (εργαζόμαστε στο επίπεδο ΥΨΗΛΟ ή ΧΑΜΗΛΟ), Πολικότητα ρολογιού, CPOL και τη φάση των παλμών ρολογιού (συγχρονισμός στην άνοδο ή την πτώση του παλμού του ρολογιού), Phase Phase, CPHA.

Το σχήμα δείχνει δύο επιλογές για τη σύνδεση συσκευών χρησιμοποιώντας το πρωτόκολλο SPI: ανεξάρτητη και διαδοχική. Όταν συνδέεται ανεξάρτητα με το δίαυλο SPI, ο πλοίαρχος επικοινωνεί με κάθε σκλάβο ξεχωριστά. Με έναν καταρράκτη - οι υποτελείς συσκευές ενεργοποιούνται εναλλάξ, σε έναν καταρράκτη.

Τύποι συνδέσεων SPI
Τύποι συνδέσεων SPI

Βήμα 2

Στο Arduino, τα λεωφορεία SPI βρίσκονται σε συγκεκριμένες θύρες. Κάθε πίνακας έχει τη δική του αντιστοίχιση καρφιτσών. Για ευκολία, οι ακίδες επαναλαμβάνονται και τοποθετούνται σε ξεχωριστή υποδοχή ICSP (In Circuit Serial Programming). Λάβετε υπόψη ότι δεν υπάρχει καρφίτσα επιλογής εξαρτημένου στη σύνδεση ICSP - SS, από τότε υποτίθεται ότι το Arduino θα χρησιμοποιηθεί ως το κύριο στο δίκτυο. Αλλά αν είναι απαραίτητο, μπορείτε να αντιστοιχίσετε οποιοδήποτε ψηφιακό πείρο του Arduino ως SS.

Το σχήμα δείχνει την τυπική εκχώρηση των ακίδων στα λεωφορεία SPI για το Arduino UNO και το Nano.

Εφαρμογή SPI στο Arduino
Εφαρμογή SPI στο Arduino

Βήμα 3

Έχει γραφτεί μια ειδική βιβλιοθήκη για το Arduino που εφαρμόζει το πρωτόκολλο SPI. Συνδέεται έτσι: στην αρχή του προγράμματος, προσθέστε το #include SPI.h

Για να ξεκινήσετε να εργάζεστε με το πρωτόκολλο SPI, πρέπει να ορίσετε τις ρυθμίσεις και στη συνέχεια να αρχικοποιήσετε το πρωτόκολλο χρησιμοποιώντας τη διαδικασία SPI.beginTransaction (). Μπορείτε να το κάνετε με μία οδηγία: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Αυτό σημαίνει ότι αρχικοποιούμε το πρωτόκολλο SPI σε συχνότητα 14 MHz, η μεταφορά δεδομένων πηγαίνει, ξεκινώντας από το MSB (το πιο σημαντικό bit), στη λειτουργία "0".

Μετά την προετοιμασία, επιλέγουμε τη δευτερεύουσα συσκευή τοποθετώντας τον αντίστοιχο πείρο SS στην κατάσταση LOW.

Στη συνέχεια μεταφέρουμε τα δεδομένα στη δευτερεύουσα συσκευή με την εντολή SPI.transfer ().

Μετά τη μετάδοση, επιστρέφουμε SS στην κατάσταση ΥΨΗΛΗΣ.

Η εργασία με το πρωτόκολλο τελειώνει με την εντολή SPI.endTransaction (). Είναι επιθυμητό να ελαχιστοποιηθεί ο χρόνος εκτέλεσης της μεταφοράς μεταξύ των οδηγιών SPI.beginTransaction () και SPI.endTransaction (), έτσι ώστε να μην υπάρχει επικάλυψη εάν μια άλλη συσκευή προσπαθήσει να αρχικοποιήσει τη μεταφορά δεδομένων χρησιμοποιώντας διαφορετικές ρυθμίσεις.

Μετάδοση SPI
Μετάδοση SPI

Βήμα 4

Ας εξετάσουμε την πρακτική εφαρμογή της διεπαφής SPI. Θα ανάψουμε τις λυχνίες LED ελέγχοντας τον καταχωρητή βάρδιας 8-bit μέσω του διαύλου SPI. Ας συνδέσουμε το 74HC595 shift register με το Arduino. Συνδέουμε σε κάθε μία από τις 8 εξόδους μέσω LED (μέσω περιοριστικής αντίστασης). Το διάγραμμα φαίνεται στο σχήμα.

Σύνδεση αλλαγής ταχυτήτων 74HC595 στο Arduino
Σύνδεση αλλαγής ταχυτήτων 74HC595 στο Arduino

Βήμα 5

Ας γράψουμε ένα τέτοιο σκίτσο.

Αρχικά, ας συνδέσουμε τη βιβλιοθήκη SPI και αρχικοποιήσουμε τη διεπαφή SPI. Ας ορίσουμε τον πείρο 8 ως τον πινέλο επιλογής σκλάβων. Ας εκκαθαρίσουμε το shift register στέλνοντας την τιμή "0" σε αυτό. Αρχικοποιούμε τη σειριακή θύρα.

Για να ανάψετε ένα συγκεκριμένο LED χρησιμοποιώντας έναν καταχωρητή αλλαγής ταχυτήτων, πρέπει να εφαρμόσετε έναν αριθμό 8-bit στην είσοδό του. Για παράδειγμα, για να ανάψει το πρώτο LED, τροφοδοτούμε τον δυαδικό αριθμό 00000001, για το δεύτερο - 00000010, για τον τρίτο - 00000100 κ.λπ. Αυτοί οι δυαδικοί αριθμοί με δεκαδικά ψηφία σχηματίζουν την ακόλουθη ακολουθία: 1, 2, 4, 8, 16, 32, 64, 128 και είναι δύο από 0 έως 7.

Κατά συνέπεια, στον βρόχο () με τον αριθμό των LED, υπολογίζουμε εκ νέου από 0 έως 7. Η συνάρτηση pow (βάση, βαθμός) αυξάνει 2 στην ισχύ του μετρητή κύκλου. Οι μικροελεγκτές δεν λειτουργούν με μεγάλη ακρίβεια με αριθμούς τύπου "double", επομένως για να μετατρέψουμε το αποτέλεσμα σε ακέραιο, χρησιμοποιούμε τη συνάρτηση round (). Και μεταφέρουμε τον αριθμό που προκύπτει στον καταχωρητή shift. Για λόγους σαφήνειας, η οθόνη σειριακής θύρας εμφανίζει τις τιμές που λαμβάνονται κατά τη διάρκεια αυτής της λειτουργίας: το ένα διασχίζει τα ψηφία - τα LED ανάβουν σε ένα κύμα.

Σκίτσο για τον έλεγχο της αλλαγής ταχυτήτων μέσω του διαύλου SPI
Σκίτσο για τον έλεγχο της αλλαγής ταχυτήτων μέσω του διαύλου SPI

Βήμα 6

Τα LED ανάβουν με τη σειρά τους και παρατηρούμε ένα "κύμα" φώτων που ταξιδεύει. Οι λυχνίες LED ελέγχονται χρησιμοποιώντας έναν καταχωρητή shift, στον οποίο συνδεθήκαμε μέσω της διεπαφής SPI. Ως αποτέλεσμα, μόνο 3 ακίδες Arduino χρησιμοποιούνται για την οδήγηση 8 LED.

Μελετήσαμε το απλούστερο παράδειγμα του τρόπου λειτουργίας του Arduino με λεωφορείο SPI. Θα εξετάσουμε λεπτομερέστερα τη σύνδεση των καταχωρητών βάρδιας σε ένα ξεχωριστό άρθρο.

Συνιστάται: