查看: 4437|回复: 2

I/O Expander Shield For pcDuino

[复制链接]

该用户从未签到

发表于 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)
回复

使用道具 举报

  • TA的每日心情
    奋斗
    2019-4-25 10:29
  • 签到天数: 724 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-5-4 22:50:26 | 显示全部楼层
    赞一个!               
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.6]常住居民II

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

    谢谢楼主分享!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-12-22 09:34 , Processed in 0.144107 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.