MCP23017 port expander akan menambah 16 port GPIO

IC MCP23017 adalah salah satu port expander yang bisa dipadang pada micro controller sehingga jika anda ingin mendapatkan port GPIO lebih dari bawaan arduino atau rasp standarnya contohnya bisa memanfaatkan IC ini :

port ini dibagi 2 kelompok yaitu GPA dan GPB :
– Pins 21-28 GPA0-GPA7.
– Pins 1-8 GPB0-GPB7.

contoh penerapan dalam rasp adalah :
hubungkan IC dengan rasp dengan skema
VDD – 3V3 (P1 header pin 1 atau 17)
VSS – GND (P1 header pin 6)
SCL – SCL pada Pi (P1 header pin 5)
SDA – SDA pada Pi (P1 header pin 3)
RESET – 3V3 (pin header P1 1 atau 17)

sebelum diimplementasikan kita pastikan bahwa rasp i2c sudah dalam keadaan enable atau berjalan dengan baik dikarenakan i2c adalah salah satu aplikasi yang akan menjebatani antara IC dan rasp

sebelum masuk dalam script coba dengan skema diatas kita cek bahwa IC sudah terdeteksi oleh rasp dengan mencoba perintah

sudo i2cdetect -y 1 (jika menggunakan rasp rev 2)
sudo i2cdetect -y 0 (jika menggunakan rasp rev 1)

Jika Anda telah melakukan pengkabelan Anda sama seperti pada skema di atas (A0, A1, A2 semua ke GND), hasil Anda pasti “20”. jika tidak maka ada yang salah pada penyambungan pin.

contoh skript menggunakan python yang diimplementasikan pada rasp

import wiringpi2 as wiringpi
from time import sleep

pin_base = 65 # lowest available starting number is 65
i2c_addr = 0x20 # A0, A1, A2 pins all wired to GND

wiringpi.wiringPiSetup() # initialise wiringpi
wiringpi.mcp23017Setup(pin_base,i2c_addr) # set up the pins and i2c address

wiringpi.pinMode(65, 1) # sets GPA0 to output
wiringpi.digitalWrite(65, 0) # sets GPA0 to 0 (0V, off)

wiringpi.pinMode(80, 0) # sets GPB7 to input
wiringpi.pullUpDnControl(80, 2) # set internal pull-up

# Note: MCP23017 has no internal pull-down, so I used pull-up and inverted
# the button reading logic with a “not”

try:
while True:
if not wiringpi.digitalRead(80): # inverted the logic as using pull-up
wiringpi.digitalWrite(65, 1) # sets port GPA1 to 1 (3V3, on)
else:
wiringpi.digitalWrite(65, 0) # sets port GPA1 to 0 (0V, off)
sleep(0.05)
finally:
wiringpi.digitalWrite(65, 0) # sets port GPA1 to 0 (0V, off)
wiringpi.pinMode(65, 0) # sets GPIO GPA1 back to input Mode
# GPB7 is already an input, so no need to change anything

berikut adalah daftar address i2c dengan kombinasi port a0, a1, dan a2

Leave a Reply

Your email address will not be published. Required fields are marked *