IOShieldFrom SPCoastThis is a work in progress In particular, the board design is going through many revs because I want to experiment with many alternative layouts...
[edit] IntroductionA simple I2C based 32-pin Arduino I/O Shield with monitoring LEDs on each pin (Active-LOW inputs, LED is on when pin is grounded, writing a "1" to the port pulls it to ground). Up to 4 boards can be used together, for a total of 128 i/o points, though a larger (1A @ 9v) external power supply should be used to power the I2C expander/shield stack instead of relying on the Arduino's onboard supply. [edit] Features
[edit] CautionsThe total current draw from "Vin" can become excessive if many LEDs are connected and driven - 256 LEDs * 5mA is 1.25A! Each board can be driven by an external DC power supply to address this issue. Each IOShield has its own onboard regulators for IO Port power and onboard LED feedback power which are fed from the Vin Arduino shield pin or the onboard power jack. [edit] Schematic[edit] PCB
[edit] SpecificationThis shield is based on the 8574 I2C 8-bit IO Expander and a 74LS244 buffer/driver chip connected to a bank of LEDs that show the status of the I/O lines in real time. With 4 sets of chips on board, it provides a latched set of 32 IO points, with each point being software selectable to be either an input or an output. The individual points are reasonably protected from the environment, and can drive or sink 10 mA each. By using active low inputs and outputs, the effects of environmental noise are reduced - remote sensors only need to ground an I/O point to register activity. [edit] Communication ProtocolSimple I2C Reads and Writes:
int I2Cextender::read8(int i2caddr) {
int _data = -1;
Wire.requestFrom(i2caddr, 1);
if(Wire.available()) {
_data = Wire.receive();
}
return _data;
}
void I2Cextender::write8(int i2caddr, int data)
{
Wire.beginTransmission(i2caddr);
Wire.send(0xff & data);
Wire.endTransmission();
}
[edit] ProgrammingSee IOShield_Code [edit] Hardware[edit] Bill of Materials (BOM) /parts list
[edit] Version Tracker[edit] Original IdeaThis board was originally produced to help me build control panels for my model railroad - I needed to connect many different buttons, switches and lights to an Arduino, and also connect the Arduino to a communications bus (Ethernet, CAN or Loconet), and I couldn't find anything that had both high IO point density AND visual feedback. [edit] LicensingThis documentation is licensed under the Creative Commons Attribution-ShareAlike License 3.0 Source code and libraries are licensed under LGPL, see source code files for details. The Eagle CAD files are licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License |
