Índice:

Aplicação de MCP-23008 usando interface de relé (I2C): 6 etapas
Aplicação de MCP-23008 usando interface de relé (I2C): 6 etapas

Vídeo: Aplicação de MCP-23008 usando interface de relé (I2C): 6 etapas

Vídeo: Aplicação de MCP-23008 usando interface de relé (I2C): 6 etapas
Vídeo: Quer mais portas no seu microcontrolador? Use o MCP23017 e assista este vídeo. 2024, Novembro
Anonim
Aplicação de MCP-23008 usando interface de relé (I2C)
Aplicação de MCP-23008 usando interface de relé (I2C)

Olá

Boas saudações.. !!

Eu (Somanshu Choudhary), em nome da tecnologia Dcube, vai controlar relés via protocolo I2C usando Arduino nano e MCP23008.

Etapa 1: Visão geral

Visão geral
Visão geral
  • O dispositivo MCP23X08 oferece expansão de E / S paralela de 8 bits para uso geral para barramento I2C ou aplicações SPI.
  • O MCP23X08 consiste em vários registros de configuração de 8 bits para entrada, saída e seleção de polaridade. O mestre do sistema pode habilitar as E / S como entradas ou saídas, escrevendo os bits de configuração de E / S. Os dados para cada entrada ou saída são mantidos no registro de entrada ou saída correspondente. A polaridade do registro da porta de entrada pode ser invertida com o registro de inversão de polaridade. Todos os registros podem ser lidos pelo mestre do sistema.
  • LINK DE FOLHA DE DADOS:

Etapa 2: O que você precisa / links

O que você precisa / links
O que você precisa / links

1. Arduino Nano LINK:

2. Shield para Arduino Nano LINK:

3. Cabo USB Tipo A para Micro Tipo B 6 pés de comprimento

4. LINK do cabo I²C:

5. Oito relés controlados SPDT I²C

6. Adaptador LINK:

Etapa 3: Diagrama de Circuito

Diagrama de circuito
Diagrama de circuito
Diagrama de circuito
Diagrama de circuito

Etapa 4: Programação - I

Programação - I
Programação - I
Programação - I
Programação - I
  • Neste código, eu uso o Paradigma de Programação de Função
  • Usei diferentes guias para definição e chamada de funções

CÓDIGO SOB TAB q:

// Código de chamada de função simples

#include void setup ()

{

// endereço I2C do MCP23008

# define MCP_ADDR 0x20

// Junte-se ao barramento I2C como mestre

Wire.begin ();

// Inicie a comunicação serial e defina a taxa de transmissão

Serial.begin (9600);

// Comece a transmissão com determinado dispositivo no barramento I2C

Wire.beginTransmission (MCP_ADDR);

// Selecione o registro IODIR - I / O DIRECTION REGISTER

Wire.write (0x00);

// Selecione a operação necessária (saída)

Wire.write (0x00);

// Selecione o registro de CONFIGURAÇÃO

Wire.write (0x05);

// Selecione a operação necessária

Wire.write (0x0E);

// fim da transmissão

Wire.endTransmission ();

}

void loop ()

{

a1_on ();

atraso (1000);

a1_off ();

atraso (1000);

a2_on ();

atraso (1000);

a2_off ();

atraso (1000);

a3_on ();

atraso (1000);

a3_off ();

atraso (1000);

a4_on ();

atraso (1000);

a4_off ();

atraso (1000);

a5_on ();

atraso (1000);

a5_off ();

atraso (1000);

a6_on ();

atraso (1000);

a6_off ();

atraso (1000);

a7_on ();

atraso (1000);

a7_off ();

atraso (1000);

a8_on ();

atraso (1000);

a8_off ();

}

CÓDIGO SOB TAB q1:

// Este código é para ligar e desligar o relé 1 a bordo

void a1_on () {

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x01);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

void a1_off ()

{

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

CÓDIGO SOB TAB q2:

// Este código é para ligar e desligar o relé 2 a bordo

void a2_on () {

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x02);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

void a2_off ()

{

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

CÓDIGO SOB TAB q3: // Este código é para ligar e desligar o relé 3 a bordo

void a3_on ()

{

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x04);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

void a3_off ()

{

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

Etapa 5: Programação - II

Programação - II
Programação - II

CÓDIGO SOB A TAB. Q4:

// Este código é para ligar e desligar o relé 4 a bordo

void a4_on ()

{

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x08);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

void a4_off ()

{

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

CÓDIGO SOB TAB q5:

// Este código é para ligar e desligar o relé 5 a bordo

void a5_on ()

{

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x10);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

void a5_off ()

{

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

CÓDIGO SOB TAB q6: // Este código é para ligar e desligar o relé 6 a bordo

void a6_on ()

{

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x20);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

void a6_off ()

{

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

CÓDIGO SOB A TAB q7: // Este código é para ligar e desligar o relé 7 a bordo

void a7_on () {

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x40);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

void a7_off ()

{

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

CÓDIGO SOB A TAB q8: // Este código é para ligar e desligar o relé 8 a bordo

void a8_on () {

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x80);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

void a8_off ()

{

// Comece a transmissão

Wire.beginTransmission (MCP_ADDR);

Wire.write (0x09);

Wire.write (0x00);

atraso (1800);

Wire.requestFrom (MCP_ADDR, 1);

int GPIO = Wire.read ();

Wire.endTransmission ();

// Saída para a tela

Serial.print ("valor GPIO:");

Serial.println (GPIO, BIN);

}

Etapa 6: Vídeo

Para obter mais informações, visite nosso site:

www.dcubetechnologies.com

Recomendado: