Σε αυτό το άρθρο θα δούμε τι είναι μια διασύνδεση I2C (ay-tu-si, i-two-tse), ποια είναι τα χαρακτηριστικά της και πώς να δουλεύουμε με αυτήν.
Είναι απαραίτητο
- - Arduino;
- - ψηφιακό ποτενσιόμετρο AD5171,
- - Δίοδος εκπομπής φωτός;
- - αντίσταση 220 ohm.
- - 2 αντιστάσεις για 4,7 kOhm.
- - καλώδια σύνδεσης.
Οδηγίες
Βήμα 1
Το πρωτόκολλο σειριακής επικοινωνίας IIC (ονομάζεται επίσης I2C - Inter-Integrated Circuits) χρησιμοποιεί δύο γραμμές αμφίδρομης επικοινωνίας για τη μεταφορά δεδομένων, που ονομάζεται δίαυλος SDA (Serial Data) και δίαυλος SCL (Serial Clock). Υπάρχουν επίσης δύο ηλεκτροφόρα καλώδια. Οι δίαυλοι SDA και SCL ανεβαίνουν στο δίαυλο ισχύος μέσω αντιστάσεων.
Υπάρχει τουλάχιστον ένα Master στο δίκτυο που ξεκινά τη μετάδοση δεδομένων και παράγει σήματα συγχρονισμού. Το δίκτυο διαθέτει επίσης σκλάβους που μεταδίδουν δεδομένα κατόπιν αιτήματος του πλοιάρχου. Κάθε δευτερεύουσα συσκευή έχει μια μοναδική διεύθυνση στην οποία ο κύριος την αντιμετωπίζει. Η διεύθυνση της συσκευής αναφέρεται στο διαβατήριο (φύλλο δεδομένων). Μπορούν να συνδεθούν έως και 127 συσκευές σε ένα δίαυλο I2C, συμπεριλαμβανομένων πολλών πλοιάρχων. Οι συσκευές μπορούν να συνδεθούν στο δίαυλο κατά τη λειτουργία, δηλ. υποστηρίζει ζεστό βύσμα.
Βήμα 2
Το Arduino χρησιμοποιεί δύο θύρες για να λειτουργήσει στη διεπαφή I2C. Για παράδειγμα, στο Arduino UNO και Arduino Nano, η αναλογική θύρα A4 αντιστοιχεί στην SDA, η αναλογική θύρα A5 αντιστοιχεί στην SCL.
Για άλλα μοντέλα πλακέτας:
Arduino Pro και Pro Mini - A4 (SDA), A5 (SCL)
Arduino Mega - 20 (SDA), 21 (SCL)
Arduino Leonardo - 2 (SDA), 3 (SCL)
Arduino Due - 20 (SDA), 21 (SCL), SDA1, SCL1
Βήμα 3
Για να διευκολυνθεί η ανταλλαγή δεδομένων με συσκευές μέσω του διαύλου I2C, έχει γραφτεί μια τυπική βιβλιοθήκη "Wire" για το Arduino. Έχει τις ακόλουθες λειτουργίες:
έναρξη (διεύθυνση) - προετοιμασία της βιβλιοθήκης και σύνδεση με το δίαυλο I2C. εάν δεν έχει καθοριστεί διεύθυνση, τότε η συνδεδεμένη συσκευή θεωρείται κύρια. Χρησιμοποιείται διεύθυνση 7-bit.
requestFrom () - χρησιμοποιείται από τον κύριο για να ζητήσει έναν ορισμένο αριθμό bytes από το slave.
beginTransmission (διεύθυνση) - η αρχή της μεταφοράς δεδομένων στη δευτερεύουσα συσκευή σε μια συγκεκριμένη διεύθυνση.
endTransmission () - τερματισμός της μετάδοσης δεδομένων στον υποτελή?
γράψτε () - γράφοντας δεδομένα από τον σκλάβο σε απάντηση ενός αιτήματος.
διαθέσιμο () - επιστρέφει τον αριθμό των bytes των διαθέσιμων πληροφοριών για λήψη από τον υποτελή.
read () - διαβάστε ένα byte που μεταφέρεται από το slave στο master ή από το master στο slave
onReceive () - υποδηλώνει τη συνάρτηση που θα κληθεί όταν ο σκλάβος λαμβάνει μετάδοση από τον κύριο.
onRequest () - Υποδεικνύει μια συνάρτηση που θα κληθεί όταν ο πλοίαρχος λαμβάνει μια μετάδοση από το σκλάβος.
Βήμα 4
Ας δούμε πώς να εργαστείτε με το λεωφορείο I2C χρησιμοποιώντας το Arduino.
Πρώτον, θα συναρμολογήσουμε το κύκλωμα, όπως φαίνεται στο σχήμα. Θα ελέγξουμε τη φωτεινότητα του LED χρησιμοποιώντας το ψηφιακό ποτενσιόμετρο 64 θέσεων AD5171, το οποίο συνδέεται με το δίαυλο I2C. Η διεύθυνση στην οποία θα αναφερθούμε στο ποτενσιόμετρο είναι 0x2c (44 σε δεκαδικό).
Βήμα 5
Ας ανοίξουμε ένα σκίτσο από τα παραδείγματα βιβλιοθήκης "Wire":
Αρχείο -> Δείγματα -> Σύρμα -> ψηφιακό ποτενσιόμετρο. Ας το φορτώσουμε στη μνήμη Arduino. Ας το ενεργοποιήσουμε.
Βλέπετε, η φωτεινότητα του LED αυξάνεται κυκλικά και μετά ξαφνικά σβήνει. Σε αυτήν την περίπτωση, ελέγχουμε το ποτενσιόμετρο χρησιμοποιώντας το Arduino μέσω του διαύλου I2C.