Je hebt zeker gehoord van de PCF8574 IC, een chip die afzonderlijk kan worden gekocht of al op een module is gemonteerd, zoals vele andere Elektronische componenten om uw integratie met uw Arduino-bord te vergemakkelijken. In dit geval is het een uitbreiding van de in- en uitgangen voor de I2C-bus.
Je denkt misschien dat Arduino al zijn eigen heeft geïntegreerde I2C-bus, en het is waar. Maar de PCF8574 kan helpen om die bus buiten de grenzen van je ontwikkelbord te brengen, wat een grote hulp kan zijn voor sommige makers die meer nodig hebben dan alleen wat Arduino biedt.
Wat is de I2C-bus?
De naam I2C komt van Inter-geïntegreerde schakeling of onderling geïntegreerde schakelingen. De versie 1.0 is in 1992 gemaakt door Philips. Dan zou een tweede 2.1 komen in 2000 en vandaag is het een standaard geworden (op 100 kbit / s, hoewel het maximaal 3.4 Mbit / s toestaat) toen het patent in 2006 afliep en vrij kan worden gebruikt.
Momenteel wordt het veel gebruikt in de industrie Voor communicatie, en ook zeer gewaardeerd door makers voor hun projecten om verschillende microcontrollers en randapparatuur geïntegreerd in één IC te communiceren.
El I2C is een bus bekend van seriële communicatie. Het gebruikt een synchroon communicatieprotocol met slechts 2 kanalen (er is een derde, maar het is gekoppeld aan referentie of GND), in feite is het ook bekend als TWI (Two Wire Interface):
- Een voor de klok (SCL).
- Overig voor gegevens (SDA).
Dat houdt in dat de meester en slaaf ze sturen gegevens over dezelfde kabel of hetzelfde spoor, dat wordt aangestuurd door de eerste die het kloksignaal genereert. Elk van de randapparatuur die op de I2C-bus is aangesloten, krijgt een uniek adres toegewezen om de transmissies te leiden. Maar het is niet nodig dat de master altijd dezelfde is (multi-master), hij is het altijd die de overdracht initieert.
Zoals ik al heb uitgelegd in het artikel over Arduino I2C Ik heb eerder verwezen, elk bord heeft deze I2C-verbindingen op verschillende plaatsen. Het is iets dat u in gedachten moet houden om het in elke plaatversie goed te kunnen gebruiken:
- Arduino UNO: SDA staat in A4 en SCK in A5
- Arduino nano: hetzelfde als de vorige.
- Arduino MiniPro: hetzelfde.
- Arduino mega: SDA zit op pin 20 en SCK op 21.
- Meer informatie over borden.
U weet al dat u de I2C gemakkelijk kunt gebruiken voor uw schetsen, aangezien de Wire.h bibliotheek met verschillende functies voor deze seriële communicatie:
- beginnen (): start de Wire-bibliotheek en specificeer of het master of slave is
- aanvraag van (): gebruikt door de master om gegevens van de slaaf op te vragen.
- beginTransmission (): start verzending met slave.
- endTransmission (): einde transmissie.
- schrijven()- Schrijf gegevens van een slaaf in reactie op een verzoek van de master, of u kunt de verzending van een master in de wachtrij plaatsen.
- beschikbaar (): retourneert het aantal te lezen bytes.
- lezen(): lees een byte verzonden van een slave naar een master of vice versa.
- onReceive (): Roept een functie op wanneer een slave een transmissie van een master ontvangt.
- op verzoek (): Roept een functie op wanneer een slaaf gegevens opvraagt bij een master.
naar Meer informatie over Arduino-programmering en functies die u kunt downloaden PDF-zelfstudie.
Wat is de PCF8574?
De PCF8574 is een I2C bus digitale ingangen en uitgangen (I / O) uitbreiding. Het kan door verschillende fabrikanten worden vervaardigd, naast dat het beschikbaar is in IC's en modules. In ieder geval is het erg praktisch om hem aan te sluiten op je Arduino-bord en de capaciteit te hebben om meer apparaten te besturen dan het moederbord toestaat.
El PCF8574-pinout Het is eenvoudig, omdat het alleen bevat 8-dennen quasi-directioneel (P0-P7 waar de chips om te communiceren zijn verbonden), en aan de andere kant heb je de SDA en SCL die je op het Arduino-bord moet aansluiten, evenals VCC en GND om ook de module van stroom te voorzien. En vergeet niet de drie adresseringspinnen A0, A1, A2 om te kiezen naar welke van de apparaten de communicatie wordt geleid ...
Het bezit Andere mogelijkheden dat u moet weten:
- Zijn verbindingen, die een open afvoer zijn, kunnen dat zijn zowel gebruikt als in- en uitgangen.
- La piekstroom het is 25mA als het als uitgang fungeert (sink, wanneer stroom naar PCF8574 vloeit) en 300 µA (bron, stroom vloeit uit PCF8574).
- La spanning voeding is 2.5 en 6v. Het stand-by verbruik is erg laag, slechts 10 µA.
- Alle uitgangen hebben grendels, om de staat te behouden zonder de noodzaak van externe maatregelen. U hoeft alleen te handelen als u de toestand wilt wijzigen.
- Je kunt er 8 krijgen mogelijke richtingen, dat wil zeggen tot 8 apparaten om mee te communiceren of 8 modules te gebruiken om het uit te breiden tot 64 apparaten. De adressen (pinnen A0, A1, A2) zijn:
- 000: adres 0x20
- 001: adres 0x21
- 010: adres 0x22
- 011: adres 0x23
- 100: adres 0x24
- 101: adres 0x25
- 110: adres 0x26
- 111: adres 0x27
- Geeft toe onderbreking (INT) door een speciale lijn om gegevens te detecteren zonder constant toezicht.
Integratie met Arduino
De verbinding met Arduino is heel eenvoudig, je hoeft alleen Vcc aan te sluiten op de 5v-pin van het Arduino-bord en GND met GND van Arduino. Aan de andere kant kunnen de pinnen van de PCF8574 SDA- en SCL-module verbinden met pinnen 14 (A5 SCL) en 15 (A4 SDA). Alleen dan zou het gaan werken, uiteraard kun je de Px gebruiken om de apparaten aan te sluiten die je wilt communiceren ...
Dan zou het alleen ontbreken begin met een voorbeeldschets in Arduino IDE. U kunt het doen zonder een extra bibliotheek te gebruiken, zoals ...
#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); } }
Als invoer:
#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); }
Of ook gebruik bibliotheken, zoals de PCF8574 die u kunt download hier en gebruik een soortgelijke code uit het voorbeeld zelf dat bij deze bibliotheek wordt geleverd:
#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() { }