جدول المحتويات:

وحدة المضاعف TCA9548A I2C - مع Arduino و NodeMCU: 11 خطوة
وحدة المضاعف TCA9548A I2C - مع Arduino و NodeMCU: 11 خطوة

فيديو: وحدة المضاعف TCA9548A I2C - مع Arduino و NodeMCU: 11 خطوة

فيديو: وحدة المضاعف TCA9548A I2C - مع Arduino و NodeMCU: 11 خطوة
فيديو: ESP32-CAM - Guide to making YOUR first DIY Security Camera 2024, شهر نوفمبر
Anonim
Image
Image

هل سبق لك أن واجهت موقفًا اضطررت فيه إلى توصيل اثنين أو ثلاثة أو أكثر من مستشعرات I2C إلى Arduino لمجرد إدراك أن المستشعرات لها عنوان I2C ثابت أو واحد. علاوة على ذلك ، لا يمكنك الحصول على جهازين بنفس العنوان على نفس دبابيس SDA / SCL!

ماهي خياراتك؟ ضعهم جميعًا على معدد الإرسال TCA9548A 1 إلى 8 I2C لجعلهم جميعًا يتحدثون مع بعضهم البعض في نفس الحافلة! يتيح TCA9548A Breakout الاتصال بالعديد من أجهزة I2C التي لها نفس العنوان مما يسهل التفاعل معها.

الخطوة 1: متطلبات الأجهزة

المواضيع التي تمت تغطيتها
المواضيع التي تمت تغطيتها

في هذا البرنامج التعليمي نحتاج إلى:

- اللوح

- معدد TCA9548A I2C

- اردوينو أونو / نانو كل ما هو في متناول اليد

- NodeMCU

- عدد قليل من شاشات 0.91 و 0.96 I2C OLED

- كابلات العبور ، و

- كبل USB لتحميل الكود

الخطوة 2: المواضيع التي تمت تغطيتها

سنبدأ مناقشتنا من خلال فهم أساسيات تقنية I2C

ثم سنتعرف على TCA9548A Multiplexer وكيف يرسل السيد والعبد البيانات ويستقبلها باستخدام تقنية I2C ثم سنتحقق من كيفية برمجة واستخدام معدد الإرسال في مشروعنا باستخدام Arduino و NodeMCU التالي ، سأريك سريعًا عرض توضيحي باستخدام 8 شاشات I2C OLED وأخيراً سننهي البرنامج التعليمي من خلال مناقشة مزايا وعيوب جهاز TCA9548A Multiplexer

الخطوة 3: أساسيات I2C Bus

أساسيات I2C Bus
أساسيات I2C Bus
أساسيات I2C Bus
أساسيات I2C Bus
أساسيات I2C Bus
أساسيات I2C Bus

الدائرة المتكاملة التي يتم نطقها I-squared-C (I²C) أو I2C عبارة عن تقنية ناقل سلكي (4 أسلاك في الواقع لأنك تحتاج أيضًا إلى VCC والأرض) التي تُستخدم للتواصل بين معالجات وأجهزة استشعار متعددة.

السلكان هما:

* SDA - البيانات التسلسلية (خط البيانات) و

* SCL - الساعة التسلسلية (خط الساعة)

تذكر أن كلا الخطين "متزامن" "ثنائي الاتجاه" "مفتوح التصريف" ويتم "سحبهما باستخدام المقاومات".

تم تصميم تقنية ناقل I2C في الأصل بواسطة Philips Semiconductors في أوائل الثمانينيات للسماح بالاتصال السهل بين المكونات الموجودة على نفس لوحة الدائرة.

باستخدام I2C ، يمكنك توصيل العديد من العبيد بسيد واحد (مثل SPI) أو يمكن أن يكون لديك العديد من الأساتذة الذين يتحكمون في عبيد واحد أو عدة عبيد. يمكن لكل من السادة والعبيد نقل البيانات واستقبالها. لذلك ، يمكن أن يكون الجهاز الموجود على ناقل I2C في إحدى الحالات الأربع التالية:

* الإرسال الرئيسي - العقدة الرئيسية ترسل البيانات إلى العبد * الاستقبال الرئيسي - تستقبل العقدة الرئيسية البيانات من العبد

* إرسال الرقيق - تقوم العقدة التابعة بإرسال البيانات إلى السيد

* تلقي الرقيق - تتلقى العقدة التابعة البيانات من السيد

I2C هو بروتوكول اتصال تسلسلي "قصير المسافة" ، لذلك يتم نقل البيانات "بت بِت" على طول السلك الفردي أو خط SDA. تتم مزامنة خرج البتات مع أخذ عينات من البتات بواسطة إشارة ساعة "مشتركة" بين السيد والعبد. دائمًا ما يتحكم السيد في إشارة الساعة. السيد يولد الساعة ويبدأ التواصل مع العبيد.

لذا ، لتلخيص ذلك>

عدد الأسلاك المستخدمة: 2

متزامن أو غير متزامن: متزامن

المسلسل أو المتوازي: المسلسل

يتم التحكم في إشارة الساعة بواسطة: العقدة الرئيسية

الفولتية المستخدمة: +5 فولت أو +3.3 فولت

أقصى عدد للماجستير: غير محدود

الحد الأقصى لعدد العبيد: 1008

السرعة القصوى: الوضع القياسي = 100 كيلو بت في الثانية

الوضع السريع = 400 كيلو بت في الثانية

وضع السرعة العالية = 3.4 ميجابت في الثانية

الوضع فائق السرعة = 5 ميجابت في الثانية

الخطوة 4: وحدة المضاعف TCA9548A I2C

وحدة المضاعف TCA9548A I2C
وحدة المضاعف TCA9548A I2C
وحدة المضاعف TCA9548A I2C
وحدة المضاعف TCA9548A I2C
وحدة المضاعف TCA9548A I2C
وحدة المضاعف TCA9548A I2C

TCA9548A هو مُضاعِف I2C ثماني القنوات (ثنائي الاتجاه) والذي يسمح بالتحكم في ثمانية أجهزة I2C منفصلة بواسطة ناقل I2C مضيف واحد. تحتاج فقط إلى توصيل مستشعرات I2C بحافلات SCn / SDn متعددة الإرسال. على سبيل المثال ، إذا كانت هناك حاجة إلى ثماني شاشات OLED متطابقة في تطبيق ما ، فيمكن توصيل واحدة من كل شاشة في كل من هذه القنوات: 0-7.

يتصل المضاعف بخطوط VIN و GND و SDA و SCL لوحدة التحكم الدقيقة. تقبل لوحة الاختراق VIN من 1.65 فولت إلى 5.5 فولت. يتم توصيل كل من خطي الإدخال SDA و SCL بـ VCC من خلال مقاوم سحب 10K (يتم تحديد حجم المقاوم للسحب من خلال مقدار السعة على خطوط I2C). يدعم معدد الإرسال بروتوكولات I2C العادية (100 كيلو هرتز) والسريعة (400 كيلو هرتز). جميع منافذ الإدخال / الإخراج في TCA9548A تتحمل 5 فولت ويمكن استخدامها أيضًا للترجمة من الفولتية العالية إلى المنخفضة أو المنخفضة إلى العالية.

من الجيد وضع مقاومات سحب على جميع قنوات TCA9548A ، حتى لو كانت الفولتية متماثلة. السبب في ذلك هو بسبب مفتاح NMOS الداخلي. إنه لا ينقل الجهد العالي بشكل جيد ، ومن ناحية أخرى فإنه ينقل الفولتية المنخفضة بشكل جيد للغاية. يمكن أيضًا استخدام TCA9548A لترجمة الجهد ، مما يسمح باستخدام جهد ناقل مختلف على كل زوج SCn / SDn بحيث يمكن لأجزاء 1.8-V أو 2.5-V أو 3.3-V الاتصال بأجزاء 5-V. يتم تحقيق ذلك باستخدام مقاومات سحب خارجية لسحب الناقل لأعلى إلى الجهد المطلوب للقناة الرئيسية وكل قناة تابعة.

إذا اكتشفت وحدة التحكم الدقيقة وجود تعارض في الحافلة أو أي عملية أخرى غير صحيحة ، فيمكن إعادة ضبط TCA9548A عن طريق التأكيد على انخفاض دبوس إعادة الضبط.

الخطوة الخامسة:

صورة
صورة
صورة
صورة
صورة
صورة

يسمح TCA9548 لوحدة تحكم صغيرة واحدة بالاتصال بما يصل إلى '64 مستشعرًا' جميعها بنفس عنوان I2C أو مختلف عن طريق تعيين قناة فريدة لكل ناقل فرعي تابع لجهاز الاستشعار.

عندما نتحدث عن إرسال البيانات عبر سلكين إلى أجهزة متعددة ، نحتاج بعد ذلك إلى طريقة لمعالجتها. إنه نفس ساعي البريد الذي يأتي على طريق واحد ويسقط حزم البريد إلى منازل مختلفة لأن لديهم عناوين مختلفة مكتوبة عليها.

يمكن أن يكون لديك بحد أقصى 8 من معددات الإرسال متصلة ببعضها البعض على عناوين 0x70-0x77 للتحكم في 64 من نفس أجزاء I2C المعنونة. من خلال توصيل بتات العناوين الثلاثة A0 و A1 و A2 بـ VIN ، يمكنك الحصول على مجموعة مختلفة من العناوين. هذا ما يبدو عليه بايت عنوان TCA9548A. أول 7 بتات تتحد لتشكل عنوان العبد. يحدد الجزء الأخير من عنوان الرقيق العملية (قراءة أو كتابة) المطلوب إجراؤها. عندما تكون عالية (1) ، يتم تحديد قراءة ، بينما منخفضة (0) تحدد عملية كتابة.

الخطوة 6: كيف يرسل السيد البيانات ويستقبلها

كيف يرسل السيد البيانات ويستقبلها
كيف يرسل السيد البيانات ويستقبلها
كيف يرسل السيد البيانات ويستقبلها
كيف يرسل السيد البيانات ويستقبلها

ما يلي هو الإجراء العام للسيد للوصول إلى جهاز تابع:

1. إذا أراد السيد إرسال البيانات إلى أحد العبيد (يكتب):

- يرسل المرسل الرئيسي حالة START متبوعة بعناوين جهاز الاستقبال التابع وتعيين R / W على 0

- يرسل المرسل الرئيسي البيانات الموجودة في "سجلات التحكم ذات 8 بتات" إلى جهاز الاستقبال التابع عندما يقر العبد بأنه جاهز

- يقوم المرسل الرئيسي بإنهاء النقل بحالة STOP

2. إذا كان السيد يريد تلقي أو قراءة البيانات من العبد (يقرأ):

- يرسل المتلقي الرئيسي حالة START متبوعة بعناوين جهاز الاستقبال التابع ومجموعة R / W على 1

- يرسل المتلقي الرئيسي السجل المطلوب لقراءته إلى المرسل التابع

- يستقبل المتلقي الرئيسي البيانات من المرسل التابع

- بمجرد استلام جميع البايتات ، يرسل Master إشارة NACK إلى العبد لإيقاف الاتصالات وتحرير الناقل

- يقوم المتلقي الرئيسي بإنهاء النقل بشرط STOP

تعتبر الحافلة في وضع الخمول إذا كانت كل من خطوط SDA و SCL مرتفعة بعد حالة STOP.

الخطوة 7: الكود

الشفرة
الشفرة

الآن ، يتيح لك الرمز الدولي البدء بتضمين مكتبة "Wire" وتحديد عنوان معددات الإرسال.

# تضمين "Wire.h"

# تضمين "U8glib.h"

#define MUX_Address 0x70 // عنوان التشفير TCA9548A

ثم نحتاج إلى تحديد المنفذ الذي نريد الاتصال به وإرسال البيانات الموجودة عليه باستخدام هذه الوظيفة:

selectI2CChannels باطلة (uint8_t i) {

إذا (i> 7) يعود ؛

Wire.beginTransmission (MUX_Address) ؛

Wire.write (1 << i) ؛

Wire.endTransmission () ؛

}

بعد ذلك سنقوم بتهيئة العرض في قسم الإعداد عن طريق استدعاء "u8g.begin ()؛" لكل شاشة متصلة بـ MUX "tcaselect (i) ؛"

بمجرد التهيئة ، يمكننا بعد ذلك القيام بكل ما نريد فقط من خلال استدعاء الوظيفة "tcaselect (i)؛" حيث "i" هي قيمة ناقل متعدد الإرسال ثم إرسال البيانات والساعة وفقًا لذلك.

الخطوة 8: ماسح I2C

ماسح I2C
ماسح I2C

فقط في حالة إذا لم تكن متأكدًا من عنوان الجهاز الخاص بدرع I2C الخاص بك ، فقم بتشغيل رمز "I2C Scanner" المرفق للعثور على العنوان السداسي العشري لجهازك. عند التحميل على Arduino ، سيقوم الرسم بفحص شبكة I2C ، مع إظهار العناوين التي تستجيب.

الخطوة 9: الأسلاك والعرض التجريبي

الأسلاك والعروض التوضيحية
الأسلاك والعروض التوضيحية
الأسلاك والعروض التوضيحية
الأسلاك والعروض التوضيحية

الأسلاك:

لنبدأ بتوصيل معدد الإرسال بلوحة NodeMCU. الاتصال:

VIN إلى 5V (أو 3.3V)

GND على الأرض

SDA إلى D2 و

SCL إلى دبابيس D1 على التوالي

بالنسبة للوحة Arduino ، قم بالاتصال:

VIN إلى 5V (أو 3.3V)

GND على الأرض

SDA إلى A4 و

SCL إلى دبابيس A5 على التوالي

بمجرد توصيل MUX بوحدة التحكم الدقيقة ، تحتاج فقط إلى توصيل المستشعرات بأزواج SCn / SDn.

الآن ، دعنا نتفقد هذا العرض التوضيحي السريع الذي قمت فيه بتوصيل 8 شاشات OLED بجهاز TCA9548A Multiplexer. نظرًا لأن هذه الشاشات تستخدم اتصال I2C ، فإنها تتواصل مع Arduino باستخدام دبابيس فقط.

الخطوة 10: المزايا والعيوب

المميزات والعيوب
المميزات والعيوب

مزايا

* الاتصال يتطلب فقط خطين للحافلات (أسلاك)

* توجد علاقات السيد / العبد البسيطة بين جميع المكونات

* لا توجد متطلبات صارمة لمعدل البث بالباود مثل RS232 على سبيل المثال ، يقوم السيد بإنشاء ساعة ناقل

* الأجهزة أقل تعقيدًا من أجهزة UART

* يدعم سادة متعددين وعبيد متعددين

* يعطي بت ACK / NACK تأكيدًا على نقل كل إطار بنجاح

* I2C عبارة عن "ناقل حقيقي متعدد الوظائف" يوفر التحكيم واكتشاف الاصطدام

* كل جهاز متصل بالناقل يمكن عنونة برمجية عن طريق عنوان فريد

* يمكن لمعظم أجهزة I2C الاتصال بسرعة 100 كيلو هرتز أو 400 كيلو هرتز

* I²C مناسب للأجهزة الطرفية حيث تكون البساطة وانخفاض تكلفة التصنيع أكثر أهمية من السرعة

* بروتوكول معروف ومستخدم على نطاق واسع

سلبيات

* معدل نقل البيانات أبطأ من SPI

* حجم إطار البيانات محدود بـ 8 بتات

* يلزم تنفيذ أجهزة أكثر تعقيدًا من تقنية SPI

موصى به: