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

1 myśl na temat “Raspberry Pi ekspander MCP23017 czyli sposób na 128 dodatkowych GPIO

Dodaj komentarz