Със сигурност сте чували за PCF8574 IC, чип, който може да бъде закупен отделно или вече монтиран на модул като много други Електронни компоненти за да улесните вашата интеграция с вашата платка Arduino. В този случай това е удължител на входовете и изходите за шината I2C.
Може би си мислите, че Arduino вече има своя собствена интегрирана I2C шина, и е вярно. Но PCF8574 може да помогне за разширяването на тази шина извън границите на вашата разработка, което може да бъде от голяма помощ за някои производители, които се нуждаят от нещо повече от това, което се предоставя от Arduino.
Какво представлява I2C шината?
Името I2C идва от Междуинтегрална схема или междуинтегрални схеми. Неговата версия 1.0 е създадена през 1992 г. от Philips. Тогава вторият 2.1 ще дойде през 2000 г. и днес той се е превърнал в стандарт (при 100 kbit / s, въпреки че позволява максимум до 3.4 Mbit / s), когато патентът изтече през 2006 г. и може да се използва свободно.
В момента той се използва широко в индустрията за комуникация, а също така много оценени от производителите за техните проекти за комуникация на различни микроконтролери и периферни устройства, интегрирани в една интегрална схема.
El I2C е автобус добре позната серийна комуникация. Той използва синхронен комуникационен протокол само с 2 канала (има трети, но той е свързан с референтен или GND), всъщност е известен също като TWI (двужилен интерфейс):
- Един за часовника (SCL).
- Други за данни (SDA).
Това предполага, че господар и роб те изпращат данни по същия кабел или писта, която се контролира от първата, която е тази, която генерира тактовия сигнал. Всяко от периферните устройства, свързани към I2C шината, ще има присвоен уникален адрес, за да насочва предаванията. Но не е необходимо капитанът винаги да е един и същ (мулти-мастер), той винаги е този, който инициира прехвърлянето.
Както вече обясних в статията на Arduino I2C Посочих по-рано, всяка платка има тези I2C връзки на различни места. Това е нещо, което трябва да имате предвид, за да можете да го използвате правилно във всяка версия на плочата:
- Arduino UNO: SDA е в A4 и SCK в A5
- ArduinoNano: същото като предходното.
- Arduino MiniPro: същото.
- Мега Ардуино: SDA е на щифт 20 и SCK на 21.
- Повече информация за плочите.
Вече знаете, че можете лесно да използвате I2C за вашите скици, тъй като Библиотека Wire.h с различни функции за тази последователна комуникация:
- начало (): стартирайте Wire библиотеката и посочете дали е главна или подчинена
- заявка от (): използва се от главното устройство за искане на данни от подчиненото устройство.
- beginTransmission (): стартиране на предаването с подчинен.
- endTransmission (): крайно предаване.
- напиши ()- Напишете данни от роб в отговор на заявка от главния, или можете да изпратите на опашката предаването на главния.
- на разположение (): ще върне броя байтове за четене.
- Прочети(): чете байт, предаден от подчинен на главен или обратно.
- onReceive (): Извиква функция, когато подчинен получава предаване от главен.
- onRequest (): Извиква функция, когато робът изисква данни от главен.
за MÁS información относно програмирането и функциите на Arduino можете да изтеглите нашите PDF урок.
Какво е PCF8574?
PCF8574 е a I2C шина цифрови входове и изходи (I / O) разширител. Той може да се произвежда от различни производители, освен че го има в интегрални схеми и модули. Във всеки случай е много практично да го свържете към вашата платка Arduino и да имате капацитета да контролирате повече устройства, отколкото позволява дънната платка.
El PCF8574 пиноут Това е просто, тъй като включва само 8 борове квазипосочен (P0-P7, където са свързани чиповете за комуникация), а от друга страна имате SDA и SCL, които трябва да свържете към платката Arduino, както и VCC и GND, за да захранвате модула. И не забравяйте трите адресиращи щифта A0, A1, A2, за да изберете към кое от устройствата е насочена комуникацията ...
Той има други функции че трябва да знаете:
- Неговите връзки, тъй като са отворен канал, могат да бъдат използвани както като входове, така и като изходи.
- La пиков ток той е 25mA, когато действа като изход (потъващ, когато токът тече към PCF8574) и 300 µA (източник, токът тече от PCF8574).
- La напрежение захранването е 2.5 и 6v. Консумацията в режим на готовност е много ниска, само 10 µA.
- Всички изходи имат резета, за поддържане на състоянието без необходимост от външни действия. Трябва да действате само когато искате да промените състоянието.
- Можете да получите 8 възможни упътвания, т.е. до 8 устройства за комуникация или използване на 8 модула за разширяване до 64 устройства. Адресите (щифтове A0, A1, A2) ще бъдат:
- 000: адрес 0x20
- 001: адрес 0x21
- 010: адрес 0x22
- 011: адрес 0x23
- 100: адрес 0x24
- 101: адрес 0x25
- 110: адрес 0x26
- 111: адрес 0x27
- Признава прекъсване (INT) чрез специален ред за откриване на данни без постоянно наблюдение.
Интеграция с Arduino
Връзката с Arduino е много проста, просто трябва да свържете Vcc с 5v щифт на платката Arduino и GND с GND на Arduino. От друга страна, щифтовете на модула PCF8574 SDA и SCL могат да бъдат свържете с щифтове 14 (A5 SCL) и 15 (A4 SDA). Само с това ще започне да работи, очевидно можете да използвате Px, за да свържете устройствата, които искате да комуникирате ...
Тогава то само ще липсва започнете с примерна скица в Arduino IDE. Можете да го направите, без да използвате допълнителна библиотека като ...
#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); } }
Като вход:
#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); }
Или също използвайте библиотеки, като PCF8574, който можете изтеглите оттук и използвайте код, подобен на този от самия пример, който идва заедно с тази библиотека:
#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() { }