Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
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ă
- 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
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
Pasul 4: 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
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