- Τι είναι το πρωτόκολλο επικοινωνίας I2C;
- Πώς λειτουργεί η επικοινωνία I2C;
- Πού να χρησιμοποιήσετε την επικοινωνία I2C;
- I2C στο Nuvoton N76E003 - Απαιτήσεις υλικού
- Διασύνδεση AT24LC64 με Nuvoton N76E003 - Διάγραμμα κυκλώματος
- Καρφίτσες I2C στο Nuvoton N76E003
- Επικοινωνία I2C στο N76E003
- Προγραμματισμός N76E003 για επικοινωνία I2C
- Αναβοσβήνει ο κωδικός και η έξοδος
Στο τεράστιο σύστημα ενσωματωμένων εφαρμογών, κανένας μικροελεγκτής δεν μπορεί να εκτελέσει όλες τις δραστηριότητες από μόνη της. Σε κάποιο στάδιο του χρόνου, πρέπει να επικοινωνήσει με άλλες συσκευές για να μοιραστεί πληροφορίες, υπάρχουν πολλοί διαφορετικοί τύποι πρωτοκόλλων επικοινωνίας για να μοιραστούν αυτές τις πληροφορίες, αλλά οι πιο χρησιμοποιούμενες είναι USART, IIC, SPI και CAN. Κάθε πρωτόκολλο επικοινωνίας έχει το δικό του πλεονέκτημα και μειονέκτημα. Ας επικεντρωθούμε στο τμήμα IIC για τώρα, καθώς αυτό θα μάθουμε σε αυτό το σεμινάριο. Εάν είστε νέοι εδώ, ρίξτε μια ματιά στα Tutorials Nuvoton όπου έχουμε συζητήσει κάθε περιφερειακό του μικροελεγκτή N76E003 από το πολύ βασικό σεμινάριο έναρξης. Εάν θέλετε να μάθετε πώς να χρησιμοποιείτε το I2C με άλλους μικροελεγκτές, μπορείτε να δείτε τους παρακάτω συνδέσμους.
- Πώς να χρησιμοποιήσετε το I2C στο Arduino: Επικοινωνία μεταξύ δύο πινάκων Arduino
- Επικοινωνία I2C με μικροελεγκτή PIC PIC16F877
- Διασύνδεση LCD 16X2 με ESP32 χρησιμοποιώντας I2C
- Επικοινωνία I2C με MSP430 Launchpad
- Διασύνδεση LCD με NodeMCU χωρίς χρήση I2C
- Τρόπος χειρισμού πολλαπλών επικοινωνιών (I2C SPI UART) σε ένα μόνο πρόγραμμα του Arduino
Το I2C είναι ένα σημαντικό πρωτόκολλο επικοινωνίας που αναπτύχθηκε από τη Philips (τώρα NXP). Χρησιμοποιώντας αυτό το πρωτόκολλο I2C, ένα MCU μπορεί να συνδεθεί με πολλές συσκευές και να ξεκινήσει η επικοινωνία. Το I2C λειτουργεί μόνο με δύο καλώδια, δηλαδή SDA και SCL. Όπου το SDA σημαίνει Serial data και το SCL σημαίνει Serial Clock. Ωστόσο, αυτές οι δύο ακίδες απαιτούν αντίσταση pull-up στο επίπεδο τάσης VCC και με επαρκή αντίσταση pull-up, ο δίαυλος μπορεί να υποστηρίζει 127 συσκευές με μοναδική διεύθυνση.
Τι είναι το πρωτόκολλο επικοινωνίας I2C;
Ο όρος IIC σημαίνει " Inter Integrated Circuits ". Κανονικά δηλώνεται ως I2C ή I τετράγωνο C ή ακόμα και ως πρωτόκολλο διασύνδεσης 2 καλωδίων (TWI) σε ορισμένα σημεία, αλλά όλα σημαίνει το ίδιο. Το I2C είναι ένα σύγχρονο πρωτόκολλο επικοινωνίας που σημαίνει, και οι δύο συσκευές που μοιράζονται τις πληροφορίες πρέπει να μοιράζονται ένα κοινό σήμα ρολογιού. Έχει μόνο δύο καλώδια για την κοινή χρήση πληροφοριών από τις οποίες το ένα χρησιμοποιείται για το σήμα ρολογιού και το άλλο χρησιμοποιείται για την αποστολή και λήψη δεδομένων.
Πώς λειτουργεί η επικοινωνία I2C;
Η επικοινωνία I2C παρουσιάστηκε για πρώτη φορά από τον Phillips. Όπως ειπώθηκε νωρίτερα, έχει δύο καλώδια, αυτά τα δύο καλώδια θα συνδεθούν σε δύο συσκευές. Εδώ μια συσκευή ονομάζεται κύρια και η άλλη συσκευή ονομάζεται σκλάβος. Η επικοινωνία πρέπει και θα συμβαίνει πάντα μεταξύ δύο, ενός Δασκάλου και ενός Σκλάβου. Το πλεονέκτημα της επικοινωνίας I2C είναι ότι περισσότεροι από ένας σκλάβοι μπορούν να συνδεθούν με έναν Master.
Η πλήρης επικοινωνία πραγματοποιείται μέσω αυτών των δύο καλωδίων, δηλαδή Serial Clock (SCL) και Serial Data (SDA).
Serial Clock (SCL): Μοιράζεται το σήμα ρολογιού που δημιουργείται από τον κύριο με το slave
Σειριακά δεδομένα (SDA): Στέλνει τα δεδομένα από και προς το Master και το slave.
Ανά πάσα στιγμή, μόνο ο πλοίαρχος θα μπορεί να ξεκινήσει την επικοινωνία. Δεδομένου ότι υπάρχουν περισσότεροι από ένας σκλάβοι στο λεωφορείο, ο πλοίαρχος πρέπει να αναφέρεται σε κάθε σκλάβος χρησιμοποιώντας διαφορετική διεύθυνση. Όταν απευθύνεται μόνο το salve με τη συγκεκριμένη διεύθυνση θα απαντήσει πίσω με τις πληροφορίες, ενώ οι άλλοι θα σιωπήσουν. Με αυτόν τον τρόπο, μπορούμε να χρησιμοποιήσουμε το ίδιο λεωφορείο για επικοινωνία με πολλές συσκευές.
Πού να χρησιμοποιήσετε την επικοινωνία I2C;
Η επικοινωνία I2C χρησιμοποιείται μόνο για επικοινωνία μικρής απόστασης. Είναι σίγουρα αξιόπιστο σε ένα βαθμό, δεδομένου ότι διαθέτει συγχρονισμένο παλμό ρολογιού για να το κάνει έξυπνο. Αυτό το πρωτόκολλο χρησιμοποιείται κυρίως για την επικοινωνία με τον αισθητήρα ή άλλες συσκευές που πρέπει να στέλνουν πληροφορίες σε έναν κύριο. Είναι πολύ βολικό όταν ένας μικροελεγκτής πρέπει να επικοινωνεί με πολλές άλλες υπομονάδες χρησιμοποιώντας τουλάχιστον μόνο καλώδια. Αν ψάχνετε για επικοινωνία μεγάλης εμβέλειας, θα πρέπει να δοκιμάσετε το RS232 και αν ψάχνετε για πιο αξιόπιστη επικοινωνία, θα πρέπει να δοκιμάσετε το πρωτόκολλο SPI.
I2C στο Nuvoton N76E003 - Απαιτήσεις υλικού
Καθώς η απαίτηση αυτού του έργου είναι να μάθουμε την επικοινωνία I2C χρησιμοποιώντας το N76E003, θα χρησιμοποιήσουμε ένα EEPROM το οποίο θα συνδεθεί με τη γραμμή δεδομένων I2C. Θα αποθηκεύσουμε ορισμένα δεδομένα στο EEPROM και θα τα διαβάσουμε επίσης και θα τα εμφανίσουμε χρησιμοποιώντας την οθόνη UART.
Καθώς η αποθηκευμένη τιμή θα εκτυπωθεί στο UART, απαιτείται κάθε είδους μετατροπέας USB σε UART. Μπορείτε επίσης να δείτε το σεμινάριο για το UART με το Nuvoton εάν είστε νέοι στην επικοινωνία UART στο N76E003. Για την εφαρμογή μας, θα χρησιμοποιήσουμε μετατροπέα CP2102 UART σε USB. Εκτός από τα παραπάνω, απαιτούμε επίσης τα ακόλουθα στοιχεία-
- EEPROM 24C02
- 2 τεμ 4,7k αντιστάσεις
Για να μην αναφέρουμε, εκτός από τα παραπάνω στοιχεία, χρειαζόμαστε μια πλακέτα ανάπτυξης με βάση μικροελεγκτή N76E003, καθώς και τον προγραμματιστή Nu-Link. Επιπρόσθετα, απαιτούνται καλώδια αρτοποιίας και σύνδεσης για τη σύνδεση όλων των εξαρτημάτων.
Διασύνδεση AT24LC64 με Nuvoton N76E003 - Διάγραμμα κυκλώματος
Όπως μπορούμε να δούμε στο παρακάτω σχήμα, το EEPROM συνδέεται στη γραμμή I2C μαζί με δύο αντιστάσεις έλξης. Αριστερά αριστερά, εμφανίζεται η σύνδεση διεπαφής προγραμματισμού.
Χρησιμοποίησα ένα breadboard για το AT24LC64 IC και συνέδεσα το IC με την πλακέτα προγραμματισμού nuvoton χρησιμοποιώντας καλώδια jumper Η ρύθμιση του υλικού μου μαζί με τον προγραμματιστή nu-ink εμφανίζεται παρακάτω.
Καρφίτσες I2C στο Nuvoton N76E003
Το διάγραμμα ακίδων του N76E003 φαίνεται στην παρακάτω εικόνα-
Όπως μπορούμε να δούμε, κάθε ακίδα έχει διαφορετικές προδιαγραφές και κάθε ακίδα μπορεί να χρησιμοποιηθεί για πολλαπλούς σκοπούς. Ωστόσο, ο πείρος 1.4 χρησιμοποιείται ως πείρος SDA I2C, θα χάσει το PWM και άλλες λειτουργίες. Αλλά αυτό δεν είναι πρόβλημα καθώς δεν απαιτείται άλλη λειτουργικότητα για αυτό το έργο. Το ίδιο θα συμβεί και για το P1.3 είναι ο ακροδέκτης SCL του I2C.
Δεδομένου ότι οι ακίδες I2C λειτουργούν ως GPIO, πρέπει να διαμορφωθεί. Όλες οι ακίδες GPIO μπορούν να διαμορφωθούν με τον παρακάτω τρόπο λειτουργίας.
Σύμφωνα με το φύλλο δεδομένων, PxM1.n και PxM2. n είναι δύο καταχωρητές που χρησιμοποιούνται για τον προσδιορισμό της λειτουργίας ελέγχου της θύρας I / O. Στο φύλλο δεδομένων, δηλώνεται ότι για να χρησιμοποιήσετε τη λειτουργικότητα I2C, οι λειτουργίες I / O πρέπει να χρησιμοποιούνται ως Open-drain για επικοινωνίες που σχετίζονται με το I2C.
Επικοινωνία I2C στο N76E003
Το περιφερειακό I2C είναι σημαντικό για κάθε μονάδα μικροελεγκτή που υποστηρίζει λειτουργίες I2C. Πολλοί τύποι διαφορετικών μικροελεγκτών έρχονται με ένα ενσωματωμένο περιφερειακό I2C. Ωστόσο, σε ορισμένες περιπτώσεις, το I2C μπορεί να ρυθμιστεί χειροκίνητα χρησιμοποιώντας έλεγχο λογισμικού όπου δεν υπάρχει διαθέσιμη υποστήριξη υλικού που σχετίζεται με I2C (Για παράδειγμα, πολλοί μικροελεγκτές 8051) Ωστόσο, το nuvoton N76E003 έρχεται με περιφερειακή υποστήριξη I2C.
Το M76E003 υποστηρίζει τέσσερις τύπους λειτουργιών σε λειτουργίες I2C - Master Transmitter, Master Receiver, Slave Transmitter και Slave Receiver. Υποστηρίζει επίσης τυπικές (100kbps) και γρήγορες (έως 400kbps) ταχύτητες για τη γραμμή I2C. Το I2C λειτουργεί με λίγους γενικούς κανόνες στις γραμμές σήματος SCL και SDA.
Κατάσταση έναρξης και διακοπής:
Είναι ένα σημαντικό πράγμα στην επικοινωνία I2C. Όταν τα δεδομένα μεταφέρονται στη γραμμή I2C, ξεκινά με κατάσταση έναρξης και τελειώνει με κατάσταση διακοπής.
Η συνθήκη έναρξης είναι η μετάβαση από υψηλό σε χαμηλό στο SDA όταν η γραμμή SCL είναι υψηλή και η κατάσταση διακοπής είναι η μετάβαση από το χαμηλό σε υψηλό στο SDA όταν η γραμμή SCL είναι υψηλή. Αυτές οι δύο συνθήκες δημιουργούνται από τον κύριο (Το MCU ή οτιδήποτε ελέγχει τις άλλες εξαρτημένες συσκευές). Η γραμμή του λεωφορείου παραμένει απασχολημένη σε αυτήν την κατάσταση κατά την εκκίνηση της συνθήκης εκκίνησης και παραμένει ελεύθερη ξανά όταν ξεκινά η κατάσταση στάσης
Η κατάσταση Έναρξη και Διακοπή εμφανίζεται άριστα στην προοπτική σήματος στο φύλλο δεδομένων N76E003-
Διεύθυνση 7-Bit με μορφή δεδομένων:
Το N76E003 υποστηρίζει μια διεύθυνση 7-bit και μια μορφή δεδομένων. Μετά την εκκίνηση της συνθήκης εκκίνησης, η κύρια συσκευή πρέπει να στείλει τα δεδομένα στη γραμμή I2C. Τα πρώτα δεδομένα είναι σημαντικά. Εάν αυτά τα δεδομένα δεν δημιουργηθούν ή μεταδοθούν σωστά, η συνδεδεμένη συσκευή δεν θα αναγνωριστεί και δεν μπορούν να γίνουν περαιτέρω επικοινωνίες.
Τα δεδομένα αποτελούνται από μια διεύθυνση σκλάβου μήκους 7 bit, που υποδηλώνεται ως SLA Αυτή η διεύθυνση μήκους 7 bit πρέπει να είναι μοναδική για κάθε συσκευή εάν είναι συνδεδεμένες πολλές συσκευές στο δίαυλο. Μετά τη διεύθυνση 7-bit, το 8ο bit είναι το bit κατεύθυνσης δεδομένων. Αυτό σημαίνει ότι, ανάλογα με το 8ο bit, ο κύριος στέλνει τις πληροφορίες στη δευτερεύουσα συσκευή σχετικά με το εάν τα δεδομένα θα γραφτούν στη δευτερεύουσα συσκευή ή τα δεδομένα θα διαβαστούν από τη δευτερεύουσα συσκευή. Το 8ο bit είναι το bit R / W που αναφέρεται ως Ειδοποιητής ανάγνωσης ή εγγραφής. Όπως όλοι γνωρίζουμε, οι πληροφορίες 8-bit μπορούν να είναι 128 τύποι, υποστηρίζοντας έτσι 128 συσκευές, αλλά το I2C υποστηρίζει 127 τύπους συσκευών στο ίδιο λεωφορείο αλλά όχι στο 128. Επειδή η διεύθυνση 0x00 είναι μια δεσμευμένη διεύθυνση που ονομάζεται γενική διεύθυνση κλήσης. Εάν ο πλοίαρχος θέλει να στείλει πληροφορίες σε όλες τις συσκευές,θα απευθύνεται 0x00 και κάθε συσκευή θα αναπαράγεται με τον ίδιο τρόπο όπως σύμφωνα με τις επιμέρους διαμορφώσεις λογισμικού.
Έτσι, η μετάδοση δεδομένων μοιάζει παρακάτω-
Αναγνωρίζω:
Στην παραπάνω εικόνα διεύθυνσης δεδομένων, το 9ο bit που ακολουθείται από το bit R / W ονομάζεται bit αναγνώρισης. Είναι σημαντικό γιατί χρησιμοποιώντας αυτό το bit, ο κύριος ή ο σκλάβος αποκρίνεται στον πομπό δεδομένων τραβώντας τη γραμμή SDA χαμηλά. Για να πάρει το bit αναγνώρισης, ο πομπός πρέπει να απελευθερώσει τη γραμμή SDA.
Προγραμματισμός N76E003 για επικοινωνία I2C
Το πλήρες πρόγραμμα που χρησιμοποιείται σε αυτό το σεμινάριο βρίσκεται στο κάτω μέρος αυτής της σελίδας. Η εξήγηση σημαντικών τμημάτων στον κώδικα έχει ως εξής-
Ορίστε τις καρφίτσες ως Open Drain και διαμορφώστε τις για το I2C:
Ας ξεκινήσουμε πρώτα με την ενότητα καρφιτσών I2C. Όπως περιγράφηκε προηγουμένως, οι θύρες I2C SCL και SDA πρέπει να διαμορφωθούν και να οριστούν ως διαμόρφωση ανοιχτής αποστράγγισης. Για να γίνει αυτό, χρησιμοποιούμε ένα αρχείο κεφαλίδας I2C.h μαζί με ένα αρχείο προέλευσης I2C.c . Το απόσπασμα κώδικα μοιάζει με αυτό-
κάντε το {P13_OpenDrain_Mode; P14_OpenDrain_Mode; clr_I2CPX;} ενώ (0)
Ο παραπάνω κώδικας ορίζει τα P13 και P14 ως πείρο Open-Drain και το clr_I2CPX χρησιμοποιείται για την επιλογή των P13 και P14 ως πείρου SCL στο P1.3 και του pin SDA στο P1.4.
Αυτό το I2CPX είναι το 0ο bit του μητρώου ελέγχου I2C I2CON. Εάν αυτό το I2C_PX έχει οριστεί ως 1, οι ακίδες αλλάζουν σε P0.2 ως SCL και P1.6 ως SDA. Ωστόσο, θα χρησιμοποιήσουμε τα P13 και P14. Εναλλακτικές ακίδες δεν χρησιμοποιούνται εδώ.
Μητρώο ελέγχου I2C I2CON:
Ο καταχωρητής ελέγχου I2C χρησιμοποιείται για τον έλεγχο των λειτουργιών I2C Το πρώτο bit είναι το bit επιλογής pin I2C. Η ρύθμιση 0 ρυθμίζει τον πείρο I2C ως P13 και P14
Το bit AA είναι η σημαία επιβεβαίωσης επιβεβαίωσης, εάν έχει οριστεί η σημαία AA, ένα ACK θα επιστραφεί κατά τη διάρκεια του παλμού αναγνώρισης της γραμμής SCL. Εάν διαγραφεί, ένα NACK (υψηλό επίπεδο σε SDA) θα επιστραφεί κατά τη διάρκεια του αναγνωρισμένου παλμού ρολογιού της γραμμής SCL.
Το επόμενο bit είναι SI που είναι η κατάσταση διακοπής I2C. Εάν είναι ενεργοποιημένη η Διακοπή κατάστασης I2C, ο χρήστης θα πρέπει να ελέγξει τον καταχωρητή I2STAT για να προσδιορίσει ποιο βήμα έχει περάσει και πρέπει να προβεί στην ενέργεια.
Το STO είναι η σημαία STOP που ρυθμίζεται σε κύρια λειτουργία. Το STO διαγράφεται αυτόματα από το υλικό αφού εντοπιστεί η συνθήκη STOP .
Το επόμενο bit είναι το bit STA. Εάν έχει οριστεί αυτή η σημαία, τότε το I2C δημιουργεί μια συνθήκη ΕΚΚΙΝΗΣΗΣ εάν το λεωφορείο είναι δωρεάν. Εάν το λεωφορείο είναι απασχολημένο, το I2C περιμένει μια κατάσταση STOP και δημιουργεί μια συνθήκη START. Εάν το STA έχει ρυθμιστεί ενώ το I2C βρίσκεται ήδη στην κύρια λειτουργία και ένα ή περισσότερα byte έχουν μεταδοθεί ή ληφθεί, το I2C δημιουργεί μια επαναλαμβανόμενη συνθήκη START. Το λογισμικό STA πρέπει να διαγραφεί χειροκίνητα από το λογισμικό.
Το τελευταίο, το I2CEN είναι το I2C bus enabled ή απενεργοποίηση bit.
EEPROM 24C02:
Τώρα, έρχεται στο 24C02. Το πακέτο υποστήριξης πλακέτας N76E003 έχει κωδικό I2C για το 24LC64 και μπορεί εύκολα να τροποποιηθεί. Ωστόσο, θα χρησιμοποιήσουμε μια απλή μέθοδο για να κατανοήσουμε τη λειτουργία I2C.
Αν κάποιος θέλει να χρησιμοποιήσει λεπτομερή διασύνδεση με το EEPROM 24C02, τότε μπορεί να χρησιμοποιηθεί το πρόγραμμα EEPROM στο BSP.
Θα συνδέσουμε μόνο το 24C02 στο I2C όπου το N76E003 θα είναι master και το EEPROM θα είναι σκλάβος. Έτσι, θα γράψουμε οποιαδήποτε δεδομένα στη διεύθυνση EEPROM και θα τα διαβάσουμε.
Το pinout 24C02 EEPROM εμφανίζεται παρακάτω-
Τα A0, A1 και A2 είναι τρεις καρφίτσες επιλογής διευθύνσεων. Οι ακίδες WP είναι καρφίτσες προστασίας εγγραφής και πρέπει να συνδεθούν με VSS για να επιτρέψετε την εγγραφή στο EEPROM.
Η λειτουργία Byte Write εμφανίζεται στην παρακάτω εικόνα-
Ο πλήρης κύκλος εγγραφής συμβαίνει με ένα bit έναρξης. Μετά από αυτό, το byte ελέγχου πρέπει να υποβληθεί. Στο byte ελέγχου, απαιτούνται τα ακόλουθα πράγματα-
Μετά το bit έναρξης, αποτελείται από τη διεύθυνση σκλάβων. Το 1010 είναι το στατικό και το A0, A1 και A2 είναι η διεύθυνση που βασίζεται στη σύνδεση υλικού. Εάν οι τρεις ακίδες συνδέονται με τροφοδοσία GND ή VSS, θα διαβαστεί ως 0. Διαφορετικά, εάν συνδεθεί με VCC, θα διαβαστεί ως 1. Στην περίπτωσή μας, όλα τα A0, A1 και A2 είναι συνδεδεμένα με VSS. Έτσι όλα αυτά θα είναι 0.
Δαπάνες για την κατάσταση ανάγνωσης ή εγγραφής. Η τιμή της διεύθυνσης με το bit ανάγνωσης ή εγγραφής θα είναι - 0xA0 για εγγραφή και 0xA1 για ανάγνωση. Στη συνέχεια είναι το bit αναγνώρισης και μετά από αυτό, θα μεταδοθεί μια διεύθυνση 8 bit όπου τα δεδομένα πρέπει να αποθηκευτούν και τέλος, τα δεδομένα που θα αποθηκευτούν στην αντίστοιχη θέση. Αυτά τα πράγματα γίνονται σε βήμα προς βήμα στην κύρια λειτουργία.
Κύρια λειτουργία και ενώ βρόχος:
void main (void) {char c = 0x00; InitialUART0_Timer3 (115200); TI = 1; // Σημαντικό, η λειτουργία prinft πρέπει να ορίσει TI = 1; I2C_init (); ενώ (1) {EEPROM_write (1,0x55); c = EEPROM_read (1); printf ("\ n Η τιμή ανάγνωσης είναι% x", c & 0xff); }; }
Η κύρια λειτουργία είναι απλή, γράφει συνεχώς τιμές στο EEPROM στη διεύθυνση 1 και διαβάζει τα δεδομένα. Στη συνέχεια, τα δεδομένα τυπώνονται χρησιμοποιώντας τη λειτουργία printf. Το printf εκτυπώνει την τιμή σε δεκαεξαδικό.
Η λειτουργία εγγραφής EEPROM αποτελείται από τα ακόλουθα πράγματα που περιγράφηκαν στην ενότητα EEPROM-
άκυρο EEPROM_write (διεύθυνση char χωρίς υπογραφή, τιμή char χωρίς υπογραφή) {I2C_start (); I2C_write (0xA0); I2C_write (διεύθυνση); I2C_write (τιμή); I2C_stop (); }
Η λειτουργία εκκίνησης I2C αποτελείται από τα ακόλουθα πράγματα:
void I2C_start (void) {υπογεγραμμένο int time = timeout; σύνολο_STA; clr_SI; ενώ ((SI == 0) && (ώρα> 0)) {ώρα--; }; }
Σε αυτήν τη λειτουργία, η κατάσταση SI ελέγχεται μαζί με την προκαθορισμένη χρονική περίοδο (ορίζεται στο I2C.h όπου ο προκαθορισμένος χρόνος ορίζεται ως 1000). Η συνάρτηση έναρξης ξεκινά με τη ρύθμιση του STA και την εκκαθάριση του SI.
void I2C_stop (void) {υπογεγραμμένο int time = timeout; clr_SI; σύνολο_STO; ενώ ((STO == 1) && (ώρα> 0)) {ώρα--; }; }
Όπως και η λειτουργία Start, stop. Η λειτουργία διακοπής ξεκινά ρυθμίζοντας το STO ακολουθούμενο από την εκκαθάριση του SI. Η συνάρτηση παρακάτω είναι η συνάρτηση I2C read-
unsigned char I2C_read (unsigned char ack_mode) {υπογεγραμμένο int time = timeout; τιμή χωρίς υπογραφή char = 0x00; σύνολο_ΑΑ; clr_SI; ενώ ((SI == 0) && (t> 0)) {time--; }; τιμή = I2DAT; εάν (ack_mode == I2C_NACK) {t = timeout_count; clr_AA; clr_SI; ενώ ((SI == 0) && (t> 0)) {time--; }; } τιμή επιστροφής; }
Το ack_mode και το I2C_NACK , και τα δύο ορίζονται στο αρχείο κεφαλίδας I2C ως 0 και 1 αντίστοιχα.
Ομοίως, δημιουργείται η συνάρτηση εγγραφής-
άκυρο I2C_write (τιμή χωρίς υπογραφή) {sign int int time = timeout; I2DAT = τιμή; clr_STA; clr_SI; ενώ ((SI == 0) && (ώρα> 0)) {ώρα--; }; }
Αναβοσβήνει ο κωδικός και η έξοδος
Ο κωδικός επέστρεψε 0 προειδοποίηση και 0 λάθη και αναβοσβήνει χρησιμοποιώντας την προεπιλεγμένη μέθοδο αναβοσβήνει από το Keil. Εάν είστε νέοι, ρίξτε μια ματιά στον οδηγό έναρξης με το nuvoton για να κατανοήσετε πώς να ανεβάσετε κώδικα. Οι πληροφορίες συλλογής του κώδικα μπορείτε να βρείτε παρακάτω.
Δημιουργία στόχου 'I2C_EEPROM' μεταγλώττισης I2C_EEPROM.c… μεταγλώττισης I2C.c… σύνδεση… Μέγεθος προγράμματος: data = 59.2 xdata = 0 code = 2409 δημιουργία hex file from ". \ Output \ I2C_EEPROM"… ". \ Έξοδος \ I2C_EEPROM "- 0 Σφάλματα, 0 Προειδοποιήσεις Χρόνος κατασκευής που πέρασε: 00:00:04 Περίληψη παρτίδας-κατασκευής: 1 επιτυχημένο, 0 απέτυχε, 0 παραλείφθηκε - Χρόνος που πέρασε: 00:00:04
Το υλικό εγκαθίσταται σε ένα breadboard και λειτουργεί όπως αναμένεται. Όπως μπορείτε να δείτε στην παρακάτω εικόνα, καταφέραμε να γράψουμε μια τιμή στο EEPROM και να την διαβάσουμε από τη μνήμη και να την εμφανίσουμε στη σειριακή οθόνη.
Δείτε το βίντεο που δίνεται παρακάτω για μια πλήρη επίδειξη του τρόπου λειτουργίας του πίνακα για αυτόν τον κωδικό. Ελπίζω να απολαύσατε το σεμινάριο και να μάθετε κάτι χρήσιμο αν έχετε οποιεσδήποτε ερωτήσεις, αφήστε το στην παρακάτω ενότητα σχολίων. Μπορείτε επίσης να χρησιμοποιήσετε τα φόρουμ μας για να δημοσιεύσετε άλλες τεχνικές ερωτήσεις.