Raspberry Pi ekspander MCP23017 czyli sposób na 128 dodatkowych GPIO

MCP23017_1

Z czasem zaczyna brakować wolnych GPIO w naszej malinie. Rozwiązaniem problemu są różnego rodzaju ekspandery np. MCP23017 – 16 ports i2c based,MCP23S17 – 16 ports spi based,MCP23008 – 8 ports i2c based,MCP23S08 – 8 ports spi based. Zestawiając np. ze sobą maksymalnie 8 układów MCP23017 otrzymamy aż 128 dodatkowych GPIO. Układ MCP23017 działa zarówno z napięciem 3,3V oraz 5V i komunikuje się z RPi przez magistralę I2C. Zestawiając ze sobą wszystkie możliwe ekspandery uzyskamy 384 GPIO. Taka ilość powinna wystarczyć nawet do dużych projektów.

Podłączenie układu

Do pinów GPB0-GBB7 oraz GPA0-GPA7 układu MCP23017 podłączamy wybrane elementy elektroniczne takie jak np. przekaźniki, czujniki, diody itp.
Oczywiście, niektóre z nich  wymagają zastosowania odpowiednich elementów elektronicznych takich jak np. rezesystory, kondensatory, diody prostownicze itp.
Warto zapoznać się w podstawowym stopniu ze schematem układu MCP23017 (obrazek 1 od lewej).

Podłączanie do maliny

  • VDD MCP23017 podłączamy do zasilania RPi (w tym przykładzie 3,3V)
  • VSS MCP23017 podłączamy do GND RPi
  • SCL MCP23017 do PIN SCL RPi
  • SDA MCP23017 do PIN SDA RPi
  • RESET MCP23017 podłączamy do zasilania RPi (w tym przykładzie 3,3V)
  • diodę czerwona , krótszą (-) nóżkę do GND , dłuższą (+) przez rezystor ~ 50 Ohm (w przykładzie 75 Ohm) do GPA3 układu MCP23017

MCP23017_5

 

Ustawienie innej adresacji jeśli mamy więcej niż 1 MCP23017

Adresacji dokonuje się przez odpowiednią kombinacje doprowadzeń GND lub VCC z RPi do nożek A0,A1,A2 układu MCP23017. W poniższym przykładzie urządzenie ma adres 0x21. Oczywiście nie musimy używać od razu dip switcha jak na zdjęciu. Można bezpośrednio łączyć przewody/ zworki GNDi VCC do układu MCP23017. Dip switch pozwala na wygodną i szybką zmianę adresu jeśli mamy kilka sztuk MCP23017. Domyślnie adresacja 0x20 równa się trzem liniom GND poprowadzonym do pinów A0,A1,A2 układu MCP23017.

MCP23017_4

Przygotowanie systemu

Sprawdzenie poprawności instalacji wiringpi2

Sprawdzenie działania interfejsu I2C

sudo i2cdetect -y 1

MCP23017_3

Jeśli nie pokazuje urządzenia o numerze 0x20 (domyślny numer dla MCP23017 przy adresacji 3 x GND) lub jak w tym przypadku 0x21 trzeba sprawdzić:

  • wszystkie połączenia zworkowe i kablowe
  • upewnić się,że interfejs I2C działa poprawnie w systemie . Polecenie sudo i2cdetect -y 1 powinno się uruchamiać bez błędów
  • po aktualizacji do firmware 3.18 zmieniony został sposób nazewnictwa urządzeń w systemie m.in. I2C . Można szybko przywrócić dawną funkcjonalność zmieniając : sudo raspi-config  – > advanced – > wyłączyć Device Tree
    http://raspberrypi.stackexchange.com/questions/27073/firmware-3-18-x-breaks-i2c-spi-audio-lirc-1-wire-e-g-dev-i2c-1-no-such-f
  •  sudo nano /etc/modprobe.d/raspi-blacklist.conf
    #blacklist spi-bcm2708
    #blacklist i2c-bcm2708
    blacklist snd-soc-pcm512x
    blacklist snd-soc-wm880
  • sudo nano /etc/modules
    snd-bcm2835
    i2c-dev
    i2c-bcm2708

Sprawdzenie działania przez i2cset – zapalenie wszystkich diód

Sprawdzenie działania przez SMBUS – MCP23017test.py

skrypt włącza po kolei piny od 1 do 8 GPA0 -> GPA7

wymagana do powyższego skrypty biblioteka MCP23017lib.py

Sprawdzenie działania przez wiringpi2

skrypt włącza po kolei piny od 65-do 80

Warto zobaczyć:

http://raspi.tv/2013/using-the-mcp23017-port-expander-with-wiringpi2-to-give-you-16-new-gpio-ports-part-3
http://raspi.tv/2013/how-to-use-wiringpi2-for-python-on-the-raspberry-pi-in-raspbian
http://raspi.tv/how-to-install-wiringpi2-for-python-on-the-raspberry-pi

Układ do kupienia w:

http://botland.com.pl/moduly-rozszerzajace-raspberry-pi-2/2556-mcp23017-ekspander-wyprowadze-i2c-16-kanalowy.html

2 komentarze do wpisu „Raspberry Pi ekspander MCP23017 czyli sposób na 128 dodatkowych GPIO”

  1. Witam

    Zrobiłem wszystko jak powyżej podłączyłem 4 ekspandery Malina ładnie mi to wykrywa ustawiłem wszystkie piny jako wyjścia podłączyłem i uruchomiłem diody ładnie się zapalają. Ale jest jeden problem po jakimś czasie diody gasną na jednym ekspanderze czasem na 2 odrazu nie ma na to reguły. Czasem świecą przez kilka minut i gasną a czasem świecą kilka sekund i gasną. Nie wiem czemu tak się dzieje czy jest zanik na komunikacji SCL SDA czy na zasilaniu VDD VSS. Próbowałem na kilku zasilaczach na kilku exspanderach nawet testowałem takie kombinacje jak malina na oddzielnym zasilaczu exspandery na innym, no już nie mam pomysłów. Proszę o pomoc

Dodaj komentarz