PCF8574: Di derbarê I2C I / O Expander de ji bo Arduino

PCF8574 TI CHIP

Te bê guman ji bihîstiye IC PCF8574, Çîpek ku dikare ji hev cuda were kirîn an jî mîna gelekên din li modûlekê were siwarkirin Pêkhateyên elektronîkî ji bo ku entegrasyona xwe bi borda Arduino re hêsan bikin. Di vê rewşê de, ew dirêjkerê ketin û derketinan ji bo ye otobusa I2C.

Hûn dikarin bifikirin ku Arduino jixwe ya xwe heye bus I2C entegre, û ew rast e. Lê PCF8574 dikare bibe alîkar ku wê otobusê li derveyî sînorên desteya weya pêşkeftinê dirêj bike, ku dikare ji hin çêkerên ku ji bilî tiştê ku ji hêla Arduino ve tê hewce ye bêtir bibe alîkar.

Otobusa I2C çi ye?

Arduino UNO fonksiyonên milîs

Navê I2C ji tê Çerxa Hev-entegre an pêlên nav-entegre. Guhertoya wê 1.0 di 1992 de ji hêla Philips ve hate afirandin. Wê hingê 2.1-an duyemîn dê di 2000-an de were û îro ew bûye standard (bi 100 kbit / s, her çend ew dihêle heya 3.4 Mbit / s herî zêde) dema ku patent di 2006-an de xilas bû û dikare bi serbestî were bikar anîn.

Vêga ew di pîşesaziyê de pir tête bikar anîn ji bo danûstendinê, û her weha ji hêla çêkeran ve ji bo projeyên wan pir girîng têne pejirandin ku mîkrokontroller û perçeyên cihêreng ên di yek IC-ê de yekbûyî ragihînin.

El I2C otobusek e ji ragihandina rêzê baş tê zanîn. Ew protokola danûstendinê ya hevdemî bi tenê 2 kanalan bikar tîne (sêyemek heye, lê ew bi referansê an GND ve tê girêdan), bi rastî ew jî wekî TWI (Navbera Du Têl) tê zanîn:

  • Yek ji bo demjimêrê (SCL).
  • Ya din ji bo daneyê (SDA).
Herdu jî têkiliyên CMOS-ê yên valahiyê ne û berxwedêrên kişandinê hewce dikin. Di heman demê de, heke cîhazek 0 û yekê din jî 1 veguherîne, dibe ku pirsgirêk hebin, ji ber vê yekê xet her gav li ser 1 tête saz kirin (asta bilind) û cîhaz her dem 0 (asta nizm) radigihînin.

Ew tê wê wateyê ku xudan û xulam ew daneyan li ser heman kablo an rêçê dişînin, ku ji hêla yekem ve tê kontrol kirin ku nîşana demjimêrê çêdike. Her yek ji alavên devkî yên bi otobûsa I2C ve girêdayî dê navnîşanek bêhempa hebe, da ku veguhastinan rasterast bike. Lê ne hewce ye ku mamoste her dem yek be (pir-mamoste), her dem ew e ku veguhêz dest pê dike.

Wekî ku min berê di gotara li ser de diyar kir Arduino I2C Min berê behs kir, her panel li van deverên cihêreng van têkiliyên I2C hene. Ew tiştek e ku divê hûn di hişê xwe de bigirin ku hûn bikaribin wê di her guhertoya plakayê de bi rêkûpêk bikar bînin:

Hûn jixwe dizanin ku hûn dikarin ji bo pêşnumayên xwe I2C bi hêsanî bikar bînin, ji Wire.h pirtûkxane bi fonksiyonên cihêreng ên ji bo vê pêwendiya rêzê:

  • destpêkirin (): pirtûkxaneya Wire dest pê bikin û diyar bikin ka ew serwer e an xulam e
  • requestFrom (): ji hêla serwer ve tête bikar anîn da ku ji koleyê daneyê bixwaze.
  • startTransmission (): bi kole dest bi veguhastinê bikin.
  • endTransmission (): dawiya veguhastinê.
  • nivîsîn()- Daneyên ji xulamê li bersiva daxwaziya axayê binivîsin, an jî hûn dikarin ji radestkirina axayekî re bibin dorê.
  • berdest (): dê jimara baytên ku bixwîne vegerîne.
  • xwendin(): bixwîne byteke ku ji kole ji axayê re hatî veguhastin an berevajî.
  • onReceive (): Dema ku xulam ji masterê veguhastinek werdigire fonksiyonek bang dike.
  • onRequest (): Dema ku xulamek daneyekê ji axayek bixwaze fonksiyonek bang dike.

para bêhtir agahî di derbarê bername û fonksiyonên Arduino de hûn dikarin ya me dakêşînin Tutorial PDF.

PCF8574 çi ye?

PCF8574 module

PCF8574 yek e I2C otobus ketin û derketinên dîjîtal (I / O) berfereh. Ew dikare ji hêla cûrbecûr cûrbecûr ve were çêkirin, ji bilî ku ew di IC û modûlan de heye. Di her rewşê de, ew pir pratîkî ye ku meriv wê bi tabloya xweya Arduino ve girêbide û xwedî kapasîteya kontrolkirina zêdetir alavên ji dêûbav dayikê rê dide.

El PCF8574 pinout hêsan e, ji ber ku tenê tê de ye 8 pines quasidirectional (P0-P7 ku çîpên ku pêwendiyê pê ve girêdayî ye), û ji aliyek din ve SDA û SCL-ya we heye ku divê hûn bi sermaseya Arduino ve, her weha VCC û GND ve girêdayî bibin ku hûn jî modulê jî hêz bikin. The sê pisîkên navnîşanê A0, A1, A2 ji bîr nekin ku hilbijêrin ji kîjan alavên pêwendiyê tête rêve kirin ...

PCF8574 pinout

Xwedan dide taybetmendiyên din ku divê hûn zanibin:

  • Têkiliyên wê, hebek vekirî ye, dikare bibe hem wekî ketin û derketinê tê bikar anîn.
  • La herika lûtkeyê ew 25mA ye dema ku ew wekî encamekê tevbigere (sink, dema ku heyî ber bi PCF8574 ve diçe) û 300 μA (jêder, heyî ji PCF8574 diherike).
  • La zext dabînkirina hêzê 2.5 û 6v e. Vexwarina stand-by-ê pir kêm e, tenê 10 μA ye.
  • Hemî encam leqebên wan hene, bêyî ku hewcedariya kiryarên derveyî hebe dewletê bidomînin. Tenê dema ku hûn dixwazin dewletê biguherînin divê hûn tevbigerin.
  • Hûn dikarin 8 bistînin rêwerzên gengaz, ango, heya 8 cîhazên ku pê re têkiliyê datînin an 8 modûlan bikar tînin da ku wê heya 64 cîhazan berfireh bikin. Navnîşan (pîneyên A0, A1, A2) dê ev be:
    • 000: navnîşan 0x20
    • 001: navnîşan 0x21
    • 010: navnîşan 0x22
    • 011: navnîşan 0x23
    • 100: navnîşan 0x24
    • 101: navnîşan 0x25
    • 110: navnîşan 0x26
    • 111: navnîşan 0x27
  • Qebûl dike qutkirin (INT) ji hêla rêzikek taybetî ve bêyî ku bi domdarî çavdêriyê bike, daneyê destnîşan dike.

Integration bi Arduino

Dîmendera Dîmenderê ya Arduino IDE

Têkiliya bi Arduino re pir hêsan e, hûn tenê hewce ne ku Vcc bi pin 5v ya tîrêja Arduino ve girêdin, û GND bi GND ya Arduino re. Li aliyek din, pîneyên module PCF8574 SDA û SCL dikarin bibin bi pîneyan ve girêbidin 14 (A5 SCL) û 15 (A4 SDA). Tenê bi wê re ew ê dest bi kar bike, eşkere ye ku hûn dikarin Px bikar bînin da ku alavên ku hûn dixwazin pêwendî bidin girêdin ...

Wê hingê ew ê tenê winda bibe bi xêzikek mînakî dest pê bikin li Arduino IDE. Hûn dikarin wê bikar bînin bêyî ku pirtûkxaneyek din wekî ...

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

Wekî input:

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

An jî pirtûkxaneyan bikar bînin, wekî PCF8574 ku hûn dikarin vir barkirin û ji mînaka ku bi vê pirtûkxanê re tê de kodek dişibihe vê bikar bînin:

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


Naveroka gotarê bi prensîbên me ve girêdayî ye etîka edîtoriyê. Ji bo raporkirina çewtiyek bitikîne vir.

Beşa yekem be ku şîrove bike

Commentîroveya xwe bihêlin

Navnîşana e-peyamê ne, dê bê weşandin. qadên pêwist in bi nîşankirin *

*

*

  1. Berpirsê daneyê: Miguel Ángel Gatón
  2. Armanca daneyê: SPAM-ê kontrol bikin, rêveberiya şîroveyê.
  3. Qanûnîbûn: Destûra we
  4. Ragihandina daneyê: Daneyî dê ji aliyên sêyemîn re neyê ragihandin ji bilî peywira qanûnî.
  5. Tomarkirina daneyê: Databaza ku ji hêla Occentus Networks (EU) ve hatî mazûvan kirin
  6. Maf: Di her demê de hûn dikarin agahdariya xwe bi sînor bikin, vegerînin û jê bibin.