Cuprins:

Aplicarea MCP-23008 utilizând interfața de releu (I2C) :: 6 pași
Aplicarea MCP-23008 utilizând interfața de releu (I2C) :: 6 pași

Video: Aplicarea MCP-23008 utilizând interfața de releu (I2C) :: 6 pași

Video: Aplicarea MCP-23008 utilizând interfața de releu (I2C) :: 6 pași
Video: MCP23008 IO Expander Arduino Library by PU2CLR 2024, Iulie
Anonim
Aplicarea MCP-23008 utilizând interfața de releu (I2C)
Aplicarea MCP-23008 utilizând interfața de releu (I2C)

Buna ziua

Salutari bune.. !!

Eu (Somanshu Choudhary) în numele Dcube se aventurează să controleze relele prin protocolul I2C folosind Arduino nano și MCP23008.

Pasul 1: Prezentare generală

Prezentare generală
Prezentare generală
  • Dispozitivul MCP23X08 oferă extindere I / O paralelă de 8 biți, de uz general, pentru aplicații de magistrală I2C sau SPI.
  • MCP23X08 constă din mai multe registre de configurație pe 8 biți pentru selectarea intrării, a ieșirii și a polarității. Masterul de sistem poate activa I / O-urile ca intrări sau ieșiri scriind biții de configurare I / O. Datele pentru fiecare intrare sau ieșire sunt păstrate în registrul de intrare sau ieșire corespunzător. Polaritatea registrului de port de intrare poate fi inversată cu registrul de inversare a polarității. Toate registrele pot fi citite de masterul de sistem.
  • LINK DE FIȘE DE BAZĂ:

Pasul 2: De ce aveți nevoie / linkuri

Ce aveți nevoie / linkuri
Ce aveți nevoie / linkuri

1. Arduino Nano LINK:

2. Ecran pentru Arduino Nano LINK:

3. Cablu USB de tip A la Micro tip B lung de 6 picioare

4. I²C Cablu LINK:

5. Opt relee controlate SPDT I²C

6. LINK-ul adaptorului:

Pasul 3: Diagrama circuitului

Diagrama circuitului
Diagrama circuitului
Diagrama circuitului
Diagrama circuitului

Pasul 4: Programare - I

Programare - I
Programare - I
Programare - I
Programare - I
  • În acest cod, folosesc Paradigma de programare a funcțiilor
  • Am folosit diferite file pentru definirea funcțiilor și apelarea funcției

COD SUB TABUL q:

// Cod de apelare funcție simplă

#include setup nul ()

{

// Adresa I2C a MCP23008

#define MCP_ADDR 0x20

// Alătură-te I2C Bus ca master

Wire.begin ();

// Porniți comunicarea în serie și setați rata de transmisie

Serial.begin (9600);

// Începeți transmisia cu dispozitivul dat pe magistrala I2C

Wire.beginTransmission (MCP_ADDR);

// Selectați IODIR - ÎNREGISTRARE REGISTRE I / O

Wire.write (0x00);

// Selectați operația necesară (ieșire)

Wire.write (0x00);

// Selectați registrul CONFIGURARE

Wire.write (0x05);

// Selectați operațiunea necesară

Wire.write (0x0E);

// încheie transmisia

Wire.endTransmission ();

}

bucla nulă ()

{

a1_on ();

întârziere (1000);

a1_off ();

întârziere (1000);

a2_on ();

întârziere (1000);

a2_off ();

întârziere (1000);

a3_on ();

întârziere (1000);

a3_off ();

întârziere (1000);

a4_on ();

întârziere (1000);

a4_off ();

întârziere (1000);

a5_on ();

întârziere (1000);

a5_off ();

întârziere (1000);

a6_on ();

întârziere (1000);

a6_off ();

întârziere (1000);

a7_on ();

întârziere (1000);

a7_off ();

întârziere (1000);

a8_on ();

întârziere (1000);

a8_off ();

}

COD SUB TAB Q1:

// Acest cod trebuie să pornească și să oprească releul 1 la bord

void a1_on () {

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x01);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

nul a1_off ()

{

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

COD SUB TAB Q2:

// Acest cod trebuie să pornească și să oprească releul 2 de la bord

nul a2_on () {

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x02);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

nul a2_off ()

{

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

COD SUB TAB q3: // Acest cod trebuie să pornească și să oprească releul 3 de la bord

nul a3_on ()

{

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x04);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

nul a3_off ()

{

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

Pasul 5: Programare - II

Programare - II
Programare - II

COD SUB TAB Q4:

// Acest cod trebuie să pornească și să oprească releul 4 la bord

nul a4_on ()

{

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x08);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

nul a4_off ()

{

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

COD SUB TAB Q5:

// Acest cod trebuie să pornească și să oprească releul 5 la bord

nul a5_on ()

{

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x10);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

nul a5_off ()

{

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

COD SUB TAB q6: // Acest cod trebuie să pornească și să oprească releul 6 de la bord

nul a6_on ()

{

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x20);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

nul a6_off ()

{

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

COD SUB TAB q7: // Acest cod trebuie să pornească și să oprească releul 7 de la bord

void a7_on () {

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x40);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

nul a7_off ()

{

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

COD SUB TAB q8: // Acest cod trebuie să pornească și să oprească releul 8 de la bord

nul a8_on () {

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x80);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

nul a8_off ()

{

// Începeți transmisia

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

întârziere (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Ieșire pe ecran

Serial.print ("valoare GPIO:");

Serial.println (GPIO, BIN);

}

Pasul 6: Video

Pentru întrebări suplimentare Simțiți-vă liber să vizitați site-ul nostru:

www.dcubetechnologies.com

Recomandat: