PCF8574: Arduino için I2C I / O Genişletici Hakkında

PCF8574 TI ÇIP

Kesinlikle duymuşsunuzdur IC PCF8574, ayrı olarak satın alınabilen veya diğerleri gibi bir modüle zaten monte edilmiş bir çip Elektronik parçalar Arduino kartınızla entegrasyonunuzu kolaylaştırmak için. Bu durumda, giriş ve çıkışların bir genişleticisidir. I2C otobüsü.

Arduino'nun zaten kendine ait olduğunu düşünebilirsiniz. entegre I2C veriyoluve bu doğru. Ancak PCF8574, bu otobüsü geliştirme kartınızın sınırlarının ötesine genişletmeye yardımcı olabilir ve bu, Arduino'nun sunduğundan daha fazlasına ihtiyaç duyan bazı üreticilere çok yardımcı olabilir.

I2C otobüsü nedir?

Arduino UNO milis fonksiyonları

I2C adı Entegre Devre veya birbirine entegre devreler. 1.0 sürümü, 1992'de Philips tarafından oluşturuldu. Daha sonra 2.1 yılında ikinci bir 2000 gelir ve bugün bir standart haline gelmiştir (100 kbit / s'de, maksimum 3.4 Mbit / s'ye izin vermesine rağmen) 2006 yılında patentin süresi dolduğunda ve serbestçe kullanılabilir.

Şu anda endüstride yaygın olarak kullanılmaktadır iletişim içinve ayrıca yapımcılar tarafından projelerinin tek bir IC'ye entegre edilmiş farklı mikro denetleyicileri ve çevre birimleri iletişim kurması nedeniyle çok takdir edilmektedir.

El I2C bir otobüs seri iletişimden iyi bilinir. Yalnızca 2 kanallı senkronize bir iletişim protokolü kullanır (üçüncüsü vardır, ancak referans veya GND'ye bağlıdır), aslında TWI (İki Telli Arayüz) olarak da bilinir:

  • Saat için bir (SCL).
  • Veriler için diğer (SDA).
Her ikisi de açık drenaj CMOS bağlantılarıdır ve çekme dirençleri gerektirir. Ayrıca, bir cihaz bir 0 ve diğeri bir 1 iletirse, sorunlar olabilir, bu nedenle hat her zaman 1'e (yüksek seviye) ayarlanır ve cihazlar her zaman 0 (düşük seviye) iletir.

Bu ima eder ki Efendi ve köle saat sinyalini üreten ilk kablo tarafından kontrol edilen aynı kablo veya yol üzerinden veri gönderirler. I2C veriyoluna bağlı çevresel aygıtların her biri, iletimleri yönlendirmek için atanmış benzersiz bir adrese sahip olacaktır. Ancak ustanın her zaman aynı (çoklu usta) olması gerekli değildir, transferi başlatan her zaman odur.

Makalede daha önce açıkladığım gibi Arduino I2C Daha önce değindiğim gibi, her kartın farklı yerlerde bu I2C bağlantıları vardır. Plakanın her versiyonunda doğru şekilde kullanabilmek için aklınızda bulundurmanız gereken bir şeydir:

  • Arduino UNO: SDA, A4'te ve SCK, A5'te
  • Arduino Nano: öncekiyle aynı.
  • Arduino Mini Profesyonel: aynı.
  • arduino Mega: SDA 20. pimde ve SCK 21. pimdedir.
  • Plakalar hakkında daha fazla bilgi.

Eskizleriniz için I2C'yi kolayca kullanabileceğinizi zaten biliyorsunuz. Wire.h kitaplığı bu seri iletişim için çeşitli işlevlerle:

  • başla (): Wire kitaplığını başlatın ve bunun ana mı yoksa ikincil mi olduğunu belirtin
  • requestFrom (): Master tarafından slave'den veri talep etmek için kullanılır.
  • beginTransmission (): Slave ile iletimi başlatın.
  • endTransmission (): iletimi sonlandır.
  • yazmak()- Master'ın talebine yanıt olarak bir slave'den veri yazın veya bir master'ın aktarımını sıraya koyabilirsiniz.
  • mevcut (): okunacak bayt sayısını döndürür.
  • oku (): bir slave'den master'a veya tam tersi iletilen bir baytı okur.
  • onReceive (): Bir ikincil birim, bir ana bilgisayardan bir iletim aldığında bir işlevi çağırır.
  • istek üzerine (): Slave, bir ana bilgisayardan veri talep ettiğinde bir işlevi çağırır.

Daha más información Arduino programlama ve işlevleri hakkında PDF eğitimi.

PCF8574 nedir?

PCF8574 modülü

PCF8574 bir I2C veri yolu dijital giriş ve çıkışları (G / Ç) genişletici. IC'lerde ve modüllerde bulunmasının yanı sıra çeşitli üreticiler tarafından üretilebilir. Her durumda, onu Arduino kartınıza bağlamak ve anakartın izin verdiğinden daha fazla cihazı kontrol etme kapasitesine sahip olmak çok pratiktir.

El PCF8574 pin çıkışı basittir, çünkü yalnızca 8 çamları yarı yönlü (iletişim kurulacak çiplerin bağlandığı P0-P7) ve diğer yandan, Arduino kartına bağlamanız gereken SDA ve SCL'ye ve ayrıca modüle güç sağlamak için VCC ve GND'ye sahipsiniz. Ve iletişimin hangi cihazlara yönlendirileceğini seçmek için üç adresleme pini A0, A1, A2'yi unutmayın ...

PCF8574 pin çıkışı

O sahibi diğer özellikler bilmen gereken:

  • Açık bir tahliye olan bağlantıları, hem girdi hem de çıktı olarak kullanılır.
  • La tepe akımı çıkış (akım PCF25'e doğru aktığında) ve 8574 µA (kaynak, PCF300'ten akım akışı) olarak görev yaptığında 8574mA'dır.
  • La tensión güç kaynağı 2.5 ve 6v'dir. Bekleme tüketimi çok düşük, sadece 10 µA.
  • Tüm çıktılar mandalları var, devleti dış eylemlere ihtiyaç duymadan sürdürmek. Sadece durumu değiştirmek istediğinizde harekete geçmelisiniz.
  • 8 alabilirsin olası yönler, yani, iletişim kurmak için 8 cihaza kadar veya 8 cihaza genişletmek için 64 modül kullanarak. Adresler (A0, A1, A2 pinleri) şöyle olacaktır:
    • 000: 0x20 adresi
    • 001: 0x21 adresi
    • 010: 0x22 adresi
    • 011: 0x23 adresi
    • 100: 0x24 adresi
    • 101: 0x25 adresi
    • 110: 0x26 adresi
    • 111: 0x27 adresi
  • Kabul kesinti (INT) sürekli izleme yapmadan verileri tespit etmek için özel bir hat ile.

Arduino ile entegrasyon

Arduino IDE ekran görüntüsü

Arduino ile bağlantı çok basittir, sadece Vcc'yi Arduino kartının 5v pini ile ve GND'yi Arduino'nun GND'si ile bağlamanız gerekir. Öte yandan, PCF8574 SDA ve SCL modülünün pinleri de pimlerle bağlan 14 (A5 SCL) ve 15 (A4 SDA). Ancak bununla çalışmaya başlayacaktı, açıkçası Px'i iletişim kurmak istediğiniz cihazları bağlamak için kullanabilirsiniz ...

O zaman sadece kaybolurdu örnek bir eskizle başlayın Arduino IDE'de. Bunu ek bir kitaplık kullanmadan yapabilirsiniz, örneğin ...

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

Giriş olarak:

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

Veya ayrıca kitaplıkları kullanyapabileceğiniz PCF8574 gibi burada indirmek ve bu kitaplıkla birlikte gelen örneğin kendisinden buna benzer bir kod kullanın:

#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() 
{
}


Makalenin içeriği şu ilkelerimize uygundur editoryal etik. Bir hata bildirmek için tıklayın burada.

İlk yorumu siz

Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.