Arduino I2C avtobusi haqida hamma narsa

Arduino I2C avtobusi

con Arduino ko'plab loyihalarni yaratishi mumkin Hwlibre ni o'qiganingizni ko'rganingizdek, mikrokontrolrni oddiy usulda dasturlash. Ammo ushbu bepul apparat panelining analog va raqamli ulanishlari orasida hali ham yangi boshlanuvchilar uchun biroz noma'lum bo'lganlar mavjud, masalan, PWM ulanishlarining haqiqiy potentsiali, SPI, ketma-ket portning RX va TX pinlari yoki o'z I2C avtobusi. Shuning uchun, ushbu yozuv bilan siz hech bo'lmaganda I2C-dan kerakli hamma narsani bilib olishingiz mumkin.

con I2C avtobusi Arduino kartasi bilan aloqa o'rnatish uchun siz ushbu turdagi protokolga ega bo'lgan ko'plab uchinchi tomon qurilmalarini ulashingiz va ulardan foydalanishingiz mumkin. Ularning orasida siz ushbu Flibs ixtirosi tufayli akselerometrlarni, displeylarni, hisoblagichlarni, kompaslarni va boshqa ko'plab integral mikrosxemalarni ulashingiz mumkin.

I2C nima?

I2C Inter-Integral Circuit-ga ishora qiladi, ya'ni inter-integral elektron. Bu 1982 yilda Philips Semiconductors kompaniyasi tomonidan ishlab chiqilgan ketma-ket ma'lumotlar uzatish avtobusi, bugungi kunda ushbu bo'limdan xalos bo'lgandan keyin NXP Semiconductors hisoblanadi. Dastlab u ushbu brend televizorlari uchun yaratilgan bo'lib, ular bir nechta ichki chiplarni oddiy usulda aloqa qilishlari mumkin edi. Ammo 1990 yildan beri I2C tarqaldi va ko'plab ishlab chiqaruvchilar tomonidan qo'llaniladi.

Hozirda o'nlab chipsozlar foydalanmoqda bir nechta funktsiyalar uchun. Arduino platalari uchun mikrokontroller yaratuvchisi Atmel, IWC bilan bir xil bo'lsa ham, litsenziyalash sabablari uchun TWI (Two Wired Interface) belgisini taqdim etdi. Ammo 2 yilda asl patentning amal qilish muddati tugadi va endi mualliflik huquqiga taalluqli emas, shuning uchun I2006C atamasi qayta ishlatilgan (faqat logotip himoyalanishda davom etmoqda, ammo uning amal qilishi yoki ishlatilishi cheklanmagan).

I2C avtobusining texnik tafsilotlari

I2C avtobusi

El I2C avtobusi sanoat standartiga aylandi va Arduino uni amalga oshirdi kerak bo'lgan tashqi qurilmalar bilan aloqa qilish uchun. Uning ishlashi uchun faqat ikkita chiziq yoki kabel kerak, biri soat signali (CLK), ikkinchisi ketma-ket ma'lumotlarni yuborish (SDA). Bu SPI avtobusi bilan taqqoslaganda, boshqa kommunikatsiyalar bilan taqqoslaganda foydalidir, garchi uning ishlashi zarur bo'lgan qo'shimcha sxemalar tufayli biroz murakkabroq.

Ushbu avtobusda unga ulangan har bir qurilmaning manzili bor ushbu qurilmalarga alohida kirish uchun ishlatiladi. Ushbu manzil apparat tomonidan o'rnatiladi, so'nggi 3 bitni o'tish moslamalari yordamida o'zgartiradi yoki DIP-larni o'zgartiradi, ammo uni dasturiy ta'minot ham amalga oshirishi mumkin. Har bir qurilma o'ziga xos manzilga ega bo'ladi, garchi ularning bir nechtasi bir xil manzilga ega bo'lishi mumkin va ziddiyatlarga yo'l qo'ymaslik yoki iloji bo'lsa uni o'zgartirish uchun ikkilamchi avtobusdan foydalanish zarur bo'lishi mumkin.

Bundan tashqari, I2C avtobusida a Master-Slave tipidagi arxitektura, ya'ni xo'jayin-qul. Bu shuni anglatadiki, aloqa asosiy uskuna tomonidan boshlanganda, u o'z qullaridan ma'lumotlarni yuborishi yoki qabul qilishi mumkin bo'ladi. Qullar aloqani boshlay olmaydilar, faqat xo'jayin buni uddalay oladi va qullar ham xo'jayinning aralashuvisiz bir-biri bilan bevosita gaplasha olmaydi.

Agar mavjud bo'lsa avtobusda bir nechta o'qituvchilar, faqat bittasi bir vaqtning o'zida o'qituvchi vazifasini bajara oladi. Ammo bunga loyiq emas, chunki o'qituvchining o'zgarishi juda murakkablikni talab qiladi, shuning uchun u tez-tez bo'lmaydi.

Shuni yodda tutingki master avtobusdagi barcha moslamalarni sinxronlashtirish uchun soat signalini beradi. Bu har bir qulning o'z soatlariga bo'lgan ehtiyojini yo'q qiladi.

I2C avtobus protokoli besleme zo'riqishida (Vcc) tortiladigan rezistorlardan foydalanishni ham nazarda tutadi, ammo bu rezistorlar odatda Arduino bilan ishlatilmaydi tortishish, chunki kutubxonalarni dasturlash chunki Wire 20-30 k gacha bo'lgan ichki qismlarni faollashtiradi. Bu ba'zi bir loyihalar uchun juda yumshoq bo'lishi mumkin, shuning uchun signalning ko'tarilgan qirralari sekinroq bo'ladi, shuning uchun past tezlik va qisqa aloqa masofalaridan foydalanish mumkin. Tuzatish uchun siz 1k dan 4k7 gacha bo'lgan tashqi tortishish rezistorlarini o'rnatishingiz kerak bo'lishi mumkin.

Signal

I2C signali

 

La aloqa doirasi shundan I2C avtobus signali bit yoki holatlardan iborat (Arduino-da ishlatiladigan, chunki I2C standarti boshqalarga imkon beradi):

  • 8 bit, ulardan 7 tasi yo'nalish undan ma'lumotlarni yuborish yoki qabul qilish uchun foydalanmoqchi bo'lgan qul qurilmasining. 7 bit bilan 128 ta turli xil manzillarni yaratish mumkin, shuning uchun nazariy jihatdan 128 ta qurilmaga kirish mumkin, ammo faqatgina 112-ga kirish mumkin, chunki 16 tasi maxsus foydalanish uchun saqlangan. Va xohlaganingizni ko'rsatadigan qo'shimcha bit yuborish yoki qabul qilish qul haqida ma'lumot.
  • Bundan tashqari, mavjud tasdiqlash biti, agar u faol bo'lmasa, aloqa haqiqiy bo'lmaydi.
  • Keyin ma'lumotlar baytlari ular yuborishni yoki qullar tomonidan olishni xohlashlarini. Ma'lumki, har bir bayt 8 bitdan iborat. Yuborilgan yoki olingan har bir 8-bit yoki 1 bayt ma'lumot uchun qo'shimcha 18 bit tasdiqlash, manzil va boshqalarni talab qilishini unutmang, bu avtobusning tezligi juda cheklanganligini anglatadi.
  • Oxirgi bit tasdiqlash komunikatsiya.

Bundan tashqari, uchun soat chastotasi uzatish standart sifatida 100 MGts, 400 MGts tezroq rejim mavjud bo'lsa-da.

I2C avtobusining afzalliklari va kamchiliklari

The afzalliklari quyidagilar:

  • Oddiylik faqat ikkita satr yordamida.
  • U bor signal kelganligini bilish mexanizmlari boshqa aloqa protokollari bilan taqqoslaganda.

The Kamchiliklari quyidagilar:

  • Tezlik juda past uzatish.
  • Bu to'liq dupleks emas, ya'ni siz bir vaqtning o'zida yuborishingiz va qabul qila olmaysiz.
  • Paritetdan foydalanmaydi qabul qilingan ma'lumotlar bitlari to'g'ri yoki yo'qligini bilish uchun tekshirish mexanizmining boshqa har qanday turi.

 

 

Arduino-da I2C

Arduino I2C avtobusi

En Arduino, modelga bog'liq, ushbu I2C avtobusidan foydalanishga imkon beradigan pinlar har xil. Masalan:

  • Arduino UNO, Nano, MiniPro: A4 SDA (ma'lumotlar) va A5 SCK (soat) uchun ishlatiladi.
  • arduino mega: pin 20 SDA uchun va 21 SCK uchun.

Unutmangki, undan foydalanish uchun siz kerak kutubxonadan foydalanish Sim.h shunga o'xshash boshqalar mavjud bo'lsa-da, Arduino IDE kodlari uchun I2C y i2cdevlib. Siz ushbu kutubxonalarning hujjatlari yoki sizni qanday qilib dasturlashtirilishi to'g'risida kodlarni olish uchun sizni qiziqtirgan loyihalar haqidagi maqolalarimiz bilan tanishishingiz mumkin.

I2C bilan ishlatish uchun qurilmaning manzilini qanday bilish mumkin?

So'nggi bir ogohlantirish, va bu Evropa, Yaponiya yoki Amerikalik ishlab chiqaruvchilarning IC-larini sotib olganingizda yo'nalishni ko'rsating qurilma uchun ishlatishingiz kerak. Boshqa tomondan, xitoyliklar ba'zida uni batafsil bayon qilmaydilar yoki bu to'g'ri emas, shuning uchun u ishlamaydi. O'zingizning eskizingizda qaysi yo'nalishga murojaat qilishingiz kerakligini bilish uchun buni manzil skaneri yordamida osonlikcha hal qilish mumkin.

La arduino hamjamiyati buni yaratdi manzilni skanerlash va uni aniqlash uchun kod Oddiy tarzda. Sizga kodni shu erda ko'rsatsam ham:

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


Maqolaning mazmuni bizning printsiplarimizga rioya qiladi muharrirlik etikasi. Xato haqida xabar berish uchun bosing bu erda.

Birinchi bo'lib izohlang

Fikringizni qoldiring

Sizning email manzilingiz chop qilinmaydi. Kerakli joylar bilan belgilangan *

*

*

  1. Ma'lumotlar uchun javobgardir: Migel Anxel Gaton
  2. Ma'lumotlarning maqsadi: SPAMni boshqarish, izohlarni boshqarish.
  3. Qonuniylashtirish: Sizning roziligingiz
  4. Ma'lumotlar haqida ma'lumot: qonuniy majburiyatlar bundan mustasno, ma'lumotlar uchinchi shaxslarga etkazilmaydi.
  5. Ma'lumotlarni saqlash: Occentus Networks (EU) tomonidan joylashtirilgan ma'lumotlar bazasi
  6. Huquqlar: istalgan vaqtda siz ma'lumotlaringizni cheklashingiz, tiklashingiz va o'chirishingiz mumkin.