🚚 Besplatna dostava za narudžbe veće od 35EUR

KKM: I/O EXPANDER MCP23017

IO ekspander MCP23017-easyC

Početnik si s Dasduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala tvrtke soldered na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Dasduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

UVOD

Kod nešto složenijih projekata može se dogoditi da vaš Dasduino nema dovoljan broj digitalnih ulaza i izlaza. Ne očajavajte! Imamo rješenje za vas. Radi se o breakout modulu koji sadrži MCP23017 IC te vam omogućuje spajanje dodatnih šesnaest digitalnih ulaza/izlaza. Postoje dva tipa ovog chipa, a mi koristimo varijantu sa I2C komunikacijom.

Karakteristike:
Napon napajanja: 1.8V – 5.5V
Maksimalna struja po pinu: 25mA
Broj digitalnih ulaza/izlaza: 16
Maksimalna brzina komunikacije: 1.7MHz
Komunikacijsko sučelje: I2C
Dimenzije: 35 mm x 24 mm

KAKO RADI?

Uz sklopovlje za komunikaciju ovaj chip kojega koristimo sadrži dva 8-bitna GPIO (general purpose input output) modula čime ukupno dobivamo 16 ulaza/izlaza. Za svakog od njih možemo odrediti je li ulaz ili izlaz. Ako GPIO pin radi kao digitalni ulaz onda njegovu funkcionalnost možemo jednostavno opisati kao komparator napona. Ovisno o napajanju IC-a kontroler određuje koje područje napona se smatra niskom, a koje visokom razinom. Kada GPIO koristimo kao ulaz mi zapravo želimo odrediti je li neki fizikalni (analogni signal) iznad neke razine napona pri čemu tome signalu pridjeljujemo vrijednost „HIGH“ ili je ispod neke razine pa mu dodjeljujemo vrijednost „LOW“. Često signali za koje želimo odrediti jesu li „HIGH“ ili „LOW“ nisu konstantni nego im se napon može mijenjati. Zbog toga ovaj IC koristi takozvani Schmitt trigger. Na ovaj način se osigurava sigurnosna zona u koju mjereni signal može ući bez da ga kontroler prepozna kao krivu vrijednost.

Ukoliko smo odredili za neki GPIO pin da radi kao digitalni izlaz imamo jednostavniju situaciju. Preko komunikacije dobivamo informaciju o tome treba li pin postaviti „LOW“ ili „HIGH“. Ako smo primili „LOW“ izlaz se spaja na ground, a ako smo primili „HIGH“ izlaz se spaja na napon napajanja.
GPIO ulazi imaju ugrađeni pull-up otpornik pa na njih možemo jednostavno dodati tipkala i prekidače bez dodatnog sklopovlja.
Ovaj IC ima još jednu zanimljivu funkcionalnost-hardverski prekid (interrupt). Može se isprogramirati da breakout postavi interrupt ukoliko dođe do promjene na jednom ili drugom GPIO modulu pa sukladno tome na pločici imamo dva pina označena sa INTA i INTB.

KAKO POVEZATI?

Priključnice:
gnd: ground
VCC: napajanje 1.8V – 5.5V
SDA: serial data I2C
SCL: serial clock
A0 do A7: I/O
B8 do B15: I/O

Povezivanje sa Dasduinom jednostavno je, a potrebne su vam samo četiri žice od kojih dvije za napajanje i dvije za komunikaciju (SDA i SCL). Imamo rješenje za vas i u slučaju da koristite vrlo velik broj ulaza/izlaza. Na pločici možete vidjeti tri adresna jumpera pomoću kojih se određuje adresa modula na I2C komunikaciji. Svaki jumper određuje jedan adresni bit i može imati vrijednost ‘0’ ili ‘1’ što znači da imate na raspolaganju osam kombinacija pa možete spojiti osam ovakvih modula na jedan Dasduino što vam daje ukupno 128 novih digitalnih ulaza/izlaza koje koristite na isti način kao i normalne digitalne ulaze/izlaze na Dasduinu.

ARDUINO KOD

Za ispravno izvođenje ovog koda potrebno je skinuti biblioteku sa sljedećeg linka. U slučaju da ne znate kako instalirati biblioteku pročitajte naš tutorijal. Programski kod testira ispravnost rada modula pri čemu kao digitalni ulaz koristimo tipkalo, a kao digitalni izlaz koristimo LEDicu. NAPOMENA: potrebno je ispravno podesiti adresu modula na I2C komunikaciji. Adresu modula možete lako provjeriti tako da ga spojite na Dasduino i pokrenete I2C Scanner kojega možete naći na linku.

#include "Wire.h"
#include "Adafruit_MCP23017.h"
 
Adafruit_MCP23017 mcp;    //ako želite koristiti više ovih modula, ovdje ih trebate deklarirati npr. Adafruit_MCP23017 mcp1, mcp2;
   
void setup() { 
  mcp.begin(27);      // treba upisati adresu modula na I2C komunikaciji
 
  mcp.pinMode(1, OUTPUT);
  mcp.pinMode(13, INPUT);
  mcp.pullUp(13, HIGH);  //omogućujemo pull-up otpornik jer koristimo tipkalo
}
 
void loop() {
  if(!mcp.digitalRead(13)){       //kada stisnemo tipkalo, digitalni ulaz će očitati LOW, a kada je otpušteno čitati će HIGH zbog pull-up otpornika
    mcp.digitalWrite(1, HIGH);
  }else{
    mcp.digitalWrite(1, LOW);
  }
}