Yazılardaki ürünleri komponentci.net'te inceleyebilir, hemen sipariş verebilirsiniz.komponentci.net →
KomponentciBlog Mağaza

MCP23017 GPIO Genişletici: Arduino ile 16 Ek Pin

MCP23017 GPIO Genişletici: Arduino ile 16 Ek Pin
Kısa cevap

MCP23017, I2C üzerinden bağlanıp mikrodenetleyiciye 16 dijital giriş-çıkış pini kazandıran bir GPIO genişletici entegredir. A2, A1 ve A0 pinleriyle 0x20-0x27 arasında adres alır; aynı hatta 8 adet bağlanarak 128 pin elde edilir. Her pinde yaklaşık 100 kΩ dahili pull-up ve INTA/INTB kesme çıkışları vardır.

Arduino'da buton, LED, röle ya da tuş takımı sayısı arttıkça pinler hızla biter. MCP23017 GPIO genişletici, yalnızca iki I2C hattıyla 16 yeni dijital pin ekleyerek bu sorunu çözer. Bu yazıda MCP23017'nin pinlerini, I2C adresinin nasıl ayarlandığını, Arduino bağlantısını, örnek kodu, kesme kullanımını ve yeni veri sayfasındaki GPA7/GPB7 uyarısını anlatıyoruz.

MCP23017 nedir?

MCP23017, Microchip'in ürettiği, I2C arayüzüyle kontrol edilen ve iki 8 bitlik porttan (GPA ve GPB) oluşan 16 kanallı bir giriş-çıkış (G/Ç) genişletici entegredir. Her pin ayrı ayrı giriş ya da çıkış yapılabilir; girişlerde dahili pull-up açılabilir ve pin değişimi kesme sinyaliyle bildirilir.

Entegre 1,8-5,5 V ile çalışır; I2C hattında 100 kHz, 400 kHz ve 1,7 MHz hızlarını destekler. SPI arayüzlü ikizi MCP23S17'dir. Breadboard için MCP23017-E/SP DIP-28 entegresi, hızlı kurulum için pull-up ve adres jumper'ları hazır olan MCP23017 I2C 16 kanal modül kullanılabilir.

MCP23017'nin pinleri ne işe yarar?

MCP23017'nin 28 pininden 16'sı G/Ç (GPA0-GPA7 ve GPB0-GPB7), geri kalanı besleme, I2C, adres, reset ve kesme pinleridir. DIP-28 kılıfta dizilim şöyledir:

Pin noAdGörev
1-8GPB0-GPB7B portu G/Ç pinleri
9 / 10VDD / VSSBesleme (+) ve GND
12 / 13SCL / SDAI2C saat ve veri
15, 16, 17A0, A1, A2Adres seçimi; boş bırakılmaz
18RESETDüşük seviyede reset; VDD'ye bağlanır
19 / 20INTB / INTAB ve A portu kesme çıkışları
21-28GPA0-GPA7A portu G/Ç pinleri
MCP23017 DIP-28 pin diyagramı, üstten görünüş: sol kenarda 1-8 numaralı pinler GPB0-GPB7, 9 VDD, 10 VSS, 11 NC, 12 SCL, 13 SDA, 14 NC; sağ kenarda üstten alta 28-21 numaralı pinler GPA7-GPA0, 20 INTA, 19 INTB, 18 RESET, 17 A2, 16 A1, 15 A0; G/Ç pinlerinin yanında Adafruit kütüphanesindeki pin numaraları (GPA0-GPA7 = 0-7, GPB0-GPB7 = 8-15); GPA7 ve GPB7 yalnız çıkış olarak turuncu işaretli; altta adres formülü 0x20 + A2×4 + A1×2 + A0 ve RESET ile adres pinlerinin boş bırakılmaması, pin başına 25 mA sınırı uyarısı
Yeşil pinler G/Ç, turuncu GPA7 ve GPB7 yalnız çıkıştır. RESET (18) VDD'ye, A2-A0 (17-15) GND ya da VDD'ye bağlanır; üçü GND'de iken adres 0x20 olur.

11 ve 14 numaralı pinler MCP23017'de kullanılmaz (NC). RESET pinini boş bırakmak en yaygın hatadır; entegre rastgele resetlenir ya da hiç yanıt vermez.

MCP23017 I2C adresi nasıl ayarlanır?

MCP23017'nin adresi A2, A1 ve A0 pinlerinin GND (0) ya da VDD (1) bağlantısıyla 0x20 ile 0x27 arasında seçilir. Üçü de GND'ye bağlıyken adres 0x20'dir ve kütüphanelerin varsayılanı budur.

A2A1A0Adres
0000x20
0010x21
0100x22
0110x23
1000x24
1010x25
1100x26
1110x27

Sekiz farklı adres sayesinde aynı hatta 8 MCP23017 bağlanarak 128 G/Ç pini elde edilir. PCF8574 da 0x20-0x27 aralığını kullandığı için iki entegreyi aynı hatta kullanırken adreslerin çakışmamasına dikkat edin. I2C adreslerinin genel mantığı I2C nedir rehberimizde anlatılıyor.

MCP23017 Arduino'ya nasıl bağlanır?

MCP23017 Arduino Uno'ya VDD → 5V, VSS → GND, SDA → A4 ve SCL → A5 olarak bağlanır; RESET pini VDD'ye, A0-A2 pinleri GND'ye bağlanır. Çıplak entegrede SDA ve SCL için 3,3-10 kΩ arası pull-up dirençleri eklenir; modüllerde bu dirençler genellikle hazırdır. Adım adım:

  1. Entegreyi breadboard'a oturtun; çentikli taraf 1 numaralı pini gösterir.
  2. 9. pini 5V'a, 10. pini GND'ye, 18. pini (RESET) 5V'a bağlayın.
  3. 15, 16 ve 17. pinleri (A0-A2) GND'ye bağlayın; adres 0x20 olur.
  4. 13. pini (SDA) Arduino Uno R3 kartının A4 pinine, 12. pini (SCL) A5 pinine bağlayın.
  5. GPA0'a (21. pin) 220 Ohm dirençle bir LED, GPB0'a (1. pin) bir 6x6 mm tact buton bağlayın; butonun diğer ucu GND'ye gider.

MCP23017 Arduino ile nasıl kodlanır?

En kolay yol Adafruit MCP23017 Arduino kütüphanesidir: begin_I2C() ile başlatılır, sonra pinler Arduino'daki gibi pinMode, digitalWrite ve digitalRead ile kullanılır. Kütüphanede 0-7 numaraları GPA0-GPA7'yi, 8-15 numaraları GPB0-GPB7'yi gösterir.

#include <Adafruit_MCP23X17.h>

Adafruit_MCP23X17 mcp;

const uint8_t LED_PIN = 0;    // GPA0
const uint8_t BUTON_PIN = 8;  // GPB0

void setup() {
  Serial.begin(9600);
  if (!mcp.begin_I2C(0x20)) {
    Serial.println("MCP23017 bulunamadi");
    while (1);
  }
  mcp.pinMode(LED_PIN, OUTPUT);
  mcp.pinMode(BUTON_PIN, INPUT_PULLUP);
}

void loop() {
  // Buton basiliyken pin LOW okunur, LED yanar
  bool basili = (mcp.digitalRead(BUTON_PIN) == LOW);
  mcp.digitalWrite(LED_PIN, basili ? HIGH : LOW);
  delay(20);
}

Kütüphane, Arduino IDE'nin Kütüphane Yöneticisi'nde "Adafruit MCP23017" adıyla bulunur. Her digitalRead bir I2C işlemi olduğu için çok hızlı tarama gereken işlerde (ör. kodlayıcı okuma) doğrudan Arduino pinleri daha uygundur.

GPA7 ve GPB7 neden giriş olarak kullanılmamalı?

Microchip, MCP23017 veri sayfasının 2022 tarihli D revizyonundan itibaren GPA7 ve GPB7 pinlerini yalnızca çıkış olarak tanımlar; bu pinleri giriş yapmayın. Üretici açıklamasına göre okuma sırasında bu pinlerdeki gerilim değişirse SDA hattı bozulabilir ve I2C hattı kilitlenebilir.

Eski kartlarda ve örneklerde bu pinlerin giriş olarak çalıştığını görebilirsiniz, ancak yeni tasarımlarda butonları ve sensörleri GPA0-GPA6 ile GPB0-GPB6'ya bağlayın; GPA7 ve GPB7'yi LED ya da röle gibi çıkışlara ayırın. Bu kısıtlama SPI'lı MCP23S17'de yoktur. Böylece giriş için kullanılabilen pin sayısı fiilen 14'tür.

MCP23017 kesmeleri nasıl kullanılır?

Kesme, giriş pinlerinden biri değiştiğinde INTA ya da INTB çıkışının seviye değiştirmesidir; Arduino böylece MCP23017'yi sürekli okumak yerine yalnızca bir değişiklik olduğunda okur. INTA A portunu, INTB B portunu izler; MIRROR ayarı açılırsa iki çıkış birlikte çalışır ve tek kablo yeter.

Adafruit kütüphanesinde setupInterrupts() ile kesme çıkışı, setupInterruptPin() ile izlenecek pin ayarlanır; getLastInterruptPin() kesmeye hangi pinin neden olduğunu söyler. INTA'yı Arduino Uno'nun 2 numaralı pinine bağlayıp attachInterrupt ile yakalamak yaygın bir yöntemdir. Kesme bilgisi, ilgili port okunana ya da temizlenene kadar aktif kalır.

MCP23017 ile PCF8574 arasındaki fark nedir?

MCP23017 16 pinli, pin başına yön ayarlı ve iki kesme çıkışlı bir genişleticidir; PCF8574 ise 8 pinli, daha basit ve daha ucuz bir genişleticidir. Az pin ve basit iş için PCF8574, çok sayıda buton ve çıkış için MCP23017 seçilir.

ÖzellikMCP23017PCF8574
G/Ç sayısı168
Adres aralığı0x20-0x270x20-0x27 (PCF8574A: 0x38-0x3F)
I2C hızı1,7 MHz'e kadar100 kHz
Pin yapısıGerçek çıkış, yön kaydıYarı çift yönlü, zayıf pull-up
Dahili pull-upPin başına açılır (yaklaşık 100 kΩ)Zayıf akım kaynağı (sabit)
Kesme çıkışı2 (INTA, INTB)1 (INT)

LCD ekranların arkasındaki I2C adaptörü de bir PCF8574'tür; PCF8574 I2C genişletme modülü 8 pinin yettiği işlerde iyi bir alternatiftir. LCD tarafı için 16x2 LCD ekran bağlantı rehberimize bakabilirsiniz.

Sık sorulan sorular

MCP23017 pini kaç mA verir?

MCP23017'nin her pini en fazla 25 mA verebilir ya da çekebilir; ancak toplamda VDD'den 125 mA, VSS'e 150 mA sınırı vardır. 16 LED'i aynı anda sürecekseniz LED başına akımı 5-7 mA ile sınırlayın. Röle, motor ve yüksek akımlı yükleri doğrudan değil, transistörlü röle modülü ya da sürücü üzerinden bağlayın.

MCP23017 3,3 V ile çalışır mı?

Evet, MCP23017 1,8-5,5 V arasında çalışır ve ESP32 ya da STM32 gibi 3,3 V kartlarla sorunsuz kullanılır. Entegreyi 3,3 V ile besleyin; böylece G/Ç pinleri de 3,3 V seviyesinde çalışır ve seviye dönüştürücü gerekmez. ESP32'de SDA için GPIO21, SCL için GPIO22 varsayılandır.

Bir hatta kaç MCP23017 bağlanır?

Aynı I2C hattına A2-A0 pinleriyle farklı adres verilmiş en fazla 8 MCP23017 bağlanır; bu 128 G/Ç pini demektir. Daha fazlası için I2C çoklayıcı (TCA9548A gibi) kullanılabilir. Çok sayıda modülde her modülün pull-up dirençleri paralel bağlanacağı için fazlasını sökmek gerekebilir.

MCP23017 ile 4x4 tuş takımı okunur mu?

Evet, 4x4 tuş takımı MCP23017'nin 8 pinine bağlanıp satır-sütun taramasıyla okunur. Satırları çıkış, sütunları dahili pull-up'lı giriş yapın ve sütunlar için GPA7 ile GPB7'yi kullanmayın. Standart Keypad kütüphanesi Arduino pinlerini kullandığı için MCP23017'ye uyarlanmış bir sürüm ya da kendi tarama kodunuz gerekir; tuş takımının temelleri 4x4 keypad rehberimizde.

Özet

  • MCP23017, I2C ile 16 dijital G/Ç pini ekleyen, 1,8-5,5 V ile çalışan bir genişletici entegredir.
  • Adres A2-A0 ile 0x20-0x27 arasında seçilir; bir hatta 8 adet, toplam 128 pin bağlanabilir.
  • RESET pini VDD'ye, adres pinleri GND ya da VDD'ye bağlanmalı; boş bırakılmamalıdır.
  • Güncel veri sayfasına göre GPA7 ve GPB7 yalnızca çıkış olarak kullanılmalıdır.
  • Pin başına 25 mA, toplamda 125 mA (VDD) ve 150 mA (VSS) sınırları aşılmamalıdır.

Bu yazıdaki ürünler

Diğer yazılar

12 Kasım 20268 dk okuma

AMG8833 Termal Kamera Sensörü: 8x8 Isı Haritası Rehberi

AMG8833, Panasonic Grid-EYE ailesinden 8x8 = 64 pikselli bir termopil kızılötesi dizi sensörüdür. 0-80 °C aralığındaki yüzeylerin sıcaklığın...

Devamını oku →
12 Kasım 20268 dk okuma

MT6701 Manyetik Encoder: 14 Bit Açı Sensörü Rehberi

MT6701, MagnTek'in ürettiği, dönen bir mıknatısın açısını Hall algılayıcılarla temassız ölçen 14 bitlik manyetik açı sensörüdür. Açıyı I2C y...

Devamını oku →
12 Kasım 20267 dk okuma

MG90S ve SG90 Servo Farkı: Tork, Dişli ve Seçim Rehberi

MG90S ile SG90 arasındaki temel fark dişlilerdir: MG90S metal, SG90 plastik dişli kullanır. İkisi de aynı boyda mikro servodur ve 4,8 V'ta y...

Devamını oku →
12 Kasım 20267 dk okuma

C5198 ve A1941 Transistör: Değerler, Bacaklar ve Muadil

C5198 (2SC5198), Toshiba'nın ses amplifikatörü çıkış katı için ürettiği 140 V, 10 A ve 100 W değerli NPN güç transistörüdür; PNP eşi A1941'd...

Devamını oku →
12 Kasım 20267 dk okuma

ZB2L3 Pil Kapasite Test Cihazı: Bağlantı ve Kullanım

ZB2L3 pil kapasite test cihazı, pili harici bir yük direnci üzerinden ayarladığınız sonlandırma gerilimine kadar boşaltıp gerçek kapasiteyi...

Devamını oku →
12 Kasım 20266 dk okuma

TC4427 MOSFET Sürücü: Pinout, Bağlantı ve TC4426 Farkı

TC4427, Microchip'in iki kanallı, evirmeyen (non-inverting) ve 1,5 A tepe akımlı MOSFET sürücü entegresidir. 4,5-18 V ile beslenir ve Arduin...

Devamını oku →