Arduino I2C avtobusu haqqında hər şey

Arduino I2C avtobusu

ilə Arduino çox sayda layihə yarada bilər Hwlibre oxuduğunuzu gördüyünüz kimi, mikrokontrolleri sadə bir şəkildə proqramlaşdırma. Ancaq bu pulsuz donanım panelinin analog və rəqəmsal əlaqələri arasında PWM əlaqələrinin, SPI, serial portun RX və TX pinlərinin və ya öz I2C avtobusu. Buna görə, bu giriş ilə ən azı I2C-dən ehtiyacınız olan hər şeyi bilə bilərsiniz.

ilə I2C avtobusu Arduino lövhəsi ilə əlaqə qurmaq üçün bu tip protokola sahib olan bir çox üçüncü tərəf cihazı bağlaya və istifadə edə bilərsiniz. Aralarında, bu Philips ixtirası sayəsində akselerometrləri, displeyləri, sayğacları, kompasları və daha çox inteqral sxemləri birləşdirə bilərsiniz.

I2C nədir?

I2C, İnteqrasiya olunmuş Dövrə aiddir, yəni inteqrasiya olunmuş dövr. 1982-ci ildə bu bölmədən qurtulduqdan sonra bu gün NXP Yarımkeçiricilər olan Philips Semiconductors şirkəti tərəfindən hazırlanan serial məlumat rabitə avtobusudur. Əvvəlcə bu markanın televiziyaları üçün bir neçə daxili çipi sadə bir şəkildə əlaqələndirmək üçün yaradılmışdır. Ancaq 1990-cı ildən bəri I2C yayılmışdır və bir çox istehsalçı tərəfindən istifadə olunur.

Hal-hazırda onlarla çip istehsalçısı tərəfindən istifadə olunur çox funksiya üçün. Arduino lövhələri üçün mikro nəzarətçilərin yaradıcısı Atmel, I2C ilə eyni olsa da, lisenziyalaşdırma məqsədi ilə TWI (İki Simli İnterfeys) təyinatını təqdim etdi. Ancaq 2006-cı ildə orijinal patentin müddəti bitdi və artıq müəllif hüququna tabe olmadığı üçün I2C termini yenidən istifadə edildi (yalnız logo qorunmağa davam edir, lakin tətbiq edilməsi və ya müddətin istifadəsi məhdudlaşdırılmır).

I2C avtobusunun texniki detalları

I2C avtobusu

El I2C avtobusu bir sənaye standartına çevrildi və Arduino bunu tətbiq etdi ehtiyacı olan ətraf mühit ilə əlaqə üçün. İşləməsi üçün yalnız biri saat siqnalı (CLK), digəri isə serial məlumatların göndərilməsi üçün (SDA) iki xətt və ya kabelə ehtiyac duyur. Bu, SPI avtobusuna nisbətən digər rabitə ilə müqayisədə üstünlük təşkil edir, baxmayaraq ki, tələb olunan əlavə dövrəyə görə istismarı bir qədər mürəkkəbdir.

Bu avtobusda ona qoşulmuş hər cihazın bir ünvanı var bu cihazlara ayrı-ayrılıqda daxil olmaq üçün istifadə olunur. Bu ünvan, son 3 biti jumpers və ya DIP-lər vasitəsilə dəyişdirərək hardware ilə düzəldilir, baxmayaraq ki proqram tərəfindən də edilə bilər. Hər bir cihazın unikal bir ünvanı olacaqdır, baxmayaraq ki, bir neçəsi eyni ünvana sahib ola bilər və münaqişələrin qarşısını almaq və ya mümkünsə dəyişdirmək üçün ikinci dərəcəli avtobusdan istifadə etmək lazım ola bilər.

Bundan əlavə, I2C avtobusunun Master-Slave tipli memarlıq, yəni ağa kölə. Bu o deməkdir ki, rabitə ana cihaz tərəfindən başladıldıqda qullarından məlumat göndərə və ya qəbul edə biləcəkdir. Kölələr ünsiyyət qura bilməyəcəklər, yalnız ağa bunu edə bilər və qullar da bir-birləri ilə ağanın müdaxiləsi olmadan danışa bilməzlər.

Əgər varsa avtobusda bir neçə müəllim, yalnız biri eyni vaxtda müəllim kimi fəaliyyət göstərə bilər. Ancaq buna dəyməz, çünki müəllim dəyişikliyi yüksək bir mürəkkəblik tələb edir, buna görə də tez-tez olmur.

Unutmayın ki master avtobusdakı bütün cihazları sinxronizasiya etmək üçün saat siqnalını verir. Bu, hər qulun öz saatına sahib olma ehtiyacını aradan qaldırır.

I2C avtobus protokolu, eyni zamanda Arduino ilə istifadə edilməməsinə baxmayaraq, gərginlikli xətlərdə (Vcc) çəkmə rezistorlarının istifadəsini nəzərdə tutur. Proqramlaşdırma kitabxanaları səbəbiylə açılan Wire daxili olanları 20-30 k dəyərləri ilə aktivləşdirdiyindən. Bəzi layihələr üçün bu çox yumşaq ola bilər, bu səbəbdən siqnalın yüksələn kənarları daha yavaş olacaq, buna görə daha aşağı sürətlər və daha qısa ünsiyyət məsafələri istifadə edilə bilər. Düzəltmək üçün 1k-dən 4k7-ə qədər xarici çəkmə rezistorları qoymağınız lazım ola bilər.

Siqnal

I2C siqnalı

 

La rabitə çərçivəsi bir I2C avtobus siqnalı bitlərdən və ya vəziyyətlərdən ibarətdir (Arduino-da istifadə olunur, çünki I2C standartı başqalarına icazə verir):

  • 8 bit, bunlardan 7-si ünvan ondan məlumat göndərmək və ya qəbul etmək üçün daxil olmaq istədiyiniz kölə cihazının. 7 bitlə, 128-ə qədər fərqli ünvan yaradıla bilər, buna görə nəzəri olaraq 128 cihaz əldə edilə bilər, ancaq 112-sı xüsusi istifadə üçün ayrıldığından yalnız 16-yə daxil ola bilərsiniz. İstədiyinizi göstərən əlavə bit göndərmək və ya almaq kölə cihaz məlumatı.
  • Həm də var doğrulama biti, aktiv deyilsə, əlaqə etibarlı olmayacaq.
  • Sonra məlumat baytları kölələr tərəfindən göndərmək və ya almaq istədiklərini. Hər bayt, bildiyiniz kimi, 8 bitdən ibarətdir. Nəzərə alın ki, göndərilən və ya alınan hər 8 bit və ya 1 bayt məlumat üçün əlavə 18 bit təsdiqləmə, ünvan və s. Tələb olunur, bu da avtobusun sürət baxımından çox məhdud olduğunu göstərir.
  • Son bir bit təsdiqləmə əlaqənin.

Ayrıca saat tezliyi ötürülmə standart olaraq 100 Mhz, 400 Mhz-də daha sürətli bir rejim olmasına baxmayaraq.

I2C avtobusunun üstünlükləri və mənfi cəhətləri

the fayda səs:

  • Sadəlik yalnız iki sətirdən istifadə etməklə.
  • Var siqnalın gəldiyini bilmək üçün mexanizmlər digər rabitə protokollarına nisbətən.

the dezavantajları səs:

  • Sürət kifayət qədər aşağı ötürmə.
  • Tam bir dubleks deyil, yəni eyni vaxtda göndərə və ala bilməzsən.
  • Paritetdən istifadə etmir nə də alınan məlumat bitlərinin düzgün olub olmadığını bilmək üçün başqa bir yoxlama mexanizmi.

 

 

Arduinoda I2C

Arduino I2C avtobusu

En Arduino, modelinə görə, bu I2C avtobusunu istifadə etmək üçün aktivləşdirilə bilən sancaqlar dəyişir. Misal üçün:

  • Arduino UNO, Nano, MiniPro: A4 SDA (məlumat) və A5 SCK (saat) üçün istifadə olunur.
  • Mega Arduino: SDA üçün pin 20 və SCK üçün 21.

Unutmayın ki, istifadə etmək üçün mütləq lazımdır kitabxanadan istifadə edin Tel.h kimi digərləri olsa da, Arduino IDE kodlarınız üçün I2C y i2cdevlib. Bu kitabxanaların sənədlərini və ya proqramlaşdırılmasının necə olacağını maraqlandıran layihələrə dair məqalələrimizi oxuya bilərsiniz.

I2C ilə istifadə etmək üçün bir cihazın ünvanını necə bilmək olar?

Yalnız bir son xəbərdarlıq, yəni Avropa, Yapon və ya Amerika istehsalçılarından IC satın aldığınız zaman istiqaməti göstərin cihaz üçün istifadə etməlisiniz. Digər tərəfdən, Çinlilər bəzən bunu təfərrüatlandırmırlar və ya düzgün deyil, buna görə də nəticə verməyəcəkdir. Eskizinizdə hansı istiqamətə müraciət etməyinizi bilmək üçün bir ünvan skaneri ilə asanlıqla həll edilə bilər.

La arduino icması bunu yaratdı ünvanı taramaq və müəyyən etmək üçün kod Sadə bir şəkildə. Kodu burada göstərsəm də:

#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);
}


Məqalənin məzmunu bizim prinsiplərimizə uyğundur redaktor etikası. Xəta bildirmək üçün klikləyin burada.

Şərh yazan ilk kişi olun

Şərhinizi buraxın

E-poçt ünvanından dərc olunmayacaq. Lazım alanlar qeyd olunur *

*

*

  1. Verilərdən məsul: Miguel Ángel Gatón
  2. Verilənlərin məqsədi: Nəzarət SPAM, şərh rəhbərliyi.
  3. Qanuniləşdirmə: Sizin razılığınız
  4. Məlumatların ötürülməsi: Qanuni öhdəlik xaricində məlumatlar üçüncü şəxslərə çatdırılmayacaqdır.
  5. Veri saxlama: Occentus Networks (AB) tərəfindən yerləşdirilən verilənlər bazası
  6. Hüquqlar: İstədiyiniz zaman məlumatlarınızı məhdudlaşdıra, bərpa edə və silə bilərsiniz.