Raspberry Pi:Библиотеки/WiringPi/Расширения/Подключение чипов MCP23S08 и MCP23S17 (SPI)
Содержание | Введение | Продукты | Операционная система | Настройка | Основы Linux | Аппаратные средства | Неисправности | Типовые проблемы | Часто возникающие вопросы | Библиотеки | Примеры |
Черновик |
Подключение чипов MCP23S08 и MCP23S17 (SPI)[1]
Библиотека WiringPi поддерживает расширительный модуль для I2C-чипов MCP23S08 (8 бит) и MCP23S17 (16 бит), служащих для оснащения Pi дополнительными GPIO-контактами.
Raspberry Pi оснащена одной шиной SPI с двумя SS-контактами, а чипы MCP23S08 и MCP23S17 имеют 3-битный адресный порт. Благодаря этому, в теории, вы можете подключить до восьми MCP23S08/MCP23S17 к одному SS-контакту шины SPI, что оснастит Raspberry Pi дополнительными 128 GPIO-контактами. Более того, вы можете удвоить это число, подключив еще восемь MCP23S08/MCP23S17 ко второму SS-контакту Pi.
Подключение
#include <wiringPi.h>
#include <mcp23s17.h>
...или...
#include <mcp23s08.h>
Инициализация
mcp23s17Setup (int pinBase, int spiPort, int devId) ;
...или...
mcp23s08Setup (int pinBase, int spiPort, int devId) ;
Значение в параметре pinBase может быть любым выше «64», но оно не должно конфликтовать с любым другим расширительным модулем WiringPi. Параметр spiPort может быть 0 или 1 – для одного из 2-ух SPI-портов на Pi. Параметр devId – это идентификатор MCP23x08 или MCP23x17 на SPI-порте.
Количество контактов указывать не нужно: MCP23S08 оснащен 8 контактами, а на MCP23S17 – 16 контактами.
Фото ниже показывает чип MCP23S17 на макетной плате, которая подключена к Pi. Зеленые провода – это SPI-соединения, белый – это питание, черный – это заземление. Тестовая плата подключена к контактам с 0-го по 11-ый, а кнопка подключена к 15-му контакту (аналогично примеру, где MCP23017 подключен к шине I2C).
Обратите внимание на 3 черных провода внизу слева. Они соединяют контакты A0, A1 и A2 с 0 вольтами, давая чипу идентификатор «0».
Тестовая программа практически полностью идентична примеру, где MCP23017 подключен к шине I2C:
/*
* 23s17.c:
* Тест WiringPi с GPIO-чипом MCP23S17 (SPI)
*
* Копирайт (c) 2012-2013 Гордон Хендерсон. <projects@drogon.net>
***********************************************************************
*/
#include <stdio.h>
#include <wiringPi.h>
#include <mcp23s17.h>
#define BASE 123
int main (void)
{
int i, bit ;
wiringPiSetup () ;
mcp23s17Setup (BASE, 0, 0) ;
printf ("Raspberry Pi - MCP23S17 Test\n") ;
// "Тест Raspberry Pi и чипа MCP23S17"
for (i = 0 ; i < 10 ; ++i)
pinMode (BASE + i, OUTPUT) ;
pinMode (BASE + 15, INPUT) ;
pullUpDnControl (BASE + 15, PUD_UP) ;
for (;;)
{
for (i = 0 ; i < 1024 ; ++i)
{
for (bit = 0 ; bit < 10 ; ++bit)
digitalWrite (BASE + bit, i & (1 << bit)) ;
delay (5) ;
while (digitalRead (BASE + 15) == 0)
delay (1) ;
}
}
return 0 ;
}
Примечания
- Чтобы использовать девайсы SPI, вам нужно загрузить в ядро модули для шины SPI. Воспользуйтесь для этого следующей командой:
gpio load spi
- Чипы MCP23S08 и MCP23S17 оснащены только подтягивающими резисторами. Стягивающих резисторов у них нет.
- Максимальная сила тока, которую может отдавать или тянуть один контакт, составляет 25 мА. Максимальная сила тока, которую может отдавать весь чип, составляет 125 мА, а тянуть – 150 мА.
- Если вы используете больше одного чипа, то должны убедиться, что каждый из них использует уникальный devId (он задается контактами A0, A1 и A2 на чипе). Инициализируйте чипы по очереди. Если этого не сделать, чипы будут работать одновременно, чего вам совершенно не нужно.