PCF8574: ontvang meer verbindingspinnen voor Arduino

pcf8574

Mogelijk bevindt u zich in een situatie waarin u het aantal beschikbare in- en uitgangen wilt uitbreiden arduino bord, omdat u een project uitvoert waarvoor meer apparaten nodig zijn dan verwacht. In deze gevallen kun je maar één ding doen, en dat is nadenken over het kopen van een bord van een hoger model met meer van deze aansluitingen. Maar nu met De PCF8574 kan de I/O van Arduino uitbreiden op een gemakkelijke en goedkope manier.

Hier laten we u zien wat de PCF8574 is, voor het geval u hem nog niet kende, en laten we stap voor stap zien hoe u hem op uw Arduino-bord kunt aansluiten en hoe hij werkt...

Wat is de PCF8574?

pcf8574

El PCF8574 is een digitale ingangs- en uitgangsuitbreiding (I/O) voor de I2C1-bus. Met dit apparaat, vervaardigd door Philips, kunt u een processor zoals Arduino aansluiten om meer apparaten te bedienen met minder pinnen2. De PCF8574 bevat 8 quasi-directionele pinnen gebaseerd op CMOS-uitgangen in open drain-configuratie.

Bovendien is de PCF8574 een energiezuinig apparaat dat ondersteunt VCC-bewerkingen van 2.5 V tot 6 V. Het beschikt over een 8-bit quasi-bidirectionele I/O-poort, vergrendelde uitgangen, open drain interrupt-uitgang en hoge stroomaansturing voor LED's. Aan de andere kant is het verbruik in stand-by zeer laag, minder dan 10 µA.

Het is erg handig voor Breid de mogelijkheden van uw Arduino-bord uit tot buiten de grenzen, wat een grote hulp kan zijn voor makers die iets meer nodig hebben dan wat Arduino biedt. De maximale stroom die elke pin kan leveren, is afhankelijk van de configuratie:

  • Wanneer het als uitgang fungeert, is het 25 mA als het als sink fungeert, dat wil zeggen wanneer de elektrische stroom naar de PCF8574 vloeit. Dit is de standaardconfiguratie.
  • Wanneer deze als bron fungeert, is deze 300 µA, dat wil zeggen wanneer de stroom uit de PCF8574 vloeit. Op dezelfde manier moet u weten dat alle uitgangen vergrendelingen hebben, dat wil zeggen dat ze de status zelf bijhouden in een register. We hoeven alleen actie te ondernemen als we de status van een van de uitgangen willen wijzigen.

Communicatie is gedaan via I2C-bus, zodat u eenvoudig gegevens kunt verkrijgen van de apparaten die erop zijn aangesloten. Op dezelfde manier moet worden opgemerkt dat het 3 adrespinnen heeft, wat 8 mogelijke verbindingen met dezelfde I2C-bus oplevert. Dit betekent dat het mogelijk is om 64 apparaten te bedienen met slechts 2 pinnen.

Adresinstellingen

Sommige modellen van deze PCF8574-module bevatten meestal configuratiepinnen en jumpers zoals degene die u in de afbeelding hierboven ziet. Aan de andere kant bevatten andere modellen een schakelaar die het gemakkelijker maakt met de drie microschakelaars... Hoe het ook zij, ze zijn eraan gewend adressen configureren aantal I/O-pinnen:

A0 A1 A2 Adres
0 0 0 0x20
0 0 1 0x21
0 1 0 0x22
0 1 1 0x23
1 0 0 0x24
1 0 1 0x25
1 1 0 0x26
1 1 1 0x27

Prijs en waar te koop

Voor een paar euro is hij al te vinden. Het is een apparaat redelijk goedkoop voor hoe praktisch het kan zijn voor sommige Arduino-modellen die een lager aantal I/O's hebben. Dus als u op zoek bent naar een PCF8574, kunt u deze vinden in gespecialiseerde winkels of ook op grote online platforms zoals Amazon, AliExpress of eBay. Hier raden we er bijvoorbeeld een aan:

De PCF8574 aansluiten op Arduinno

naar sluit de PCF8574-expander aan op uw Arduino-bord, Het aansluitschema is vrij eenvoudig. U hoeft alleen maar verbinding te maken:

  • De SCL-pin gemarkeerd op het PCF8574-bord met de SCL-pin van Arduino. Deze pin kan afhankelijk van het model veranderen, maar zit meestal op de A5 op de meer populaire modellen zoals de UNO.
  • De SDA-pin van de expander moet verbinding maken met de SDA-pin van de Arduino. Hetzelfde wat ik hierboven noemde, het kan veranderen afhankelijk van het model, maar over het algemeen is het de A4. Controleer bij twijfel de pin-out van uw model.
  • De GND-pin van de PCF8574 zal uiteraard worden verbonden met degene gemarkeerd met GND op de Arduino, dat wil zeggen, het is de aardverbinding.
  • De Vcc-pin van de expander is verbonden met 5V van de Arduino, op deze manier hebben we met GND en Vcc het expanderbord al van stroom voorzien zodat deze kan gaan werken.

operatie

Zodra de PCF8574 is aangesloten op het Arduino-bord, is het nu tijd om het te weten hoe werkt het. Om dit te doen, moet je er rekening mee houden dat je 8 extra pinnen kunt hebben, in ruil voor het gebruik van twee Arduino-pinnen, naast de krachtige. Aan de andere kant moet je wel met iets rekening houden, en dat is dat je op elk van die 8 pinnen van de PCF8574 een MOSFET-transistor hebt staan ​​samen met een pull-up-weerstand met een zeer lage weerstand. Hierbij wordt uitgegaan van een stroomsterkte van 100 microA wanneer de transistor actief is.

En dit laat ons achter met het volgende panorama:

  • Configuratie als uitvoer- Wanneer de pin als output wordt gebruikt, fungeert deze als een current sink, zoals ik hierboven heb besproken, d.w.z. er vloeit stroom naar binnen.
    • LAAG: Bij lage spanning geleidt het geen stroom, belasting = Vdd.
    • HOOG: wanneer er bij hoge spanning een stroom van maximaal 25 mA kan passeren, wordt de belasting aangesloten op GND.
  • Configuratie als invoer: deze moet altijd op HOOG worden ingesteld en in dit geval zal hij als bron fungeren, dat wil zeggen dat de stroom eruit vloeit.
    • gesloten: Wanneer de externe belasting niet wordt gegeven, gaat de spanning op de pin naar GND.
    • Open: Wanneer er een externe belasting optreedt, wordt de pinspanning Vdd.

Arduino IDE-code

Arduino IDE, datatypes, programmeren

Als u enkele voorbeelden wilt van hoe u code kunt maken om deze PCF8574 op Arduino te gebruiken, kunt u deze codevoorbeelden gebruiken die u naar wens kunt aanpassen:

  • Configuratie als uitvoer:
#include <Wire.h>

const int pcfAddress = 0x38;

void setup()
{
  Wire.begin();
  Serial.begin(9600);
}

void loop()
{
  for (short channel = 0; channel < 8; channel++)
  {
    // Escribir dato en canal 'channel'
    Wire.beginTransmission(pcfAddress);
    Wire.write(~(1 << channel));
    Wire.endTransmission();
    
    // Leer dato de canal
    delay(500);
  }
}
  • Configuratie als invoer:
#include <Wire.h>

const int pcfAddress = 0x38;

void setup()
{
  Wire.begin();
  Serial.begin(9600);
}

void loop()
{
  short channel = 1;
  byte value = 0;

  // Leer dato de canal 'channel'
  Wire.requestFrom(pcfAddress, 1 << channel);
  if (Wire.available())
  {
    value = Wire.read();
  }
  Wire.endTransmission();

  // Mostrar el valor por puerto serie
  Serial.println(value);
}

Vergeet niet dat u ook de bibliotheek speciaal gemaakt voor de PCF8574 waar ook praktijkvoorbeelden in staan...


Wees de eerste om te reageren

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.