Siz buni albatta eshitgansiz IC PCF 8574, alohida sotib olinadigan yoki allaqachon boshqalar singari modulga o'rnatiladigan chip Elektron komponentlar Arduino doskangiz bilan integratsiyangizni engillashtirish uchun. Bunday holda, bu kirish va chiqishlarni kengaytiruvchisi I2C avtobusi.
Siz Arduino allaqachon o'ziniki bor deb o'ylashingiz mumkin o'rnatilgan I2C avtobusva bu to'g'ri. Ammo PCF8574 ushbu avtobusni sizning rivojlanish kengashingiz chegaralaridan tashqariga chiqarishga yordam berishi mumkin, bu esa Arduino tomonidan taqdim etilgandan ko'ra ko'proq narsalarga muhtoj bo'lgan ba'zi ishlab chiqaruvchilarga katta yordam berishi mumkin.
I2C avtobusi nima?
I2C nomi kelib chiqadi Inter-integral mikrosxemasi yoki o'zaro integral mikrosxemalar. Uning 1.0 versiyasi 1992 yilda Flibs tomonidan yaratilgan. Ikkinchi 2.1 2000 yilda keladi va bugungi kunda u standartga aylandi (100 kbit / s tezlikda, garchi bu maksimal 3.4 Mbit / s gacha), 2006 yilda patent muddati tugagandan so'ng va undan erkin foydalanish mumkin.
Hozirgi vaqtda u sanoatda keng qo'llanilmoqda aloqa uchunShuningdek, ishlab chiqaruvchilar tomonidan bitta ICga birlashtirilgan turli xil mikrokontroller va atrof-muhit birliklari bilan aloqa o'rnatish loyihalari uchun juda minnatdor.
El I2C - bu avtobus ketma-ket aloqadan yaxshi ma'lum. U faqat ikkita kanal bilan sinxron aloqa protokolidan foydalanadi (uchinchisi bor, lekin u mos yozuvlar yoki GND bilan birlashtirilgan), aslida u TWI (Two Wire Interface) deb ham nomlanadi:
- Soat uchun bitta (SCL).
- Ma'lumot uchun boshqa (SDA).
Bu shuni anglatadiki xo'jayin va qul ular ma'lumotlarni bir xil simi yoki trek orqali yuboradilar, bu soat signalini yaratadigan birinchi tomonidan boshqariladi. I2C avtobusiga ulangan har bir periferik qurilmada uzatishni yo'naltirish uchun o'ziga xos manzil beriladi. Ammo o'qituvchi har doim bir xil bo'lishi shart emas (ko'p o'qituvchi), bu har doim uni tashabbuskori.
Maqolada aytib o'tganimdek Arduino I2C Men ilgari murojaat qilgan edim, har bir taxtada turli joylarda ushbu I2C ulanishlari mavjud. Plastinaning har bir versiyasida uni to'g'ri ishlatish uchun buni yodda tutishingiz kerak:
- Arduino UNO: SDA A4 va SCK A5 da
- ArduinoNano: oldingi bilan bir xil.
- Arduino MiniPro: bir xil.
- arduino mega: SDA 20-pinda, SCK esa 21-da.
- Plitalar haqida ko'proq ma'lumot.
Siz allaqachon eskizlaringiz uchun I2C dan osongina foydalanishingiz mumkinligini bilasiz, chunki Wire.h kutubxonasi ushbu ketma-ket aloqa uchun turli funktsiyalar bilan:
- boshlanishi (): Wire kutubxonasini ishga tushiring va uning master yoki qul ekanligini aniqlang
- requestFrom (): master tomonidan quldan ma'lumotlarni so'rash uchun foydalaniladi.
- beginTransmission (): uzatishni qul bilan boshlang.
- endTransmission (): uzatish tugashi.
- yozish ()- Xo'jayinning so'roviga binoan quldan ma'lumotlarni yozing yoki siz magistrning uzatilishini navbatga qo'yishingiz mumkin.
- mavjud (): o'qish uchun baytlar sonini qaytaradi.
- o'qing (): quldan xo'jayinga uzatilgan baytni o'qing yoki aksincha.
- onReceive (): Qul masterdan uzatishni qabul qilganda funktsiyani chaqiradi.
- onRequest (): Qul masterdan ma'lumot so'raganda funktsiyani chaqiradi.
para qo'shimcha ma'lumot Arduino dasturlash va funktsiyalari haqida siz bizning yuklab olishingiz mumkin PDF qo'llanmasi.
PCF8574 nima?
PCF8574 - bu I2C avtobus raqamli kirish va chiqish (I / U) kengaytiruvchisi. U turli xil ishlab chiqaruvchilar tomonidan ishlab chiqarilishi mumkin, qo'shimcha ravishda IC va modullarda mavjud. Qanday bo'lmasin, uni Arduino doskangizga ulash juda foydali va anakart ruxsat berganidan ko'proq qurilmalarni boshqarish imkoniyatiga ega.
El PCF8574 pinout oddiy, chunki u faqat o'z ichiga oladi 8 qarag'ay quasidirectional (aloqa qilish uchun mikrosxemalar ulangan P0-P7) va boshqa tomondan sizda Arduino platasiga ulanishingiz kerak bo'lgan SDA va SCL, shuningdek VCC va GND ham modulni quvvatlantirish uchun. Va aloqa qaysi qurilmalarga yo'naltirilganligini tanlash uchun A0, A1, A2 uchta manzil pinlarini unutmang ...
Egalik qiladi Boshqa xususiyatlar bilishingiz kerak:
- Uning aloqalari, ochiq drenaj bo'lishi mumkin ham kirish, ham chiqish sifatida ishlatiladi.
- La tepalik oqimi u chiqish vazifasini bajarganda 25mA (cho'kish, PCF8574 tomon oqim tushganda) va 300 µA (manba, oqim PCF8574 dan oqadi).
- La stress quvvat manbai 2.5 va 6v ni tashkil qiladi. Kutish sarfi juda past, atigi 10 µA.
- Barcha natijalar mandallarga ega bo'ling, tashqi harakatlarga ehtiyoj sezmasdan davlatni saqlab qolish. Siz faqat davlatni o'zgartirmoqchi bo'lganingizda harakat qilishingiz kerak.
- Siz 8 ni olishingiz mumkin mumkin bo'lgan ko'rsatmalar, ya'ni 8 ta modul bilan bog'lanish uchun 8 ta qurilmaga yoki uni 64 ta qurilmaga kengaytirish uchun 0 ta moduldan foydalaniladi. Manzillar (A1, A2, AXNUMX pinlari):
- 000: manzil 0x20
- 001: manzil 0x21
- 010: manzil 0x22
- 011: manzil 0x23
- 100: manzil 0x24
- 101: manzil 0x25
- 110: manzil 0x26
- 111: manzil 0x27
- Qabul qiladi uzilish (INT) doimiy kuzatuvsiz ma'lumotlarni aniqlash uchun maxsus chiziq orqali.
Arduino bilan integratsiya
Arduino bilan ulanish juda oddiy, siz Vccni Arduino platasining 5v pimi bilan, GND ni esa Arduino ning GND bilan ulashingiz kerak. Boshqa tomondan, PCF8574 SDA va SCL modulining pinlari bo'lishi mumkin pinalar bilan ulang 14 (A5 SCL) va 15 (A4 SDA). Faqat shu bilan u ishlay boshlaydi, shubhasiz siz aloqa qilmoqchi bo'lgan qurilmalarni ulash uchun Px dan foydalanishingiz mumkin ...
Keyin u faqat yo'qolgan bo'lar edi namunaviy eskiz bilan boshlang Arduino IDE-da. Buni qo'shimcha kutubxonadan foydalanmasdan qilishingiz mumkin ...
#include <Wire.h> const int address = 0x38; void setup() { Wire.begin(); Serial.begin(9600); } void loop() { for (short channel = 0; channel < 8; channel++) { // Escribir dato en cada uno de los 8 canales Wire.beginTransmission(address); Wire.write(~(1 << channel)); Wire.endTransmission(); // Lee dato del canal delay(500); } }
Kirish sifatida:
#include <Wire.h> const int address = 0x38; void setup() { Wire.begin(); Serial.begin(9600); } void loop() { short channel = 1; byte value = 0; // Leer el dato del canal Wire.requestFrom(pcfAddress, 1 << channel); if (Wire.available()) { value = Wire.read(); } Wire.endTransmission(); // Mostrar el valor leido por el monitor serie Serial.println(value); }
Yoki ham kutubxonalardan foydalaningkabi PCF8574 kabi bu erdan yuklab olish va ushbu kutubxona bilan birga keltirilgan misolning o'ziga o'xshash kodidan foydalaning:
#include <Wire.h> #include "PCF8574.h" PCF8574 expander; void setup() { Serial.begin(9600); expander.begin(0x20); /* Setup some PCF8574 pins for demo */ expander.pinMode(0, OUTPUT); expander.pinMode(1, OUTPUT); expander.pinMode(2, OUTPUT); expander.pinMode(3, INPUT_PULLUP); /* Blink hardware LED for debug */ digitalWrite(13, HIGH); /* Toggle PCF8574 output 0 for demo */ expander.toggle(); /* Blink hardware LED for debug */ digitalWrite(13, LOW); } void loop() { }
Birinchi bo'lib izohlang