Raspberry Pi:Библиотеки/WiringPi/Расширения/Подключение чипов MCP23S08 и MCP23S17 (SPI): различия между версиями
Myagkij (обсуждение | вклад) |
Нет описания правки |
||
Строка 13: | Строка 13: | ||
== Подключение == | == Подключение == | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
#include <wiringPi.h> | #include <wiringPi.h> | ||
#include <mcp23s17.h> | #include <mcp23s17.h> | ||
Строка 20: | Строка 20: | ||
...или... | ...или... | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
#include <mcp23s08.h> | #include <mcp23s08.h> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 26: | Строка 26: | ||
== Инициализация == | == Инициализация == | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
mcp23s17Setup (int pinBase, int spiPort, int devId) ; | mcp23s17Setup (int pinBase, int spiPort, int devId) ; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 32: | Строка 32: | ||
...или... | ...или... | ||
<syntaxhighlight lang="c | <syntaxhighlight lang="c"> | ||
mcp23s08Setup (int pinBase, int spiPort, int devId) ; | mcp23s08Setup (int pinBase, int spiPort, int devId) ; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 48: | Строка 48: | ||
Тестовая программа практически полностью идентична примеру, где '''MCP23017''' подключен к шине '''I2C''': | Тестовая программа практически полностью идентична примеру, где '''MCP23017''' подключен к шине '''I2C''': | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/* | /* | ||
* 23s17.c: | * 23s17.c: | ||
Строка 98: | Строка 98: | ||
* Чтобы использовать девайсы '''SPI''', вам нужно загрузить в ядро модули для шины '''SPI'''. Воспользуйтесь для этого следующей командой: | * Чтобы использовать девайсы '''SPI''', вам нужно загрузить в ядро модули для шины '''SPI'''. Воспользуйтесь для этого следующей командой: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
gpio load spi | gpio load spi | ||
</syntaxhighlight> | </syntaxhighlight> |
Текущая версия от 20:04, 23 мая 2023
Содержание | Введение | Продукты | Операционная система | Настройка | Основы 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).
![](/ruwiki/images/a/aa/Mcp23s17.jpg)
Обратите внимание на 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 на чипе). Инициализируйте чипы по очереди. Если этого не сделать, чипы будут работать одновременно, чего вам совершенно не нужно.