PCF8574 GPIO Genişletici - Arduino ve NodeMCU ile

Son öğreticimde, Arduino / ESP8266 / ESP32'nize maksimum 64 I2C veya I²C sensörü eklemek için kullanılabilecek TCA9548A MUX hakkında konuştum.

Bu yazıda PCF8574 8-bit GPIO Port Extender hakkında konuşacağım. Piyasada bulunan birçok GPIO genişleticiden biridir.

Bu küçük küçük tahta hayat kurtarıcı olur Arduino'nuzdaki pimler bittiğinde. Bu "GPIO (Genel Amaçlı Giriş Çıkışı) pim genişletici", "bir sinyal çıkışı" veya "bir sinyali giriş olarak okumak" için kullanılabilen ek 8 pim (P0 ~ P7) sağlar.

Bu modüller I2C veriyolunda çalışır ve papatya diziminde bir projede bu cihazların en fazla 8'ini bağlayabilirsiniz. Her cihaz bize toplam 64 GPIO sağlayan 8 bitlik bir GPIO verecektir.

Bu IC'ler gülünç derecede ucuzdur ve eBay veya AliExpress'ten kolayca satın alınabilir. Kablolama konusunda endişelenmek istemiyorsanız ve sadece projenizi gerçekten "basit" tutmak istiyorsanız, bu tamamen monte edilmiş koparma panellerini satın alabilirsiniz. Onları I2C otobüsüne bağlamanız yeterlidir ve hepiniz hazırsınız.

Adım 1: Donanım Gereksinimi

Bu eğitim için ihtiyacımız olan:

  • Breadboard
  • PCF8574 GPIO Genişletici IC
  • PCF8574 GPIO Genişletici Koparma Kartı
  • Arduino UNO / Nano ne kullanışlı olursa olsun
  • NodeMCU
  • Birkaç LED ve eşit miktarda 220 Ohm akım sınırlama direnci
  • 2 x 10K Direnç
  • Bağlantı Kablosu ve
  • Kodu yüklemek için USB Kablosu

2. Adım: İşlenen Konular

  • I2C Teknolojisine Genel Bakış
  • PCF8574 GPIO Genişletici IC ve Breakout Kartına daha yakından bakın
  • GPIO Adresleme
  • Kullanılacak Kütüphaneler
  • PCF8574'ü Arduino ve NodeMCU'ya bağlama
  • I2C Tarayıcı kullanarak adres bulma
  • Projenizde PCF8574 nasıl programlanır ve kullanılır
  • Kesme Pimi nasıl kullanılır
  • Uygulama alanları

Adım 3: I2C Teknolojisi

'Seri iletişim' için kullanılan, entegre kısa devre I-kare-C (I²C) veya I2C telaffuz edilen 'kısa mesafe', 'iki telli veri yolu teknolojisi' (aslında VCC ve Toprak'a da ihtiyacınız olduğu için 4 kablo) çoklu işlemciler ve sensörler arasında.

I2C teknolojisi hakkında daha fazla bilgi edinmek istiyorsanız lütfen 'Tutorial Number 09'uma göz atın. Şimdilik sadece I2C'nin temellerini ele alacağız ve ana başlığımıza atlayacağız. İki tel:

  • SDA - Seri Veri (veri hattı) ve
  • SCL - Seri Saat (saat çizgisi)

Bu hatların her ikisi de açık drenajlıdır ve dirençlerle çekilir. Genellikle hatta bir usta ve bir veya birden fazla köle vardır, ancak birden fazla usta da olabilir. Hem efendiler hem de köleler veri iletebilir veya alabilir.

PCF8574 GPIO Extender I2C veriyolunda çalışır ve tek bir ana bilgisayar I2C veri yolu tarafından kontrol edilebilen 'IO Pinlerini' genişletir. PCF8574'ün Adres aralığı 0x20 ila 0x27 (7 bit adres modu) arasındadır. bu cihazlardan en fazla 8 tanesi bir projede I2C veriyoluna bağlanabilir.

Adım 4: Yakından Bakış / Pinouts

IC: (5 parçalar için $ 2, 30 AUD)

****************************

İlk olarak PCF8574 IC'nin pin çıkışlarını kontrol edelim:

  1. Bu IC'nin pimi 16, 2.5V ila 6V arasında çalışabilen VCC'dir
  2. Pin 8 GND'dir
  3. Pim 4 ~ 7 ve 9 ~ 12, P0 - P7 8-Paraleldir (yani 8 pimin tümünü aynı anda kullanabileceğiniz anlamına gelir) G / Ç pimleri. Bu çift yönlü I / O pinlerinin her biri, bir veri yönü kontrol sinyali kullanılmadan bir giriş veya çıkış olarak kullanılabilir. Güç açıldığında, tüm bu G / Ç pimleri YÜKSEK durumundadır.
  4. Pin 15, I2C seri veri girişi veya çıkışı içindir (Bir çekme direnci ile VCC'ye bağlayın) ve
  5. Pim 14 I2C saat girişi içindir (VCC'ye bir çekme direnci ile bağlayın)
  6. Pim 1, 2 ve 3 veya A0, A1 ve A2, PCF8574'ün I2C veriyolunda göründüğü adresi YÜKSEK çevirerek belirlememizi sağlar. Varsayılan adres 0x20'dir. Varsayılan olarak tüm bu pimler topraklanmıştır veya DÜŞÜK. Bu pimler için çekme dirençlerine gerek yoktur.
  7. Pin 13 Kesme Çıkışı içindir. Bir çekme direnci kullanarak VCC'ye bağlayın.
  • Bu IC'lerin sadece 10μA'lık çok "Düşük Bekleme Akımı" Tüketimi vardır.
  • SDA, SLC ve Interrupt pinlerinin çekme dirençleri kullanılarak yukarı çekilmesi gerekir
  • Bu IC'nin piyasada PCF8574A adı verilen ikinci bir varyantı var. En büyük fark adresleme şemasıdır. PCF8574'ün 7 bit adresinin ilk dört biti 0100'dür ve PCF8574A için olanlar 0111'dir. Alt üç bit, A2, A1 ve A0 cihaz pinlerindeki ayarlardır.
  • PCF8574 ve PCF8574A'nın maksimum batma akımı 25mA'dır. Ek sürücü gerektiren uygulamalarda, 50mA akıma kadar batan iki port pimi birbirine bağlanabilir.

Adım 5:

Modül: (AUD $ 1.34 için 1 Kurulu)

*******************************

  • Şimdi PCF8574 Break-outboard'a bir göz atalım:
  • Soldan sağa baktığımızda modülün 4 pimi olduğunu görebiliriz: VCC, GND, SDA ve SCL
  • Sonra SDA ve SCL veriyolları için iki adet 10kΩ SMD yukarı çekme direncine sahibiz.
  • Daha sonra PCF8574 SMD IC ve ardından A0, A1 ve A2 için yüksek ve düşük pozisyonlarda 3 jumper var. Sonra bu panolardan birini piggyback yapmak için kullanılabilecek bu portlar var.
  • Sonra 8 G / Ç pini artı bir Kesme pini var. Kartın arkasına bakarsak, pimlerin tamamı P0'dan P7'ye başlayıp INTrupt pimi ile biten etiketlenir.

Bunların çoğunu kullanırken, bu jumperAddress çubuklarını ayarlayarak adresi değiştirebilirsiniz.

6. Adım: Adresleme

Üç adres biti A0, A1 ve A2'yi VIN veya HIGH'a bağlayarak adreslerin farklı kombinasyonlarını elde edebilirsiniz.

PCF8574'ün bir adres baytı böyle görünür. İlk 7 bit birleşerek köle adresini oluşturur. Bağımlı adresinin son biti gerçekleştirilecek işlemi (okuma veya yazma) tanımlar. Yüksek (1) olduğunda, düşük (0) yazma işlemini seçerken bir okuma seçilir.

Adım 7: Kullanılacak Kütüphane

Birlikte verilen 'Tel Kütüphanesi' Arduino'nun I2C / TWI veri yolu üzerinden iletişime izin verir, ancak isterseniz github'dan 'PCF8574_library' indirip kullanabilirsiniz: //github.com/xreef/PCF8574_library

Bağlantı aşağıdaki açıklamada yer almaktadır. Sayfanın sağ üst köşesindeki İNDİRME düğmesini tıklayın, indirildikten sonra sıkıştırılmamış klasörü PCF8574 olarak yeniden adlandırın.

PCF8574 klasöründe PCF8574.cpp ve PCF8574.h bulunduğundan emin olun.

PCF8574 kütüphane klasörünü Arduino / libraries / klasörünüze yerleştirin.

Bu ilk kitaplığınızsa kitaplıklar alt klasörünü oluşturmanız gerekebilir. IDE'yi yeniden başlatın ve sonra kodunuzdaki kitaplığı kullanabilmeniz gerekir. Bu kütüphane, IO Expander'a el koymanıza yardımcı olacak çok iyi örneklerle birlikte gelir.

#include "Arduino.h"

#include "PCF8574.h"

Ekler

  • PCF8574_library-master.zip İndir

Adım 8: Arduino / NodeMCU'ya Bağlanma

IC'yi bir Arduino'ya bağlayarak başlayalım. connect:

VCC - 3, 3v

GND - GND

Ayrıca, varsayılan 0x20 adresini kullanmak için üç adres seçim pimini A0, A1 ve A2'yi GND'ye bağlamamız gerekir. Daha sonra SCL pimini Arduino ve A5'e bağlayın.

SDA - A4

Son olarak, hem SCL hem de SDA otobüslerini sırasıyla 10K dirençli çekmemiz gerekiyor.

NodeMCU bağlantısı için:

VCC - 3, 3v

GND - GND

GND'ye A0, A1 ve A2 pimleri

SCL - D1 arası

SDA - D2 arası

Ve son olarak sırasıyla SDA ve SCL veriyollarını sırasıyla 10K direnç kullanarak çekin

IC mikro denetleyiciye bağlandıktan sonra, sensörleri 4 ~ 7/9 ~ 12 Pimlerine veya başka bir deyişle IC'nin P0 ila P7 pimlerine bağlamanız gerekir.

Adım 9: I2C Tarayıcı

Bildiğimiz gibi, A0, A1 ve A2 adres bitlerini VIN veya HIGH'a bağlayarak farklı adres kombinasyonları elde edebiliriz. Bu nedenle, genişleticiye hangi adresin tahsis edildiğini anlamak bazen zorlaşır. Ayrıca, I2C veriyolunda iki veya daha fazla cihaz varsa, bunlardan herhangi birinin diğeriyle çakışıp çakışmadığını kontrol etmek her zaman iyi bir fikirdir.

Bu 'I2C Tarayıcıyı' çalıştırarak cihazınızın onaltılık adresini kolayca bulabilirsiniz. Bir Arduino'ya yüklendiğinde, çizim I2C ağını tarar ve yanıt veren adresleri gösterir.

Ekler

  • I2CScanner.zip İndir

Adım 10: Kod

IO Expander'ın adresini öğrendikten sonra kodu kolayca kullanabilirsiniz.

Önce kodunuza "PCF8574.h" kütüphanesini eklemeniz gerekir.

Ardından, IO Expander'ın adresini yapıcıya iletmeniz gerekir:

PCF8574 (uint8_t adresi);

esp8266 için SDA ve SCL pinini belirtmek istiyorsanız bunu kullanın:

PCF8574 (uint8_t adresi, uint8_t sda, uint8_t scl);

O zaman IO pinlerinin modlarını belirtmeniz gerekir:

pcf8574.pinMod (P0, ÇIKIŞ);

pcf8574.pinMod (P1, INPUT);

ve son olarak kodun geri kalanında döngü yapmadan önce iletimi "başlatır".

Adım 11: Değer Yazma

Şimdi, bir değer yazmak için "digitalWrite" işlevini çağırmanız ve pin numarasını ve ardından modu geçmeniz yeterlidir:

PCF8574.digitalWrite (P1, YÜKSEK);

veya:

PCF8574.digitalWrite (P1, DÜŞÜK);

Pekala, kodu bir Arduino'ya yükleyelim. Koda göre genişleticinin P0 ve P1'ine bağlı LED'ler değişmeli ve yanıp sönmelidir ve burada tam olarak ne olduğunu bingo.

Ekler

  • WriteValue.zip İndir

Adım 12: Değeri Oku

Şimdi, genişleticideki değerleri okumak için, "digitalReadAll ()" veya "digitalRead (Pin_Number)" iki işlevden birini kullanacağız.

digitalReadAll () işlevi bir iletimde 'tüm giriş pimlerini' okur:

PCF8574 :: DigitalInput di = PCF8574.digitalReadAll ();

Serial.print (di.p0); Serial.print ("-");

Serial.print (di.p1); Serial.print ("-");

Serial.print (di.p2); Serial.print ("-");

Serial.println (di.p3);

Tek bir girişi okumak isterseniz "digitalRead (Pin_Number)" işlevini kullanabilirsiniz:

int p1 = PCF8574.digitalRead (P1); // P1 pinini okur

Şimdi bu kodu bir Arduino'ya yükleyelim. Kod çok basittir ve sadece bir döngüdeki P1 piminin değerini okur. Değer YÜKSEK ise, P0 pimine bağlı LED'i yanacaktır. P1 piminin durumunu değiştirmek için bu düğmeyi kullanıyorum. Düğmeye basıldığında, P1 değeri YÜKSEK ve LED yanar ve düğme bırakıldığında LED söner, bu kadar basit.

Ekler

  • ReadValue.zip İndir

Adım 13: Kesme Pimi

Günümüzün karmaşık, gömülü, bilgi işlem ve veri iletişim sistemlerinde, kesintiler çevresel aygıtlara hizmet vermek için yaygın olarak kullanılmaktadır. Ancak, paketlerdeki pin numarası sınırlaması nedeniyle, çoğu mikroişlemcide yalnızca bir veya iki kesme hattı bulunur.

Sonuç olarak, birkaç cihaz genellikle aynı kesme hattına bağlanır. Bu yapılandırmanın dezavantajı, kesme servisini talep eden cihazı tanımlamak için genel işlem süresinin çok uzun (mikrosaniye sırasına göre) olabilmesidir.

Uzak G / Ç genişletici, bağlantı noktasında gelen veri varsa veya bağlantı noktası verilerinde bir değişiklik varsa, I2C veri yolu üzerinden iletişim kurmadan mikroişlemciyi bilgilendirebilir.

PCF8574, mikroişlemcinin karşılık gelen bir girişine beslenebilen bir açık drenaj kesme (INT) çıkışı sağlar. Kesmeler hakkında daha fazla bilgi edinmek için lütfen ekteki veri sayfasını okuyun.

Kesmeleri kullanmak için, pimi ve PCF8574 bir kesmeyi başlattığında çağrılacak işlevi başlatmanız gerekir, bir kez bittiğinde programınızdaki kesme yordamını kullanabilirsiniz.

// İşlev kesintisi

void keyPressedOnPCF8574 ();

// i2c HEX adresini ayarla

PCF8574 pcf8574 (0x20, ARDUINO_UNO_INTERRUPT_PIN, keyPressedOnPCF8574);

Ekler

  • KeyPressed_withInterrupt.zip İndir
  • DataSheet.zip İndir

Adım 14: Uygulama Alanları

PCF8574 GPIO Genişleticiler aşağıdakilerde kullanılır:

  1. Sınırlı GPIO pinli işlemciler
  2. Bunları kullanarak I2C tabanlı bir Tuş Takımı oluşturabilirsiniz
  3. Çoklu Rölelerle çalışırken kullanılabilirler
  4. LED Chaser Devreleri yapmak için kullanılabilirler
  5. Bu IC'ler ayrıca LCD Kalkanları ve daha birçoğunu ...

Aslında Arduino'nun GPIO pinlerimi genişletmek için bu IC'lerin 8'i önceden takılmış bir koparma kurulu tasarlıyorum. Başka bir girişimde, toplam 512 GPIO pini alıp alamayacağımı görmek için bu IC'leri TCA9548A I2C MUX ile eşleştireceğim. TCA9548A Koparma, aynı adrese sahip birden fazla I2C cihazı ile iletişim kurulmasını sağlayarak, onlarla arayüz oluşturmayı kolaylaştırır. Açıkçası, NANO birçok pimi kontrol ederek ağlayacak, ancak MEGA olabilir. Ancak, henüz denemedim.

Her biri ek 8 I2C bağlantı noktası sağlayan bir Arduino'ya maksimum 8 MUX eklenebilir. Yani:

8 x 8 = 64 I2C Bağlantı Noktası

Şimdi, bu IO genişleticilerinden 64 tanesini bağlarsak, şunları elde ederiz:

64 x 8 = 512 IO Pimi

Ne bekliyorsun? Hayal gücünüzü kullanın ve arkadaşlarınızı şaşırtmak için inanılmaz bir otomasyon projesi yapmak için Arduino'nuza 64 sensör ekleyin.

Ekler

  • Schematic.zip İndir

Adım 15: Bağlantıları İndir

  • Kütüphane: //github.com/xreef/PCF8574_library
  • Kodlar:
  • I2C Tarayıcı:
  • Veri sayfaları :
  • Şematik:

Eğiticiyi okuduğunuz için tekrar teşekkür ederiz. Umarım sana yardımcı olur.

Eğer bana destek olmak istersem kanalıma abone olabilir ve diğer videolarımı izleyebilirsiniz. Bir sonraki videomda tekrar teşekkürler, hoşçakalın.

İlgi̇li̇ Makaleler