Raspberry Pi:Примеры/Библиотека WiringPi/Тестирование WiringPi v2
Содержание | Введение | Продукты | Операционная система | Настройка | Основы Linux | Аппаратные средства | Неисправности | Типовые проблемы | Часто возникающие вопросы | Библиотеки | Примеры |
Тестирование 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 все же придется) или придумывать, как поменять один единственный бит в сдвиговом регистре ‘595 – WiringPi делает это все за вас! Нужно лишь создать экземпляр устройства, после чего вам будут доступны дополнительные контакты, на которых можно будет использовать функции вроде 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 ;
}