Modelspoor automatisering
met de Raspberry Pi

Voor vragen, commentaar, tips enz, mail me op ronald@ronaldwilmink.nl

3. Uitbreiding van het aantal I/O poorten

De MCP23017

De MCP23017 is een 16 bit Input / Output expander. Dit betekent dat één MCP23017 16 IO poorten heeft. In totaal kunnen er 8 aan de RPi worden gekoppeld, zodat je dus maximaal 8 x 16 = 128 IO poorten hebt.
Voor de koppeling worden de twee I2C lijnen van de RPi gebruikt.

Level converter

De MCP23017 moet met 5V worden gevoed, en liefst met een externe voeding, omdat de 5V uitgang van de RPi weinig vermogen heeft.
Omdat de I2C lijnen van de RPi met 3.3V werken, en die van de MCP23017 met 5V, moet er tussen de RPi en de MCP23017 een 'level converter' worden aangesloten.
Ik gebruik daarvoor de SparkFun Logic Level Converter, te koop voor rond de 4 Euro.

De aansluiting van de Raspberry Pi aan de MCP23017 gaat dan als volgt:

Fig 1
mcp23017 met level converter op 5V

De aansluitingen 15, 16 en 17 zijn de adres-bits. Op de tekening zijn ze alledrie verbonden met 0, dwz adres 000b = 0.
Voor adres 1 verbind je nr 15 met de 5V (001b) = 1, voor adres 2: 15 aan 0, 16 aan 5V (010b) = 2 enz.

Dit testen

Om I2C op de RPi te kunnen gebruiken moet dat eerst worden aangezet. Eerst moet het modules bestand worden aangepast:
sudo nano /etc/modules
en voeg daar deze twee regels aan toe:
i2c-bcm2708
i2c-dev
Doe CTRL-X, dan Y, dan Enter om de wijzigingen op te slaan en nano af te sluiten.

Vercolgens moet het modules blacklist bestand worden aangepast:
sudo nano /etc/modprobe.d/raspi-blacklist.conf
en typ een # aan het begin van deze regels:
#blacklist spi-bcm2708
#blacklist i2c-bcm2708
Doe CTRL-X, dan Y, dan Enter om de wijzigingen op te slaan en nano af te sluiten.

Installeer de benodige Python libraries:
sudo apt-get install python-smbus i2c-tools
Start nu de RPi opnieuw op:

Typ nu op de RPi (ik zelf maak verbinding met de RPi vanaf mijn desktop via ssh, en doe het typen daar):
sudo i2cdetect -y 1
De -y 1 gebruik je als je een Rev 2 RPi hebt, heb je een Rev 0, gebruik dan -y 0.
Als het goed is zie je nu als resultaat:

i2cdetect op 5V
Dit betekent dat er een I2C apparaat, in dit geval de MCP23017 is gevonden op adres 20hex.

<<<<< vorige blz volgende blz>>>>>