PCF8574: Informacje o ekspanderze I / O I2C dla Arduino

UKŁAD TI PCF8574

Na pewno słyszałeś o Układ scalony PCF8574, chip, który można kupić osobno lub już zamontowany na module, jak wiele innych Części elektroniczne aby ułatwić integrację z płytą Arduino. W tym przypadku jest to rozszerzenie wejść i wyjść dla magistrala I2C.

Możesz pomyśleć, że Arduino ma już swoje zintegrowana magistrala I2Ci to prawda. Ale PCF8574 może pomóc rozszerzyć tę magistralę poza granice twojej płyty rozwojowej, co może być bardzo pomocne dla niektórych producentów, którzy potrzebują czegoś więcej niż tylko tego, co zapewnia Arduino.

Co to jest magistrala I2C?

Arduino UNO funkcje millis

Nazwa I2C pochodzi od Obwód zintegrowany lub układy scalone. Jego wersja 1.0 została stworzona w 1992 roku przez firmę Philips. Następnie w 2.1 r. Pojawiłby się drugi 2000, a dziś stał się standardem (przy 100 kbit / s, chociaż pozwala na maksymalnie 3.4 Mbit / s), gdy patent wygasł w 2006 r. I może być swobodnie używany.

Obecnie znajduje szerokie zastosowanie w przemyśle Dla komunikacji, a także bardzo cenione przez twórców za projekty komunikacji różnych mikrokontrolerów i urządzeń peryferyjnych zintegrowanych w jednym układzie scalonym.

El I2C to autobus dobrze znany z komunikacji szeregowej. Wykorzystuje synchroniczny protokół komunikacyjny z tylko 2 kanałami (jest trzeci, ale jest połączony z odniesieniem lub GND), w rzeczywistości jest również znany jako TWI (interfejs dwuprzewodowy):

  • Jeden na zegar (SCL).
  • Inne dane (SDA).
Oba są połączeniami CMOS z otwartym drenem i wymagają rezystorów podciągających. Ponadto, jeśli jedno urządzenie przesyła 0, a inne 1, mogą wystąpić problemy, dlatego linia jest zawsze ustawiona na 1 (wysoki poziom), a urządzenia zawsze nadają 0 (niski poziom).

Oznacza to, że pan i niewolnik wysyłają dane tym samym kablem lub ścieżką, która jest kontrolowana przez pierwszy, który generuje sygnał zegarowy. Każde z urządzeń peryferyjnych podłączonych do magistrali I2C będzie miało przypisany unikalny adres w celu kierowania transmisjami. Ale nie jest konieczne, aby nauczyciel był zawsze ten sam (kilku nauczycieli), to zawsze on inicjuje transfer.

Jak już wyjaśniłem w artykule na temat Arduino I2C Wspomniałem wcześniej, każda płyta ma te połączenia I2C w różnych miejscach. To jest coś, o czym trzeba pamiętać, aby móc go właściwie używać w każdej wersji płytki:

  • Arduino UNO: SDA jest w formacie A4, a SCK w A5
  • Arduino Nano: taki sam jak poprzedni.
  • Arduino Mini Pro: podobnie.
  • Arduino Mega: SDA jest na pinie 20, a SCK na 21.
  • Więcej informacji o tabliczkach.

Wiesz już, że możesz łatwo używać I2C do swoich szkiców, ponieważ Biblioteka Wire.h z różnymi funkcjami dla tej komunikacji szeregowej:

  • zaczynać (): uruchom bibliotekę Wire i określ, czy jest to master czy slave
  • requestFrom (): używany przez mastera do żądania danych od slave'a.
  • beginTransmission (): rozpoczęcie transmisji ze slave.
  • endTransmission (): koniec transmisji.
  • pisać()- Zapisz dane od slave'a w odpowiedzi na żądanie od mastera lub możesz ustawić kolejkę transmisji mastera.
  • dostępny (): zwróci liczbę bajtów do odczytania.
  • czytać(): odczytaj bajt przesłany ze slave'a do mastera lub odwrotnie.
  • onReceive (): Wywołuje funkcję, gdy slave odbiera transmisję od mastera.
  • na prośbę (): Wywołuje funkcję, gdy slave żąda danych od mastera.

do więcej o programowaniu i funkcjach Arduino możesz pobrać nasz plik Samouczek PDF.

Co to jest PCF8574?

Moduł PCF8574

PCF8574 to plik Ekspander wejść i wyjść cyfrowych magistrali I2C (I / O). Może być produkowany przez różnych producentów, oprócz tego, że jest dostępny w układach scalonych i modułach. W każdym razie bardzo praktyczne jest podłączenie go do płyty Arduino i możliwość sterowania większą liczbą urządzeń niż pozwala na to płyta główna.

El Wyprowadzenia PCF8574 Jest to proste, ponieważ zawiera tylko pliki Sosny 8 quasidirectional (P0-P7, gdzie podłączone są chipy do komunikacji), az drugiej strony masz SDA i SCL, które musisz podłączyć do płytki Arduino, a także VCC i GND, aby również zasilić moduł. I nie zapomnij o trzech pinach adresujących A0, A1, A2, aby wybrać, do którego z urządzeń ma być kierowana komunikacja ...

Wyprowadzenia PCF8574

Jest właścicielem inne funkcje że powinieneś wiedzieć:

  • Jego połączenia, będąc otwartym odpływem, mogą być używane zarówno jako wejścia, jak i wyjścia.
  • La prąd szczytowy wynosi 25 mA, gdy działa jako wyjście (ujście, gdy prąd płynie w kierunku PCF8574) i 300 µA (źródło, prąd płynie z PCF8574).
  • La napięcie zasilanie to 2.5 i 6 V. Zużycie w trybie czuwania jest bardzo niskie, tylko 10 µA.
  • Wszystkie wyjścia mają zatrzaski, aby utrzymać państwo bez konieczności podejmowania działań zewnętrznych. Musisz działać tylko wtedy, gdy chcesz zmienić stan.
  • Możesz zdobyć 8 możliwe kierunki, to znaczy do 8 urządzeń do komunikacji z 8 modułami lub za pomocą 64 modułów w celu rozszerzenia do 0 urządzeń. Adresy (piny A1, A2, AXNUMX) będą wyglądać następująco:
    • 000: adres 0x20
    • 001: adres 0x21
    • 010: adres 0x22
    • 011: adres 0x23
    • 100: adres 0x24
    • 101: adres 0x25
    • 110: adres 0x26
    • 111: adres 0x27
  • Przyznaje przerwanie (INT) specjalną linią do wykrywania danych bez ciągłego monitorowania.

Integracja z Arduino

Zrzut ekranu Arduino IDE

Połączenie z Arduino jest bardzo proste, wystarczy połączyć Vcc z pinem 5v płyty Arduino, a GND z GND Arduino. Z drugiej strony, piny modułu PCF8574 SDA i SCL mogą być połączyć z pinami 14 (A5 SCL) i 15 (A4 SDA). Tylko że to by zaczęło działać, oczywiście możesz użyć Px do podłączenia urządzeń, z którymi chcesz się komunikować ...

Wtedy by go tylko brakowało zacznij od przykładowego szkicu w Arduino IDE. Możesz to zrobić bez korzystania z dodatkowej biblioteki, takiej jak ...

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

Jako dane wejściowe:

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

Albo też korzystać z bibliotek, na przykład PCF8574, który możesz pobierz tutaj i użyj kodu podobnego do tego z samego przykładu, który jest dołączony do tej biblioteki:

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


Treść artykułu jest zgodna z naszymi zasadami etyka redakcyjna. Aby zgłosić błąd, kliknij tutaj.

Bądź pierwszym który skomentuje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.