Όλα σχετικά με το λεωφορείο Arduino I2C

Λεωφορείο Arduino I2C

με Το Arduino μπορεί να δημιουργήσει μεγάλο αριθμό έργων όπως έχετε δει αν διαβάσετε το Hwlibre, προγραμματισμός του μικροελεγκτή με απλό τρόπο. Αλλά μεταξύ των αναλογικών και ψηφιακών συνδέσεων αυτής της πλακέτας hardware libre, υπάρχουν μερικά που είναι ακόμα κάπως άγνωστα σε πολλούς αρχάριους, όπως οι πραγματικές δυνατότητες των συνδέσεων PWM, του SPI, των ακροδεκτών RX και TX της σειριακής θύρας ή του ίδιου του διαύλου I2C. Επομένως, με αυτήν την καταχώρηση θα μπορείτε να γνωρίζετε τουλάχιστον όλα όσα χρειάζεστε για το I2C.

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

Τι είναι το I2C;

Το I2C αναφέρεται στο Inter-Integated Circuit, δηλαδή, ολοκληρωμένο κύκλωμα. Πρόκειται για ένα σειριακό λεωφορείο επικοινωνίας δεδομένων που αναπτύχθηκε το 1982 από την εταιρεία Philips Semiconductors, η οποία σήμερα είναι NXP Semiconductors αφού απαλλαγεί από αυτήν την ενότητα. Αρχικά δημιουργήθηκε για τηλεοράσεις αυτής της μάρκας, για την επικοινωνία πολλών εσωτερικών τσιπ με έναν απλό τρόπο. Αλλά από το 1990 το I2C έχει εξαπλωθεί και χρησιμοποιείται από πολλούς κατασκευαστές.

Αυτή τη στιγμή χρησιμοποιείται από δεκάδες chipmakers για πολλαπλές λειτουργίες. Ο Atmel, ο δημιουργός των μικροελεγκτών για πίνακες Arduino, παρουσίασε την ονομασία TWI (Two Wired Interface) για λόγους αδειοδότησης, αν και είναι πανομοιότυπο με το I2C. Ωστόσο, το 2006, το αρχικό δίπλωμα ευρεσιτεχνίας έληξε και δεν υπόκειται πλέον σε πνευματικά δικαιώματα, οπότε ο όρος I2C έχει επαναχρησιμοποιηθεί (μόνο το λογότυπο εξακολουθεί να προστατεύεται, αλλά η εφαρμογή ή η χρήση του όρου δεν περιορίζεται).

Τεχνικές λεπτομέρειες I2C bus

Δίαυλος I2C

El Το λεωφορείο I2C έχει καταστεί βιομηχανικό πρότυπο και το Arduino το έχει εφαρμόσει για επικοινωνία με περιφερειακά που το χρειάζονται. Χρειάζεται μόνο δύο γραμμές ή καλώδια για τη λειτουργία του, μία για το σήμα ρολογιού (CLK) και το άλλο για την αποστολή σειριακών δεδομένων (SDA). Αυτό είναι πλεονεκτικό σε σύγκριση με άλλες επικοινωνίες σε σύγκριση με το δίαυλο SPI, αν και η λειτουργία του είναι κάπως πιο περίπλοκη λόγω των πρόσθετων απαιτούμενων κυκλωμάτων.

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

Επιπλέον, το λεωφορείο I2C διαθέτει Αρχιτεκτονική τύπου Master-Slave, δηλαδή, κύριος-σκλάβος. Αυτό σημαίνει ότι όταν η επικοινωνία ξεκινά από μια κύρια συσκευή, θα μπορεί να στέλνει ή να λαμβάνει δεδομένα από τους σκλάβους της. Οι σκλάβοι δεν θα μπορούν να ξεκινήσουν την επικοινωνία, μόνο ο κύριος μπορεί να το κάνει και οι σκλάβοι δεν μπορούν να μιλήσουν ο ένας στον άλλο χωρίς την παρέμβαση του πλοιάρχου.

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

Λάβετε υπόψη ότι το Το master παρέχει το σήμα ρολογιού για συγχρονισμό όλων των συσκευών του διαύλου. Αυτό εξαλείφει την ανάγκη κάθε δούλου να έχει το δικό του ρολόι.

Το πρωτόκολλο διαύλου I2C προβλέπει επίσης τη χρήση αντιστάσεων έλξης στις γραμμές τάσης τροφοδοσίας (Vcc), αν και αυτές οι αντιστάσεις δεν χρησιμοποιούνται συνήθως με το Arduino pull-up επειδή προγραμματίζετε βιβλιοθήκες καθώς το Wire ενεργοποιεί τα εσωτερικά με τιμές 20-30 k. Αυτό μπορεί να είναι πολύ μαλακό για ορισμένα έργα, επομένως τα άκρα του σήματος που αυξάνονται θα είναι πιο αργά, έτσι μπορούν να χρησιμοποιηθούν χαμηλότερες ταχύτητες και μικρότερες αποστάσεις επικοινωνίας. Για να διορθώσετε ότι ίσως χρειαστεί να ρυθμίσετε εξωτερικές αντιστάσεις pull-up από 1k έως 4k7.

Σήμα

Σήμα I2C

La πλαίσιο επικοινωνίας εκ των οποίων ένα σήμα διαύλου I2C αποτελείται από τα bits ή τις καταστάσεις (αυτές που χρησιμοποιούνται στο Arduino, δεδομένου ότι το πρότυπο I2C επιτρέπει σε άλλους):

  • 8 bits, 7 από αυτά διεύθυνση της εξαρτημένης συσκευής στην οποία θέλετε να έχετε πρόσβαση για αποστολή ή λήψη δεδομένων από αυτήν. Με 7 bit, μπορούν να δημιουργηθούν έως και 128 διαφορετικές διευθύνσεις, επομένως θεωρητικά θα μπορούσαν να προσπελαστούν 128 συσκευές, αλλά μόνο 112 μπορούν να προσπελαστούν, καθώς οι 16 προορίζονται για ειδικές χρήσεις. Και το επιπλέον bit που δείχνει αν θέλετε αποστολή ή λήψη πληροφορίες εξαρτημένης συσκευής.
  • Υπάρχει επίσης ένα bit επικύρωσης, εάν δεν είναι ενεργή, η επικοινωνία δεν θα είναι έγκυρη.
  • Μετά το byte δεδομένων ότι θέλουν να στείλουν ή να λάβουν από τους σκλάβους. Κάθε byte, όπως γνωρίζετε, αποτελείται από 8-bit. Σημειώστε ότι για κάθε 8-bit ή 1 byte δεδομένων που αποστέλλονται ή λαμβάνονται, απαιτούνται επιπλέον 18 bit επικύρωσης, διεύθυνση κ.λπ., πράγμα που σημαίνει ότι το λεωφορείο είναι πολύ περιορισμένο όσον αφορά την ταχύτητα.
  • Ένα τελευταίο κομμάτι επικύρωση της επικοινωνίας.

Επιπλέον, η συχνότητα ρολογιού για οι μεταδόσεις είναι 100 Mhz ως στάνταρ, αν και υπάρχει ταχύτερη λειτουργία στα 400 Mhz.

Πλεονεκτήματα και μειονεκτήματα του διαύλου I2C

ο πλεονέκτημα ήχου:

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

ο μειονεκτήματα ήχου:

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

I2C στο Arduino

Λεωφορείο Arduino I2C

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

  • Arduino UNO, Nano, MiniPro: Το A4 χρησιμοποιείται για SDA (δεδομένα) και το A5 για SCK (ρολόι).
  • arduino mega: ακίδα 20 για SDA και 21 για SCK.

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

Πώς να γνωρίζετε τη διεύθυνση μιας συσκευής για χρήση με το I2C;

Μόνο μια τελευταία προειδοποίηση, και αυτό είναι ότι όταν αγοράζετε IC από Ευρωπαίους, Ιαπωνικούς ή Αμερικανούς κατασκευαστές, εσείς υποδείξτε την κατεύθυνση πρέπει να χρησιμοποιήσετε για τη συσκευή. Από την άλλη πλευρά, οι Κινέζοι μερικές φορές δεν το περιγράφουν ή δεν είναι σωστό, επομένως δεν θα λειτουργήσει. Αυτό μπορεί να λυθεί εύκολα με έναν σαρωτή διευθύνσεων για να μάθετε ποια κατεύθυνση πρέπει να αναφέρετε στο σκίτσο σας.

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

#include "Wire.h"
 
extern "C" { 
    #include "utility/twi.h"
}
 
void scanI2CBus(byte from_addr, byte to_addr, void(*callback)(byte address, byte result) ) 
{
  byte rc;
  byte data = 0;
  for( byte addr = from_addr; addr <= to_addr; addr++ ) {
    rc = twi_writeTo(addr, &data, 0, 1, 0);
    callback( addr, rc );
  }
}
 
void scanFunc( byte addr, byte result ) {
  Serial.print("addr: ");
  Serial.print(addr,DEC);
  Serial.print( (result==0) ? " Encontrado!":"       ");
  Serial.print( (addr%4) ? "\t":"\n");
}
 
 
const byte start_address = 8;
const byte end_address = 119;
 
void setup()
{
    Wire.begin();
 
    Serial.begin(9600);
    Serial.print("Escaneando bus I2C...");
    scanI2CBus( start_address, end_address, scanFunc );
    Serial.println("\nTerminado");
}
 
void loop() 
{
    delay(1000);
}


Γίνε ο πρώτος που θα σχολιάσει

Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.