Raspberry Pi:Библиотеки/WiringPi/Расширения/Подключение чипов MCP23S08 и MCP23S17 (SPI)

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Черновик


Подключение чипов 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 контактами, а на MCP23S1716 контактами.

Фото ниже показывает чип 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 на чипе). Инициализируйте чипы по очереди. Если этого не сделать, чипы будут работать одновременно, чего вам совершенно не нужно.

См.также

Внешние ссылки