Ανάγνωση δεδομένων I2c. Επαφές

10.09.2021

Όποιος έχει εμπλακεί στην ανάπτυξη ηλεκτρονικού εξοπλισμού έχει αντιμετωπίσει μια κατάσταση όπου, για να συντονιστούν τα επίπεδα σήματος, να δειγματιστούν και να αντιμετωπιστούν λειτουργικά πλήρεις κόμβοι, είναι απαραίτητο να χρησιμοποιηθεί ένας τεράστιος αριθμός ενδιάμεσων IC.
Για να αυξηθεί η απόδοση και να απλοποιηθούν οι λύσεις κυκλωμάτων, Philipsανέπτυξε έναν απλό αμφίδρομο δίαυλο δύο καλωδίων για τον λεγόμενο έλεγχο «inter-IC».
Το λεωφορείο ονομάστηκε InterIC, ή IIC (I2C) bus.

Επί του παρόντος, μόνο η Philips παράγει περισσότερους από 150 τύπους συσκευών συμβατών με I2C, λειτουργικά σχεδιασμένες για να λειτουργούν σε ηλεκτρονικό εξοπλισμό για διάφορους σκοπούς. Αυτά περιλαμβάνουν IC μνήμης, επεξεργαστές βίντεο και μονάδες επεξεργασίας σήματος ήχου και εικόνας, ADC και DAC, προγράμματα οδήγησης οθόνης LCD, επεξεργαστές με ενσωματωμένο ελεγκτή διαύλου I2C υλικού και πολλά άλλα.

Ο δίαυλος I2C είναι μια από τις τροποποιήσεις των σειριακών πρωτοκόλλων ανταλλαγής δεδομένων. Στην τυπική λειτουργία, τα σειριακά δεδομένα 8 bit μεταδίδονται με ταχύτητες έως 100 kbit/s και έως 400 kbit/s σε λειτουργία «γρήγορη». Για τη διεξαγωγή της διαδικασίας ανταλλαγής πληροφοριών στο δίαυλο I2C, χρησιμοποιούνται μόνο δύο σήματα: γραμμή δεδομένων SDA γραμμή συγχρονισμού SCL Για να εξασφαλιστεί η υλοποίηση της αμφίδρομης λειτουργίας του διαύλου χωρίς τη χρήση σύνθετων διαιτητών διαύλου, τα στάδια εξόδου των συσκευών που συνδέονται με το το λεωφορείο έχει μια ανοιχτή αποχέτευση ή έναν ανοιχτό συλλέκτη για να παρέχει τη λειτουργία στερέωσης "AND".

Ένας απλός σειριακός δίαυλος I2C δύο καλωδίων ελαχιστοποιεί τον αριθμό των συνδέσεων μεταξύ των IC, τα IC έχουν λιγότερες ακίδες και απαιτούνται λιγότερα ίχνη. Σαν άποτέλεσμα - πλακέτες τυπωμένων κυκλωμάτωνγίνονται απλούστερες και πιο τεχνολογικά προηγμένες στην παραγωγή. Το ενσωματωμένο πρωτόκολλο I2C εξαλείφει την ανάγκη για αποκωδικοποιητές διευθύνσεων και άλλη λογική εξωτερικής διαπραγμάτευσης.

Ο μέγιστος επιτρεπόμενος αριθμός τσιπ που είναι συνδεδεμένοι σε ένα δίαυλο περιορίζεται από τη μέγιστη χωρητικότητα διαύλου των 400 pF.

Ο αλγόριθμος καταστολής θορύβου υλικού που είναι ενσωματωμένος στα τσιπ διασφαλίζει την ακεραιότητα των δεδομένων σε συνθήκες σημαντικού θορύβου.
Όλες οι συσκευές που είναι συμβατές με I2C έχουν μια διεπαφή που τους επιτρέπει να επικοινωνούν μεταξύ τους μέσω του διαύλου, ακόμα κι αν η τάση τροφοδοσίας τους είναι σημαντικά διαφορετική. Το παρακάτω σχήμα δείχνει την αρχή της σύνδεσης πολλών IC με διαφορετικές τάσεις τροφοδοσίας σε έναν δίαυλο ανταλλαγής.

Κάθε συσκευή αναγνωρίζεται από μια μοναδική διεύθυνση και μπορεί να λειτουργήσει ως πομπός ή δέκτης, ανάλογα με τον σκοπό της συσκευής.

Επιπλέον, οι συσκευές μπορούν να ταξινομηθούν ως κύριοι και υποτελείς κατά τη μετάδοση δεδομένων. Η κύρια συσκευή είναι μια συσκευή που εκκινεί τη μετάδοση δεδομένων και παράγει σήματα συγχρονισμού. Σε αυτήν την περίπτωση, οποιαδήποτε διευθυνσιοδοτούμενη συσκευή θεωρείται slave σε σχέση με την κύρια.

Βάσει των προδιαγραφών της λειτουργίας του διαύλου, σε κάθε δεδομένη στιγμή μπορεί να υπάρχει μόνο ένα master στο δίαυλο, δηλαδή η συσκευή που διασφαλίζει την παραγωγή του σήματος SCL του διαύλου. Ο ηγέτης μπορεί να λειτουργήσει τόσο ως ηγέτης-πομπός όσο και ως ηγέτης-δέκτης. Ωστόσο, ο δίαυλος σάς επιτρέπει να έχετε πολλούς κύριους, επιβάλλοντας ορισμένα χαρακτηριστικά της συμπεριφοράς τους στη δημιουργία σημάτων ελέγχου και παρακολουθώντας την κατάσταση του διαύλου. Η δυνατότητα σύνδεσης περισσότερων του ενός master στο δίαυλο σημαίνει ότι περισσότερα από ένα master μπορούν να επιχειρήσουν να ξεκινήσουν μια μεταφορά ταυτόχρονα. Για την εξάλειψη των «συγκρούσεων» που μπορεί να προκύψουν σε αυτήν την περίπτωση, έχει αναπτυχθεί μια διαδικασία διαιτησίας - η συμπεριφορά του πλοιάρχου όταν ανιχνεύεται «σύλληψη» του διαύλου από άλλο πλοίαρχο.

Διαδικασία συγχρονισμού δύο συσκευών Αυτή η διαδικασία βασίζεται στο γεγονός ότι όλες οι συσκευές I2C είναι συνδεδεμένες στο δίαυλο σύμφωνα με τον κανόνα καλωδίωσης ΚΑΙ. αρχική κατάστασηΚαι τα δύο σήματα SDA και SCL είναι υψηλά.

κατάσταση START και STOP

Η διαδικασία ανταλλαγής ξεκινά με την κύρια μονάδα να δημιουργεί την κατάσταση START - η κύρια μονάδα δημιουργεί μια μετάβαση του σήματος γραμμής SDA από την κατάσταση HIGH στην κατάσταση LOW σε υψηλό επίπεδο στη γραμμή SCL. Αυτή η μετάβαση γίνεται αντιληπτή από όλες τις συσκευές που είναι συνδεδεμένες στο δίαυλο ως ένδειξη έναρξης της διαδικασίας ανταλλαγής.

Η παραγωγή του σήματος ρολογιού είναι πάντα ευθύνη του πλοιάρχου. Κάθε κύριος παράγει το δικό του σήμα ρολογιού κατά την αποστολή δεδομένων μέσω του διαύλου.

Η διαδικασία ανταλλαγής τελειώνει με την κύρια μονάδα να δημιουργεί την κατάσταση STOP - τη μετάβαση της κατάστασης γραμμής SDA από μια κατάσταση χαμηλής σε κατάσταση ΥΨΗΛΗ όταν η κατάσταση γραμμής SCL είναι ΥΨΗΛΗ.

Οι καταστάσεις START και STOP δημιουργούνται πάντα από το master. Ο δίαυλος θεωρείται απασχολημένος αφού εντοπιστεί η κατάσταση START. Το λεωφορείο θεωρείται ελεύθερο λίγο καιρό μετά την καταγραφή της κατάστασης STOP.

Κατά την αποστολή μηνυμάτων μέσω του διαύλου I2C, κάθε κύριος παράγει το δικό του σήμα ρολογιού στη γραμμή SCL.

Αφού σχηματιστεί η κατάσταση START, η κύρια μονάδα χαμηλώνει την κατάσταση της γραμμής SCL στην κατάσταση LOW και ορίζει το πιο σημαντικό bit του πρώτου byte του μηνύματος στη γραμμή SDA. Ο αριθμός των byte σε ένα μήνυμα δεν είναι περιορισμένος.

Η προδιαγραφή διαύλου I2C επιτρέπει αλλαγές στη γραμμή SDA μόνο όταν η γραμμή SCL είναι LOW.

Τα δεδομένα είναι έγκυρα και θα πρέπει να παραμένουν σταθερά μόνο κατά την κατάσταση ΥΨΗΛΟΥ ρολογιού.

Για να επιβεβαιωθεί η λήψη ενός byte από τον κύριο - πομπό από τον slave - δέκτη, εισάγεται ένα ειδικό bit επιβεβαίωσης στην προδιαγραφή του πρωτοκόλλου ανταλλαγής μέσω του διαύλου I2C, που ορίζεται στον δίαυλο SDA μετά τη λήψη του 8ου bit δεδομένων.

Επιβεβαίωση

Έτσι, η μεταφορά 8 bit δεδομένων από τον πομπό στον δέκτη ολοκληρώνεται με έναν επιπλέον κύκλο (σχηματισμός του 9ου παλμού ρολογιού της γραμμής SCL), κατά τον οποίο ο δέκτης θέτει τη στάθμη σήματος χαμηλά στη γραμμή SDA, ως σημάδι επιτυχούς λήψης του byte.

Απαιτείται επιβεβαίωση κατά τη μεταφορά δεδομένων. Ο αντίστοιχος παλμός συγχρονισμού δημιουργείται από την κύρια μονάδα. Ο πομπός απελευθερώνει (HIGH) τη γραμμή SDA για τη διάρκεια του ρολογιού επιβεβαίωσης. Ο δέκτης πρέπει να κρατά τη γραμμή SDA κατά την ΥΨΗΛΗ κατάσταση του ρολογιού επιβεβαίωσης σε σταθερή κατάσταση LOW.

Σε περίπτωση που η υποτελής μονάδα δέκτη δεν μπορεί να επιβεβαιώσει τη διεύθυνσή της (για παράδειγμα, όταν αυτή τη στιγμή εκτελεί ορισμένες λειτουργίες σε πραγματικό χρόνο), η γραμμή δεδομένων πρέπει να παραμείνει ΥΨΗΛΗ. Η κύρια μονάδα μπορεί στη συνέχεια να εκδώσει ένα σήμα STOP για να διακόψει τη μεταφορά δεδομένων.

Εάν ένας κύριος-δέκτης εμπλέκεται στη μεταφορά, τότε πρέπει να υποδεικνύει το τέλος της μεταφοράς στον slave-πομπό μη επιβεβαιώνοντας το τελευταίο byte. Η υποτελής μονάδα εκπομπής πρέπει να απελευθερώσει τη γραμμή δεδομένων για να επιτρέψει στον κύριο να εκδώσει ένα σήμα STOP ή να επαναλάβει το σήμα START.

Ο συγχρονισμός πραγματοποιείται χρησιμοποιώντας μια σύνδεση στη γραμμή SCL χρησιμοποιώντας τον κανόνα AND.

Αυτό σημαίνει ότι η κύρια μονάδα δεν έχει αποκλειστικό έλεγχο στη μετάβαση της γραμμής SCL από LOW σε HIGH. Σε περίπτωση που ο slave χρειάζεται επιπλέον χρόνο για να επεξεργαστεί ένα ληφθέν bit, έχει τη δυνατότητα να κρατήσει τη γραμμή SCL χαμηλά μέχρι να είναι έτοιμο να λάβει το επόμενο bit. Έτσι, η γραμμή SCL θα είναι LOW για το μεγαλύτερο χρονικό διάστημα LOW.

Οι συσκευές με μικρότερη περίοδο LOW θα εισέλθουν σε κατάσταση αδράνειας έως ότου λήξει η μεγάλη περίοδος. Όταν όλες οι ενεργοποιημένες συσκευές έχουν ολοκληρώσει την περίοδο LOW ρολογιού τους, η γραμμή SCL θα πάει ΥΨΗΛΗ. Όλες οι συσκευές θα αρχίσουν να πηγαίνουν ΥΨΗΛΑ στην περίοδο του ρολογιού τους. Η πρώτη συσκευή που θα εξαντληθεί από αυτήν την περίοδο θα ρυθμίσει ξανά τη γραμμή SCL LOW. Έτσι, η περίοδος LOW της γραμμής ρολογιού SCL καθορίζεται από τη μεγαλύτερη περίοδο ρολογιού από όλες τις εμπλεκόμενες συσκευές και η περίοδος HIGH καθορίζεται από τη συντομότερη περίοδο ρολογιού των συσκευών.

Ο μηχανισμός συγχρονισμού μπορεί να χρησιμοποιηθεί από τους δέκτες ως μέσο ελέγχου της μεταφοράς δεδομένων σε επίπεδο byte και bit.

Σε επίπεδο byte, εάν μια συσκευή μπορεί να λάβει byte δεδομένων με υψηλό ρυθμό, αλλά απαιτεί συγκεκριμένο χρονικό διάστημα για να αποθηκεύσει το ληφθέν byte ή να προετοιμαστεί για λήψη του επόμενου, τότε μπορεί να κρατήσει τη γραμμή SCL LOW μετά τη λήψη και την αναγνώριση του byte, τοποθετώντας έτσι τον πομπό σε κατάσταση αδράνειας.

Σε επίπεδο bit, μια συσκευή όπως ένας μικροελεγκτής χωρίς ενσωματωμένα κυκλώματα υλικού I2C ή με περιορισμένα κυκλώματα μπορεί να επιβραδύνει τη συχνότητα ρολογιού επεκτείνοντας την περίοδο LOW της. Με αυτόν τον τρόπο, η ταχύτητα μετάδοσης οποιουδήποτε πλοιάρχου προσαρμόζεται στην ταχύτητα της αργής συσκευής.

Διεύθυνση στο λεωφορείο I2C

Κάθε συσκευή που είναι συνδεδεμένη στο δίαυλο μπορεί να απευθυνθεί μέσω λογισμικού σε μια μοναδική διεύθυνση.

Για να επιλέξετε έναν παραλήπτη μηνύματος, ο παρουσιαστής χρησιμοποιεί ένα μοναδικό στοιχείο διεύθυνσης στη μορφή αποστολής. Όταν χρησιμοποιούνται συσκευές του ίδιου τύπου, τα IC έχουν συχνά έναν πρόσθετο επιλογέα διευθύνσεων, ο οποίος μπορεί να υλοποιηθεί είτε ως πρόσθετες είσοδοι ψηφιακών επιλογέων διεύθυνσης είτε ως αναλογική είσοδος. Στην περίπτωση αυτή, οι διευθύνσεις τέτοιων συσκευών του ίδιου τύπου κατανέμονται στο χώρο διευθύνσεων των συσκευών που είναι συνδεδεμένες στο δίαυλο.

Σε κανονική λειτουργία, χρησιμοποιείται διευθυνσιοδότηση 7-bit.

Η διαδικασία διευθυνσιοδότησης στο δίαυλο I2C είναι ότι το πρώτο byte μετά το σήμα START καθορίζει σε ποιο slave απευθύνεται ο κύριος για τον κύκλο ανταλλαγής. Η εξαίρεση είναι η διεύθυνση "Γενική κλήση", η οποία απευθύνεται σε όλες τις συσκευές του διαύλου. Όταν χρησιμοποιείται αυτή η διεύθυνση, όλες οι συσκευές θα πρέπει θεωρητικά να στέλνουν ένα σήμα επιβεβαίωσης. Ωστόσο, οι συσκευές που μπορούν να χειριστούν μια «γενική κλήση» είναι σπάνιες στην πράξη.

Τα πρώτα επτά bit του πρώτου byte σχηματίζουν την υποτελή διεύθυνση. Το όγδοο, λιγότερο σημαντικό bit, καθορίζει την κατεύθυνση μεταφοράς δεδομένων. "Μηδέν" σημαίνει ότι ο κύριος θα γράψει πληροφορίες στην επιλεγμένη υποτελή. "Ένα" σημαίνει ότι ο κύριος θα διαβάσει πληροφορίες από τον δούλο.

Μετά την αποστολή της διεύθυνσης, κάθε συσκευή στο σύστημα συγκρίνει τα πρώτα επτά bit μετά το σήμα START με τη διεύθυνσή της. Εάν υπάρχει αντιστοιχία, η συσκευή θεωρεί ότι επιλέγεται ως βοηθητικός δέκτης ή ως υποτελής πομπός, ανάλογα με το bit κατεύθυνσης.

Η υποτελής διεύθυνση μπορεί να αποτελείται από ένα σταθερό και προγραμματιζόμενο τμήμα.

Συμβαίνει συχνά ότι το σύστημα θα έχει πολλές συσκευές του ίδιου τύπου (για παράδειγμα, τσιπ μνήμης ή προγράμματα οδήγησης ένδειξης LED), επομένως χρησιμοποιώντας το προγραμματιζόμενο τμήμα της διεύθυνσης καθίσταται δυνατή η σύνδεση του μέγιστου δυνατού αριθμού τέτοιων συσκευών στο δίαυλο . Ο αριθμός των προγραμματιζόμενων bit στη διεύθυνση εξαρτάται από τον αριθμό των ελεύθερων ακίδων του μικροκυκλώματος. Μερικές φορές χρησιμοποιείται ένας ακροδέκτης με μια αναλογική ρύθμιση ενός προγραμματιζόμενου εύρους διευθύνσεων, όπως, για παράδειγμα, εφαρμόζεται στο IC SAA1064. Επιπλέον, ανάλογα με το δυναμικό σε αυτόν τον ακροδέκτη διεύθυνσης του IC, είναι δυνατό να μετατοπιστεί ο χώρος διευθύνσεων του οδηγού έτσι ώστε τα IC του ίδιου τύπου να μην έρχονται σε σύγκρουση μεταξύ τους στον κοινό δίαυλο.

Όλα τα IC που υποστηρίζουν τη λειτουργία στο πρότυπο διαύλου I2C έχουν ένα σύνολο σταθερών διευθύνσεων, η λίστα των οποίων καθορίζεται από τον κατασκευαστή στις περιγραφές του ελεγκτή.

Ο συνδυασμός bit διεύθυνσης 11110XX έχει δεσμευτεί για διευθυνσιοδότηση 10-bit.

ΣΕ γενική εικόναΗ διαδικασία ανταλλαγής στο δίαυλο από τη στιγμή που σχηματίζεται η κατάσταση START έως την κατάσταση STOP μπορεί να απεικονιστεί από το ακόλουθο σχήμα:

Όπως προκύπτει από τις προδιαγραφές των ελαστικών, επιτρέπονται τόσο απλά μορφές ανταλλαγής, και σε συνδυασμό, όταν στο διάστημα από την κατάσταση START έως την κατάσταση STOP, το master και το slave μπορούν να λειτουργήσουν και ως δέκτης και ως πομπός δεδομένων. Μπορούν να χρησιμοποιηθούν συνδυασμένες μορφές, για παράδειγμα, για τη διαχείριση της σειριακής μνήμης.
Κατά τη διάρκεια του πρώτου byte δεδομένων, μπορεί να περάσει μια διεύθυνση μνήμης, η οποία γράφεται σε έναν εσωτερικό καταχωρητή κλειδώματος. Μετά την επανάληψη του σήματος START και της υποτελούς διεύθυνσης, τα δεδομένα ανακτώνται από τη μνήμη. Όλες οι αποφάσεις σχετικά με την αυτόματη αύξηση ή μείωση μιας διεύθυνσης στην οποία είχε γίνει πρόσβαση στο παρελθόν λαμβάνονται από τον σχεδιαστή μιας συγκεκριμένης συσκευής. Επομένως, σε κάθε περίπτωση Ο καλύτερος τρόποςΓια να αποφύγετε μια ανεξέλεγκτη κατάσταση στο λεωφορείο, πριν χρησιμοποιήσετε ένα νέο (ή αχρησιμοποίητο προηγουμένως) IC, θα πρέπει να μελετήσετε προσεκτικά την περιγραφή του (φύλλο δεδομένων), έχοντας λάβει από τον ιστότοπο του κατασκευαστή. Επιπλέον, οι κατασκευαστές συχνά τοποθετούν περισσότερα αναλυτικές οδηγίεςμε αίτηση.

Σε κάθε περίπτωση, σύμφωνα με τις προδιαγραφές του διαύλου, όλες οι συσκευές υπό ανάπτυξη πρέπει να επαναφέρουν τη λογική του διαύλου κατά τη λήψη ενός σήματος START ή επανεκκίνησης και να προετοιμαστούν για τη λήψη της διεύθυνσης.

Ωστόσο, τα κύρια προβλήματα με τη χρήση του διαύλου I2C προκύπτουν ακριβώς επειδή οι προγραμματιστές που «αρχίζουν» να εργάζονται με το δίαυλο I2C δεν λαμβάνουν υπόψη το γεγονός ότι ο κύριος (συχνά ένας μικροεπεξεργαστής) δεν έχει αποκλειστικό δικαίωμα σε καμία από τις γραμμές διαύλου .

Επέκταση I2C

Ο τυπικός δίαυλος I2C με ρυθμό μεταφοράς δεδομένων 100 kbit/s και διεύθυνση 7 bit υπάρχει για περισσότερα από 10 χρόνια αμετάβλητος. Ο δίαυλος I2C είναι ευρέως αποδεκτός ως το πρότυπο για εκατοντάδες τύπους τσιπ που παράγονται από τη Philips και άλλους προμηθευτές. Επί του παρόντος, η προδιαγραφή διαύλου I2C έχει επεκταθεί προς δύο κατευθύνσεις: αύξηση της ταχύτητας και επέκταση του χώρου διευθύνσεων για την επέκταση της γκάμα των συσκευών που αναπτύχθηκαν πρόσφατα.

Εισαγωγή της προδιαγραφής «γρήγορης» λειτουργίας, η οποία επιτρέπει τον τετραπλασιασμό του ρυθμού μεταφοράς δεδομένων στα 400 kBit/sec. Η ανάγκη για αυτήν την «επέκταση» του προτύπου απαιτήθηκε λόγω της ανάγκης μεταφοράς μεγάλων ποσοτήτων πληροφοριών και, ως εκ τούτου, της ανάγκης αύξησης της χωρητικότητας του καναλιού.

Εισαγωγή της προδιαγραφής "διευθυνσιοδότηση 10 bit", που επιτρέπει τη χρήση 1024 πρόσθετων διευθύνσεων, επειδή Οι περισσότερες από τις 112 διευθύνσεις που επιτρέπονται από τη διευθυνσιοδότηση 7-bit έχουν ήδη χρησιμοποιηθεί περισσότερες από μία φορές. Για την αποφυγή προβλημάτων με την τοποθέτηση διευθύνσεων νέων συσκευών, είναι επιθυμητό να υπάρχει μεγαλύτερος αριθμός συνδυασμών διευθύνσεων. Μια περίπου δεκαπλάσια αύξηση στον αριθμό των διαθέσιμων διευθύνσεων επιτεύχθηκε χρησιμοποιώντας τη νέα διευθυνσιοδότηση 10-bit.

Όλες οι νέες συσκευές με διεπαφή I2C λειτουργούν γρήγορη λειτουργία. Κατά προτίμηση, θα πρέπει να μπορούν να λαμβάνουν και/ή να μεταδίδουν δεδομένα στα 400 kbit/s. Τουλάχιστον, πρέπει να μπορούν να εισάγουν συγχρονισμό σε γρήγορη λειτουργία, προκειμένου να μειωθεί ο ρυθμός μετάδοσης (επεκτείνοντας την περίοδο LOW SCL) σε μια αποδεκτή τιμή.

Οι γρήγορες συσκευές είναι γενικά συμβατές προς τα πάνω, πράγμα που σημαίνει ότι μπορούν να λειτουργήσουν με τυπικές συσκευές σε αργό δίαυλο. Είναι προφανές ότι τυπικές συσκευέςδεν μπορούν να λειτουργήσουν σε γρήγορο λεωφορείο επειδή δεν μπορούν να συγχρονιστούν με υψηλή ταχύτητα και η κατάστασή τους θα γίνει απρόβλεπτη. Οι συσκευές Fast Slave μπορούν να έχουν διεύθυνση 7-bit ή 10-bit. Ωστόσο, η διεύθυνση 7-bit είναι προτιμότερη, καθώς η εφαρμογή υλικού της είναι απλούστερη και το μήκος του μηνύματος είναι μικρότερο. Συσκευές με διευθύνσεις 7 bit και 10 bit μπορούν να χρησιμοποιηθούν ταυτόχρονα στον ίδιο δίαυλο, ανεξάρτητα από τον ρυθμό baud. Τόσο οι υπάρχοντες όσο και οι μελλοντικοί κύριοι θα μπορούν να δημιουργούν διευθύνσεις 7-bit και 10-bit.

Στη γρήγορη λειτουργία, το πρωτόκολλο, η μορφή, τα λογικά επίπεδα και το μέγιστο χωρητικό φορτίο των γραμμών διαύλου παραμένουν αμετάβλητα. Ο αλγόριθμος συγχρονισμού για τις γραμμές SDA και SCL δεν έχει αλλάξει. Ωστόσο, οι «γρήγορες» συσκευές δεν απαιτείται να είναι συμβατές με συσκευές CBUS, καθώς δεν μπορούν να λειτουργήσουν σε υψηλές ταχύτητες. Κυκλώματα εισόδου γρήγορες συσκευέςπρέπει να έχει ενσωματωμένη καταστολή υπέρτασης και σκανδάλη Schmitt και στις δύο γραμμές Η προσωρινή μνήμη εξόδου των γρήγορων συσκευών πρέπει να έχει καταρράκτη με έλεγχο του χρόνου πτώσης των γραμμών SDA και SCL. Κατά κανόνα, όταν η τάση ταχείας τροφοδοσίας αποτυγχάνει, εξόδους συσκευής, τα λεωφορεία που συνδέονται με τις γραμμές I2C πρέπει να μεταβούν στην τρίτη κατάσταση. Ο σχεδιασμός του κυκλώματος των σταδίων εξόδου έχει υποστεί αλλαγές για να διασφαλιστεί ο χρόνος ανύψωσης του προπορευόμενου άκρου (μετάβαση από την κατάσταση LOW στην ΥΨΗΛΗ). Εάν για φορτία διαύλου έως 200 pF αυτός ο ρόλος εκτελείται από αντιστάσεις έλξης, τότε για φορτία από 200 pF έως 400 pF αυτή η λειτουργία εκτελείται από μια πηγή ρεύματος ή ένα κύκλωμα αντίστασης μεταγωγής που παρέχει «αναγκαστική» μεταγωγή των γραμμών διαύλου I2C .

Η διευθυνσιοδότηση 10-bit επίσης δεν αλλάζει τη μορφή διαύλου. Για αυτό, χρησιμοποιείται ο συνδυασμός δεσμευμένων διευθύνσεων 1111ХХХ των πρώτων επτά bit του πρώτου byte. Η διευθυνσιοδότηση 10-bit δεν επηρεάζει την υπάρχουσα διεύθυνση 7-bit. Συσκευές με διευθυνσιοδότηση 7-bit και 10-bit μπορούν να συνδεθούν στον ίδιο δίαυλο. Αν και υπάρχουν οκτώ πιθανοί συνδυασμοί της ακολουθίας 1111XXX, χρησιμοποιούνται μόνο τέσσερις - 11110XX. Συνδυασμοί όπως το 11111XX δεσμεύονται για περαιτέρω βελτιώσεις ελαστικών. Εκχωρήσεις bit των δύο πρώτων byte Η διεύθυνση 10-bit σχηματίζεται από τα δύο πρώτα byte. Τα πρώτα επτά bit του πρώτου byte είναι ένας συνδυασμός της μορφής 11110XX, όπου τα δύο λιγότερο σημαντικά bit (XX) είναι τα δύο πιο σημαντικά (9 και 8) bit της διεύθυνσης 10-bit. Το όγδοο bit του πρώτου byte είναι το bit κατεύθυνσης.
Ένα "μηδέν" σε αυτό το bit σημαίνει ότι ο κύριος πρόκειται να γράψει πληροφορίες στο slave και ένα "ένα" σημαίνει ότι ο κύριος πρόκειται να διαβάσει πληροφορίες από τον slave. Εάν το bit κατεύθυνσης είναι μηδέν, τότε το δεύτερο byte περιέχει τα υπόλοιπα 8 bit της διεύθυνσης των 10 bit. Εάν το bit κατεύθυνσης είναι ένα, τότε το επόμενο byte περιέχει τα δεδομένα που μεταφέρονται από το slave στο master.

Συμπερασματικά, θα πρέπει να σημειωθεί ότι το πρότυπο διαύλου I2C εφαρμόζει πολύ απλά τη διαιτησία σύγκρουσης - λύνει το πρόβλημα της ταυτόχρονης αρχικοποίησης της ανταλλαγής στο δίαυλο από πολλούς πλοιάρχους, χωρίς απώλεια δεδομένων.

Αυτό και άλλα, πιο συγκεκριμένα χαρακτηριστικά της χρήσης του διαύλου I2C, της εφαρμογής και της χρήσης του, βρίσκονται απευθείας στον ιστότοπο Philips .

Κατά την προετοιμασία της περιγραφής χρησιμοποιήθηκαν τα υλικά που παρουσιάζονται στο άρθρο

Η διεπαφή I2C (ή αλλιώς IIC) είναι ένα αρκετά διαδεδομένο δίκτυο σειριακή διεπαφή, που εφευρέθηκε από τη Philips και κερδίζει σχετικά δημοτικότητα υψηλή ταχύτηταμετάδοση δεδομένων (συνήθως έως 100 kbit/s, σε σύγχρονα μικροκυκλώματα έως 400 kbit/s), χαμηλό κόστος και ευκολία υλοποίησης.

1) Η φυσικη.

Φυσικά, το δίκτυο είναι ένας δίαυλος δύο καλωδίων, οι γραμμές του οποίου καλούνται ΔΕΔΟΜΕΝΑΚαι ΡΟΛΟΪ(απαιτείται επίσης ένα τρίτο καλώδιο - γείωση, αλλά η διεπαφή ονομάζεται συνήθως δύο καλωδίων λόγω του αριθμού των καλωδίων σήματος). Αντίστοιχα, τα δεδομένα μεταδίδονται μέσω της γραμμής DATA και η γραμμή CLOCK χρησιμοποιείται για χρονομέτρηση. Στο λεωφορείο μπορούν να συνδεθούν έως και 128 συνδρομητές, ο καθένας με το δικό του μοναδικός αριθμός. Σε κάθε δεδομένη στιγμή, οι πληροφορίες μεταδίδονται από έναν μόνο συνδρομητή και μόνο προς μία κατεύθυνση.

Οι συσκευές I2C έχουν έξοδο "ανοιχτού συλλέκτη". Όταν το τρανζίστορ εξόδου είναι κλειστό, ρυθμίζεται ένα υψηλό επίπεδο στην αντίστοιχη γραμμή μέσω μιας εξωτερικής αντίστασης έλξης· όταν το τρανζίστορ εξόδου είναι ανοιχτό, τραβάει την αντίστοιχη γραμμή προς τη γείωση και ρυθμίζεται μια χαμηλή στάθμη σε αυτήν (βλ. εικόνα) . Οι αντιστάσεις έχουν μια τιμή από πολλά kiloOhms έως αρκετές δεκάδες kiloOhms (όσο μεγαλύτερη είναι η ταχύτητα, τόσο χαμηλότερη είναι η τιμή των αντιστάσεων, αλλά τόσο μεγαλύτερη είναι η κατανάλωση ισχύος). Στο σχήμα, τα τρίγωνα στην είσοδο δείχνουν ότι οι είσοδοι είναι υψηλής σύνθετης αντίστασης και, κατά συνέπεια, δεν επηρεάζουν τα επίπεδα σήματος στις γραμμές, αλλά μόνο «διαβάζουν» αυτά τα επίπεδα. Συνήθως χρησιμοποιούνται επίπεδα 5V ή 3,3V.

2) Λογικές.

Οποιαδήποτε συσκευή στο δίαυλο I2C μπορεί να είναι ένας από τους δύο τύπους: Master (κύριος) ή Slave (slave). Η ανταλλαγή δεδομένων πραγματοποιείται σε συνεδρίες. Η «κύρια» συσκευή ελέγχει πλήρως τη συνεδρία: ξεκινά τη συνεδρία ανταλλαγής δεδομένων, ελέγχει τη μετάδοση στέλνοντας παλμούς ρολογιού στη γραμμή Ρολογιού και τερματίζει τη συνεδρία.

Επιπλέον, ανάλογα με την κατεύθυνση μετάδοσης δεδομένων, και οι δύο συσκευές "Master" και "Slave" μπορούν να είναι "Receivers" ή "Transmitters". Όταν ο "Κύριος" λαμβάνει δεδομένα από το "Slave", είναι ο "Δέκτης" και ο "Slave" είναι ο "Πομπός". Όταν ο "Slave" λαμβάνει δεδομένα από τον "Master", τότε είναι ήδη ένας "Receiver" και ο "Master" σε αυτήν την περίπτωση είναι ένας "Πομπός".

Μην συγχέετε τον τύπο συσκευής "Κύρια" με την κατάσταση "Πομπός". Παρά το γεγονός ότι όταν ο "Master" διαβάζει πληροφορίες από το "Slave", ο τελευταίος τοποθετεί δεδομένα στο δίαυλο δεδομένων, το κάνει μόνο όταν το "Master" το επιτρέπει ορίζοντας το κατάλληλο επίπεδο στη γραμμή Ρολογιού. Έτσι, αν και το "Slave" σε αυτήν την περίπτωση ελέγχει το δίαυλο δεδομένων, η ίδια η ανταλλαγή ελέγχεται ακόμα από τον "Master".

Σε κατάσταση αναμονής (όταν δεν υπάρχει περίοδος ανταλλαγής δεδομένων), και οι δύο γραμμές σήματος (Δεδομένα και Ρολόι) βρίσκονται σε κατάσταση υψηλού επιπέδου (τραβηγμένη στην τροφοδοσία).

Κάθε συνεδρία ανταλλαγής ξεκινά με τον «Κύριο» να υποβάλλει τη λεγόμενη συνθήκη Έναρξης. "Συνθήκη έναρξης" είναι μια αλλαγή στο επίπεδο στη γραμμή δεδομένων από υψηλό σε χαμηλό όταν υπάρχει υψηλό επίπεδο στη γραμμή Ρολογιού.

Μετά την υποβολή της "Συνθήκης έναρξης", το πρώτο πράγμα που πρέπει να πει ο "Master" είναι με ποιον θέλει να επικοινωνήσει και να υποδείξει τι ακριβώς θέλει - να μεταφέρει δεδομένα στη συσκευή ή να τα διαβάσει από αυτήν. Για να γίνει αυτό, εκδίδει στο δίαυλο τη διεύθυνση 7-bit της συσκευής "Slave" (αλλιώς λένε: "διευθύνει τη συσκευή "Slave") με την οποία θέλει να επικοινωνήσει και ένα bit που δείχνει την κατεύθυνση μεταφοράς δεδομένων (0 - εάν από το "Master" στο "Slave" και 1 - εάν από το "Slave" στον "Master"). Το πρώτο byte μετά την υποβολή της συνθήκης "Έναρξη" γίνεται πάντα αντιληπτό από όλους τους "Slaves" ως διευθυνσιοδοτούμενο.

Δεδομένου ότι η κατεύθυνση μεταφοράς δεδομένων υποδεικνύεται κατά το άνοιγμα μιας συνεδρίας μαζί με τη διεύθυνση της συσκευής, για να αλλάξετε αυτή την κατεύθυνση, είναι απαραίτητο να ανοίξετε μια άλλη συνεδρία (υποβάλετε ξανά τη συνθήκη "Έναρξη", απευθυνθείτε στην ίδια συσκευή και υποδείξτε μια νέα μεταφορά κατεύθυνση).

Αφού ο «Κύριος» πει σε ποιον ακριβώς απευθύνεται και υποδείξει την κατεύθυνση μεταφοράς δεδομένων, ξεκινά η πραγματική μεταφορά: ο «Κύριος» εκδίδει δεδομένα στο λεωφορείο για τον «Δούλο» ή τα λαμβάνει από αυτόν. Αυτό το μέρος της ανταλλαγής (ποια δεδομένα και με ποια σειρά πρέπει να στείλει ο "Master" στο λεωφορείο, ώστε η συσκευή να το καταλάβει και να κάνει αυτό που χρειάζεται) έχει ήδη καθοριστεί από κάθε συγκεκριμένη συσκευή.

Κάθε συνεδρία ανταλλαγής ροών από τον «Κύριο» τελειώνει με τη λεγόμενη συνθήκη Διακοπής, η οποία συνίσταται στην αλλαγή του επιπέδου στη γραμμή Δεδομένων από χαμηλό σε υψηλό, και πάλι παρουσία υψηλού επιπέδου στη γραμμή Ρολογιού. Εάν δημιουργηθεί μια συνθήκη Stop στο δίαυλο, τότε όλες οι ανοιχτές συνεδρίες ανταλλαγής κλείνουν.

Εντός της συνεδρίας απαγορεύονται οποιεσδήποτε αλλαγές στη γραμμή Δεδομένων ενώ η γραμμή του Ρολογιού είναι υψηλή, καθώς αυτή τη στιγμή τα δεδομένα διαβάζονται από τον «Δέκτη». Εάν προκύψουν τέτοιες αλλαγές, σε κάθε περίπτωση θα εκληφθούν είτε ως συνθήκη «Έναρξη» (η οποία θα προκαλέσει τον τερματισμό της ανταλλαγής δεδομένων) είτε ως συνθήκη «Διακοπή» (που θα σημαίνει το τέλος της τρέχουσας συνεδρίας ανταλλαγής). Κατά συνέπεια, κατά τη διάρκεια μιας συνεδρίας ανταλλαγής, μπορεί να πραγματοποιηθεί εγκατάσταση δεδομένων από τον "Πομπό" (ρύθμιση του απαιτούμενου επιπέδου στη γραμμή δεδομένων)
μόνο όταν η γραμμή του ρολογιού είναι χαμηλή.

Λίγα λόγια για το ποια είναι σε αυτή την περίπτωση η διαφορά μεταξύ «τερματισμού ανταλλαγής δεδομένων» και «λήξης της συνεδρίας ανταλλαγής». Κατ' αρχήν, ο «Κύριος» επιτρέπεται, χωρίς να κλείσει την πρώτη συνεδρία ανταλλαγής, να ανοίξει μία ή περισσότερες συνεδρίες ανταλλαγής με τους ίδιους (για παράδειγμα, όπως προαναφέρθηκε, για να αλλάξει την κατεύθυνση μεταφοράς δεδομένων) ή ακόμα και με άλλους «Slaves». , υποβολή νέας συνθήκης «Έναρξη» χωρίς την κατάθεση «Διακοπή» - προϋποθέσεις για το κλείσιμο της προηγούμενης συνεδρίας. Ελέγξτε τη γραμμή δεδομένων για να απαντήσετε στο "Master", σε αυτήν την περίπτωση θα επιτρέπεται στη συσκευή στην οποία το "Master"γύρισε τελευταίοςΩστόσο, η παλιά συνεδρία δεν μπορεί να θεωρηθεί ολοκληρωμένη. Και για αυτο. Για να επιταχύνουν τη λειτουργία, πολλές συσκευές (για παράδειγμα, 24Cxx eeprom) τοποθετούν τα δεδομένα που λαμβάνονται από το "Master" σε ένα buffer και αρχίζουν να ασχολούνται με αυτά τα δεδομένα που λαμβάνονται μόνο αφού λάβουν ένα σήμα σχετικά με το τέλος της συνεδρίας ανταλλαγής (δηλ. , «Συνθήκες διακοπής»).

Δηλαδή, για παράδειγμα, εάν υπάρχουν 2 μάρκες eeprom 24Cxx που κρέμονται στο δίαυλο και ανοίξατε μια περίοδο λειτουργίας εγγραφής σε ένα τσιπ και μεταφέρατε δεδομένα σε αυτό για εγγραφή και, στη συνέχεια, χωρίς να κλείσετε αυτήν την πρώτη περίοδο λειτουργίας, ανοίξατε μια νέα περίοδο λειτουργίας για εγγραφή στο ένα άλλο τσιπ, στη συνέχεια η πραγματική εγγραφή και στο πρώτο και το δεύτερο μικροκύκλωμα θα συμβεί μόνο μετά τον σχηματισμό μιας «συνθήκης διακοπής» στο λεωφορείο, η οποία θα κλείσει και τις δύο συνεδρίες. Αφού λάβει δεδομένα από το "Master", το eeprom τα τοποθετεί σε ένα εσωτερικό buffer και περιμένει το τέλος της συνεδρίας για να ξεκινήσει η πραγματική διαδικασία εγγραφής από τον εσωτερικό buffer του απευθείας στο eeprom. Δηλαδή, εάν μετά τη μεταφορά των δεδομένων για εγγραφή στο πρώτο mikrukh, δεν κλείσατε αυτήν τη συνεδρία, ανοίξατε μια δεύτερη περίοδο λειτουργίας και στείλατε τα δεδομένα για εγγραφή στο δεύτερο mikrukh και, στη συνέχεια, χωρίς να δημιουργήσετε μια συνθήκη διακοπής, γυρίσατε εκτός λειτουργίας, τότε τα δεδομένα δεν θα καταγραφούν στην πραγματικότητα ούτε στο πρώτο τσιπ ούτε στο δεύτερο. Ή, για παράδειγμα, εάν γράφετε δεδομένα εναλλάξ σε δύο mikrukhs, τότε καταρχήν μπορείτε να ανοίξετε μια συνεδρία για να γράψετε στην πρώτη, στη συνέχεια μια άλλη συνεδρία για να γράψετε στη δεύτερη, μετά μια τρίτη συνεδρία για να γράψετε ξανά στην πρώτη κ.λπ. , αλλά εάν δεν κλείσετε αυτές τις περιόδους σύνδεσης, αυτό θα οδηγήσει τελικά σε υπερχείλιση εσωτερικών buffer και τελικά απώλεια δεδομένων.

Εδώ μπορούμε να δώσουμε την ακόλουθη αναλογία: μαθητές σε μια τάξη («σκλάβοι») και δάσκαλος («κύριος»). Ας πούμε ότι ο δάσκαλος κάλεσε έναν μαθητή (ας είναι ο Βάσια) στον πίνακα και του ζήτησε να λύσει κάποιο παράδειγμα. Αφού ο Βάσια έλυσε αυτό το παράδειγμα, ο δάσκαλος κάλεσε τον Πέτια στον πίνακα και άρχισε να του ζητά την εργασία του, αλλά δεν άφησε τον Βάσια να επιστρέψει στη θέση του. Σε αυτήν την περίπτωση, φαίνεται ότι η συνομιλία με τον Βάσια τελείωσε - ο δάσκαλος μιλάει με τον Πέτια, αλλά ο Βάσια στέκεται στον πίνακα και δεν μπορεί να ασχοληθεί ήρεμα με την επιχείρησή του (η συνεδρία επικοινωνίας μαζί του δεν έχει κλείσει).

Εάν ο "Slave" δεν έχει χρόνο να επεξεργαστεί τα δεδομένα κατά τη διάρκεια της συνεδρίας ανταλλαγής, μπορεί να παρατείνει τη διαδικασία ανταλλαγής διατηρώντας τη γραμμή του ρολογιού σε χαμηλό επίπεδο, επομένως ο "Master" πρέπει να ελέγξει την επιστροφή της γραμμής του ρολογιού σε υψηλό επίπεδο αφού το απελευθερώσει . Θα ήθελα να τονίσω ότι δεν πρέπει να συγχέετε την κατάσταση όταν ο "Slave" δεν έχει χρόνο να λάβει ή να στείλει δεδομένα με την κατάσταση όταν είναι απλώς απασχολημένος με την επεξεργασία δεδομένων που λαμβάνονται ως αποτέλεσμα της συνεδρίας ανταλλαγής. Στην πρώτη περίπτωση (κατά την ανταλλαγή δεδομένων), μπορεί να παρατείνει την ανταλλαγή κρατώντας τη γραμμή του Ρολογιού και στη δεύτερη περίπτωση (όταν ολοκληρωθεί η συνεδρία ανταλλαγής μαζί του), δεν έχει δικαίωμα να αγγίξει καμία γραμμή. Στην τελευταία περίπτωση, απλά δεν θα ανταποκριθεί στην "έκκληση" προς αυτόν από τον "Δάσκαλο".

Μέσα σε μια συνεδρία, η μετάδοση αποτελείται από πακέτα των εννέα bit, που μεταδίδονται με κανονική θετική λογική (δηλαδή, το υψηλό είναι 1 και το χαμηλό είναι 0). Από αυτά, 8 bit μεταδίδονται από τον "Πομπό" στον "Δέκτη", και το τελευταίο ένατο bit μεταδίδεται από τον "Δέκτη" στον "Πομπό". Τα bit σε ένα πακέτο μεταδίδονται πρώτα το πιο σημαντικό bit. Το τελευταίο, ένατο bit ονομάζεται ACK acknowledgment bit (από την αγγλική λέξη acknowledge). Μεταδίδεται σε ανεστραμμένη μορφή, δηλαδή, το 0 στη γραμμή αντιστοιχεί στην παρουσία του bit επιβεβαίωσης και το 1 στην απουσία του. Το bit επιβεβαίωσης μπορεί να σηματοδοτήσει είτε την απουσία ή την κατειλημμένη λειτουργία της συσκευής (εάν δεν είχε ρυθμιστεί κατά τη διευθυνσιοδότηση), είτε ότι ο «Δέκτης» θέλει να ολοκληρώσει τη μετάδοση ή ότι η εντολή που εστάλη από τον «Κύριο» δεν έχει ολοκληρωθεί.

Κάθε bit μεταδίδεται σε έναν κύκλο ρολογιού. Αυτό το μισό του κύκλου ρολογιού κατά τη διάρκεια του οποίου η γραμμή Ρολογιού έχει ρυθμιστεί χαμηλά χρησιμοποιείται για τη ρύθμιση ενός bit δεδομένων στο δίαυλο από τον συνδρομητή που εκπέμπει (αν το προηγούμενο bit μεταδόθηκε από άλλο συνδρομητή, τότε πρέπει να απελευθερώσει το δίαυλο δεδομένων αυτήν τη στιγμή) . Αυτό το ήμισυ του κύκλου ρολογιού κατά τη διάρκεια του οποίου η γραμμή Ρολογιού έχει ρυθμιστεί σε υψηλά επίπεδα χρησιμοποιείται από τον συνδρομητή λήψης για την ανάγνωση της καθορισμένης τιμής bit από το δίαυλο δεδομένων.

Αυτό είναι όλο. Τα παρακάτω σχήματα δείχνουν όλη αυτή την περιγραφή σε γραφική μορφή.

3) Διαγράμματα και χρονισμοί.



Παράμετρος Ονομασία Ελάχιστη τιμή

Το I 2 C είναι μια διεπαφή δύο καλωδίων που αναπτύχθηκε από την Philips Corporation. Στο πρωτότυπο τεχνική απαίτησηστη διεπαφή μέγιστη ταχύτηταΗ μεταφορά δεδομένων ήταν 100 Kbit/s. Ωστόσο, με την πάροδο του χρόνου, εμφανίστηκαν πρότυπα για τρόπους λειτουργίας υψηλότερης ταχύτητας I 2 C. Συσκευές με διαφορετικές ταχύτητες πρόσβασης μπορούν να συνδεθούν στον ίδιο δίαυλο I 2 C, καθώς η ταχύτητα μεταφοράς δεδομένων καθορίζεται από το σήμα ρολογιού.

Το πρωτόκολλο μετάδοσης δεδομένων έχει σχεδιαστεί με τέτοιο τρόπο ώστε να εγγυάται αξιόπιστη λήψη των μεταδιδόμενων δεδομένων.

Κατά τη μεταφορά δεδομένων, μια συσκευή είναι η "Master", η οποία ξεκινά τη μεταφορά δεδομένων και παράγει σήματα συγχρονισμού. Μια άλλη συσκευή "Slave" - ​​ξεκινά τη μετάδοση μόνο με εντολή που προέρχεται από τον "Master".

Οι μικροελεγκτές PIC16CXXX εφαρμόζουν σε υλικό τη λειτουργία «Slave» της συσκευής στη μονάδα SSP. Η λειτουργία "Master" υλοποιείται σε λογισμικό.

Βασικοί όροι που χρησιμοποιούνται για την περιγραφή της εργασίας με το δίαυλο I 2 C:

Πομπός– μια συσκευή που μεταδίδει δεδομένα μέσω διαύλου

Δέκτης– συσκευή που λαμβάνει δεδομένα από το δίαυλο

"Κύριος"- μια συσκευή που εκκινεί τη μετάδοση και παράγει σήμα ρολογιού

"Δούλος"- η συσκευή που απευθύνεται από τον "Master"

Multi-"Master"- Τρόπος λειτουργίας διαύλου I 2 C με περισσότερα από ένα "Master"

Διαιτησία– μια διαδικασία που διασφαλίζει ότι μόνο ένας «Master» ελέγχει το λεωφορείο

Συγχρονισμός– διαδικασία για τον συγχρονισμό ενός σήματος ρολογιού από δύο ή περισσότερες συσκευές

Τα στάδια εξόδου των γεννητριών σήματος συγχρονισμού (SCL) και δεδομένων (SDA) πρέπει να γίνονται σύμφωνα με κυκλώματα ανοιχτού συλλέκτη (αποχέτευσης) για να συνδυάζουν πολλές εξόδους και να συνδέονται μέσω μιας εξωτερικής αντίστασης στο θετικό τροφοδοτικό έτσι ώστε η στάθμη του διαύλου να είναι « 1" όταν καμία από τις συσκευές δεν παράγει σήμα "0". Το μέγιστο χωρητικό φορτίο περιορίζεται σε χωρητικότητα 400 pF.

Αρχικοποίηση και ολοκλήρωση μεταφοράς δεδομένων

Όταν δεν υπάρχει μεταφορά δεδομένων στο δίαυλο, τα σήματα SCL και SDA διατηρούνται υψηλά λόγω εξωτερικής αντίστασης.

Τα σήματα START και STOP παράγονται από το "Master" για να καθορίσουν την έναρξη και το τέλος της μεταφοράς δεδομένων, αντίστοιχα.

Το σήμα START δημιουργείται από τη μετάβαση του σήματος SDA από υψηλό σε χαμηλό όταν το σήμα SCL είναι υψηλό. Το σήμα STOP ορίζεται ως το SDA που πηγαίνει χαμηλά σε υψηλό όταν το SCL είναι υψηλό. Έτσι, κατά τη μετάδοση δεδομένων, το σήμα SDA μπορεί να αλλάξει μόνο όταν το σήμα SCL είναι χαμηλό.

Συσκευές διευθυνσιοδότησης στο δίαυλο I 2 C

Υπάρχουν δύο μορφές διεύθυνσης που χρησιμοποιούνται για τη διεύθυνση συσκευών:

Απλή μορφή 7-bit με R/W bit ανάγνωσης/εγγραφής.

και μορφή 10-bit - το πρώτο byte περιέχει τα δύο πιο σημαντικά bit της διεύθυνσης και το bit εγγραφής/ανάγνωσης, το δεύτερο byte περιέχει το τμήμα χαμηλής τάξης της διεύθυνσης.

Επιβεβαίωση αποδοχής

Κατά τη μετάδοση δεδομένων, μετά από κάθε byte που μεταδίδεται, ο δέκτης πρέπει να επιβεβαιώνει τη λήψη του byte με ένα σήμα ACK.

Εάν το Slave δεν επιβεβαιώσει τη λήψη της διεύθυνσης ή του byte δεδομένων, ο Master πρέπει να διακόψει τη μετάδοση δημιουργώντας ένα σήμα STOP.

Κατά τη μετάδοση δεδομένων από το "Slave" στο "Master", το "Master" δημιουργεί σήματα επιβεβαίωσης δεδομένων ACK. Εάν το "Master" δεν επιβεβαιώσει τη λήψη του byte, το "Slave" σταματά τη μετάδοση δεδομένων "απελευθερώνοντας" τη γραμμή SDA. Μετά από αυτό, το "Master" μπορεί να παράγει ένα σήμα STOP.

Για να καθυστερήσει η μετάδοση δεδομένων, το "Slave" μπορεί να ορίσει ένα λογικό μηδέν, υποδεικνύοντας στον "Master" να περιμένει. Μετά την απελευθέρωση της γραμμής SCL, η μεταφορά δεδομένων συνεχίζεται.

Μεταφορά δεδομένων από το "Master" στο "Slave"

Ανάγνωση δεδομένων από το "Slave"

Χρήση του σήματος επανεκκίνησης για πρόσβαση στο "Slave"

Λειτουργία Multi-Master

Το πρωτόκολλο μεταφοράς δεδομένων I 2 C σάς επιτρέπει να έχετε περισσότερα από ένα "Master" στο δίαυλο. Οι συναρτήσεις διαιτησίας και συγχρονισμού χρησιμοποιούνται για την επίλυση διενέξεων διαύλου κατά την προετοιμασία της μετάδοσης.

Διαιτησία

Η διαιτησία εκτελείται στη γραμμή SDA όταν η γραμμή SCL είναι υψηλή. Μια συσκευή που παράγει υψηλό επίπεδο στη γραμμή SDA όταν μια άλλη εκπέμπει χαμηλή χάνει το δικαίωμα λήψης του "Master" και πρέπει να μεταβεί στη λειτουργία "Slave". Ένας "Master" που έχει χάσει την πρωτοβουλία στο δίαυλο μπορεί να δημιουργήσει παλμούς ρολογιού μέχρι το τέλος του byte στο οποίο έχει χάσει τις κύριες ιδιότητές του.

Συγχρονισμός

Ο συγχρονισμός στο δίαυλο πραγματοποιείται μετά την εκτέλεση της διαιτησίας στο σήμα SCL. Όταν το σήμα SCL μεταβαίνει από υψηλό σε χαμηλό, όλες οι ενδιαφερόμενες συσκευές αρχίζουν να μετρούν τη διάρκεια του χαμηλού επιπέδου. Στη συνέχεια, οι συσκευές αρχίζουν να μεταβαίνουν το επίπεδο SCL από χαμηλό σε υψηλό σύμφωνα με τον απαιτούμενο ρυθμό δεδομένων. Μετά τη μετάβαση του επιπέδου από το χαμηλό στο υψηλό, οι σχετικές συσκευές μετρούν τη διάρκεια του υψηλού επιπέδου. Η πρώτη συσκευή που χαμηλώνει το σήμα SCL καθορίζει τις παραμέτρους του ρολογιού.

οθόνη LCD– συχνός επισκέπτης σε έργα Arduino. Αλλά σε σύνθετα σχήματαμπορεί να έχουμε το πρόβλημα της έλλειψης θυρών Arduino λόγω της ανάγκης σύνδεσης μιας ασπίδας που έχει πάρα πολύ πολλές ακίδες. Η λύση σε αυτή την κατάσταση θα μπορούσε να είναι I2C/IICένας προσαρμογέας που συνδέει μια σχεδόν τυπική ασπίδα Arduino 1602 σε πλακέτες Uno, Nano ή Mega χρησιμοποιώντας μόνο 4 ακίδες. Σε αυτό το άρθρο θα δούμε πώς μπορείτε να συνδεθείτε οθόνη LCDμε τη διεπαφή I2C, ποιες βιβλιοθήκες μπορούν να χρησιμοποιηθούν, θα γράψουμε ένα σύντομο παράδειγμα σκίτσου και θα αναλύσουμε τυπικά σφάλματα.

Οθόνη υγρών κρυστάλλων LCD 1602είναι καλή επιλογήγια την παραγωγή συμβολοσειρών χαρακτήρων σε διάφορα έργα. Είναι φθηνό, υπάρχουν διάφορες τροποποιήσεις με διαφορετικά χρώματα οπίσθιου φωτισμού, μπορείτε εύκολα να κατεβάσετε έτοιμες βιβλιοθήκες για σκίτσα Arduino. Αλλά το κύριο μειονέκτημα αυτής της οθόνης είναι το γεγονός ότι η οθόνη έχει 16 ψηφιακές εξόδους, εκ των οποίων απαιτούνται τουλάχιστον 6. Επομένως, η χρήση αυτής της οθόνης LCD χωρίς i2c προσθέτει σοβαρούς περιορισμούς για τις πλακέτες Arduino Uno ή Nano. Εάν δεν υπάρχουν αρκετές επαφές, τότε θα πρέπει να αγοράσετε Πλακέτα Arduino Mega ή αποθήκευση επαφών, συμπεριλαμβανομένης της σύνδεσης της οθόνης μέσω i2c.

Σύντομη περιγραφή των ακίδων LCD 1602

Ας ρίξουμε μια πιο προσεκτική ματιά στις ακίδες LCD1602:

Κάθε ένα από τα pin έχει το δικό του σκοπό:

  1. Επίγειο GND;
  2. Τροφοδοτικό 5 V;
  3. Ρύθμιση αντίθεσης οθόνης.
  4. Εντολή, δεδομένα;
  5. Γράψιμο και ανάγνωση δεδομένων.
  6. Επιτρέπω;

7-14. Γραμμές δεδομένων;

  1. Συν οπίσθιος φωτισμός?
  2. Μείον τον οπίσθιο φωτισμό.

Προδιαγραφές οθόνης:

  • Τύπος εμφάνισης χαρακτήρων, είναι δυνατή η φόρτωση συμβόλων.
  • Φώτα LED?
  • Ελεγκτής HD44780;
  • Τάση τροφοδοσίας 5V;
  • Μορφοποίηση 16x2 χαρακτήρων.
  • Εύρος θερμοκρασίας λειτουργίας από -20C έως +70C, περιοχή θερμοκρασίας αποθήκευσης από -30C έως +80C.
  • Γωνία θέασης 180 μοίρες.

Διάγραμμα σύνδεσης LCD στην πλακέτα Arduino χωρίς i2C

Το τυπικό διάγραμμα για τη σύνδεση μιας οθόνης απευθείας σε έναν μικροελεγκτή Arduino χωρίς I2C έχει ως εξής.

Λόγω του μεγάλου αριθμού συνδεδεμένων επαφών, ενδέχεται να μην υπάρχει αρκετός χώρος για τη σύνδεση των απαραίτητων στοιχείων. Η χρήση του I2C μειώνει τον αριθμό των καλωδίων σε 4 και τις κατειλημμένες ακίδες σε 2.

Πού να αγοράσετε οθόνες LCD και ασπίδες για το Arduino

Η οθόνη LCD 1602 (και έκδοση 2004) είναι αρκετά δημοφιλής, επομένως μπορείτε να τη βρείτε εύκολα τόσο σε εγχώρια ηλεκτρονικά καταστήματα όσο και σε ξένους ιστότοπους. Ακολουθούν ορισμένοι σύνδεσμοι προς τις πιο διαθέσιμες επιλογές:

Μονάδα μπλε οθόνης LCD1602+I2C, συμβατή με Arduino Απλός οθόνη LCD 1602 (πράσινος οπίσθιος φωτισμός) φθηνότερο από 80 ρούβλια Μεγάλη οθόνη LCD2004 με I2C HD44780 για Arduino (μπλε και πράσινος οπίσθιος φωτισμός)
Οθόνη 1602 με προσαρμογέα IIC και μπλε οπίσθιο φωτισμό Μια άλλη έκδοση του LCD1602 με συγκολλημένη μονάδα I2C Μονάδα προσαρμογέα Port IIC/I2C/TWI/SPI για 1602 shield, συμβατή με Arduino
Οθόνη με οπίσθιο φωτισμό RGB! LCD 16×2 + πληκτρολόγιο + Buzzer Shield για Arduino Ασπίδα για Arduino με κουμπιά και οθόνη LCD1602 LCD 1602 Οθόνη LCD για 3D εκτυπωτή (Smart Controller για RAMPS 1.4, Text LCD 20×4), μονάδα ανάγνωσης καρτών SD και MicroSD

Περιγραφή του πρωτοκόλλου I2C

Πριν συζητήσουμε τη σύνδεση της οθόνης στο Arduino μέσω ενός προσαρμογέα i2c, ας μιλήσουμε εν συντομία για το ίδιο το πρωτόκολλο i2C.

I2C/IIC(Inter-Integrated Circuit) είναι ένα πρωτόκολλο που δημιουργήθηκε αρχικά για τη διασύνδεση ολοκληρωμένων κυκλωμάτων εντός ηλεκτρονική συσκευή. Η ανάπτυξη ανήκει στη Philips. Το πρωτόκολλο i2c βασίζεται στη χρήση ενός διαύλου 8-bit, που απαιτείται για την επικοινωνία μπλοκ στα ηλεκτρονικά ελέγχου, και ενός συστήματος διευθύνσεων, χάρη στο οποίο μπορείτε να επικοινωνείτε μέσω των ίδιων καλωδίων με πολλές συσκευές. Απλώς μεταφέρουμε δεδομένα σε μια ή την άλλη συσκευή, προσθέτοντας το αναγνωριστικό του επιθυμητού στοιχείου στα πακέτα δεδομένων.

Το περισσότερο απλό κύκλωμαΤο I2C μπορεί να περιέχει μια κύρια συσκευή (τις περισσότερες φορές έναν μικροελεγκτή Arduino) και πολλές υποτελείς συσκευές (για παράδειγμα, μια οθόνη LCD). Κάθε συσκευή έχει μια διεύθυνση στην περιοχή από 7 έως 127. Δεν πρέπει να υπάρχουν δύο συσκευές με την ίδια διεύθυνση στο ίδιο κύκλωμα.

Η πλακέτα Arduino υποστηρίζει το i2c σε υλικό. Μπορείτε να χρησιμοποιήσετε τις ακίδες A4 και A5 για να συνδέσετε συσκευές χρησιμοποιώντας αυτό το πρωτόκολλο.

Υπάρχουν πολλά πλεονεκτήματα στη λειτουργία I2C:

  • Η λειτουργία απαιτεί μόνο 2 γραμμές - SDA (γραμμή δεδομένων) και SCL (γραμμή συγχρονισμού).
  • Σύνδεση μεγάλου αριθμού κορυφαίων συσκευών.
  • Μειωμένος χρόνος ανάπτυξης.
  • Απαιτείται μόνο ένας μικροελεγκτής για τον έλεγχο ολόκληρου του σετ συσκευών.
  • Ο πιθανός αριθμός μικροκυκλωμάτων που συνδέονται σε ένα δίαυλο περιορίζεται μόνο από τη μέγιστη χωρητικότητα.
  • Υψηλός βαθμός ασφάλειας δεδομένων χάρη στο ειδικό φίλτρο καταστολής υπερτάσεων που είναι ενσωματωμένο στα κυκλώματα.
  • Μια απλή διαδικασία για τη διάγνωση των αναδυόμενων αστοχιών και τον γρήγορο εντοπισμό σφαλμάτων.
  • Ο δίαυλος είναι ήδη ενσωματωμένος στο ίδιο το Arduino, επομένως δεν χρειάζεται να αναπτυχθεί μια πρόσθετη διεπαφή διαύλου.

Ελαττώματα:

  • Υπάρχει ένα όριο χωρητικότητας στη γραμμή - 400 pF.
  • Είναι δύσκολο να προγραμματίσετε έναν ελεγκτή I2C εάν υπάρχουν πολλές διαφορετικές συσκευές στο δίαυλο.
  • Στο μεγάλες ποσότητεςΟι συσκευές δυσκολεύονται να εντοπίσουν ένα σφάλμα εάν μία από αυτές ορίσει λανθασμένα την κατάσταση χαμηλού επιπέδου.

Μονάδα i2c για LCD 1602 Arduino

Ο πιο γρήγορος και βολικός τρόπος για να χρησιμοποιήσετε μια οθόνη i2c στο Arduino είναι να αγοράσετε μια έτοιμη οθόνη με ενσωματωμένη υποστήριξη πρωτοκόλλου. Αλλά δεν υπάρχουν πολλές από αυτές τις οθόνες και δεν είναι φθηνές. Αλλά ένας τεράστιος αριθμός διαφορετικών τυπικών οθονών έχει ήδη παραχθεί. Επομένως, η πιο προσιτή και δημοφιλής επιλογή σήμερα είναι να αγοράσετε και να χρησιμοποιήσετε μια ξεχωριστή μονάδα I2C - έναν προσαρμογέα, που μοιάζει με αυτό:

Στη μία πλευρά της μονάδας βλέπουμε i2c pins - γείωση, τροφοδοσία και 2 για μεταφορά δεδομένων. Στον άλλο προσαρμογέα βλέπουμε εξωτερικούς συνδέσμους τροφοδοσίας. Και, φυσικά, η πλακέτα έχει πολλές ακίδες με τις οποίες η μονάδα είναι συγκολλημένη στις τυπικές ακίδες οθόνης.


Οι έξοδοι i2c χρησιμοποιούνται για σύνδεση στην πλακέτα Arduino. Αν χρειαστεί, συνδέουμε εξωτερικό τροφοδοτικόγια οπίσθιο φωτισμό. Με το ενσωματωμένο τρίμερ μπορούμε να ορίσουμε προσαρμοσμένες τιμές αντίθεσης J

Στην αγορά μπορείτε να βρείτε μονάδες LCD 1602 με ήδη συγκολλημένους προσαρμογείς, η χρήση τους είναι όσο το δυνατόν απλοποιημένη. Εάν αγοράσατε έναν ξεχωριστό προσαρμογέα, θα πρέπει πρώτα να τον κολλήσετε στη μονάδα.

Σύνδεση της οθόνης LCD στο Arduino μέσω I2C

Για να συνδεθείτε, χρειάζεστε την ίδια την πλακέτα Arduino, μια οθόνη, ένα breadboard, καλώδια σύνδεσης και ένα ποτενσιόμετρο.

Εάν χρησιμοποιείτε έναν ειδικό ξεχωριστό προσαρμογέα i2c, πρέπει πρώτα να τον κολλήσετε στη μονάδα οθόνης. Είναι δύσκολο να κάνετε λάθος εκεί, μπορείτε να ακολουθήσετε αυτό το σχέδιο.


Μια οθόνη LCD με υποστήριξη i2c συνδέεται στην πλακέτα χρησιμοποιώντας τέσσερα καλώδια - δύο καλώδια για δεδομένα, δύο καλώδια για τροφοδοσία.

  • Ο ακροδέκτης GND συνδέεται στο GND στην πλακέτα.
  • Ο ακροδέκτης VCC είναι στα 5V.
  • Το SCL συνδέεται με τον ακροδέκτη A5.
  • Το SDA συνδέεται με τον ακροδέκτη Α.

Και είναι όλο! Χωρίς πλέγματα καλωδίων, τα οποία είναι πολύ εύκολο να μπλέξουν. Ταυτόχρονα, μπορούμε απλά να εμπιστευτούμε όλη την πολυπλοκότητα της υλοποίησης του πρωτοκόλλου i2C στις βιβλιοθήκες.

Βιβλιοθήκες για εργασία με οθόνη LCD i2c

Για να αλληλεπιδράσετε με το Arduino και το LCD 1602 μέσω του διαύλου I2C, θα χρειαστείτε τουλάχιστον δύο βιβλιοθήκες:

  • Η βιβλιοθήκη Wire.h για εργασία με το I2C είναι ήδη διαθέσιμη στο τυπικό πρόγραμμα Arduino IDE.
  • Η βιβλιοθήκη LiquidCrystal_I2C.h, η οποία περιλαμβάνει μια μεγάλη ποικιλία εντολών για τον έλεγχο της οθόνης μέσω του διαύλου I2C και σας επιτρέπει να κάνετε το σκίτσο πιο απλό και πιο σύντομο. Πρέπει να εγκαταστήσετε επιπλέον τη βιβλιοθήκη Αφού συνδέσετε την οθόνη, πρέπει να εγκαταστήσετε επιπλέον τη βιβλιοθήκη LiquidCrystal_I2C.h

Αφού συνδέσουμε όλες τις απαραίτητες βιβλιοθήκες στο σκίτσο, δημιουργούμε ένα αντικείμενο και μπορούμε να χρησιμοποιήσουμε όλες τις λειτουργίες του. Για δοκιμή, ας φορτώσουμε το ακόλουθο τυπικό παράδειγμα σκίτσου.

#περιλαμβάνω #περιλαμβάνω // Συμπεριλαμβανομένης της βιβλιοθήκης //#include // Σύνδεση εναλλακτικής βιβλιοθήκης LiquidCrystal_I2C lcd(0x27,16,2); // Καθορίστε τη διεύθυνση I2C (η πιο κοινή τιμή), καθώς και τις παραμέτρους οθόνης (στην περίπτωση της LCD 1602 - 2 γραμμές των 16 χαρακτήρων η καθεμία //LiquidCrystal_PCF8574 lcd(0x27); // Επιλογή για τη ρύθμιση κενού βιβλιοθήκης PCF8574( ) ( lcd.init (); // Εκκίνηση της οθόνης lcd.backlight(); // Σύνδεση του οπίσθιου φωτισμού lcd.setCursor(0,0); // Ρύθμιση του δρομέα στην αρχή της πρώτης γραμμής lcd.print(" Γεια σας"); // Πληκτρολογήστε κείμενο στην πρώτη γραμμή lcd.setCursor(0,1); // Ρυθμίστε τον κέρσορα στην αρχή της δεύτερης γραμμής lcd.print("ArduinoMaster"); // Πληκτρολογήστε κείμενο στη δεύτερη γραμμή ) void loop() ( )

Περιγραφή λειτουργιών και μεθόδων της βιβλιοθήκης LiquidCrystal_I2C:

  • home() και clear() - η πρώτη λειτουργία σάς επιτρέπει να επιστρέψετε τον κέρσορα στην αρχή της οθόνης, η δεύτερη κάνει το ίδιο, αλλά ταυτόχρονα διαγράφει ό,τι υπήρχε στην οθόνη πριν.
  • write(ch) – σας επιτρέπει να εκτυπώσετε έναν μόνο χαρακτήρα ch στην οθόνη.
  • cursor() και noCursor() – εμφανίζει/αποκρύπτει τον κέρσορα στην οθόνη.
  • blink() και noBlink() – ο δρομέας αναβοσβήνει/δεν αναβοσβήνει (αν η εμφάνισή του ήταν ενεργοποιημένη πριν).
  • display() και noDisplay() – σας επιτρέπει να συνδέσετε/απενεργοποιήσετε την οθόνη.
  • scrollDisplayLeft() και scrollDisplayRight() – κάνει κύλιση στην οθόνη κατά έναν χαρακτήρα αριστερά/δεξιά.
  • autoscroll() και noAutoscroll() – σας επιτρέπει να ενεργοποιήσετε/απενεργοποιήσετε τη λειτουργία αυτόματης κύλισης. Σε αυτήν τη λειτουργία, κάθε νέος χαρακτήρας γράφεται στο ίδιο σημείο, μετατοπίζοντας ό,τι γράφτηκε προηγουμένως στην οθόνη.
  • leftToRight() και rightToLeft() – Ρύθμιση της κατεύθυνσης του εμφανιζόμενου κειμένου – από αριστερά προς τα δεξιά ή από δεξιά προς τα αριστερά.
  • createChar(ch, bitmap) – δημιουργεί έναν χαρακτήρα με κωδικό ch (0 – 7), χρησιμοποιώντας μια σειρά από bitmap bitmap για τη δημιουργία ασπρόμαυρων σημείων.

Εναλλακτική βιβλιοθήκη για εργασία με οθόνη i2c

Σε ορισμένες περιπτώσεις, ενδέχεται να προκύψουν σφάλματα κατά τη χρήση της καθορισμένης βιβλιοθήκης με συσκευές εξοπλισμένες με ελεγκτές PCF8574. Σε αυτήν την περίπτωση, η βιβλιοθήκη LiquidCrystal_PCF8574.h μπορεί να προταθεί ως εναλλακτική. Επεκτείνει το LiquidCrystal_I2C, επομένως δεν θα υπάρχουν προβλήματα με τη χρήση του.

Προβλήματα με τη σύνδεση της οθόνης i2c lcd

Εάν μετά τη μεταφόρτωση του σκίτσου δεν βλέπετε κανένα μήνυμα στην οθόνη, δοκιμάστε τα παρακάτω βήματα.

Αρχικά, μπορείτε να αυξήσετε ή να μειώσετε την αντίθεση της οθόνης. Συχνά οι χαρακτήρες απλώς δεν είναι ορατοί λόγω της λειτουργίας αντίθεσης και οπίσθιου φωτισμού.

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

Ένας άλλος συνηθισμένος λόγος για τον οποίο λείπει κείμενο στην οθόνη μπορεί να είναι μια λανθασμένη διεύθυνση i2c. Πρώτα δοκιμάστε να αλλάξετε τη διεύθυνση της συσκευής στο σκίτσο από 0x27 0x20 ή σε 0x3F. Διαφορετικοί κατασκευαστές μπορεί να έχουν προγραμματισμένες διαφορετικές προεπιλεγμένες διευθύνσεις. Εάν αυτό δεν βοηθήσει, μπορείτε να εκτελέσετε το σκίτσο του σαρωτή i2c, το οποίο σαρώνει όλες τις συνδεδεμένες συσκευές και προσδιορίζει τη διεύθυνσή τους χρησιμοποιώντας ωμή βία. Ένα παράδειγμα σκίτσου σαρωτή i2c.

Εάν η οθόνη εξακολουθεί να μην λειτουργεί, δοκιμάστε να αποκολλήσετε τον προσαρμογέα και να συνδέσετε την οθόνη LCD ως συνήθως.

συμπέρασμα

Σε αυτό το άρθρο, εξετάσαμε τα κύρια ζητήματα της χρήσης μιας οθόνης LCD σε πολύπλοκα έργα Arduino, όταν πρέπει να αποθηκεύσουμε δωρεάν καρφίτσες στην πλακέτα. Ένας απλός και φθηνός προσαρμογέας i2c θα σας επιτρέψει να συνδέσετε μια οθόνη LCD 1602, καταλαμβάνοντας μόνο 2 αναλογικές ακίδες. Σε πολλές περιπτώσεις αυτό μπορεί να είναι πολύ σημαντικό. Η τιμή για ευκολία είναι η ανάγκη χρήσης μιας πρόσθετης μονάδας - μετατροπέα και βιβλιοθήκη. Κατά τη γνώμη μας, καθόλου υψηλή τιμήγια την ευκολία του και συνιστούμε ανεπιφύλακτα τη χρήση αυτής της δυνατότητας σε έργα.

Με βαθμολογίες από 10 Ohm έως 1 MOhm).

  • 2 αντιστάσεις των 4,7 kOhm (από το ίδιο σετ).
  • καλώδια σύνδεσης (για παράδειγμα, εδώ είναι ένα καλό σετ).
  • υπολογιστή με Arduino IDE.
  • 1 ΠεριγραφήΔιασύνδεση I2C

    Το σειριακό IIC (ονομάζεται επίσης I2C - Inter-Integrated Circuits) χρησιμοποιεί δύο αμφίδρομες γραμμές επικοινωνίας που ονομάζονται σειριακό δίαυλο δεδομένων για τη μετάδοση δεδομένων. SDA (σειριακά δεδομένα)και ρολόι λεωφορείο SCL (σειριακό ρολόι). Υπάρχουν επίσης δύο καλώδια ρεύματος. Οι δίαυλοι SDA και SCL έλκονται στον δίαυλο ισχύος μέσω αντιστάσεων.

    Υπάρχει τουλάχιστον ένα online κύρια συσκευή, το οποίο εκκινεί τη μεταφορά δεδομένων και δημιουργεί σήματα συγχρονισμού. Το δίκτυο έχει επίσης σκλάβες συσκευές, τα οποία διαβιβάζουν δεδομένα κατόπιν αιτήματος του αρχηγού. Κάθε εξαρτημένη συσκευή έχει μια μοναδική διεύθυνση, η οποία χρησιμοποιείται από τον κύριο για πρόσβαση σε αυτήν. Η διεύθυνση της συσκευής υποδεικνύεται στο φύλλο δεδομένων. Σε έναν δίαυλο I2C μπορούν να συνδεθούν έως και 127 συσκευές, συμπεριλαμβανομένων πολλών masters. Οι συσκευές μπορούν να συνδεθούν στο δίαυλο κατά τη λειτουργία, π.χ. Υποστηρίζει θερμή πρίζα.

    Ας δούμε το διάγραμμα χρονισμού της ανταλλαγής μέσω του πρωτοκόλλου I2C. Υπάρχουν πολλές διαφορετικές επιλογές, ας δούμε μια από τις πιο κοινές. Ας χρησιμοποιήσουμε έναν λογικό αναλυτή συνδεδεμένο με τους διαύλους SCL και SDA.

    Ο πλοίαρχος ξεκινά την ανταλλαγή. Για να γίνει αυτό, αρχίζει να δημιουργεί παλμούς ρολογιού και τους στέλνει κατά μήκος της γραμμής SCL σε ένα πακέτο 9 τεμαχίων. Ταυτόχρονα, στη γραμμή δεδομένων SDA ορίζει διεύθυνση συσκευής, με την οποία είναι απαραίτητη η δημιουργία επικοινωνίας, οι οποίοι χρονίζονται από τους πρώτους 7 παλμούς ρολογιού (εξ ου και ο περιορισμός στο εύρος διευθύνσεων: 2 7 = 128 μείον μηδενική διεύθυνση). Το επόμενο κομμάτι του μηνύματος είναι κωδικός λειτουργίας(διάβασε ή γράψε) και ένα ακόμα κομμάτι - bit αναγνώρισης(ACK) ότι η εξαρτημένη συσκευή έχει αποδεχτεί το αίτημα. Εάν το bit επιβεβαίωσης δεν φτάσει, η ανταλλαγή τερματίζεται. Ή ο κύριος συνεχίζει να στέλνει επανειλημμένα αιτήματα.

    Αυτό φαίνεται στο παρακάτω σχήμα: Στην πρώτη περίπτωση, για παράδειγμα, ας αποσυνδέσουμε τη εξαρτημένη συσκευή από το δίαυλο. Μπορεί να φανεί ότι ο κύριος προσπαθεί να δημιουργήσει επικοινωνία με τη συσκευή με διεύθυνση 0x27, αλλά δεν λαμβάνει επιβεβαίωση (NAK). Η ανταλλαγή τελειώνει.


    Τώρα συνδέστε τη εξαρτημένη συσκευή στο δίαυλο I2C και επαναλάβετε τη λειτουργία. Η κατάσταση έχει αλλάξει. Το πρώτο πακέτο με τη διεύθυνση έλαβε μια επιβεβαίωση (ACK) από το slave. Η ανταλλαγή συνεχίστηκε. Οι πληροφορίες μεταδίδονται επίσης σε δέματα 9-bit, αλλά τώρα είναι κατειλημμένα 8 bit δεδομένακαι 1 bit - bit αναγνώρισηςο slave λαμβάνει κάθε byte δεδομένων. Εάν οποιαδήποτε στιγμή διακοπεί η σύνδεση και δεν φτάσει το bit επιβεβαίωσης, η κύρια μονάδα θα σταματήσει να εκπέμπει.

    2 Εφαρμογή I2Cστο Arduino

    Το Arduino χρησιμοποιεί δύο θύρες για να λειτουργεί μέσω της διεπαφής I2C. Για παράδειγμα, σε Arduino UNOκαι Arduino Nano αναλογική θύραΤο A4 αντιστοιχεί στο SDA, η αναλογική θύρα A5 αντιστοιχεί στο SCL.


    Για άλλα μοντέλα πλακέτας, η αντιστοιχία των ακίδων είναι η εξής:

    3 Βιβλιοθήκη "Wire"για εργασία με το IIC

    Για να διευκολυνθεί η ανταλλαγή δεδομένων με συσκευές μέσω του διαύλου I2C, έχει γραφτεί μια τυπική βιβλιοθήκη για το Arduino Σύρμα. Έχει τις εξής λειτουργίες:

    ΛειτουργίαΣκοπός
    αρχή (διεύθυνση) αρχικοποίηση της βιβλιοθήκης και σύνδεση με το δίαυλο I2C. εάν η διεύθυνση δεν έχει καθοριστεί, τότε η συνδεδεμένη συσκευή θεωρείται η κύρια. Χρησιμοποιείται διευθυνσιοδότηση 7-bit.
    requestFrom() χρησιμοποιείται από τον κύριο για να ζητήσει έναν ορισμένο αριθμό byte από το slave.
    έναρξηΜετάδοση (διεύθυνση) έναρξη της μεταφοράς δεδομένων στη εξαρτημένη συσκευή σε μια συγκεκριμένη διεύθυνση.
    endTransmission() διακοπή της μεταφοράς δεδομένων στο slave.
    γράφω() καταγραφή δεδομένων από τον σκλάβο ως απάντηση σε αίτημα.
    διαθέσιμος() επιστρέφει τον αριθμό των byte πληροφοριών που είναι διαθέσιμες για λήψη από τον εξαρτημένο.
    ανάγνωση() ανάγνωση ενός byte που μεταδίδεται από έναν σκλάβο σε έναν κύριο ή από έναν κύριο σε έναν σκλάβο.
    onReceive() υποδεικνύει μια συνάρτηση που πρέπει να κληθεί όταν ο slave λάβει μια μετάδοση από τον κύριο.
    κατόπιν αίτησης() υποδεικνύει μια συνάρτηση που πρέπει να κληθεί όταν ο κύριος λαμβάνει μια μετάδοση από το slave.

    4 Σύνδεση συσκευής I2Cστο Arduino

    Ας δούμε πώς να εργαστείτε με το δίαυλο I2C χρησιμοποιώντας Arduino.

    Αρχικά, ας συναρμολογήσουμε ένα κύκλωμα, όπως στο σχήμα. Θα ελέγξουμε τη φωτεινότητα του LED χρησιμοποιώντας ένα ψηφιακό ποτενσιόμετρο 64 θέσεων AD5171 (βλ. τεχνική περιγραφή), το οποίο είναι συνδεδεμένο με το δίαυλο I2C. Η διεύθυνση στην οποία θα έχουμε πρόσβαση στο ποτενσιόμετρο είναι 0x2c (44 σε δεκαδικό).


    5 Διαχείριση συσκευήςμέσω λεωφορείου IIC

    Ας εξετάσουμε διαγράμματα ανταλλαγής πληροφοριών με ψηφιακό ποτενσιόμετρο AD5171 που εμφανίζεται σε τεχνική περιγραφή:


    Μας ενδιαφέρει το διάγραμμα εγγραφής δεδομένων στο μητρώο RDAC. Αυτός ο καταχωρητής χρησιμοποιείται για τον έλεγχο της αντίστασης του ποτενσιόμετρου.

    Ας ανοίξουμε ένα σκίτσο από τα παραδείγματα της βιβλιοθήκης "Wire": Δείγματα αρχείων Ψηφιακό_ποτενσιόμετρο καλωδίου. Ας το φορτώσουμε στη μνήμη του Arduino.

    #περιλαμβάνω // συνδέστε τη βιβλιοθήκη "Wire" byte val = 0; // τιμή για μεταφορά στο ποτενσιόμετρο void setup() ( Wire.begin(); // συνδεθείτε στο δίαυλο I2C ως κύριος } void loop() ( Wire.beginTransmission(44); // έναρξη ανταλλαγής με μια συσκευή με διεύθυνση I2C "44" (0x2C) Wire.write(byte(0x00)); // στείλτε μια εντολή εγγραφής στον καταχωρητή RDAC Wire.write(val); // ορίστε τη θέση του ποτενσιόμετρου 64 θέσεων Wire.endTransmission(); // πλήρης μεταφορά I2C val++; // val increment κατά 1 εάν (val == 63) ( // όταν το ποτενσιόμετρο φτάσει στο μέγιστο val = 0; // reset val ) delay(500); }

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