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?
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).
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
- ArduinoNano: taki sam jak poprzedni.
- Arduino MiniPro: 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?
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 ...
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
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() { }