Raspberry Pi:Примеры/Библиотека WiringPi/Тестирование WiringPi v2

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

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



Тестирование WiringPi v2[1]

Тестирование – самая сложная часть в разработке новых проектов! Сама WiringPi протестирована неплохо, однако ее новые дополнения требуют дополнительных тестов. Поэтому в своем «стресс-тесте» я решил проверить, хорошо ли интегрируются и работают GPIO-расширители MCP23S17 (SPI) и MCP23017 (I2С), а также то, смогу ли управлять при помощи GPIO-контактов Raspberry Pi двумя сдвиговыми регистрами 74HC595.

Модулю сдвигового регистра нужно 3 контакта – один от SPI, один от I2C и один GPIO-контакт от Pi.

Я подключил к сдвиговым регистрам свой маленький 10-светодиодный модуль. Обратите внимание, что для того, чтобы задать 1 бит, сдвиговым регистрам нужно передать 10 тактов, поэтому моя сборка получилась не самой производительной. Впрочем, свою демонстрационную задачу она выполняет – она показывает, что один модуль-расширитель может использовать контакты, заданные в других модулях.

Это и есть тестовая сборка. К большой макетной плате подключены MCP23S17 (слева) и MCP23017 (справа), к маленькой (которая чуть ниже) – два сдвиговых регистра 74HC595, а к моей прототипной плате (в самом низу) – кнопка и массив из 10 светодиодов.

Программа ниже демонстрирует, что WiringPi со своей задачей справляется на отлично. Вам больше не нужно записывать байты в конфигурационные регистры, включать шины I2C и SPI (хотя загружать модули для ядра Linux все же придется) или придумывать, как поменять один единственный бит в сдвиговом регистре ‘595WiringPi делает это все за вас! Нужно лишь создать экземпляр устройства, после чего вам будут доступны дополнительные контакты, на которых можно будет использовать функции вроде digitalWrite(), digitalRead() и т.д.

/*
 * stress.c:
 * Стресс-тест WiringPi
 *
 * Копирайт (c) 2012-2013 Гордон Хендерсон. <projects@drogon.net>
 ***********************************************************************
 */

#include <stdio.h>
#include <wiringPi.h>
#include <mcp23s17.h>
#include <mcp23017.h>
#include <sr595.h>

// первый контакт для каждого девайса 

#define BASE_SPI        123
#define BASE_I2C        456
#define BASE_SR         789

int main (void)
{
  int i, bit ;

  wiringPiSetup () ;
  mcp23017Setup (BASE_I2C, 0x20) ;
  mcp23s17Setup (BASE_SPI, 0, 0) ;
  sr595Setup    (BASE_SR, 10, 0, BASE_SPI, BASE_I2C) ;

  printf ("Raspberry Pi - MCP23S17 + MCP23017 + 74x595 Test\n") ;
  //  "Тест для Raspberry Pi, чипов MCP23S17 и MCP23017,
  //   а также 2 сдвиговых регистров 74x595\n"


  // для кнопки...

  pinMode         (BASE_I2C + 15, INPUT) ;
  pullUpDnControl (BASE_I2C + 15, PUD_UP) ;

  for (;;)
  {
    for (i = 0 ; i < 1024 ; ++i)
    {
      for (bit = 0 ; bit < 10 ; ++bit)
        digitalWrite (BASE_SR + bit, i & (1 << bit)) ;
      delay (5) ;
      while (digitalRead (BASE_I2C + 15) == 0)
        delay (1) ;
    }
  }
  return 0 ;
}

См.также

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