查看: 1634|回复: 2

[教程] I/O Expander Shield For pcDuino

[复制链接]

34

主题

0

好友

463

积分

版主

Rank: 7Rank: 7Rank: 7

该用户从未签到

发表于 2014-4-25 15:31:19 |显示全部楼层
图片1.png

I/O Expander Shield是基于MCP23017的一款I/O扩展Shield,本Shield采用IIC通讯,扩展了GPIOA和GPIOB这2组共16个I/O,板载2个LED、2个按键可供用户使用,并且用户可通过拨码开关来选择是否使用板载LED和按键。
一、产品特性:
  • 16位远程双向I/O端口、I/O引脚默认为输入引脚
  • 高速IIC接口(MCP23017):100kHz、400kHz、1.7MHz
  • 三个硬件地址引脚,最多可允许总线上连接8个器件
  • 可配置的中断输出引脚:可配置为高电平有效(输出)、低电平有效(输出)或开漏(输出)
  • INTA和INTB可配置为独立或联合工作
  • 可配置的中断源:根据已配置寄存器默认值或引脚电平变化而发生电平变化中断
  • 用于配置输入端口数据极性的“极性反转”寄存器
  • 外部复位输入
  • 待机电流低:1µA(最大值)
  • 工作电压:
1.8V至5.5V(-40°C至+85°C)
2.7V至5.5V(-40°C至+85°C)
4.5V至5.5V(-40°C至+125°C)

二、硬件清单:
pcDuino V2   x1
I/O Expander Shield  x1

三、测试代码:
#include <core.h>
#include "Wire.h"

byte  mcp_address=0x20;      // I2C Address of MCP23017 Chip
byte  GPIOA=0x12;            // Register Address of Port A
byte  GPIOB=0x13;            // Register Address of Port B
byte  IODIRA=0x00;            // IODIRA register
byte  IODIRB=0x01;            // IODIRB register

void setup()
{
  //Send settings to MCP device
  Wire.begin();              // join i2c bus (address optional for master)
  Wire.beginTransmission(mcp_address);
  Wire.write(IODIRA); // IODIRA register
  Wire.write(0x03); // set GPIOA-0/GPIOA-1 to inputs
  Wire.endTransmission();
}

void loop()
{
  Wire.beginTransmission(mcp_address);
  Wire.write(GPIOA); // set MCP23017 memory pointer to GPIOB address
  Wire.endTransmission();
  Wire.requestFrom(0x20, 1); // request one byte of data from MCP20317
  int inputs=Wire.read(); // store the incoming byte into "inputs"

  if((inputs&0x01)==0)
  {
    Wire.beginTransmission(mcp_address);
    Wire.write(GPIOA);    // address bank A
    Wire.write(0x04);  // value to send GPIOA-2 HIGH
    Wire.endTransmission();
    printf("the s1 press\n-------------\n");
  }
  else if((inputs&0x02)==0)
  {
    Wire.beginTransmission(mcp_address);
    Wire.write(GPIOA);    // address bank A
    Wire.write(0x08);  // value to send GPIOA-3 HIGH
    Wire.endTransmission();
    printf("the s2 press\n-------------\n");
  }
  else
  {
    Wire.beginTransmission(mcp_address);
    Wire.write(GPIOA);     // address bank A
    Wire.write((byte)0x00);  // value to send GPIOA LOW
    Wire.endTransmission();
  }
  delay(100);
}

四、测试运行:
(1)将I/O Expander Shield 插在pcDuino板子上:
图片22.png

(2)打开Arduino IDE输入测试代码,编译运行:
图片32.png

(3)将Shield上的Jumper,全部拨动到ON端,分别按下按键S1和S2:
按下S1,L1(RED)会点亮:

图片42.png



图片52.png


按下S2,L2(GREEN)会点亮:
图片61.png



图片72.png


五、原理图:
io-expander-shield-SCH1.pdf (37.25 KB, 下载次数: 9)
回复

使用道具 举报

82

主题

46

好友

1万

积分

版主

将军

Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    奋斗
    2016-5-29 16:21
  • 签到天数: 721 天

    [LV.9]以坛为家II

    分区版主职务勋章 爱板会员勋章 在线达人勋章 发帖机器勋章 论坛骨干勋章 活跃会员勋章 在线之王勋章

    发表于 2014-5-4 22:50:26 |显示全部楼层
    赞一个!               
    世代意志的传承,我的梦必将实现!
    回复

    使用道具 举报

    1083

    主题

    2

    好友

    1万

    积分

    翰林

    Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    开心
    2014-9-23 05:09
  • 签到天数: 113 天

    [LV.6]常住居民II

    发表于 2014-5-29 07:00:10 |显示全部楼层

    谢谢楼主分享!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /5 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-8 20:03 , Processed in 0.187243 second(s), 12 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部